| name | packet-deepdive |
| description | Validate a drafted gate/sprint packet with a four-lane deep-dive: accuracy-vs-repo, cold-read (the overlay's reader persona and access boundary), receipts verification (re-run every count/string/exit-code live), and navigability/structure — with a phase-2 convergence round between accuracy and cold-read, wrapped around the deep-dive-orchestrator subagent, emitting the findings-and-dispositions review doc. Use when the user says "deep-dive the packet", "validate the packet", "packet review", "cold-read the gate packet", or after the packet skill drafts a packet that needs validation before it reaches the reader. |
Packet Deep-Dive
Encapsulate the packet-validation deep-dive. A packet is a trust instrument:
the failure modes are a false claim the reader checks in ten seconds, a dead
reference to something the reader can't see, a receipt that doesn't reproduce,
or a broken link the reader hits. Four independent lanes hunt exactly those,
a convergence round reconciles the truth-and-wording conflicts, and the output
is a dispositions doc that maps every finding to a fix or a reasoned rejection.
When to Use This Skill
Run on a drafted packet before it reaches the reader — the validation half of
the packet workflow (author with the packet skill; validate with this one).
This is the multi-agent-review Tier 2 equivalent for packets. Skip it only for
throwaway internal checkpoints.
Core Process
Phase 0 — Prepare
- Pin the state. The packet must be committed; note
{repo}@{commit} and
branch. Lanes review that exact state.
- Load the overlay (
.agents/overlay.md § packet-deepdive): the reader
persona, the reader's access boundary (what they can and cannot see), and
the receipt commands. The access boundary is load-bearing — the largest
finding class in practice is references to artifacts the reader cannot
reach.
Phase 1 — Dispatch four lanes (independent contexts)
Wrap the deep-dive-orchestrator subagent to run four lanes in parallel,
each with its own context and only its own mandate (templates in lanes.md):
| Lane | Hunts |
|---|
| accuracy-vs-repo | every factual claim vs the actual repo (commits, PRs, code behavior, attribution, counts, "already in place") |
| cold-read | the reader's timed experience: grid honesty, FAQ preemption, dead-vocabulary audit, tone, meeting-triggers, word budget |
| receipts | re-runs every count/string/exit-code live; double-run determinism; no mutation |
| navigability/structure | heading→slug inventory, every link/anchor resolves, render correctness, lint, phone width |
Fill each template's {...} from the overlay and the pinned state. Each lane
reports findings with severity, exact line refs, and exact fixes — no lane
fixes anything.
Phase 2 — Convergence (accuracy × cold-read)
Give a convergence lane both the accuracy and cold-read reports in full. It
produces combined exact-wording rewrites, resolving conflicts under one
standing rule: a fix never softens or breaks a factual claim — honesty
wins. A cold-read wording fix that would entrench a falsehood accuracy found
is withdrawn and superseded. It re-ranks findings by meeting-trigger risk and
keeps an own-findings ledger (upgrades/downgrades/withdrawals). Receipts and
structure are factual lanes and don't need convergence — fold their findings
straight into triage.
Phase 3 — Synthesize and triage
Collect all lane reports (+ convergence) and write the dispositions doc from
report-template.md:
- Process note (how the lanes ran + any resilience recovery)
- Verdict (receipts state, link totals, finding counts)
- Critical / Important / Minor tables, each finding with a disposition
- Rejected / not applied table, each with a real reason
- Post-fix state
Fix all Critical and Important findings in the packet, re-render and re-verify
the share (packet skill's render.py --verify), and file beads for any
deferred minor. Land the dispositions doc in the consuming repo's
docs/reviews/, with the four full lane reports in a sibling dir.
Resilience Protocol
Long parallel orchestrations fail in characteristic ways. Handle them, don't
restart from zero:
- Orchestrator death mid-run. If the orchestrator process is killed
(infrastructure/DNS failure, timeout) after lane reports are written, the
parent agent performs the final synthesis and triage directly — do not
re-run the lanes. Record the death and the parent-synthesis fallback in the
dispositions doc's process note. (This happened twice on the first real
run; the reports survived and the parent finished the job.)
- Harvest the longest assistant message, not the last. A lane's final
turn is often a brief wrap-up; the actual report is the longest message in
its transcript. Extract that.
- Relaunch stalled lanes. A lane that returns tiny output after its first
tool call (no-turn-ended) has stalled — relaunch it with its original
prompt; do not accept the stub.
Project Overlay
Reads .agents/overlay.md § packet-deepdive in the consuming repo (shared
overlay convention — one file, one section per skill):
| Key | Meaning | Default when absent |
|---|
reader_persona | Who the cold-read lane simulates | A cold external reviewer with repo access only |
reader_access | What the reader can see | This repo on the code host |
reader_blind | What the reader cannot see | The planning workspace, tracker, decision record |
receipt_commands | Commands the receipts lane re-runs | The commands quoted in the packet |
reviews_dir | Where the dispositions doc lands | docs/reviews/ |
With no overlay: cold-read simulates a repo-access-only reviewer; receipts
re-runs the packet's own quoted commands.
Anti-Patterns
- Sharing lane context. Lanes must run independent — a lane that sees
another's findings anchors on them and stops hunting. Convergence is the
only place they meet.
- Re-running lanes after an orchestrator death. The reports survive the
process; synthesize from them. Re-running discards the analysis and burns
the run.
- Harvesting the last message. The report is the longest message, not the
final wrap-up.
- Letting wording soften truth in convergence. Honesty wins, always. A
prettier sentence that entrenches a false claim is withdrawn.
- A rejected finding with no reason. "Not applied" needs a real reason
(settled by design, would falsify a receipt, advice-only) — not a shrug.
- Skipping the access boundary. Without the reader's blind set, the
cold-read lane misses the dead-vocabulary findings that are the packet's
most common and most damaging defect class.
- Fixing in a lane. Lanes report; the synthesis step fixes. A lane that
edits the packet corrupts the pinned state the other lanes review.