Classify every gap and rank the work (V-725)
Session 2 step 3, and the end of the explanation half. gaps.md compares responsibilities and never package names. Eight classes. The four capability classes are derived from the ledger's gap_class field and rebuild with build_ledger.py. The four architecture classes are read from findings.md and invariants.md, and every entry names the capability or invariant it affects. An entry naming neither is marked non-blocking cleanup in those words, which is the whole of class 8 and its eleven rows. Of 46 v1 capabilities: 5 missing, 21 partial and reachable, 9 built and unreachable, 11 reachable and unverified. The nine unreachable ones are seven config blocks and two compose entries. Not one is a code defect. The ranked list puts phrasing first: speak-as-herself fails all three criteria, and everything that asks the resident model to write a Russian sentence inherits that. His own name not being stored is second. Nine capabilities one config change from reachable is fourth, and it is the highest ratio of capability to work in the list. Items 10, 12 and 13 stall on unresolved invariants and are the owner's call, not work. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -263,7 +263,7 @@ def emit(caps, section_notes, domains, verdicts, impl, arch):
|
||||
dims = dimensions(c, impl.get(c["id"], []), arch, verdicts)
|
||||
L.append(" implementation:")
|
||||
for k in ("designed", "code_present", "wired", "configured",
|
||||
"deployed", "reachable", "verified"):
|
||||
"deployed", "reachable", "verified", "gap_class"):
|
||||
# Quoted: bare yes/no are YAML booleans and the
|
||||
# round-trip check reads them back as True/False.
|
||||
L.append(f" {k}: {dims[k]!r}")
|
||||
@@ -364,6 +364,18 @@ def dimensions(cap, comps, arch, verdicts):
|
||||
|
||||
vs = [verdicts.get(cr["id"], {}).get("verified", "untested")
|
||||
for cr in cap["criteria"]]
|
||||
# The gap class, for docs/capabilities/gaps.md. Order matters: nothing built
|
||||
# outranks nothing reachable, which outranks something reachable and wrong.
|
||||
if out["code_present"] == "no":
|
||||
out["gap_class"] = "capability missing"
|
||||
elif out["reachable"] != "yes":
|
||||
out["gap_class"] = "capability exists but unreachable"
|
||||
elif any(v == "fail" for v in vs):
|
||||
out["gap_class"] = "capability partial"
|
||||
elif all(v == "pass" for v in vs):
|
||||
out["gap_class"] = "none"
|
||||
else:
|
||||
out["gap_class"] = "capability exists but unverified"
|
||||
if vs and all(v == "pass" for v in vs):
|
||||
out["verified"] = "yes"
|
||||
elif any(v == "pass" for v in vs):
|
||||
@@ -526,6 +538,9 @@ def main():
|
||||
if d_["code_present"] == "no" and d_["verified"] != "no":
|
||||
print(f" ANOMALY {c['id']}: nothing carries it and it scores "
|
||||
f"verified={d_['verified']} (a negative criterion passing by absence)")
|
||||
t = _C(dimensions(c, impl.get(c["id"], []), arch, verdicts)["gap_class"]
|
||||
for c in caps if c["scope"] == "v1")
|
||||
print(" v1 gap classes: " + ", ".join(f"{a} {n}" for a, n in sorted(t.items())))
|
||||
used = {x for v in impl.values() for x in v}
|
||||
orphan = sorted(set(arch) - used)
|
||||
print(f" components serving no capability: {len(orphan)}")
|
||||
|
||||
Reference in New Issue
Block a user