Skip to content

Commit 89bc63c

Browse files
author
miranov25
committed
Phase 13.49.DF v1.0: Capability Matrix Traceability (link + HTML + visual).
ADF-parity columns (Tests/Inv) + orthogonal Visual column + 👁 badge in .md. New CAPABILITY_MATRIX.html: per-feature expandable tests-panel, status x visual x category filters (AND), expansion-state preserved across filters. 4 meta-tests (M.1-M.4) + KNOWN_UNCLAIMED governance (64 seeded, per source phase 13.27/13.28/13.32, not blanket OPEN). 4 dangling refs repaired in feature_taxonomy.py (M.1 no-grandfathering). +1 META.capability_matrix feature claiming the 4 M-tests. Test/tooling-only; no library source. run_tests.sh: --phase derivation from latest _END tag (corrected glob PHASE_[0-9]*_DF*_END — the v1.2 spec text had a broken middle-underscore glob; fix verified against the real tag set). Phase 13.48 prose-grep tightening + BLOCK->WARN bundled. Normalization fixes (D-K, D-L per Opus2/Sonnet53_R2 panel finding): robust basename split('/')[-1] in three sites (load_test_results, load_collected_tests, _collected_test_ids) — was env-dependent, broke when pytest rootdir was higher than dfdraw. All three sites verified post-fix; grep confirms no 4th instance. Spec: PHASE_13_49_DF_v1_2_CapabilityMatrixTraceability_Proposal.md (Sonet50 v1.2 [!] APPROVED; Sonet51 v1.1 CRR [!] APPROVED 8/8). Predecessor: PHASE_13_48_DF_END @ 9f61260 (gate 1034). Gate: 1034 -> 1038. Features 120 -> 121 (META.capability_matrix). Verified 56 -> 57. Unmatched 451 -> 448. KNOWN_UNCLAIMED seed: 64.
1 parent 9f61260 commit 89bc63c

7 files changed

Lines changed: 3947 additions & 258 deletions

File tree

UTILS/dfextensions/dfdraw/docs/CAPABILITY_MATRIX.html

Lines changed: 2151 additions & 0 deletions
Large diffs are not rendered by default.

UTILS/dfextensions/dfdraw/docs/CAPABILITY_MATRIX.md

Lines changed: 840 additions & 172 deletions
Large diffs are not rendered by default.

UTILS/dfextensions/dfdraw/run_tests.sh

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,18 @@ if [[ "$MODE" != "quick" ]]; then
266266
MATRIX_ARGS=""
267267
[[ -f "$JSON_REPORT" ]] && MATRIX_ARGS="--test-results $JSON_REPORT"
268268

269+
# Phase 13.49.DF §9 D-B: derive --phase from the most recent _END tag.
270+
# NB: the glob is 'PHASE_[0-9]*_DF*_END' (no underscore between _DF and *).
271+
# The natural-looking pattern '_DF_*_END' would require >=1 char between
272+
# _DF_ and _END and silently miss the plain _END tags (most phases).
273+
# Verified at v1.2 implementation against the real tag set.
274+
PHASE_FOR_MATRIX=$(git tag --list 'PHASE_[0-9]*_DF*_END' --sort=-creatordate 2>/dev/null | head -1)
275+
if [[ -n "$PHASE_FOR_MATRIX" ]]; then
276+
MATRIX_ARGS="$MATRIX_ARGS --phase $PHASE_FOR_MATRIX"
277+
else
278+
MATRIX_ARGS="$MATRIX_ARGS --phase unknown"
279+
fi
280+
269281
python3 "$MATRIX_SCRIPT" $MATRIX_ARGS 2>&1 || \
270282
echo "⚠️ Capability matrix generation had errors"
271283

@@ -406,11 +418,11 @@ if git rev-parse --is-inside-work-tree &>/dev/null \
406418
&& [[ -z "$DFDRAW_SKIP_TAG_DRIFT_CHECK" ]]; then
407419

408420
# _END tags claimed in the history doc vs _END tags actually in the repo.
409-
# A phase closure is *claimed* in the history by declaring it as a tag, e.g.
410-
# "tag \`PHASE_X_END\`" or "**Tag:** \`PHASE_X_END\`". Match ONLY that form
411-
# (a PHASE_*_END inside backticks, preceded within a few chars by the word
412-
# "tag"), so the check does not flag PHASE_*_END tokens merely *mentioned* in
413-
# prose (e.g. an example tag inside a sentence describing this very check).
421+
# Phase 13.48 grep tightening — scope to tag-DECLARATION context only.
422+
# A phase closure is *claimed* by writing "tag `PHASE_X_END`" or
423+
# "**Tag:** `PHASE_X_END`". The earlier loose grep matched any PHASE_*_END
424+
# token anywhere in the doc, including prose mentions (e.g. an example tag
425+
# in a sentence describing this very check) -> false positives.
414426
DOC_END_TAGS=$(grep -ioE 'tag[^`]{0,12}`PHASE_[A-Z0-9_]+_END`' "$PHASE_HISTORY_FILE" \
415427
| grep -oE 'PHASE_[A-Z0-9_]+_END' \
416428
| sort -u || true)
@@ -422,16 +434,14 @@ if git rev-parse --is-inside-work-tree &>/dev/null \
422434
<(printf '%s\n' "$REPO_END_TAGS") | grep -v '^$' || true)
423435

424436
if [[ -n "$MISSING_TAGS" ]]; then
425-
# NON-BLOCKING (Phase 13.48 design change). Rationale: doc<->tag drift is
426-
# a documentation-hygiene signal, not a test result. Blocking the bundle
427-
# on a heuristic grep of a prose file is fragile (a prose mention or a
428-
# format change can mis-fire) and creates override pressure — a new coder
429-
# who hits a hard wall reaches for DFDRAW_SKIP_... and the bypass is then
430-
# invisible to reviewers, so the check quietly becomes dead weight.
431-
# Instead: WARN loudly AND record the warning in the SUMMARY so the drift
432-
# itself travels in reviewer.zip for the architect/reviewers to see and
433-
# resolve. The bundle is still built. (A false negative here is now
434-
# low-harm: a missed warning, not a false sense of a passed gate.)
437+
# NON-BLOCKING (Phase 13.48 design — committed as df3057a3): doc<->tag drift
438+
# is a documentation-hygiene signal, not a test result. Hard-blocking the
439+
# bundle on a heuristic grep of a prose file is fragile and creates override
440+
# pressure (the bypass would become invisible -> dead-weight check). Instead:
441+
# WARN loudly AND record the warning in SUMMARY so the drift itself travels
442+
# in reviewer.zip for architect/reviewers to see and resolve. Bundle still
443+
# builds. A false negative here is low-harm — a missed warning, not a false
444+
# sense of a passed gate. (Restored at 13.49 implementation after a regression.)
435445
{
436446
echo ""
437447
echo "⚠️ TAG DRIFT (non-blocking) — PHASE_HISTORY.md declares phase-closure"

0 commit comments

Comments
 (0)