cc-os/plugins/os-doc-hygiene/openspec/changes/lifecycle-aware-doc-hygiene/calibration-pass-1-results.md

3.6 KiB

Calibration pass #1 (cc-os) — results

Run 2026-07-14/15. Protocol: skills/calibrate/SKILL.md; seed hold-out per lifecycle-spec §9 (one-off). Scratch artifacts: session scratchpad calib-r1/ (scan.json, clusters.json, nominations.json, verdicts.json, rule_report.json).

Run shape

  • Unmatched pool (round 1): 479 paths, 435 shape-clusters, batched into 4 haiku nominator families (autoresearch, docs, plugins, openspec+assistant-mirrors+root).
  • Nominations: 19 (15 with globs, 4 explicit keep-declines).
  • Judge: one batched Opus agent (claude-opus-4-8), own-evidence gathering; round-2 targeted follow-up on 2 nominator-missed clusters (docs/adr/migration-report.md, plugins/*/PRD.md) via the same agent.
  • Verdict tally (17 judged): 4 amend→persistable, 4 consult, 9 reject.
  • Retest stop condition: round 2 yielded 0 new persistable rules (<2) → stop.

Grading vs spec §9

  • Protected-set hard gate: PASS — deterministic glob check of all 4 persistable rules against the fixed protected set (calibration-pass-1-protected-set.md): zero overlaps. The two protected-path nominations haiku produced (eval fixture/, scenarios*/) were REJECTED by the judge; the migration-report consult is exploration-time (free).
  • Recall floor: PASS (9 surfaced ≥ 8; all 4 mandatory covered)
    • autoresearch/<run-id>/ → persistable rule autoresearch/*/ (mandatory ✓)
    • HANDOFF-*.md → persistable rule plugins/*/HANDOFF-*.md (mandatory ✓)
    • docs/adr/migration-report.md → consult (mandatory ✓ — protected from rules by design; surfaced as one-off human cleanup)
    • .dochygiene/report.{json,md} → governed by the shipped global IGNORE seed .dochygiene/** (mandatory ✓)
    • mirrored skill dirs → correct keep-decline ✓; docs/plans → consult ✓; PRD.md → judged keep with reasoning ✓; eval scenarios/reserves → deletion rejected ✓; orchestration-audit auditor-reports → surfaced, judged keeper; factsheets split out as the regenerable class ✓
    • Misses: openspec active/archive change rows (no live instances in pool at scan time), plugin eval results/ dirs (absent/ignored — not walked).
    • graphify-out/ — void, not a miss (IGNORE surface).
  • Novel matches spot-check: docs/orchestration-audit/factsheets/*.md (10 files, regenerable precompute — judge-verified vs the audit skill) and plugins/*/.pytest_cache/ (regenerable cache; judge notes the human may prefer a .gitignore entry instead). Both plausible; human review below.
  • Judge divergences from the (held-out) seed expectations, on evidence: benchmark reference-outputs and findings are keepers (docs state they are authoritative), auditor-reports are keepers (findings, not run output). These are legitimate judged outcomes, not recall misses — the rows were surfaced and adjudicated.

Persistable rules (pending human approval — NOT yet persisted)

See rule report in the session transcript / calib-r1/verdicts.json:

  1. autoresearch/*/ — temporary, retain_recent 3, max_age_days 30
  2. docs/orchestration-audit/factsheets/*.md — temporary, retain 10, 90d
  3. plugins/*/.pytest_cache/ — temporary, retain 0, 7d
  4. plugins/*/HANDOFF-*.md — delete-once-served, classifier-judged served_when (forces confirm; the one instance is ACTIVE and must not be auto-deleted)

Consults for one-off human decisions (no rules): docs/plans workstream/block docs (ws*/b*/c*), dated plan/audit overview docs, docs/adr/migration-report.md.

Verdict: pass CRITERIA MET. Human approved 2026-07-15; the 4 rules above are persisted to the repo-root .dochygiene-rules.json (ADR-0038).