hub v0.137.0 source + burn-down round 2 in felhom.eu: R-277 R-581 R-600 R-544 R-855 R-134 R-92 R-292 R-599 R-725 R-728 (hub), R-819 R-857 R-555 R-364 R-587 (gates/tools), R-571 R-129 R-124-runbook (docs); 28 rows closed incl. catalog + agent v0.147.0 rows, R-350 merged into R-132, R-888 opened, R-887 mechanism (249 -> 222)
gates / gates (push) Successful in 2m3s
gates / gates (push) Successful in 2m3s
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
+17
-3
@@ -10,7 +10,10 @@ WHAT IT CONVICTS ON (each is a FAIL, exit 1):
|
||||
|
||||
1. an entry with NO source — §4 rule 1: that is a defect, not a claim
|
||||
2. an `evidence:` path that does not resolve — a citation nobody opened
|
||||
3. a `register:` id absent from OPEN-ITEMS.md — a dangling register reference
|
||||
3. a `register:` id in neither OPEN-ITEMS.md nor CLOSED-ITEMS.md — a dangling register
|
||||
reference. A CLOSED row is a valid citation (R-819): a stand that is walked or built is often
|
||||
walked BECAUSE its row closed, and the 2026-10-03 triage moved most cited rows there. Reading
|
||||
only the open register convicted every finished row the page leaned on.
|
||||
4. a `capability-map:` anchor not found — the row it derives from has moved or gone
|
||||
5. status `walked` with no `evidence:` source — THE LOAD-BEARING ONE. "Walked" means done end
|
||||
to end on real hardware with evidence on file. If no evidence document is cited, the page is
|
||||
@@ -30,6 +33,7 @@ import sys
|
||||
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
DEFAULT = os.path.join(ROOT, "documentation", "architecture", "where-felhom-stands.yaml")
|
||||
REGISTER = os.path.join(ROOT, "documentation", "backlog", "OPEN-ITEMS.md")
|
||||
CLOSED = os.path.join(ROOT, "documentation", "backlog", "CLOSED-ITEMS.md")
|
||||
CAPMAP = os.path.join(ROOT, "documentation", "architecture", "00-capability-map.md")
|
||||
DOCS = os.path.join(ROOT, "documentation")
|
||||
|
||||
@@ -69,6 +73,7 @@ def main():
|
||||
path = sys.argv[1] if len(sys.argv) > 1 else DEFAULT
|
||||
claims = load(path)
|
||||
register = open(REGISTER, encoding="utf-8").read()
|
||||
closed = open(CLOSED, encoding="utf-8").read()
|
||||
# Normalise the map before matching: its row labels carry ** and ` markup, so a literal
|
||||
# substring probe against the raw file fails on text that is plainly there. Matching the
|
||||
# rendered words is what the citation means.
|
||||
@@ -78,6 +83,7 @@ def main():
|
||||
|
||||
print("check_stands — %d claim(s) in %s" % (len(claims), os.path.relpath(path, ROOT)))
|
||||
fails = []
|
||||
closed_cites = []
|
||||
|
||||
for c in claims:
|
||||
cid = c["id"]
|
||||
@@ -88,8 +94,15 @@ def main():
|
||||
if not os.path.exists(os.path.join(DOCS, ref)):
|
||||
fails.append("%s: evidence path does not resolve: documentation/%s" % (cid, ref))
|
||||
elif kind == "register":
|
||||
if not re.search(r"\*\*%s\*\*" % re.escape(ref), register):
|
||||
fails.append("%s: register id %s is not in OPEN-ITEMS.md" % (cid, ref))
|
||||
# A row's id cell is `| **R-NNN** |`; the closing ** keeps R-27 from matching R-273.
|
||||
row = r"\*\*%s\*\*" % re.escape(ref)
|
||||
if re.search(row, register):
|
||||
pass
|
||||
elif re.search(row, closed):
|
||||
closed_cites.append("%s → %s" % (cid, ref))
|
||||
else:
|
||||
fails.append("%s: register id %s is in neither OPEN-ITEMS.md nor CLOSED-ITEMS.md"
|
||||
% (cid, ref))
|
||||
elif kind == "capability-map":
|
||||
probe = " ".join(ref.split()[:4])
|
||||
probe = re.sub(r"[`*]", "", probe)
|
||||
@@ -103,6 +116,7 @@ def main():
|
||||
for c in claims:
|
||||
counts[c.get("status")] = counts.get(c.get("status"), 0) + 1
|
||||
print(" statuses: " + ", ".join("%s=%d" % kv for kv in sorted(counts.items())))
|
||||
print(" register citations resolved in CLOSED-ITEMS.md: %d" % len(closed_cites))
|
||||
|
||||
if fails:
|
||||
print("\nCONVICTED — %d problem(s):" % len(fails))
|
||||
|
||||
Reference in New Issue
Block a user