Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
136 commits
Select commit Hold shift + click to select a range
1dc26ff
docs(claude): fix stale src paths — verdict/ → src/verdict/, drop cha…
claude May 14, 2026
ad02f01
docs(architecture): fix stale verdict/ paths → src/verdict/ in §4, §6…
claude May 14, 2026
7349513
docs(build-plan): fix W1 acceptance-gate shell commands — verdict/ → …
claude May 14, 2026
552efee
docs(contributing): fix stale verdict/ paths → src/verdict/, drop ser…
claude May 14, 2026
0506841
docs(topology): fix node count 9→8 across CLAUDE.md, ARCHITECTURE.md,…
claude May 14, 2026
f875bdf
docs(contributing): fix archive/ → docs/spec/ stale path [W1.A.0]
claude May 14, 2026
0ad34ad
docs(architecture): fix CaveatID string values — verbose → StrEnum UP…
claude May 14, 2026
ff4b1bf
docs(build-plan): fix stale task-body paths — verdict/ → src/verdict/…
claude May 14, 2026
2fa3a20
docs(cli): fix stale export --format choices in CLAUDE.md §10.2 [W1.A.0]
claude May 14, 2026
8545ab2
docs(schema): add case_conclusion event type; NIST fields are require…
claude May 14, 2026
eb2b3c0
docs(build-plan): fix node count 9→8 and stale services/ paths [W1.A.0]
claude May 14, 2026
5c71bdc
docs(wiki-index): add DFIR_MEMORY.md to docs/README.md index [W1.A.0]
claude May 14, 2026
42f7f16
docs(claude): fix spec archive count 01..05 → 01..04 in §6 layout [W1…
claude May 14, 2026
192ed90
docs(cli): fix verdict status and approve signatures in CLAUDE.md §10…
claude May 14, 2026
1114829
docs(readme): replace stale VERIFIED with canonical VerdictStatus ter…
claude May 14, 2026
df6ead1
docs(readme): drop stale VERIFIED term; add run-tool/run-case/package…
claude May 14, 2026
9728194
docs(architecture): remove stale case_id field from CaseConclusion sc…
claude May 14, 2026
8b0035c
docs(tldr): replace stale THREAT_MODEL.md + CLI.md with actual doc lo…
claude May 14, 2026
bde91ec
docs(schema): fix stale validator name _execution_requires_two_classe…
claude May 14, 2026
781e497
docs(architecture): replace split Finding validators with single _for…
claude May 14, 2026
cea6a05
docs(architecture): fix prev_entry_hash type str → str | None in Ledg…
claude May 14, 2026
2d3170d
docs(cli): fix verdict approve signature in RELEASE.md CLI table [W1.…
claude May 14, 2026
9e3953b
docs(cli): fix verdict approve signature in CASE_ISOLATION.md CLI tab…
claude May 14, 2026
796e268
docs(cli): add run-tool/run-case/approve/package-check to DEVPOST_COM…
claude May 15, 2026
eee598e
docs(cli): add run-tool/run-case/package-check to RELEASE.md CLI tabl…
claude May 15, 2026
04c4c4f
docs(schema): fix InvestigationPlan.hypotheses → positive_hypotheses …
claude May 15, 2026
57695f2
docs(schema): fix InvestigationPlan.hypotheses → positive_hypotheses …
claude May 15, 2026
51b09b4
docs(install): fix docker-compose path — file lives at infra/langfuse…
claude May 15, 2026
88a1b43
docs(release): mark 13 CLI commands Implemented in RELEASE.md CLI tab…
claude May 15, 2026
73da2f4
docs(install): fix Microsandbox install URL in CLAUDE.md §10.1 [W1.A.0]
claude May 15, 2026
15fd66c
docs(install): fix Microsandbox install URL in BUILD_PLAN.md W1.A.3.a…
claude May 15, 2026
0c55cb0
docs(agentic-workflow): mark D1 and D3 resolved — pre-commit hooks no…
claude May 15, 2026
c4c103f
docs(skills): update skill count from sixteen to eighteen [W1.A.0]
claude May 15, 2026
c94ede4
docs(tldr): correct skill count from 17 to 18 [W1.A.0]
claude May 15, 2026
41c8994
docs(skills): add qc custom skill to license audit table [W1.A.0]
claude May 15, 2026
59f113f
docs(contributing): fix dead relative path in PR body template [W1.A.0]
claude May 15, 2026
7bacc92
docs(agentic-workflow): mark D4 resolved — eval-hallucination-gate.ym…
claude May 15, 2026
978be16
docs(architecture): fix derive_seeds snippet — keyed blake3, not deri…
claude May 15, 2026
2cb7886
docs(cli): fix package-devpost.sh command — add --output flag to prod…
claude May 15, 2026
7cd3340
docs(claude-md): add missing current-authority docs and annotate W1/W…
claude May 15, 2026
dc0f415
docs(devpost): mark ARCHITECTURE_DIAGRAM.svg present in compliance tr…
claude May 15, 2026
9e20c0f
docs(build-plan): fix stale derive_seeds sketch in Appendix A.5 [W1.A.0]
claude May 15, 2026
db437ed
docs(claude-md): add FAILURE_MODES, CASE_ISOLATION, DFIR_MEMORY to §1…
claude May 15, 2026
ff81a61
docs(readme): align Microsandbox version to v0.4.x in risk block [W1.…
claude May 15, 2026
1657f4c
docs(build-plan): fix stale services/mcp/ path in W1.E.1.b task [W1.A.0]
claude May 15, 2026
4e8531c
docs(stack): drop Pydantic-AI from tech stack — not in pyproject.toml…
claude May 15, 2026
a887b1d
docs(skills-framework): correct stale skill count from 16 to 18 [W1.A.0]
claude May 16, 2026
9c7ec38
docs(tldr): fix SGLang verifier env var name — SGLANG_GLM_BASE_URL [W…
claude May 16, 2026
490d3cc
docs(architecture): replace Pydantic-AI with ArgsValidator in arg-val…
claude May 16, 2026
a5f6d0a
docs(failure-modes): replace Pydantic-AI with ArgsValidator in detect…
claude May 16, 2026
75fc3c5
docs(devpost): replace Pydantic-AI with Pydantic v2 in args_validator…
claude May 16, 2026
c1f5b90
docs(release): drop Pydantic-AI from stack attribution — only Pydanti…
claude May 16, 2026
6dcae84
docs(accuracy-report): correct M1 resolution — fix used key= not deri…
claude May 16, 2026
87057b0
docs(build-plan): fix docker-compose path and drop non-existent CHANG…
claude May 16, 2026
c726f9b
docs(build-plan): drop stale schemas/mode.py — Mode enum lives in run…
claude May 16, 2026
ba9a688
docs(build-plan): fix W1 gate — healthcheck.sh is a W3.F.1 artifact, …
claude May 16, 2026
cdb3d3f
docs(build-plan): replace Pydantic-AI with Pydantic v2 in schema-laye…
claude May 16, 2026
03fc04b
docs(build-plan): fix W2.E.1.b — Pydantic v2 ArgsValidator, not Pydan…
claude May 16, 2026
a9e4662
docs(architecture): drop NeMo Guardrails from stack table — not in py…
claude May 16, 2026
cf2f0c2
docs(devpost): drop Pydantic-AI and NeMo Guardrails from W6.C.10.a OS…
claude May 16, 2026
01d7a88
docs(accuracy-report): remove NeMo Guardrails from license spot-check…
claude May 16, 2026
dbdd52c
docs(release): fix verdict gc purpose description [W1.A.0]
claude May 16, 2026
c02f53e
docs(build-plan): drop NeMo Guardrails — not in pyproject.toml or cod…
claude May 16, 2026
342e9a3
docs(release): drop NeMo Guardrails from OSS verification table [W1.A.0]
claude May 16, 2026
281fbdc
docs(build-plan): drop chain.py — verify_ledger_chain lives in writer…
claude May 16, 2026
7c32889
docs(build-plan): update vol3 version pin from 2.10.0 to 2.28.0 [W1.A.0]
claude May 16, 2026
e1bbaec
docs(build-plan): fix W1 gate — hello_world.py superseded by per-mode…
claude May 16, 2026
da43b1c
docs(build-plan): fix hunt_evil.yml gate — access ['process_baselines…
claude May 17, 2026
a26a15b
docs(architecture): correct entry_id format comment — compound key, n…
claude May 17, 2026
6eb2375
docs(skills): add verdict-house-rules to license audit table [W1.A.0]
claude May 17, 2026
26e1e60
docs(agentic-workflow-review): mark punchlist items 2-10 RESOLVED — a…
claude May 17, 2026
41c3ace
docs(devcontainer): fix skill count comment 19→18 [W1.A.0]
claude May 17, 2026
c949d83
docs(devcontainer): fix skill count comment 17→18 [W1.A.0]
claude May 17, 2026
4ea9574
docs(claude-md): fix LOGON_TYPE_3_VS_10 trigger — Finding.evtx_4624_l…
claude May 17, 2026
930992a
docs(readme): add superpowers/plans/ to doc index — file exists in gi…
claude May 17, 2026
a16de07
docs(devcontainer): fix MCP count — .mcp.json has 1 server not 6 [W1.…
claude May 17, 2026
9f8d651
docs(claude-md): fix LOGON_TYPE_3_VS_10 trigger — empty list also req…
claude May 18, 2026
bebede6
docs(contributing): fix vol3 path — src/verdict/tools/vol3/ does not …
claude May 18, 2026
dba064a
docs(devcontainer): fix GITHUB_TOKEN credential table — github MCP is…
claude May 18, 2026
d979d7e
docs(build-plan): fix W1.B.1 test name (13→15 members) and W1.B.10 va…
claude May 18, 2026
41eb5a8
docs(superpowers): fix stale script name run-cloud-proof → run_cloud_…
claude May 18, 2026
809fbc3
docs(architecture): correct failure_reason claim — field not yet in F…
claude May 18, 2026
5bce137
docs(failure-modes): correct UNVERIFIABLE schema exemption — failure_…
claude May 18, 2026
5faefb2
docs(architecture): correct UNVERIFIABLE row — failure_reason not yet…
claude May 18, 2026
0c78ebd
docs(build-plan): correct W2.B.1.a topology test function name [W1.A.0]
claude May 18, 2026
beb6865
docs(build-plan): fix W2.B.1 node count — eight not five [W1.A.0]
claude May 18, 2026
ef5e073
docs(claude-md): add memory/ and proof/ to src/verdict/ layout — both…
claude May 19, 2026
52660a4
docs(CLAUDE.md): fix two stale §10 code-block comments [W1.A.0]
claude May 19, 2026
2849d6c
docs(security,contributing): fix stale file paths and non-existent se…
claude May 19, 2026
e36e899
docs(security): fix VERDICT-2026-001 affected line/function — deny_ru…
claude May 19, 2026
5589301
docs(security): fix VERDICT-2026-002 affected location — _TPMHMACProv…
claude May 19, 2026
d7a64fe
docs(devcontainer): remove stale 'when CLI lands W6' qualifier — verd…
claude May 19, 2026
e79f796
docs(tldr): remove stale Langfuse check from verdict doctor pre-fligh…
claude May 19, 2026
6fb4b6f
docs(failure-modes): correct Langfuse row terminal behavior — doctor …
claude May 19, 2026
96d9f64
docs(DFIR_MEMORY): add missing wiki nav strip [W1.A.0]
claude May 19, 2026
27f9578
docs(superpowers): add missing wiki nav strip to cloud-proof-harness …
claude May 19, 2026
020c136
docs(agent-swarm): fix swarm DB filename — swarm/state.db → swarm/swa…
claude May 20, 2026
cfedf43
docs(build-plan): mark W1.A.8 completed via W4.D.1 per-mode eval scaf…
claude May 20, 2026
a778f8a
docs(release): fix required release paths list — add ARCHITECTURE_DIA…
claude May 20, 2026
cc304b8
docs(tldr): add missing qc skill to skills inventory [W1.A.0]
claude May 20, 2026
c293c83
docs(build-plan): fix W1.B.2 and W1.B.5 test function names to match …
claude May 20, 2026
c741504
docs(architecture): align Qwen3 model name to canonical -2507 suffix …
claude May 20, 2026
e3d5632
docs(build-plan): mark W1.A.1, W1.A.9, W1.B.1-14 completed [W1.A.0]
claude May 21, 2026
3ff0059
docs(build-plan): mark W1.A.5, W1.A.6, W1.A.7.a, W1.E.2, W1.G.5, W2.C…
claude May 21, 2026
45e887c
docs(build-plan): fix W1.A.5 gateway test file path — actual file is …
claude May 21, 2026
68e49c1
docs(build-plan): fix W1.A.6 microsandbox test function name [W1.A.0]
claude May 21, 2026
0783dd6
docs(build-plan): mark W1.G.6 complete — hmac_key.py and commit d3559…
claude May 21, 2026
2232869
docs(build-plan): mark W1.G.7 complete — evidence_recheck.py, tests, …
claude May 21, 2026
7e06149
docs(build-plan): mark W1.C.1 W1.C.3 W1.D.1 completed [W1.A.0]
claude May 21, 2026
7c7c8c9
docs(build-plan): mark W3.B.3 W3.C.1 W3.D.1-3 W3.E.1 completed [W1.A.0]
claude May 21, 2026
536f823
docs(build-plan): mark W6.C.7 a/c/d completed — SVG and README embed …
claude May 21, 2026
51bdd77
docs(devpost): mark W6.C.7 a/c/d completed; update architecture-diagr…
claude May 21, 2026
27b74aa
docs(contributing): guard cargo test and pnpm test in sanity check [W…
claude May 21, 2026
e6e0202
docs(devpost): unmark W6.C.7.c — README.md has no SVG reference [W1.A.0]
claude May 22, 2026
f5df7d9
docs(contributing): fix branch-format example to use dots in task ID …
claude May 22, 2026
aeb72ef
docs(build-plan): add missing completed schema + graph files to file …
claude May 22, 2026
694255b
docs(claude): correct submission-doc count in §11.3 header from Eight…
claude May 22, 2026
5adb55a
docs(dfir-memory): fix evidence_refs field name (singular→plural) [W1…
claude May 22, 2026
8ad4d21
docs(agent-swarm): update W1.B.7 line anchor L371→L382 in PR template…
claude May 22, 2026
e4972cf
docs(architecture): fix hunt_evil baseline field list — signing/insta…
claude May 22, 2026
30f5529
docs(architecture): vol3.info is a typed ExternalToolSpec, not a gene…
claude May 22, 2026
4e73769
docs(build-plan): update Week 2 acceptance gate from 23 to 24 tool wr…
claude May 22, 2026
5139c6e
docs(build-plan): add memory/, proof/, and missing test dirs to file …
claude May 23, 2026
13a21c7
docs(build-plan): add external.py, parsers.py, registry.py to tools/ …
claude May 23, 2026
c88d4a3
docs(build-plan): remove stale planned qualifier from authorities tab…
claude May 23, 2026
dcb6c40
docs(agent-swarm): update W1.B.7 line anchor L382→L396 in PR template…
claude May 23, 2026
05c3717
docs(build-plan): fix vol3 wrapper count — 10 files + vol3.info in re…
claude May 23, 2026
340ac5a
docs(accuracy-report): update H1/H2 resolution log to reflect 11 vol3…
claude May 24, 2026
f16ba5f
docs(mcp-framework): remove Langfuse from verdict doctor check list […
claude May 24, 2026
e75b621
docs(build): remove stale sift-vm-bootstrap.sh reference [W1.A.0]
claude May 24, 2026
ef71c95
docs(devpost): replace <org> placeholder with actual repo URL Timothy…
claude May 24, 2026
b12c72d
docs(build-plan): add evidence_recheck.py and mode_lock.py to runtime…
claude May 24, 2026
d9d6760
docs(build-plan): remove stale tool_executor.py from W2 acceptance ga…
claude May 25, 2026
62b5709
docs(build-plan): add credentials.py to cli/ file tree [W1.A.0]
claude May 25, 2026
1154671
docs(build-plan): fix W5.E.4.a verdict approve synopsis [W1.A.0]
claude May 25, 2026
ec157e7
docs(build-plan): fix sanitization.py task ID annotation W2.E.4→W2.E.…
claude May 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions .devcontainer/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@ or build directly with `docker build -f .devcontainer/Dockerfile .`.

Every component is MIT, Apache-2.0, or BSD — passes CLAUDE.md §3.8.

The 17 skills under `.claude/skills/` and the 6 MCPs in `.mcp.json` come
along for free (they're just files in the repo + `npx`/`uvx` commands the
The 18 skills under `.claude/skills/` and the MCPs across `.mcp*.json`
(1 in the safe-default `.mcp.json`, 6 in `.mcp.cloud.json` / `.mcp.dual.json`)
come along for free (they're just files in the repo + `npx`/`uvx` commands the
container can run).

## What's NOT inside (by design)
Expand All @@ -42,7 +43,7 @@ The image carries **no secrets**. `devcontainer.json` uses `${localEnv:VAR}` ref
|---|---|---|
| `ANTHROPIC_API_KEY` | host shell or `.env` | preferred cloud credential; container env only — never written to disk inside the image |
| `OPENROUTER_API_KEY` | host shell or `.env` | optional host-side AI-agent fallback; never passed into microsandboxes |
| `GITHUB_TOKEN` | host shell | passed to the `github` MCP via `.mcp.json` (already env-var-ref only) |
| `GITHUB_TOKEN` | host shell | passed to the `github` MCP via `.mcp.cloud.json` / `.mcp.dual.json` (env-var-ref only) |
| `LANGFUSE_*` | host shell or `.env` | pointed at `host.docker.internal:3000` |
| `SGLANG_*` | hard-coded to `host.docker.internal:{30000,30001}` | overrides the `.env` defaults of `localhost:*` so the container reaches the host |

Expand Down Expand Up @@ -113,7 +114,7 @@ openssl rand -base64 32 | gpg --symmetric --output ~/.verdict/key.gpg
chmod 600 ~/.verdict/key.gpg
```

After this, `verdict doctor` (when the CLI lands per `BUILD_PLAN.md` W6) will report green on whatever the host can actually provide.
After this, `verdict doctor` will report green on whatever the host can actually provide.

## Rebuilding

Expand Down
4 changes: 2 additions & 2 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// VERDICT dev container — opens any host with Docker into a reproducible
// toolchain (uv/Python 3.11, Node 20, pnpm, Rust 1.88) plus the 6 MCPs
// from .mcp.json and the 19 skills under .claude/skills/. See README.md
// toolchain (uv/Python 3.11, Node 20, pnpm, Rust 1.88) plus the MCPs across
// .mcp*.json and the 18 skills under .claude/skills/. See README.md
// in this folder for what is NOT in here (Microsandbox, SGLang) and why.
{
"name": "VERDICT dev",
Expand Down
75 changes: 44 additions & 31 deletions CLAUDE.md

Large diffs are not rendered by default.

22 changes: 11 additions & 11 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ New-contributor setup guide. If you've already done the SANS Find Evil! 2026 tea
**Default branch:** `main`
**License:** MIT
**Deadline gate:** 2026-06-15 22:45 CDT (team-internal target: 2026-06-14 EOD = ~28 h buffer)
**Recommended platform:** SANS **SIFT Workstation VM** (canonical — all forensic tools, Microsandbox, SGLang, evidence mounts work out-of-box) **or** any modern **Linux box** (Ubuntu 22.04+ / Debian 12+ / Fedora 39+ / Arch). **macOS host is acceptable** for schema/planner/MCP/unit-test work that doesn't shell out to forensic tools — but the moment your task touches `verdict/sandboxes/`, `verdict/tools/vol3/`, or anything that runs in Microsandbox, switch into the SIFT VM. **Windows host is not supported** for development; use WSL2 + Ubuntu or pull the SIFT VM (it runs under Hyper-V / VMware / VirtualBox).
**Recommended platform:** SANS **SIFT Workstation VM** (canonical — all forensic tools, Microsandbox, SGLang, evidence mounts work out-of-box) **or** any modern **Linux box** (Ubuntu 22.04+ / Debian 12+ / Fedora 39+ / Arch). **macOS host is acceptable** for schema/planner/MCP/unit-test work that doesn't shell out to forensic tools — but the moment your task touches `src/verdict/sandboxes/`, `src/verdict/tools/`, or anything that runs in Microsandbox, switch into the SIFT VM. **Windows host is not supported** for development; use WSL2 + Ubuntu or pull the SIFT VM (it runs under Hyper-V / VMware / VirtualBox).

Authority chain when docs disagree: Devpost rules → `DEVPOST_COMPLIANCE.md` → `ARCHITECTURE.md` → `BUILD_PLAN.md` → this file. Code + lockfiles win over docs (per `CLAUDE.md`); update the doc, don't roll back the code, unless the code is wrong.

Expand All @@ -16,7 +16,7 @@ Authority chain when docs disagree: Devpost rules → `DEVPOST_COMPLIANCE.md`
>
> The minimum sweep:
>
> - Did you add/rename/remove a file under `verdict/`? Grep `docs/` + `CLAUDE.md` + `README.md` for the old path; update every reference.
> - Did you add/rename/remove a file under `src/verdict/`? Grep `docs/` + `CLAUDE.md` + `README.md` for the old path; update every reference.
> - Did you add/change/remove a CLI command, flag, or env var? Update `CLAUDE.md` §10 and `README.md` "CLI surface".
> - Did you add/change/remove a schema field, validator, enum member, or playbook rule? Update `docs/ARCHITECTURE.md` §4 and any `CLAUDE.md` §3.x rule that cites it.
> - Did you add/remove a dependency, change a version pin, or vendor a skill/MCP? Update `CONTRIBUTING.md` §2 toolchain table + `docs/RELEASE.md` (deps) or `docs/SKILLS_FRAMEWORK.md` / `docs/MCP_FRAMEWORK.md` + license audit (vendored).
Expand Down Expand Up @@ -118,13 +118,13 @@ Idempotent. Installs uv + Python 3.11, Rust 1.88, Node 20 + pnpm, and Microsandb

**Where to develop.** Three supported configurations, in order of preference:

1. **Inside the SIFT VM** (canonical, recommended for everyone). All forensic tools, Microsandbox, SGLang, and the evidence mounts resolve here without setup. **Required** for any work touching the executor branches, the Microsandbox layer, evidence I/O, or anything under `verdict/sandboxes/`, `verdict/tools/vol3/`, or `services/mcp/src/tools/`. Pull the OVA from `downloads/README.md`; snapshot it as `clean-install` before installing anything.
1. **Inside the SIFT VM** (canonical, recommended for everyone). All forensic tools, Microsandbox, SGLang, and the evidence mounts resolve here without setup. **Required** for any work touching the executor branches, the Microsandbox layer, evidence I/O, or anything under `src/verdict/sandboxes/` or `src/verdict/tools/`. Pull the OVA from `downloads/README.md`; snapshot it as `clean-install` before installing anything.
2. **A modern Linux box** (Ubuntu 22.04+ / Debian 12+ / Fedora 39+ / Arch). Acceptable for the full stack as long as you can install Microsandbox (Linux-only) and run the SIFT toolchain (`apt install sleuthkit volatility ...`). Faster I/O than the VM. Take a `pre-verdict` snapshot of your home before installing forensic tools — they leave state.
3. **macOS host with the SIFT VM as a runtime target** (faster edit loop, smaller surface). Use VS Code Remote-SSH or `Develop on a Container` into the VM. Acceptable for schema, planner, MCP gateway, and unit-test work that doesn't shell out to forensic tools or Microsandbox. The moment your task touches a Microsandbox path or a forensic CLI, switch into the VM.

**Windows host is not supported** for development. Either use WSL2 + Ubuntu (treat as configuration #2) or run the SIFT VM under Hyper-V / VMware / VirtualBox (configuration #1). Native Windows breaks Microsandbox (libkrun is Linux-only), pre-commit hooks (path/exec semantics), and several SIFT tools.

If your work touches `services/mcp/src/tools/`, `services/agent_mcp/`, or anything under a Microsandbox path, you **must** run integration tests inside the SIFT VM (or your Linux box with Microsandbox installed) before opening a PR. macOS-only test runs do not satisfy the gate.
If your work touches `src/verdict/tools/`, `src/verdict/sandboxes/`, or anything under a Microsandbox path, you **must** run integration tests inside the SIFT VM (or your Linux box with Microsandbox installed) before opening a PR. macOS-only test runs do not satisfy the gate.

---

Expand Down Expand Up @@ -173,8 +173,8 @@ test -f pnpm-lock.yaml && pnpm install --frozen-lockfile
Sanity check:
```bash
uv run pytest -q # must pass on a clean clone — if it doesn't, that's a P0
cargo test --workspace -q
pnpm test
test -f Cargo.toml && cargo test --workspace -q
test -f pnpm-lock.yaml && pnpm test
```

If the workspace files don't exist yet (we're early in Week 1), clone is enough — the scaffold lands per `BUILD_PLAN.md` Phase W1.A.
Expand All @@ -188,7 +188,7 @@ If the workspace files don't exist yet (we're early in Week 1), clone is enough
This section is contributor-specific workflow on top of those rules.

### Branches
Format: `<type>/<task-id>-<slug>` — e.g. `feat/W1-B-1-artifact-class-enum`. Branch from `main`, rebase before PR, squash on merge only if the branch was a single logical task. Otherwise preserve the TDD red→green commits — they're the audit trail.
Format: `<type>/<task-id>-<slug>` — e.g. `feat/W1.B.1-artifact-class-enum`. Branch from `main`, rebase before PR, squash on merge only if the branch was a single logical task. Otherwise preserve the TDD red→green commits — they're the audit trail.

### Commit + push: use `/qc`

Expand All @@ -204,7 +204,7 @@ gh pr create \
--draft \
--title "feat(scope): summary [W1.B.1]" \
--body "$(cat <<'EOF'
**Task:** [docs/BUILD_PLAN.md W1.B.1](../blob/main/docs/BUILD_PLAN.md)
**Task:** [docs/BUILD_PLAN.md W1.B.1](docs/BUILD_PLAN.md)
**Mode(s):** all <!-- cloud / airgap / dual / all -->
**Test evidence:**
\`\`\`
Expand Down Expand Up @@ -234,7 +234,7 @@ Concretely, when a verified fact lands:
| Dependency added, removed, or version pinned | this `CONTRIBUTING.md` §2 + `docs/RELEASE.md` |
| LangGraph node added / removed / renamed | `docs/ARCHITECTURE.md` §2 + `docs/BUILD_PLAN.md` task body |
| Verifier strategy semantics changed | `docs/ARCHITECTURE.md` §1 + `CLAUDE.md` §8 |
| Caveat list changed | `CLAUDE.md` §3.3 + `docs/TLDR.md` (if cited) + `verdict/prompts/examiner_caveats.md` |
| Caveat list changed | `CLAUDE.md` §3.3 + `docs/TLDR.md` (if cited) + `src/verdict/planning/prompts/examiner_caveats.md` |
| New skill or MCP vendored | `docs/SKILLS_FRAMEWORK.md` (skills) or `docs/MCP_FRAMEWORK.md` (MCPs) + audit log |
| Audit-history correction (research contradicts a frozen `spec/` claim) | log in `docs/DOCS_ACCURACY_REPORT.md`. Do **not** edit `spec/`. |

Expand All @@ -260,7 +260,7 @@ claude # interactive Claude Code session if you're on cloud/dual mode

Air-gap operators: ask PUG for the bridged + Tesla-mode entry point.

Expected output: structured Findings citing tool-call IDs, a quorum verdict, an HMAC-signed ledger entry, and a Langfuse trace (if Langfuse is up — see `ARCHITECTURE.md` §Observability).
Expected output: structured Findings citing tool-call IDs, a quorum verdict, an HMAC-signed ledger entry, and a Langfuse trace (if Langfuse is up — see `ARCHITECTURE.md` §5).

If the run fails before producing a Finding, you have a P0 environment problem. Post the trace ID + `verdict doctor` output in team chat before opening a code PR.

Expand All @@ -271,7 +271,7 @@ If the run fails before producing a Finding, you have a P0 environment problem.
Authority order (escalate left-to-right):

1. **NotebookLM Q&A:** https://notebooklm.google.com/notebook/f0957a60-6fb2-452b-93d4-ecd73ba47779?authuser=1 — chief location for "how does X work?"
2. **`docs/` and the audit history in `archive/`** — most "why did we choose X?" questions are answered in `archive/03-audit-v4.5.md`.
2. **`docs/` and the audit history in `docs/spec/`** — most "why did we choose X?" questions are answered in `docs/spec/03-audit-v4.5.md`.
3. **Team chat** — PUG / Beaver / Haley / KP. Use the appropriate thread; don't DM PUG for things the team should see.
4. **Devpost platform issues only:** https://help.devpost.com/

Expand Down
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ Source code lives under `src/verdict/`. The outer `Verdict/` directory is the re
│ 1. Plans the investigation │ "Where would evil hide?"
│ 2. Runs forensic tools │ vol3, hayabusa, plaso, MFTECmd...
│ 3. Two models cross-check │ Qwen3 vs GLM-4.5-Air
│ 4. Quorum decides verdict │ VERIFIED / CONTESTED / UNVERIFIABLE
│ 4. Quorum decides verdict │ VETTED_* / CONTESTED / UNVERIFIABLE
│ 5. HMAC-signs the audit log │ Tamper-evident chain
└───────────────────────────────┘
Expand Down Expand Up @@ -103,7 +103,7 @@ Roles: Tim (infra, ledger, ops), Beaver (orchestration, verifiers), Haley (infer
│ ⓶ Hunt Evil masquerade (scvhost.exe parent=cmd.exe)
│ ⓷ Amcache caveat acknowledged in rationale
│ ⓸ Pivot in action (1 pivot, 0 replans)
│ ⓹ Disagreement → CONTESTED → replan → VERIFIED ★ (Devpost-required self-correction)
│ ⓹ Disagreement → CONTESTED → replan → VETTED_AIRGAP ★ (Devpost-required self-correction)
│ ⓺ TSI tcpdump proof (key never enters VM)
│ ⓻ Kill -9 + verdict resume
3:00 ─┤ DUAL MODE (60s) — three-way verification → VETTED_DUAL
Expand All @@ -116,7 +116,7 @@ Roles: Tim (infra, ledger, ops), Beaver (orchestration, verifiers), Haley (infer
## Mapped to the 6 Devpost judging criteria

1. **Autonomous Execution Quality** *(tiebreaker)* — Mode-aware verifier strategy. Plan-then-Execute with planner_critique CoVe + comprehension_gate + pivot vs replan + unverifiable_finalize. Self-correction via cross-engine quorum.
2. **IR Accuracy** — Artifact-pair rule, Tier-1 caveats, MITRE sub-techniques, VETTED_CLOUD vs VERIFIED honesty, Hunt Evil masquerade, DKOM auto-detection. Five Inspect AI scorers per mode.
2. **IR Accuracy** — Artifact-pair rule, Tier-1 caveats, MITRE sub-techniques, honest VETTED_CLOUD framing (same-model self-consistency ≠ true cross-family verification), Hunt Evil masquerade, DKOM auto-detection. Five Inspect AI scorers per mode.
3. **Breadth and Depth of Analysis** — "Depth on fewer types beats shallow coverage of many" — Devpost rubric line we lean on directly. Windows-DFIR-depth-first; v2 extension points named (5th `net_executor` + `live_executor` branches).
4. **Constraint Implementation** — Three-layer immutability (PreToolUse + DenyRule + microsandbox kernel mount). HMAC ledger. TSI. Mode lock at case_init. **Architectural, not prompt.**
5. **Audit Trail Quality** — HMAC ledger ↔ Langfuse bidirectional. Three-tier ID hierarchy. Per-output-file SHA-256. Examination-environment metadata (NIST SP 800-86).
Expand All @@ -130,7 +130,7 @@ Roles: Tim (infra, ledger, ops), Beaver (orchestration, verifiers), Haley (infer

```
RISK #1 — Microsandbox hits a blocker week 4+
Likelihood: MEDIUM (pre-1.0; latest 0.1.x). Impact: HIGH (kills TSI hero shot).
Likelihood: MEDIUM (pre-1.0; pinned 0.4.x line). Impact: HIGH (kills TSI hero shot).
Mitigation: Test it HARD in week 2, not week 4.

RISK #2 — Case 001 doesn't disagree by end of week 4
Expand Down Expand Up @@ -213,7 +213,7 @@ Follow [`CONTRIBUTING.md`](CONTRIBUTING.md) Step 0–7 for the full human-at-key
### CLI surface (one-liner)

```
verdict {doctor, mode, init, resume, reverify, status, ls, show, export, validate, approve, gc, health}
verdict {doctor, mode, init, run-tool, run-case, resume, reverify, status, ls, show, export, validate, approve, gc, package-check, health}
```

`verdict reverify <case_id> --mode <cloud|airgap|dual>` re-runs verification under a new mode and writes a *parallel* verdict chain — the original ledger is never mutated. Full CLI reference in `CLAUDE.md` §10.2; flag spec in `docs/BUILD_PLAN.md` W3.C.2.
Loading
Loading