전체 문서
이 페이지 목차
Finding과 증거 흐름
Worker는 관찰을 asset, fact, finding으로 구분해 writeback한다. Finding은 탐색 graph의 node와 조회·편집용 findings row를 함께 만들며, 선택한 proxy exchange는 별도 snapshot/binding으로 고정된다. 이 구조는 provenance를 강화하지만 취약점 결론의 진실성을 자동 판정하지 않는다.
결과 타입
| 결과 | 최소 의미 | 저장·검사 | 후속 |
|---|---|---|---|
| asset | 새 공격 표면 또는 기존 자산의 새 속성 | 유형별 정규화/upsert, caller별 asset gate | coverage·anchor·후속 intent 후보 |
| fact | 관찰, 부정 결과, 제약 또는 추론 | exploration node/payload와 lineage | planner graph/digest/goal proof 입력 |
| finding | 취약점으로 보고할 후보 | graph node + finding row + optional traffic bindings transaction | planner 즉시 wake, reporter/notify/retest |
| hint/digest | 사람 전략 또는 cold graph 요약 | exploration node와 source/round | 다음 planner context |
Worker prompt는 직접 재현 근거가 있을 때 finding으로 올리고 의심은 fact로 남기라고 지시한다. Tool handler는 모델이 내린 security 의미를 독립적으로 재실행하지 않는다. Worker Finding workflow
Finding writeback transaction
Finding writeback transaction · 관계
이 대상이 사용하는 구현·계약·의존 · 7개
- 계약 사용 · exploration_anchors · RecordFindingTx: write INSERT · db-pg-access-exploration-anchors-0bdf8724cf
- 계약 사용 · exploration_edges · RecordFindingTx: write INSERT · db-pg-access-exploration-edges-d307a68e3d
- 계약 사용 · exploration_nodes · RecordFindingTx: read/write FROM/INSERT; DB.setFindingCol: write UPDATE · db-pg-access-exploration-nodes-edfd3215f9 · db-pg-access-exploration-nodes-642d5e2f77
- 계약 사용 · findings · RecordFindingTx: write INSERT; DB.setFindingCol: write UPDATE · db-pg-access-findings-7140513ea2 · db-pg-access-findings-c57898f68d
- 계약 사용 · tasks · RecordFindingTx: read FROM · db-pg-access-tasks-238786c0cf
- 구현 담당 · PostgreSQL 책임 영역 · 기능 단계의 직접 상태/실행 구현 · feature-impl-11
- 계약 사용 · Finding 신뢰 경계 · 기능/모듈이 적용하는 보안·신뢰 규칙 · rule-edge-5
Mermaid 원문
sequenceDiagram
participant W as Worker
participant T as ToolSet / Recorder
participant E as Evidence Store
participant P as PostgreSQL
participant N as Engine / Notifier
W->>T: report_finding(fields, asset_ids, traffic_refs?)
T->>E: RecordFindingInput + refs
E->>P: begin + advisory lock
E->>E: lock 보유 중 traffic ref normalize·body hash 확인·blob write
P->>P: finding node + yields edge + anchors
P->>P: findings row + snapshots + ordered bindings
opt notification event best-effort
P->>P: SAVEPOINT + notification_events INSERT
alt insert 성공
P->>P: RELEASE SAVEPOINT
else insert 실패
P->>P: ROLLBACK TO SAVEPOINT 시도
end
end
P-->>E: commit
E-->>T: finding id + node id + evidence version
T-->>W: structured result
T->>N: NotifyFinding after commit
transaction은 task/exploration/source intent 일치, graph node·edge·anchor, finding row와 snapshot metadata/bindings를 한 PostgreSQL commit 경계에 묶는다. Notification event는 같은 transaction 안에서 best-effort로 시도할 뿐 core finding의 원자성 조건이 아니다. Snapshot marshal 실패는 DB를 건드리지 않고 false를 반환하며, INSERT 실패는 savepoint rollback으로 격리되면 caller가 반환값을 무시하고 finding+evidence를 event 없이 commit할 수 있다. SAVEPOINT 또는 rollback 복구 자체가 실패해 transaction이 unusable해지면 뒤 SQL/commit도 실패할 수 있다. Evidence body filesystem write는 WithEvidenceTx와 advisory lock을 보유한 callback 안에서 일어나지만 PostgreSQL rollback 대상은 아니다. 따라서 뒤의 SQL/commit이 실패하면 staged blob이 orphan으로 남을 수 있고 process crash recovery는 evidence store 절차에 의존한다. Finding transaction Evidence store
confirmed는 graph finding node의 writeback 상태 이름이다. 독립 exploit 재현, CVSS 산정, bug-bounty 중복 심사, scope 승인 상태가 아니다.
트래픽에서 증거 snapshot까지
트래픽에서 증거 snapshot까지 · 관계
이 대상이 사용하는 구현·계약·의존 · 11개
- 계약 사용 · blob_refs · Traffic.ImportArchive: write INSERT; Traffic.deleteWhere: write DELETE; Traffic.gcBlobs: read FROM; Traffic.record: write INSERT · db-sqlite-access-blob-refs-12efa593f1 · db-sqlite-access-blob-refs-a443b6feb5 · db-sqlite-access-blob-refs-928f5df99f · db-sqlite-access-blob-refs-c0b4d474ee
- 계약 사용 · ex_fts virtual table · Traffic.ImportArchive: write INSERT; Traffic.compactIndex: write INSERT; Traffic.deleteWhere: write DELETE; Traffic.ftsFilter: read FROM; Traffic.reclaimChunk: write INSERT; Traffic.record: write INSERT · db-sqlite-access-ex-fts-e7acacd3ef · db-sqlite-access-ex-fts-446971b0d7 · db-sqlite-access-ex-fts-735362d242 · db-sqlite-access-ex-fts-973e53370c · db-sqlite-access-ex-fts-f9b44927da · db-sqlite-access-ex-fts-2b5c06a26b
- 계약 사용 · exchange_bodies · Traffic.ExportHosts: read FROM; Traffic.ImportArchive: write INSERT; Traffic.readEvidence: read FROM; Traffic.Get: read FROM; Traffic.deleteWhere: write DELETE; Traffic.record: write INSERT · db-sqlite-access-exchange-bodies-7971225971 · db-sqlite-access-exchange-bodies-48e3443ec7 · db-sqlite-access-exchange-bodies-d512e84e76 · db-sqlite-access-exchange-bodies-ad6310aecb · db-sqlite-access-exchange-bodies-cd161de2ba · db-sqlite-access-exchange-bodies-51fc030662
- 계약 사용 · exchanges · Traffic.ExportHosts: read FROM; Traffic.ImportArchive: read/write FROM/INSERT; Traffic.readEvidence: read FROM; Traffic.Count: read FROM; Traffic.Get: read FROM/JOIN; Traffic.Hosts: read FROM; Traffic.Page: read FROM; Traffic.Search: read FROM; Traffic.deleteWhere: read/write DELETE/FROM; Traffic.hostTrees: read FROM; Traffic.hostsHaveNoExchanges: read FROM; Traffic.legacyBlobRefs: read FROM; Traffic.query: read FROM; Traffic.record: write INSERT · db-sqlite-access-exchanges-4f80e596da · db-sqlite-access-exchanges-b479f9f58f · db-sqlite-access-exchanges-9162ebd8fd · db-sqlite-access-exchanges-2bf40eda47 · db-sqlite-access-exchanges-cb9120717d · db-sqlite-access-exchanges-813a9379ef · db-sqlite-access-exchanges-aca94a3fc0 · db-sqlite-access-exchanges-a235da95f5 · db-sqlite-access-exchanges-4e84109cd8 · db-sqlite-access-exchanges-a26f83a3bb · db-sqlite-access-exchanges-267d0fd3c2 · db-sqlite-access-exchanges-1c22a6cb53 · db-sqlite-access-exchanges-c3c166aa3a · db-sqlite-access-exchanges-959f04152f
- 계약 사용 · finding_traffic_bindings · AddFindingTrafficTx: read/write FROM/INSERT; DB.EditFindingTraffic: write DELETE/UPDATE; ExplorationStore.PopulateFindingTrafficIDs: read FROM; FindingTrafficTx: read FROM; DB.FindingMetaByNodeID: read FROM; DB.GetFinding: read FROM; DB.ListFindings: read FROM; Store.Collect: read FROM · db-pg-access-finding-traffic-bindings-5728bd167b · db-pg-access-finding-traffic-bindings-e927eacd9e · db-pg-access-finding-traffic-bindings-b832923bf8 · db-pg-access-finding-traffic-bindings-57db4cbc9b · db-pg-access-finding-traffic-bindings-019d6081a9 · db-pg-access-finding-traffic-bindings-4a01758636 · db-pg-access-finding-traffic-bindings-ec3301eeff · db-pg-access-finding-traffic-bindings-b3482f8a30
- 계약 사용 · findings · DB.FindingIDByNodeID: read FROM; DB.SetFindingReportVersionByNodeID: read/write FROM/UPDATE; ExplorationStore.PopulateFindingTrafficIDs: read FROM; FindingTrafficTx: read FROM; LockFindingEvidenceTx: read FROM; bumpEvidenceVersionTx: write UPDATE · db-pg-access-findings-0fed5e5c52 · db-pg-access-findings-4d5f2daace · db-pg-access-findings-c8b270380f · db-pg-access-findings-87401ddbde · db-pg-access-findings-6db51be95d · db-pg-access-findings-010d96436e
- 계약 사용 · task_archives · LockTaskEvidenceTx: read FROM · db-pg-access-task-archives-46a518e5eb
- 계약 사용 · tasks · LockTaskEvidenceTx: read FROM · db-pg-access-tasks-66fca018a0
- 계약 사용 · tools · Server.seedFindingTrafficTools: write UPDATE · db-pg-access-tools-ff749a71a4
- 계약 사용 · traffic_evidence_snapshots · AddFindingTrafficTx: write UPDATE; FindingTrafficTx: read JOIN; InsertEvidenceSnapshotTx: write INSERT; Store.Collect: read/write DELETE/FROM/UPDATE · db-pg-access-traffic-evidence-snapshots-440ef2360f · db-pg-access-traffic-evidence-snapshots-52431e10a6 · db-pg-access-traffic-evidence-snapshots-73a114ef04 · db-pg-access-traffic-evidence-snapshots-364a62b0c1
- 구현 담당 · Traffic recorder와 evidence store · 기능 단계의 직접 상태/실행 구현 · feature-impl-12
Traffic recorder는 MITM HTTP proxy와 로컬 store를 결합한다. metadata/search index는 SQLite, 작은 body는 inline, 큰 body는 content-addressed blob, host별 사람이 읽는 파일은 data/traffic 아래에 둔다. 저장 위치와 정리 규칙은 Traffic DB에서 찾을 수 있다. Traffic 구현
Mermaid 원문
flowchart LR Request[WebFetch/Bash HTTP 또는 enrich] --> Proxy[Recording proxy] Proxy --> Exchange[(SQLite exchange)] Proxy --> Blob[(traffic body/blob)] Exchange --> Ref[traffic_ref] Blob --> Ref Ref --> Verify[length + SHA-256] Verify --> Snapshot[(traffic_evidence_snapshots)] Snapshot --> Binding[(finding_traffic_bindings)] Binding --> Finding[(findings)] click Exchange "../contracts/db/traffic-sqlite.md#table-exchanges" "exchange table" click Snapshot "../contracts/db/findings-operations.md#table-traffic-evidence-snapshots" "snapshot table" click Binding "../contracts/db/findings-operations.md#table-finding-traffic-bindings" "binding table"
Evidence store는 참조 exchange를 읽고 request/response body 길이와 SHA-256을 검증해 별도 evidence CAS에 기록한다. Binding은 순서, request/response role과 설명을 갖는다. 원 traffic을 지워도 snapshot이 남도록 설계됐지만 실제 filesystem/DB backup 일관성은 별도 운영 문제다.
Proxy가 TLS interception에 실패한 host를 pass/tunnel 대상으로 처리하거나 tool이 proxy 밖으로 요청하면 원격 요청은 성공해도 exchange가 없을 수 있다. “tool success”와 “traffic evidence complete”를 같은 상태로 취급하지 않는다.
증거가 보장하는 것
| 주장 | deterministic 확인 | 남는 조건 |
|---|---|---|
| 참조한 exchange가 저장소에 있었다 | id/host/body 조회 | proxy 밖 요청은 분모에 없음 |
| snapshot body가 읽은 bytes와 같다 | length·SHA-256 | 대상 서버의 전체 상태나 앞선 요청은 증명하지 않음 |
| finding과 binding 순서가 일관된다 | PostgreSQL transaction/constraint | 설명의 의미 정확성은 작성자 판단 |
| report가 최신 evidence를 반영한다 | evidence_version과 report_evidence_version 비교 |
reporter 문장과 bytes의 의미 일치는 별도 검토 |
| 취약점이 재현된다 | 자동 보장 없음 | retest/사람 검토 필요 |
| severity/vulnclass가 맞다 | enum/형식 일부만 검사 | 영향·blast radius 판단 필요 |
| 기존 finding과 중복이 아니다 | semantic unique 없음 | root cause/asset/role 비교 필요 |
편집·evidence version·stale report
편집·evidence version·stale report · 관계
이 대상이 사용하는 구현·계약·의존 · 1개
- 구현 담당 · 응답과 후속 완료 · 기능 단계의 직접 상태/실행 구현 · feature-impl-13
Finding name, severity, vulnclass, status와 report는 API에서 변경할 수 있다. Traffic binding add/edit/delete/reorder는 evidence version을 올리고, reporter가 사용한 version은 report_evidence_version으로 따로 남는다. 두 값이 다르면 report가 현재 evidence 묶음보다 오래된 상태다. Finding HTTP Finding DB
Binding body detail API는 context task의 provenance를 확인하고 inherited finding에는 쓰기 제한을 적용한다. 단순 finding id 보유만으로 모든 task context에서 수정할 수 있다고 가정하지 않는다.
Reporter, retest, export
Reporter, retest, export · 관계
이 대상이 사용하는 구현·계약·의존 · 20개
- 계약 사용 · activity · ExplorationStore.AddFindingFollowUpIntent: write INSERT · db-pg-access-activity-e9d0dcc600
- 계약 사용 · agent_prompts · Server.seedFindingRetester: write INSERT · db-pg-access-agent-prompts-5f54e84682
- 계약 사용 · agents · Server.seedFindingRetester: write INSERT/UPDATE · db-pg-access-agents-b57863a261
- 계약 사용 · assets · DB.loadAssetsByHost: read FROM; DB.loadFindingAssetRows: read FROM; DB.CreateFindingRetest: read FROM; FindingFilter.where: read JOIN; DB.NotificationAssetNames: read FROM · db-pg-access-assets-f45cca9cff · db-pg-access-assets-12f762afa6 · db-pg-access-assets-4563afa922 · db-pg-access-assets-494ba72146 · db-pg-access-assets-b49b77c116
- 계약 사용 · companies · DB.attachCompanyNodes: read FROM · db-pg-access-companies-e668bfbdce
- 계약 사용 · conversation_activities · DB.CreateFindingRetest: write INSERT · db-pg-access-conversation-activities-3edc66dd8f
- 계약 사용 · conversations · DB.CreateFindingRetest: write INSERT · db-pg-access-conversations-81cb174e25
- 계약 사용 · exploration_anchors · ExplorationStore.AddFindingFollowUpIntent: read/write FROM/INSERT · db-pg-access-exploration-anchors-1f6ef5ecee
- 계약 사용 · exploration_edges · ExplorationStore.AddFindingFollowUpIntent: write INSERT · db-pg-access-exploration-edges-a5f6b5b826
- 계약 사용 · exploration_nodes · DB.DeleteFinding: write DELETE; ExplorationStore.AddFindingFollowUpIntent: read/write INSERT/JOIN · db-pg-access-exploration-nodes-83a9bdd4a8 · db-pg-access-exploration-nodes-cd4bdba419
- 계약 사용 · finding_retests · DB.CreateFindingRetest: read/write FROM/INSERT; DB.FailPendingRetestForConversation: write UPDATE; DB.FindingRetestForConversation: read FROM; DB.FinishFindingRetest: read/write FROM/UPDATE; DB.ListActiveFindingRetests: read FROM; DB.ListFindingRetests: read FROM; DB.RecordFindingRetestResult: write UPDATE; DB.RecoverFindingRetests: write UPDATE; DB.StartFindingRetest: write UPDATE · db-pg-access-finding-retests-298bb9a6ef · db-pg-access-finding-retests-a5efabf7fd · db-pg-access-finding-retests-9dbf54a7a4 · db-pg-access-finding-retests-fe65aab8c2 · db-pg-access-finding-retests-bd3b2be0d1 · db-pg-access-finding-retests-393582fb9c · db-pg-access-finding-retests-188dbd8971 · db-pg-access-finding-retests-06180af265 · db-pg-access-finding-retests-c2e0c8aed6
- 계약 사용 · findings · DB.SearchChatMentionsPage: read FROM; DB.TaskListMetricsAll: read FROM; ExplorationStore.CancelIntent: write DELETE; DB.buildFindingAssetTree: read FROM; DB.CreateFindingRetest: read FROM; DB.FinishFindingRetest: read FROM; DB.AddFinding: write INSERT; DB.DeleteFinding: write DELETE; DB.DeleteFindingsByTask: write DELETE; DB.FindingMetaByNodeID: read FROM; DB.FindingStats: read FROM; DB.GetFinding: read FROM; DB.ListFindingGroups: read FROM; DB.ListFindings: read FROM; DB.ListFindingsForExport: read FROM; DB.ListFindingsPage: read FROM; DB.SetFindingStatus: write UPDATE; ExplorationStore.AddFindingFollowUpIntent: read FROM; SetFindingStatusTx: read/write FROM/UPDATE; DB.DeleteTaskCascadePrepared: write DELETE; Store.StageFindingsExport: read FROM · db-pg-access-findings-f291f39a91 · db-pg-access-findings-3260bd8afb · db-pg-access-findings-03a3b0fd14 · db-pg-access-findings-1448180e23 · db-pg-access-findings-e489fd8709 · db-pg-access-findings-bc19beb437 · db-pg-access-findings-b70464a687 · db-pg-access-findings-a128b54e11 · db-pg-access-findings-57d61c0f23 · db-pg-access-findings-fdeea392af · db-pg-access-findings-4ed6d9e96d · db-pg-access-findings-800bee206e · db-pg-access-findings-eb44c224ac · db-pg-access-findings-2f5cbab72c · db-pg-access-findings-cf57444365 · db-pg-access-findings-314660f4d9 · db-pg-access-findings-26168954bb · db-pg-access-findings-3beb305938 · db-pg-access-findings-c7176e8663 · db-pg-access-findings-d36ee17ecc · db-pg-access-findings-ef093855e8
- 계약 사용 · notification_channels · DB.DeleteNotificationChannel: write DELETE; DB.ListNotificationChannels: read FROM; DB.NotificationChannelByID: read FROM; DB.NotificationStatsSnapshot: read FROM; DB.SaveNotificationChannel: write INSERT/UPDATE; DB.SetNotificationChannelEnabled: write UPDATE; listEnabledNotificationChannelsTx: read FROM; DB.ClaimDigestBatch: read JOIN; DB.ClaimRealtimeDeliveries: read JOIN; DB.DigestBatchDue: read JOIN; DB.ListNotificationDeliveries: read JOIN; loadDeliveriesTx: read JOIN · db-pg-access-notification-channels-1c73b6e6ff · db-pg-access-notification-channels-3c998953c9 · db-pg-access-notification-channels-790746d20d · db-pg-access-notification-channels-ef0d56b704 · db-pg-access-notification-channels-71a8049a70 · db-pg-access-notification-channels-16ab658a14 · db-pg-access-notification-channels-1d231f183b · db-pg-access-notification-channels-37f497fe6b · db-pg-access-notification-channels-a477c0e7b3 · db-pg-access-notification-channels-db1fb1f29a · db-pg-access-notification-channels-d5b73cdd8d · db-pg-access-notification-channels-826904f61d
- 계약 사용 · notification_deliveries · DB.FanOutPendingEvents: write INSERT; DB.NotificationStatsSnapshot: read FROM; DB.SetNotificationChannelEnabled: write UPDATE; DB.ClaimDigestBatch: read/write FROM/UPDATE; DB.ClaimRealtimeDeliveries: read FROM; DB.DeferDeliveries: write UPDATE; DB.DigestBatchDue: read FROM; DB.FailDeliveries: write UPDATE; DB.ListNotificationDeliveries: read FROM; DB.MarkDeliveriesSent: write UPDATE; DB.RescheduleDeliveries: write UPDATE; DB.RetryNotificationDelivery: write UPDATE; DB.claimDeliveries: write UPDATE; loadDeliveriesTx: read FROM · db-pg-access-notification-deliveries-e3bd3204a8 · db-pg-access-notification-deliveries-2a3b18de73 · db-pg-access-notification-deliveries-4792232261 · db-pg-access-notification-deliveries-41525f8214 · db-pg-access-notification-deliveries-8feff6dd1d · db-pg-access-notification-deliveries-1cb1f5dd43 · db-pg-access-notification-deliveries-a2a50b4454 · db-pg-access-notification-deliveries-0832492f88 · db-pg-access-notification-deliveries-1ba7713700 · db-pg-access-notification-deliveries-4733db6f9b · db-pg-access-notification-deliveries-7a521922df · db-pg-access-notification-deliveries-8403471de4 · db-pg-access-notification-deliveries-3f8ba0a0c7 · db-pg-access-notification-deliveries-8d676caafb
- 계약 사용 · notification_events · DB.AddNotificationEvent: write INSERT; DB.FanOutPendingEvents: read/write FROM/UPDATE; RecordNotificationEventTx: write INSERT; DB.ListNotificationDeliveries: read JOIN; loadDeliveriesTx: read JOIN · db-pg-access-notification-events-d671b8097a · db-pg-access-notification-events-eee01ab57c · db-pg-access-notification-events-e2d1dca210 · db-pg-access-notification-events-b58979bce9 · db-pg-access-notification-events-01cb13b683
- 계약 사용 · settings · Server.seedFindingRetester: read/write FROM/INSERT · db-pg-access-settings-f47899da10
- 계약 사용 · task_constraints · DB.CreateFindingRetest: read FROM · db-pg-access-task-constraints-7ade884b9f
- 계약 사용 · tasks · DB.buildFindingAssetTree: read JOIN; DB.CreateFindingRetest: read JOIN; DB.FindingStats: read JOIN; DB.GetFinding: read JOIN; DB.ListFindingGroups: read JOIN; DB.ListFindings: read JOIN; DB.ListFindingsForExport: read JOIN; DB.ListFindingsPage: read JOIN; ExplorationStore.AddFindingFollowUpIntent: read JOIN · db-pg-access-tasks-51d90c8c39 · db-pg-access-tasks-285686da7d · db-pg-access-tasks-c4bd1d9850 · db-pg-access-tasks-a87ac240c2 · db-pg-access-tasks-8caabeef48 · db-pg-access-tasks-acb75322e7 · db-pg-access-tasks-cb09df0b12 · db-pg-access-tasks-2e37a25486 · db-pg-access-tasks-94e899c2d9
- 계약 사용 · tools · Server.seedFindingWorkflowTools: write UPDATE · db-pg-access-tools-c7498246c6
- 구현 담당 · 주 탐색 밖의 보조 루프 · 기능 단계의 직접 상태/실행 구현 · feature-impl-14
| 후속 | trigger/input | 완료 신호 | 한계 |
|---|---|---|---|
| Reporter | report_finding tool call trigger, finding/traffic/worker trace |
update_finding_report와 report evidence version |
원 exploit을 기본적으로 재실행하지 않음 |
| Retest | 사람이 finding에서 시작 | 별도 conversation과 terminal verdict/history | finding당 active retest 하나; 결과도 agent 판단 포함 |
| Export | filter/ids로 finding rows와 report를 읽음 | HTTP download/response | 외부 제출 성공은 아님 |
| Notification | transaction에 기록한 event를 background notifier가 fan-out | delivery sent 또는 terminal failure |
channel filter/rate/retry/digest에 따라 지연·억제 |
| Deepen | finding 기반 follow-up intent 생성 | new intent id/graph edge | 재현 확인과 같은 동작은 아님 |
Reporter trigger는 agent configuration에 의해 직렬/병렬·merge mode가 달라질 수 있다. Notification은 lease/retry와 digest batch를 사용하며 HTTP response와 실제 외부 채널 전달을 분리한다. Reporter Retest Notifier
finding을 실제 결과로 승인하기 전 확인점
이 목록은 현재 코드가 자동 수행한다고 주장하는 기능이 아니라 confirmed와 실제 bug-bounty finding 사이의 검토 경계다.
- source intent, task, target asset과 scope/program rule이 같은 실행 문맥인가?
- request/response binding이 상태 변화 전후와 인증 주체·tenant·object identity를 구별하는가?
- 대조군이나 differential response가 우연한 응답·cache·rate limit을 배제하는가?
- destructive effect 없이 허용된 방식으로 재현되는가?
- report의 각 영향 주장이 evidence bytes, worker trace와 재현 결과보다 강하지 않은가?
- severity가 필요한 권한, 데이터 민감도, 사용자 수와 복구 가능성을 반영하는가?
- 같은 root cause/endpoint/asset/role의 기존 finding과 중복되지 않는가?
- evidence version이 바뀐 뒤 report/retest가 stale하지 않은가?