fix(scaffolding): contract scope resolver recognizes H-meta entity kinds
Contract BUILDER-2026-10-04T07:14:03Z-cli, closed: module:construction_decision correctly_predicted, zero genuinely_unexpected_new. T4.7 row-1 closure flagged rust-crate:query_memory resolving as kind=unresolved — classify_surface's prefix set predated the H-meta entity classes (rust-crate:/go-surface:/config:/workflow:), so spine-modeled surfaces could never close correctly_predicted. Red-first: test_hmeta_kind_prefixes_classify_as_structural_entity failed pre-fix; identity-resolution path needed no change (works for any id present in an authority). Regression frozen in test_construction_decision.py (2 new tests, 21/21 file green, decision neighborhood 107/107).
This commit is contained in:
1 parent
567fd39937
commit
57eaa8f383
3 files changed
+10172
No files matched your search
@@ -125,6 +125,14 @@ _SURFACE_UI = "ui:"
|
||||
_SURFACE_REGION = "region:"
|
||||
_SURFACE_CONTRACT = "contract:"
|
||||
_SURFACE_MODULE = "module:"
|
||||
# H-meta entity classes (spine meta-scaffold, 567fd39): the spine models
|
||||
# these kinds as first-class entities, so contract scope resolution must
|
||||
# recognize them as structural ids too — an unrecognized kind can never
|
||||
# close as correctly_predicted (T4.7 row-1 flag).
|
||||
_SURFACE_RUST_CRATE = "rust-crate:"
|
||||
_SURFACE_GO_SURFACE = "go-surface:"
|
||||
_SURFACE_CONFIG = "config:"
|
||||
_SURFACE_WORKFLOW = "workflow:"
|
||||
|
||||
|
||||
def classify_surface(surface: str) -> str:
|
||||
@@ -141,6 +149,10 @@ def classify_surface(surface: str) -> str:
|
||||
_SURFACE_CONTRACT,
|
||||
_SURFACE_MODULE,
|
||||
_SURFACE_CAPABILITY,
|
||||
_SURFACE_RUST_CRATE,
|
||||
_SURFACE_GO_SURFACE,
|
||||
_SURFACE_CONFIG,
|
||||
_SURFACE_WORKFLOW,
|
||||
)
|
||||
):
|
||||
return "structural_entity"
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -373,3 +373,38 @@ def test_merge_build_new_never_upgrades_from_insufficient():
|
||||
insuff = {"resolution": "INSUFFICIENT_EVIDENCE", "rationale": "weak"}
|
||||
merged = cd.merge_resolutions([build, insuff])
|
||||
assert merged["resolution"] == "INSUFFICIENT_EVIDENCE"
|
||||
|
||||
|
||||
# ── H-meta resolver vocabulary (BUILDER-2026-10-04T07:14:03Z-cli) ──────────
|
||||
# Regression: T4.7 row-1 closure flagged rust-crate: ids resolving as
|
||||
# kind=unresolved — the classifier's prefix set predated the H-meta entity
|
||||
# classes, so spine-modeled surfaces could never be correctly_predicted.
|
||||
|
||||
HMETA_KIND_IDS = [
|
||||
"rust-crate:query_memory",
|
||||
"rust-crate:evidence_provenance",
|
||||
"go-surface:rune-entry",
|
||||
"config:go-version.txt",
|
||||
"workflow:ci.yml",
|
||||
]
|
||||
|
||||
|
||||
def test_hmeta_kind_prefixes_classify_as_structural_entity():
|
||||
for eid in HMETA_KIND_IDS:
|
||||
assert cd.classify_surface(eid) == "structural_entity", (
|
||||
f"{eid}: H-meta entity kinds must classify as structural_entity, "
|
||||
f"got {cd.classify_surface(eid)!r}"
|
||||
)
|
||||
|
||||
|
||||
def test_hmeta_kind_ids_resolve_by_identity_against_authority():
|
||||
doc = ss.new_doc()
|
||||
for eid in HMETA_KIND_IDS:
|
||||
kind = eid.split(":", 1)[0]
|
||||
ss.add_entity(doc, id=eid, kind=kind, identities={},
|
||||
evidence_refs=["fixture"])
|
||||
for eid in HMETA_KIND_IDS:
|
||||
out = cd.resolve_surface(eid, "structural_entity", {"spine": doc})
|
||||
assert out["resolved"], f"{eid}: {out['unresolved_reason']}"
|
||||
assert out["resolved"][0]["entity_id"] == eid
|
||||
assert out["resolved"][0]["via"] == "identity"
|
||||
Reference in new issue
Block a user