fix(521): de-dup 6 overlapped records; guard duplicate metadata blocks; exclude retrieval-eval; complete eval bank [decisions-edit]
- Exclude docs/decisions/retrieval-eval.md from active decision parsing (_NON_DECISION_FILES); its `## N.` eval-question headings were being miscounted as 7 legacy-unmigrated records. - Add decisions_lib.metadata_line_count() + a decisions_validate guard that fails a record with more than one `key:` metadata line, so a stacked-metadata-block migration bug (which the parser silently tolerated by reading only the first block) can't recur unnoticed. TDD: test_duplicate_metadata_block_fails / test_single_metadata_block_passes. - De-duplicate the 6 docs/decisions.md records left with two stacked metadata blocks (scan.getoraddfolder-db-lookup #488, scan.musicvideo-reconciliation #494, scan.jellyfin-mixed-content-library #489, iptv.logo-drives-bug-preset #67, ffmpeg.qsv-decode-encode-split #498, ci.small-lane-git-only server-management#639), merging the union of Signals/paths/issues/Mechanics from both blocks and keeping the richer Rule wording; rationale prose untouched. - Fill in the deferred Q6b row in docs/decisions/retrieval-eval.md now that startup.parallel-orientation is active in docs/decisions.md, scoring it as a real active-vs-superseded question against the archived docs.queue-state-gitea-tracker. - Regenerate docs/decisions/README.md via build_decisions_catalog.py. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -98,7 +98,18 @@ def parse_file(path: Path) -> list[Record]:
|
||||
return parse_text(path.read_text(encoding="utf-8"), path)
|
||||
|
||||
|
||||
_NON_DECISION_FILES = {"README.md", "migration-map.md"}
|
||||
def metadata_line_count(rec: Record) -> int:
|
||||
"""Count how many lines in `rec.body` look like a metadata line (a line starting with
|
||||
`` `key: `` after stripping). A well-formed record has exactly 1; more indicates a
|
||||
duplicate/stacked metadata block left behind by a botched migration."""
|
||||
count = 0
|
||||
for line in rec.body.splitlines():
|
||||
if line.strip().startswith("`key:"):
|
||||
count += 1
|
||||
return count
|
||||
|
||||
|
||||
_NON_DECISION_FILES = {"README.md", "migration-map.md", "retrieval-eval.md"}
|
||||
|
||||
|
||||
def active_files() -> list[Path]:
|
||||
|
||||
Reference in New Issue
Block a user