Keep reverse-skill a skill router, not a platform. RULES hot path is master-route then case-init then PRIMARY. MASTER-ROUTING priority is verified against routing.json. precedent-auth no longer grants. CTF is one R41 pointer, not 40 competition routes. open.ps1 never deletes .i64/.idb. Route-scope parse is line-anchored and last-match. Tests: 168 routing cases, parse-contracts, title-safety in CI.
154 lines
5.4 KiB
Markdown
154 lines
5.4 KiB
Markdown
# Analysis Decision Framework (Issue #77)
|
|
|
|
> **SSoT role**: Decision-quality / evidence-sufficiency / agent-bias cookbook for reverse-skill agents.
|
|
> **Not** a second master analysis workflow. Obey `re-agent-workflow.md`, feasibility gate (#73), IAT iron rule (#72), A-T / U-AV cookbooks, and `evidence-finding-path.md` first.
|
|
> Rule IDs **R1-R51** keep the reporter numbering (**no R15**; includes **R50/R51**). Do not renumber.
|
|
> **Namespace:** these are **ADF-*** overlay IDs. They are **not** `routing.json` PRIMARY ids (R1=APK, R6=IDA, …). Say "ADF-R1" when speaking. Load this file at Synthesis / stuck-loop only.
|
|
|
|
## 0. How to use
|
|
|
|
| When | Action |
|
|
|------|--------|
|
|
| Finding promotion / Synthesis | **P0** (R4*, R1, R2, R41) |
|
|
| Stage change or stuck loop | R2, R31, R43 |
|
|
| Multi-module / anti-analysis | R50, R51 -> anti-analysis + A-T |
|
|
| Already covered by ops/CI/skills | **P2** pointer only |
|
|
|
|
**Evidence IDs** (record even on failure):
|
|
|
|
`E-confidence-low` · `E-hypothesis-confirmed` · `E-hypothesis-rejected` · `E-insufficient-evidence` · `E-negative-evidence` · `E-scope-boundary` · `E-runtime-only` · `E-bias-detected` · `E-over-trust-bias` · `E-module-decoupled` · `E-anti-adversarial` · `ungrounded`
|
|
|
|
---
|
|
|
|
## 1. P0 — Full recipes (trigger -> action -> Evidence)
|
|
|
|
### R1 — Decompile / static confidence band
|
|
|
|
| | |
|
|
|--|--|
|
|
| **Trigger** | Static decompile/CFG/types as primary reasoning |
|
|
| **Action** | Band `high`/`medium`/`low`. If `low`: MUST schedule dynamic before `validated` |
|
|
| **Evidence** | `E-confidence-low` |
|
|
|
|
### R2 — Hypothesis-driven stage exit
|
|
|
|
| | |
|
|
|--|--|
|
|
| **Trigger** | End of triage/static/dynamic or long tool loops |
|
|
| **Action** | State hypothesis; **continue / switch / stop** |
|
|
| **Evidence** | `E-hypothesis-confirmed` or `E-hypothesis-rejected` |
|
|
|
|
### R3 — Least surprise
|
|
|
|
Unverified unusual claims MUST be tagged `speculative`.
|
|
|
|
### R4* — Finding sufficiency (compatible rewrite)
|
|
|
|
Does **not** replace "Finding binds >=1 Evidence". Tightens **validated** only:
|
|
|
|
| status | Evidence bar |
|
|
|--------|----------------|
|
|
| preliminary / candidate | >=1 (unchanged) |
|
|
| **validated** | **SHOULD >=2 independent** Evidence (best 1 static + 1 dynamic). Single Evidence MUST NOT silently promote — residual + human, or stay candidate |
|
|
| blocked promotion | `E-insufficient-evidence` |
|
|
|
|
### R6 — Negative evidence
|
|
|
|
Checked-absent branch -> `E-negative-evidence`.
|
|
|
|
### R7 — Analysis boundary
|
|
|
|
Declare scope limits -> `E-scope-boundary` (align scope-contract).
|
|
|
|
### R8 — Suspicious != malicious
|
|
|
|
Default `flavor=null` unless `explicit_malware` / user asks (#71).
|
|
|
|
### R30 — Runtime back-annotation
|
|
|
|
Dynamic without static anchor: try relocate; else `E-runtime-only`, Finding <= candidate.
|
|
|
|
### R31 — Stage bias self-check
|
|
|
|
Tool/stage fixation -> `E-bias-detected`.
|
|
|
|
### R41 — Grounded conclusions
|
|
|
|
Claims MUST map Finding -> Evidence; else `ungrounded`.
|
|
|
|
### R43 — Plan deadlock -> replan
|
|
|
|
3 actions with no new Evidence, or 2 stage switches without Evidence -> replan under **feasibility gate**. Aligns RULES Self-Supervision.
|
|
|
|
### R44 — Single-source high confidence
|
|
|
|
Cross-check before validated; else `E-over-trust-bias`.
|
|
|
|
### R50 — Multi-module decoupling
|
|
|
|
Separate work items -> `E-module-decoupled`.
|
|
|
|
### R51 — Adversarial effort
|
|
|
|
Effort band + A-T pointers -> `E-anti-adversarial` (**no** A-T table copy).
|
|
|
|
---
|
|
|
|
## 2. P1 — Short rows
|
|
|
|
| ID | Landing |
|
|
|----|---------|
|
|
| R5 | content_hash; evidence-finding-path + review_case --verify-hashes |
|
|
| R12 | parallel hypotheses via R2 (no heavy case-branch product) |
|
|
| R22 | docs-generator executive summary MUST |
|
|
| R23 | IOC dual-channel **only** explicit_malware / user IOC; forbidden default ordinary RE |
|
|
| R28 | authorized lab; no full weaponized exploit chain in-repo |
|
|
| R34 | SHOULD journal stale note; **no** 90-day auto engine |
|
|
| R36 | archive feedback one-liner |
|
|
| R38-R40 | pointer -> llm-security only |
|
|
| R42 | YARA/detections experimental until benign validation |
|
|
| R45-R49 | route cloud-k8s / firmware / pentest-pwn / code-audit; limit confidence if missing context |
|
|
|
|
### Downgrades (not Agent runtime MUST)
|
|
|
|
| ID | Why |
|
|
|----|-----|
|
|
| R16/R19 auto-close PR | CI / human maintainer |
|
|
| R37 MCP gateway product | no in-repo gateway; tool-index + human confirm |
|
|
| R23 unconditional block | conflicts flavor=null |
|
|
| R34 automated stale | no metrics infra |
|
|
|
|
---
|
|
|
|
## 3. P2 — Covered elsewhere (index only)
|
|
|
|
| IDs | SSoT |
|
|
|-----|------|
|
|
| R9-R11 | timeline-workitem, case-init, case-review |
|
|
| R13-R14 + IAT | re-agent-workflow (#67/#72/#73) |
|
|
| R16-R19 (sans auto-close) | smoke, verify, CI, case-review |
|
|
| R20-R21 | evidence-finding-path, append-evidence |
|
|
| R24 | field-journal/anonymization |
|
|
| R25-R26 | skill-supply-chain, bootstrap pin (#76) |
|
|
| R27/R29 | scope-contract, RULES security |
|
|
| R32-R33 | MASTER-ROUTING, role-map |
|
|
| R35 | field-journal |
|
|
| A-T PE anti-analysis | anti-analysis.md |
|
|
| U-AV non-PE | nonpe-format-cookbook.md |
|
|
|
|
---
|
|
|
|
## 4. Synthesis checklist
|
|
|
|
1. R41 grounded claims
|
|
2. R4* validated bar
|
|
3. R1 low confidence -> dynamic
|
|
4. R43 deadlock -> replan under feasibility gate
|
|
5. R8/R23 no default malice/IOC
|
|
|
|
---
|
|
|
|
## 5. Blindspot appendix (Issue #77 batch 2)
|
|
|
|
Language runtimes, heavy obfuscation, injection/detect chains, formats, and agent-meta blindspots: see [analysis-blindspot-cookbook.md](analysis-blindspot-cookbook.md) (**R52-R81**). Decision rules R1-R51 in this file remain superior.
|