Task — engineering-spec@1

"TRACE citation truth — SKILL-202 and gates G7/G8"

doneTASK-IMP-145
module improvement · class product · priority p2 · created 2026-07-25 · shipped null
depends on none · blocks none

TASK-IMP-145: TRACE citation truth for the skill quality floor

Summary

TASK-SKILL-202 is done and every one of its seven acceptance criteria cites tools/install/tests/test_skill_floor.sh — a file that was never created. The floor it describes shipped as scripts/tests/test_skill_stub_lint.sh and is green. This task repoints the citations at the suite that exists, adds the three small checks needed so no criterion cites nothing, records the one half that stayed deferred, and fixes the same stale paths where benchmark gates G7 and G8 inherited them.

Problem

TASK-SKILL-202's own testing-evidence.md names the divergence under the heading "Cited suite (TRACE-004) — path residual": the implementation put the floor in scripts/tests/test_skill_stub_lint.sh (7 tests, green, auto-registered by run_all.sh's glob), while the spec's new_files: and all seven AC lines kept naming tools/install/tests/test_skill_floor.sh plus a tools/install/check-skill-floor.sh checker whose build wiring was the optional F4 half and never landed. Gate-1 accepted the deviation and asked gate-2 to confirm; gate-2 accepted the task and the citations stayed.

Two other surfaces inherited the same paths: docs/verification/benchmark-gates.md (G7 and G8 Owner + Checked-files rows) and the embedded G7/G8 definitions inside TASK-IMP-140's spec, which is that doc's content contract.

So the corpus carries a shipped task whose acceptance resolves nowhere and two benchmark gates naming a checker nobody can run. verify-goals.mjs refuses exactly this shape for goal predicates ("the acceptance cites a test that no longer exists, which IS the finding"); spec-level citations have no such guard, which is why this one survived a done flip.

Proposed Solution

Repoint each SKILL-202 criterion at the real function that proves it and correct the new_files: list to what shipped. Three clauses have no matching test today — §1.1 (delist + allowlist cleanliness), §1.2 (the certify-nfrs.md degradation notice) and §1.7 (the CHANGELOG record) — so rather than let those ACs cite nothing, add t08_delist_and_allowlist_clean, t09_workflow_degrades_loud and t10_changelog_records_floor to the existing suite: three greps over build.sh, chain-allowlist.txt, certify-nfrs.md and CHANGELOG.md, in the suite's existing counter/exit style. Rewrite SKILL-202 §1.5/§1.6 to describe the as-built mechanism (the detector is the suite's floor_check; the standalone checker and its build wiring stayed deferred) and record that deviation in source_decisions, so the normative text stops promising a file the repo does not have. Finally, correct the G7/G8 Owner and Checked-files rows in benchmark-gates.md and in TASK-IMP-140's embedded definitions, leaving severities and tiers untouched so test_benchmark_gates.sh::t01's spec↔doc cross-check keeps passing.

Alternatives Considered

Success Metrics

Scope

In scope: the three new suite functions, SKILL-202's frontmatter + §1.5/§1.6 + AC block, the G7/G8 rows in benchmark-gates.md and TASK-IMP-140's spec, CHANGELOG.

Out of scope / Non-Goals

Dependencies

None. TASK-SKILL-202 and TASK-IMP-140 are both done; this task edits their citation surfaces only, changing no clause's meaning.

AI Authorship Disclosure

1. Description

Acceptance Criteria

Test plan

  1. bash scripts/tests/test_skill_stub_lint.sh
  2. bash scripts/tests/test_benchmark_gates.sh
  3. bash scripts/tests/run_all.sh
  4. bash .cyberos/cuo/gates/run-gates.sh

3. Edge cases