fix(evidence): report unmanifested folders + manifest the identity-decision probe set #115

Merged
clawdie merged 3 commits from docs/evidence-coverage-and-identity-manifest into main 2026-10-06 17:32:49 +02:00
Owner

What

The Jev evidence gate (scripts/check-evidence.py) skipped any docs/evidence/* folder that lacked a manifest.json before running any check, and its summary ("1 manifested set(s) checked, 0 errors") read as a full pass even though 5 of 6 folders were never examined. This PR makes the gap visible and brings one more folder under the gate.

  1. Coverage reporting — the gate now records skipped folders and reports M of T set(s) checked, K skipped (no manifest), errors, then lists the unmanifested folders. It stays non-fatal (exit 0 on skips), so CI remains green.
  2. Manifest for contributor-identity-decision — adds a jev-evidence-manifest.v1 manifest with subject/evidence commits, evaluator provenance, and sha256 digests, bringing the identity-decision probes under the schema, commit, hash, JSON, and secret checks.

Net effect on the gate output:

=== Summary: 2 of 6 set(s) checked, 4 skipped (no manifest), 0 errors ===
    Not validated (no manifest.json):
      - agent-policy-evidence-review-2026-09-29
      - command-inventory
      - jev-migration-triage
      - phase-0-track-b-valhala

Jev advisory (3 runs, jev_probe, typesafe/jev-latest)

Asked whether the fix should broaden. Stable answers:

  • scope_now = gate_with_immediate (confidence 0.97) — fix the gate's silent skip and manifest the immediate folder, defer full backfill.
  • strict_default_ready ≈ 0.08 — do not make a missing manifest fail by default yet.
  • non_jev_folders = kind_field (0.81) — give non-Jev audits their own valid form rather than forcing the Jev schema.
  • silent_skip_is_risk ≈ 0.55, look_broader ≈ 0.73.

This PR follows that: coverage + immediate manifest now; strict mode, folder backfill, and the kind field are deferred.

Gates

  • ./scripts/check-evidence.py — 2 of 6 sets checked, 0 errors
  • ./scripts/ci-checks.sh — All checks passed (Prettier, wiki-lint 762/0, date gate, OKF gate, evidence gate, whitespace gate)

Deferred (follow-ups)

  • --require-manifests / strict mode (Jev: ~0.08 ready).
  • Backfill manifests for jev-migration-triage and agent-policy-evidence-review-2026-09-29.
  • A kind field so command-inventory and phase-0-track-b-valhala are not forced into the Jev schema.

Notes

  • The gate's secret scan is currently manifest-gated; a scan of the 4 still-skipped folders with the gate's own patterns found only one benign placeholder (ZAI_API_KEY=<your-key> in command-inventory), so no real credential is being skipped today.
  • Jev output is advisory; the operator authorizes.
## What The Jev evidence gate (`scripts/check-evidence.py`) skipped any `docs/evidence/*` folder that lacked a `manifest.json` **before running any check**, and its summary (`"1 manifested set(s) checked, 0 errors"`) read as a full pass even though 5 of 6 folders were never examined. This PR makes the gap visible and brings one more folder under the gate. 1. **Coverage reporting** — the gate now records skipped folders and reports `M of T set(s) checked, K skipped (no manifest), errors`, then lists the unmanifested folders. It stays **non-fatal** (exit 0 on skips), so CI remains green. 2. **Manifest for `contributor-identity-decision`** — adds a `jev-evidence-manifest.v1` manifest with subject/evidence commits, evaluator provenance, and sha256 digests, bringing the identity-decision probes under the schema, commit, hash, JSON, and secret checks. Net effect on the gate output: ``` === Summary: 2 of 6 set(s) checked, 4 skipped (no manifest), 0 errors === Not validated (no manifest.json): - agent-policy-evidence-review-2026-09-29 - command-inventory - jev-migration-triage - phase-0-track-b-valhala ``` ## Jev advisory (3 runs, `jev_probe`, `typesafe`/`jev-latest`) Asked whether the fix should broaden. Stable answers: - `scope_now` = **`gate_with_immediate`** (confidence 0.97) — fix the gate's silent skip and manifest the immediate folder, defer full backfill. - `strict_default_ready` ≈ **0.08** — do not make a missing manifest fail by default yet. - `non_jev_folders` = **`kind_field`** (0.81) — give non-Jev audits their own valid form rather than forcing the Jev schema. - `silent_skip_is_risk` ≈ 0.55, `look_broader` ≈ 0.73. This PR follows that: coverage + immediate manifest now; strict mode, folder backfill, and the `kind` field are deferred. ## Gates - `./scripts/check-evidence.py` — 2 of 6 sets checked, 0 errors - `./scripts/ci-checks.sh` — All checks passed (Prettier, wiki-lint 762/0, date gate, OKF gate, evidence gate, whitespace gate) ## Deferred (follow-ups) - `--require-manifests` / strict mode (Jev: ~0.08 ready). - Backfill manifests for `jev-migration-triage` and `agent-policy-evidence-review-2026-09-29`. - A `kind` field so `command-inventory` and `phase-0-track-b-valhala` are not forced into the Jev schema. ## Notes - The gate's secret scan is currently manifest-gated; a scan of the 4 still-skipped folders with the gate's own patterns found only one benign placeholder (`ZAI_API_KEY=<your-key>` in `command-inventory`), so no real credential is being skipped today. - Jev output is advisory; the operator authorizes.
check-evidence.py skipped any docs/evidence/* folder without a manifest.json
before running any check, and the summary ("N manifested set(s) checked, 0
errors") read as a full pass even though most folders were never examined.
Record the skipped folders and report coverage (M of T checked, K skipped,
errors) so the gap is visible.

Stays non-fatal: failing on a missing manifest would break CI until every
legacy folder is backfilled, which is a separate, deferred change.

Gates: ./scripts/ci-checks.sh -- All checks passed.
docs(evidence): manifest the contributor-identity-decision probe set
Some checks failed
CI / markdown (pull_request) Successful in 9s
CI / port (pull_request) Successful in 1s
CI / agent-jail-pkgs (pull_request) Successful in 1s
CI / python-tests (pull_request) Successful in 15s
CI / go (pull_request) Successful in 5s
format-check / prettier (pull_request) Successful in 6s
leak-guard / guard (pull_request) Successful in 2s
ci-gate / gate (pull_request) Has been cancelled
c2aa33dc3f
Adds manifest.json (jev-evidence-manifest.v1) with subject/evidence commits,
evaluator provenance, and sha256 digests, bringing the identity-decision probes
under the gate's schema, commit, hash, JSON, and secret checks.

Gates: ./scripts/check-evidence.py -- 2 of 6 sets checked, 0 errors.
Author
Owner

Review — verified in a disposable worktree at c2aa33d

Confirmed good:

  • Manifest hashes match main byte-for-byte (all 6 files), and the gate now reports 2 of 6 set(s) checked, 4 skipped (no manifest) — the silent-skip is at least disclosed.
  • subject_commit f06d855 (#113 merge) and evidence_commit 7cc7ea2 both resolve in history.
  • README.md is hashed too — good, READMEs can carry claims/secrets.

Nits (non-blocking):

  1. evidence_commit convention is inconsistent. Here it is the pre-merge branch commit (7cc7ea2); in jev-layered-memory-reconcile it is the merge commit (92be481). Pick one and state it in the manifest contract, or the field means different things per set.
  2. evaluation_phase: "decision_support" is not in the reference manifest (post_merge), and check-evidence.py does not validate the value. Either document the allowed phases or add an enum check, otherwise typos pass silently.
  3. This PR still leaves the folder-agnostic checks gated behind the manifest — that is what #116 fixes; keep them stacked as planned.

The 4 unmanifested sets are an acknowledged deferral. Approve from my side once #116 lands on top.

**Review — verified in a disposable worktree at `c2aa33d`** Confirmed good: - Manifest hashes match `main` byte-for-byte (all 6 files), and the gate now reports `2 of 6 set(s) checked, 4 skipped (no manifest)` — the silent-skip is at least disclosed. - `subject_commit f06d855` (#113 merge) and `evidence_commit 7cc7ea2` both resolve in history. - README.md is hashed too — good, READMEs can carry claims/secrets. Nits (non-blocking): 1. **`evidence_commit` convention is inconsistent.** Here it is the pre-merge branch commit (`7cc7ea2`); in `jev-layered-memory-reconcile` it is the merge commit (`92be481`). Pick one and state it in the manifest contract, or the field means different things per set. 2. **`evaluation_phase: "decision_support"`** is not in the reference manifest (`post_merge`), and `check-evidence.py` does not validate the value. Either document the allowed phases or add an enum check, otherwise typos pass silently. 3. This PR still leaves the folder-agnostic checks gated behind the manifest — that is what #116 fixes; keep them stacked as planned. The 4 unmanifested sets are an acknowledged deferral. Approve from my side once #116 lands on top.
docs(evidence): align the identity manifest and document the manifest schema
Some checks failed
CI / markdown (pull_request) Successful in 9s
CI / port (pull_request) Successful in 1s
CI / agent-jail-pkgs (pull_request) Successful in 1s
CI / python-tests (pull_request) Successful in 14s
CI / go (pull_request) Successful in 5s
format-check / prettier (pull_request) Successful in 5s
leak-guard / guard (pull_request) Successful in 3s
ci-gate / gate (pull_request) Has been cancelled
d97986f664
Review nits on #115:
- evidence_commit is now f06d855, the merge that brought the evidence into main,
  matching the layered-memory manifest convention (was the branch commit 7cc7ea2).
  Here subject and evidence are the same PR, so the two anchors coincide.
- document the evidence-family manifest schema and the evaluation_phase values
  (pre_merge / post_merge / decision_support) in docs/evidence/README.md.

Gates: check-evidence.py 2 of 6, 0 errors; ci-checks.sh All checks passed.
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
clawdie/colibri!115
No description provided.