Apply GH-DEC-2026-017 to the layer declaration

INTENT.md governs; layer.yaml is now marked derived (derived: true,
derived_from: INTENT.md). standard_version is removed from both forms
(A12). The checker changes in the same commit: it no longer requires or
prints standard_version, rejects it in either form, requires the derived
markers, and checks both layer values against the closed four-token
vocabulary after an ASCII case-fold (A9). Layer values are left as
spelled (INTENT.md Engine, layer.yaml engine); they agree once folded.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 63291@bnt-lap001
Assistant-Session: 8bd77868-ca68-4f49-bb1e-d539ecc0d703
This commit is contained in:
tegwick 2026-09-21 07:34:22 +02:00
parent 00ffbd6dfe
commit cd54d8e716
4 changed files with 104 additions and 10 deletions

View file

@ -11,7 +11,6 @@ INTENT = """---
layer: Engine
role: PIP
standard: netkingdom-security-layer-model
standard_version: "0.7"
---
# INTENT
@ -21,7 +20,8 @@ DECL = {
"layer": "engine",
"role": "pip",
"repository": "zone-engine",
"standard_version": "0.7",
"derived": True,
"derived_from": "INTENT.md",
"tooling_contacts": [],
"unowned_capabilities": [],
}
@ -45,13 +45,30 @@ class LayerDeclarationTest(unittest.TestCase):
self.assertEqual(decl["repository"], "zone-engine")
self.assertEqual(decl["layer"], "engine")
self.assertEqual(decl["role"], "pip")
self.assertEqual(decl["standard_version"], "0.7")
self.assertIs(decl["derived"], True)
self.assertEqual(decl["derived_from"], "INTENT.md")
self.assertEqual(decl["tooling_contacts"], [])
self.assertIsNone(decl.get("pep_stance"))
self.assertEqual(intent["layer"].lower(), "engine")
self.assertEqual(intent["role"].lower(), "pip")
self.assertEqual(layer.check_declaration_agrees(decl, intent), [])
def test_the_two_forms_agree_once_case_is_folded(self):
"""A9/A11: assert the fold, not equality; nothing is re-spelled."""
decl = yaml.safe_load(layer.DECL.read_text())
intent = layer.load_intent()
self.assertEqual(layer._norm(decl["layer"]), layer._norm(intent["layer"]))
self.assertIn(layer._norm(intent["layer"]), layer.LAYER_VOCABULARY)
def test_no_declaration_carries_a_standard_version(self):
"""GH-DEC-2026-017 §5 / A12, in both forms."""
decl = yaml.safe_load(layer.DECL.read_text())
self.assertNotIn("standard_version", decl)
self.assertNotIn("standard_version", layer.load_intent())
def test_vocabulary_is_the_closed_four_tokens(self):
self.assertEqual(layer.LAYER_VOCABULARY, {"taxonomy", "tooling", "engine", "staff"})
def test_checker_passes_on_the_real_tree(self):
code, errors, _reports = layer.evaluate()
self.assertEqual(code, 0, errors)
@ -76,6 +93,43 @@ class LayerCheckerFailureTest(unittest.TestCase):
self.assertEqual(code, 2)
self.assertTrue(any("disagrees" in item for item in errors))
def test_case_only_difference_is_conforming(self):
with TemporaryDirectory() as directory:
root = Path(directory)
_write_tree(root, intent=INTENT.replace("layer: Engine", "layer: ENGINE"))
code, errors, _ = layer.evaluate(root=root)
self.assertEqual(code, 0, errors)
def test_standard_version_in_either_form_is_exit_2(self):
with TemporaryDirectory() as directory:
root = Path(directory)
_write_tree(root, decl={**DECL, "standard_version": "0.7"})
code, errors, _ = layer.evaluate(root=root)
self.assertEqual(code, 2)
self.assertTrue(any("standard_version" in item for item in errors))
with TemporaryDirectory() as directory:
root = Path(directory)
_write_tree(root, intent=INTENT.replace("role: PIP\n", 'role: PIP\nstandard_version: "0.7"\n'))
code, errors, _ = layer.evaluate(root=root)
self.assertEqual(code, 2)
self.assertTrue(any("standard_version" in item for item in errors))
def test_sidecar_not_marked_derived_is_exit_2(self):
for bad in ({**DECL, "derived": False}, {**DECL, "derived_from": "layer.yaml"}):
with TemporaryDirectory() as directory:
root = Path(directory)
_write_tree(root, decl=bad)
code, _errors, _ = layer.evaluate(root=root)
self.assertEqual(code, 2)
def test_token_outside_vocabulary_is_exit_2(self):
with TemporaryDirectory() as directory:
root = Path(directory)
_write_tree(root, intent=INTENT.replace("layer: Engine", "layer: surface"))
code, errors, _ = layer.evaluate(root=root)
self.assertEqual(code, 2)
self.assertTrue(any("closed vocabulary" in item for item in errors))
def test_undeclared_tooling_client_is_exit_1(self):
with TemporaryDirectory() as directory:
root = Path(directory)