From context-firewall
Verify SubResult.v1 by sampling evidence locators and re-reading only referenced snippets.
npx claudepluginhub lollipopkit/cc-plugins --plugin context-firewall--result <file|json> [--risk low|medium|high] [--out <path>]Verify a context-firewall SubResult.v1.
## Arguments
$ARGUMENTS
Expected:
- `--result <file|json>` (required)
- `--risk low|medium|high` (optional, default: medium)
- `--out <path>` (optional)
## Steps
### 1) Resolve project root
- Run `pwd` via Bash and treat it as the project root directory.
### 2) Load SubResult JSON (`--result`)
- Extract the `--result` value from `$ARGUMENTS`.
- If the `--result` value begins with `{`, treat it as inline JSON.
- Otherwise treat it as a file path:
- If it is not absolute, resolve to an absolute path by joining with the project root.
- Read ...Verify a context-firewall SubResult.v1.
$ARGUMENTS
Expected:
--result <file|json> (required)--risk low|medium|high (optional, default: medium)--out <path> (optional)pwd via Bash and treat it as the project root directory.--result)--result value from $ARGUMENTS.--result value begins with {, treat it as inline JSON.task_id: "unknown"status: "failed"checked/passed/failed consistent with 0 checksrecommendation telling the user to provide a valid SubResult.v1--risk if provided; otherwise default to medium.Flatten claims into a list in stable order:
For each claim, derive a stable claim_id:
claim.claim_id exists and is non-empty, use it.answers[<answer_index>].claims[<claim_index>].Determine N = ceil(total_claims * sample_rate).
total_claims > 0, ensure N >= 1.total_claims == 0, set N = 0.Select the first N claims from the flattened list.
For each selected claim, attempt to verify at least one evidence item.
General rules:
line_range locator.A) line_range
path:
offset = start and limit = end-start+1.evidence.quote is present:
B) symbol_range
path as above.symbol within the file.
C) tool_call
rerun_hint contract (recommended):
schemas/sub-result.v1.schema.json):
{ "type": "web_fetch", "url": "...", "prompt": "..." }{ "type": "web_search", "query": "...", "allowed_domains": [...], "blocked_domains": [...] }{ "type": "unknown", "note": "..." }Verification rules:
If rerun_hint is present and schema-shaped:
rerun_hint.type == "web_fetch":
url: rerun_hint.urlprompt: rerun_hint.promptrerun_hint.type == "web_search":
query: rerun_hint.queryallowed_domains: rerun_hint.allowed_domains (if present)blocked_domains: rerun_hint.blocked_domains (if present)rerun_hint.type == "unknown":
If rerun_hint is absent or not schema-shaped:
D) byte_range / json_path / stack_signature
line_range or symbol_range evidence.checked: number of sampled claims (N)passed: number of sampled claims that passedfailed: number of sampled claims that failedStatus rules:
ok if failed == 0 and checked > 0 and all checked claims passed.failed if failed > 0.partial otherwise (e.g., no claims, or unverifiable locators only). This includes cases where checked > 0 but passed == 0 and failed == 0 because all sampled claims were unverifiable.Include failures[] items for each failed claim:
claim_idreasonevidence (include the locator that was checked)Set recommendation:
/cf-run with stronger evidence requirements or run cf-critic.line_range/symbol_range locators.Determine persistence root:
<root>/.claude/context-firewall/<root>/.claude/context-firewall.local.md exists and has persist.dir, use that path (resolve relative to <root>).persist.enabled: false, skip persistence.If persistence is enabled:
<persist_root>/verify/ (create via Bash if missing).<persist_root>/verify/<task_id>.json.If --out is provided, resolve to absolute (join with root if relative) and write there too.
VerifyReport.v1.