
  happy path: dedup, grouping, corpus isolation
    ok   status is findings
    ok   scope recorded
    ok   3 raw candidates
    ok   cross-category dup kept as 2 candidates
    ok   one batch per category
    ok   distinct files counted
    ok   1 confirmed
    ok   2 refuted
    ok   nothing unadjudicated
    ok   batch gets exactly its own corpus
    ok   batch spans several files in one agent
    ok   sweep gets only its own corpus
    ok   sweep context carries exactly its allowlisted fields

  phases are declared once and every agent is tagged
    ok   four phases declared
    ok   every declared phase is entered
    ok   every agent is phase-tagged
    ok   every tag matches a declared title
    ok   no sub-workflow calls remain

  every agent pins a model, sonnet floor, opus for verification
    ok   every agent pins a model at or above sonnet
    ok   verification runs on opus
    ok   meta.phases agrees with the MODELS table

  scope handling (quote/string parsing now belongs to the command)
    ok   an explicit path
    ok   surrounding whitespace trimmed
    ok   empty scope defaults to .
    ok   absent scope defaults to .

  the named scope is never excluded, whatever it looks like
    ok   recon told not to exclude the scope
    ok   sweep told the named path is never out of scope
    ok   no file-vs-directory branch left in the sweep prompt
    ok   run still completed

  abort: scope does not exist
    ok   status is scope-missing
    ok   no sweep spawned

  entry guard: refuses to run without the command's inputs
    ok   stops on nothing at all
    ok     ...spawning nothing
    ok     ...and naming the command
    ok   stops on a bare string (slash-style arg)
    ok     ...spawning nothing
    ok     ...and naming the command
    ok   stops on scope but no pluginRoot
    ok     ...spawning nothing
    ok     ...and naming the command

  abort: a sweep could not read its corpus
    ok   status is corpus-unreadable
    ok   names the affected category
    ok   says nothing was audited

  zero-item guard: sweeps scanned nothing
    ok   status is search-failed
    ok   note forbids reading it as clean

  genuine negative: searched real files, matched nothing
    ok   status is no-candidates
    ok   distinguished from search-failed

  sweep that derived nothing for the stack is surfaced
    ok   seeds parsed out of the workflow
    ok   recorded in coverage
    ok   logged for the operator

  non-fallback (unconditional) findings are in scope
    ok   verifier names the unconditional branch
    ok   verifier told step 2 cannot refute it
    ok   verifier told a missing fallback is not exculpatory
    ok   step 5 scoped to configurable candidates
    ok   the middle deployment_supplies_var values carry a severity instruction
    ok   sweep told to file them anyway

  verify batching: by category, capped, directories kept whole
    ok   40 candidates in one flat directory: 3 batch(es)
    ok     ...none over the 16-finding cap
    ok     ...every candidate in some batch
    ok     ...chunks are labelled apart
    ok   three directories of 6: 2 batch(es)
    ok     ...none over the 16-finding cap
    ok     ...every candidate in some batch
    ok     ...chunks are labelled apart
    ok     ...no directory split across batches
    ok     ...a single-directory batch is told its files are related
    ok   a 20-candidate directory beside a 1-candidate one: 3 batch(es)
    ok     ...none over the 16-finding cap
    ok     ...every candidate in some batch
    ok     ...chunks are labelled apart
    ok     ...src/big and src/zsmall never share an agent

  one category's verdict does not adjudicate another's candidate
    ok   the silent category's candidate is reported unverified
    ok   the answered one is not also reported as a gap
    ok   the confirmed finding carries the rule that raised it

  a verifier dies mid-run
    ok   run still completes
    ok   batch shortfall visible in coverage
    ok   the dead batch's candidates are unadjudicated, not lost

  a category that searched nothing is not reported as covered
    ok   run completes
    ok   per-category scan counts in coverage
    ok   the sweep that searched is not listed as unsearched
    ok   the zero-file sweep is listed
    ok   the dead sweep is listed too
    ok   every category but the one that searched is listed
    ok   report told to name them as not searched
    ok   logged for the operator

  zero-item guard: verification adjudicated nothing
    ok   every verify agent dies: status is verify-failed
    ok     ...not reported as a clean run
    ok     ...note forbids reading it as clean
    ok     ...coverage survives, naming every unjudged candidate
    ok     ...no report agent spawned for an audit with nothing to report
    ok   every batch returns an empty verdict list: status is verify-failed
    ok     ...not reported as a clean run
    ok     ...note forbids reading it as clean
    ok     ...coverage survives, naming every unjudged candidate
    ok     ...no report agent spawned for an audit with nothing to report
    ok   one adjudicated candidate is still a completed run

  the report agent dies
    ok   status is report-failed
    ok   not reported as a rendered run
    ok   the findings survive for the caller to render
    ok   note tells the caller to render them

  abort: recon returned nothing
    ok   status is recon-failed
    ok   no sweep spawned

ran 102 assertions across 19 scenarios, 0 failed
