Declare concepts and review boundaries for the silent artifacts (T02)
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 3s

Twelve of the thirteen artifacts that declared nothing now declare what they
define, together with the map-assigned concepts the Organization Model was
missing and the Landscape seed concepts the extractor cannot see because they
are listed rather than defined in prose. The ownership index grows from 164
entries to 750, undeclared prose definitions fall from 637 to 57, and there are
no ownership conflicts. The 57 that remain are overlaps this round assigned to
another owner: imports, each recorded in a boundary review.

The kernel map declares nothing, deliberately, because it assigns concepts to
owners rather than defining them. It is now the only silent artifact and the
suite asserts that, so an artifact added without declarations fails.

itc-org:Authority is declared, with Actor, Ownership, Membership, Role,
Responsibility and Accountability, which SecurityCanon and the identity model
already treat as organization-owned. The regression test that previously
asserted the blind spot now asserts that the kernel map's assignment and the
declaration agree.

Profile is deliberately left undeclared. The kernel map assigns it to Core, the
identity model owns it under accepted CUST-ADR-006, and Observability defines a
runtime performance profile. Three senses need a decision, not a declaration, so
it is recorded as open rather than forced.

Eleven boundary reviews are added beside the artifacts they describe, in the
shape the identity model has used since INFO-WP-0021. The largest finding is
that Core and the Information Space model restate eight provenance concepts in
nearly identical words; Core owns them and Information Space imports. Label,
Drift, Summary and Attribute are resolved by disambiguation rather than
transfer.

make check passes with 50 tests, clean validation, no stale generated assets.

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

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 3588@bnt-lap001
Assistant-Session: 24b80f66-e5a7-4e61-99fe-2d422e6d17da
This commit is contained in:
tegwick 2026-09-20 23:19:22 +02:00
parent 164993d4e2
commit f7b17b83f2
46 changed files with 5665 additions and 39 deletions

View file

@ -9,6 +9,7 @@ import pytest
import yaml
from info_tech_canon.cli import main
from info_tech_canon.generation import concept_ownership
from info_tech_canon.maintenance import (
check_generated,
concept_candidates,
@ -121,16 +122,22 @@ def test_missing_mapping_schema_is_a_validation_finding(corpus):
assert any(e["code"] == "mapping_schema_unreadable" for e in payload["errors"])
def test_concept_candidates_find_prose_definitions_the_declarations_miss():
def test_authority_is_declared_where_the_kernel_map_assigns_it():
"""The gap that let itc-org:Authority pass the SecurityCanon conflict check."""
report = concept_candidates(load_context())
organization = next(item for item in report["artifacts"]
if item["artifact"] == "model/organization")
ownership = concept_ownership(load_context())
owners = {item["concept"]: item["owner"] for item in ownership["concepts"]}
assert "Authority" in organization["undeclared"]
assert organization["undeclared_count"] > organization["declared_count"]
assert report["undeclared_total"] > 0
assert "model/security" in report["silent_artifacts"]
assert owners["Authority"] == "model/organization"
assert owners["Actor"] == "model/organization"
assert not ownership["ownership_conflicts"]
def test_only_the_kernel_map_declares_no_concepts():
"""It assigns concepts to owners rather than defining them (T02)."""
report = concept_candidates(load_context())
assert report["silent_artifacts"] == ["kernel/itc-kernel-map"]
assert report["undeclared_total"] < report["candidate_total"] / 2
def test_concept_candidates_ignore_preserved_source():