ci(545): require a **Signals:** line on decision records #547

Merged
timothy merged 1 commits from fix/545-signals-required into main 2026-07-21 20:58:04 +02:00
Owner

The decisions-guard validator enforced lifecycle metadata but not the **Signals:** line — which is what MemPalace's keyword recall matches on. A record without it ingests with weak recall metadata and yields confident false-negatives for the "MemPalace to find, file to confirm" workflow.

  • Adds signals to REQUIRED_META (missing/empty **Signals:** now fails like a missing key).
  • Non-breaking: all 114 active + 2 archive records already carry Signals. Archive records intentionally out of scope.
  • Tests: _rec() default + missing/empty/present cases (29 pass). Validator green on the real corpus; ruff + pyright clean.
  • docs/decisions.md header + Enforcement note the requirement and why.

Independent cold review: MERGEABLE (non-vacuity empirically confirmed).

fixes #545

The `decisions-guard` validator enforced lifecycle metadata but not the `**Signals:**` line — which is what MemPalace's keyword recall matches on. A record without it ingests with weak recall metadata and yields confident false-negatives for the "MemPalace to find, file to confirm" workflow. - Adds `signals` to `REQUIRED_META` (missing/empty `**Signals:**` now fails like a missing key). - Non-breaking: all 114 active + 2 archive records already carry Signals. Archive records intentionally out of scope. - Tests: `_rec()` default + missing/empty/present cases (29 pass). Validator green on the real corpus; ruff + pyright clean. - `docs/decisions.md` header + Enforcement note the requirement and why. Independent cold review: MERGEABLE (non-vacuity empirically confirmed). fixes #545
timothy added 1 commit 2026-07-21 20:20:00 +02:00
ci(545): require a **Signals:** line on decision records
PR Gates / CI image pin matches docker/ci (pull_request) Successful in 13s
PR Gates / Docs update reminder (pull_request) Successful in 22s
PR Gates / decisions lifecycle (pull_request) Successful in 37s
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 7m23s
Build ErsatzTV Image / API docs in sync (OpenAPI + endpoint index) (pull_request) Successful in 7s
Build ErsatzTV Image / Formatting (changed .cs conform to .editorconfig) (pull_request) Successful in 6s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 19m0s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Has been skipped
Build ErsatzTV Image / Functional E2E (curl contracts) (pull_request) Successful in 15m21s
0ef053a209
The decisions-guard validator enforced lifecycle metadata (key/status/since/
supersedes/superseded-by + reciprocal links) but not the **Signals:** line —
which is exactly what MemPalace's keyword recall matches on. A record without
it ingests with weak recall metadata and produces confident false-negatives
for the "MemPalace to find, file to confirm" retrieval workflow.

Add "signals" to REQUIRED_META so a migrated record with a missing or empty
**Signals:** line fails the same way a missing key does. All 114 active + 2
archive records already carry a Signals line, so this is non-breaking on the
current corpus. Archive records are intentionally out of scope (recall targets
the active corpus).

- scripts/decisions_validate.py: signals in REQUIRED_META (+ rationale comment)
- scripts/tests/test_decisions_validate.py: _rec() default + missing/empty/present cases
- docs/decisions.md: header + Enforcement note the requirement and why

fixes #545

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Author
Owner

Independent cold review of the pushed diff: MERGEABLE. signals required for active/migrated records only; attribute/label names match; whitespace-only and missing both caught; new tests non-vacuous (empirically confirmed by toggling REQUIRED_META); archive exclusion is intended scope; docs accurate.

Review-verdict: MERGEABLE @ 0ef053a209

Independent cold review of the pushed diff: MERGEABLE. signals required for active/migrated records only; attribute/label names match; whitespace-only and missing both caught; new tests non-vacuous (empirically confirmed by toggling REQUIRED_META); archive exclusion is intended scope; docs accurate. Review-verdict: MERGEABLE @ 0ef053a209dc5c5ce4cdf7aba3944923c4461842
timothy merged commit 04d3eb2dbc into main 2026-07-21 20:58:04 +02:00
timothy deleted branch fix/545-signals-required 2026-07-21 20:58:04 +02:00
Sign in to join this conversation.