Plan the concept-declaration gap closure (INFO-WP-0027)
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

The ownership index is built from artifact titles and owned_concepts frontmatter
only, so the conflict check cannot see a concept that is defined in prose,
assigned an owner by the kernel map and referenced elsewhere by qualified id.
Measured at 209bb5a: 164 index entries against twelve live models and standards
that declare nothing, and 519 bold-form definitions across fifteen live
artifacts that appear in no declaration.

The SecurityCanon boundary review recorded a clean conflict result that could
not have seen itc-org:Authority for exactly this reason; the gap was caught by
hand in SECURITY-WP-0001-T03. The workplan establishes the true denominator,
declares concepts for the twelve silent artifacts, reports coverage as a moving
number with a recorded enforcement level, re-verifies both accepted extension
boundaries against the enlarged index, and resolves residual R-3 as its first
real use. Residual R-2 is explicitly excluded.

Status is proposed: drafted against verified repository state but not yet
reviewed by the owner.

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 22:59:01 +02:00
parent 37ad0c9185
commit d5704f1c4d
2 changed files with 180 additions and 0 deletions

View file

@ -18,6 +18,7 @@
| workplan | INFO-WP-0024 | finished | — | workplans/INFO-WP-0024-corpus-provenance.md |
| workplan | INFO-WP-0025 | finished | — | workplans/INFO-WP-0025-federation-interface.md |
| workplan | INFO-WP-0026 | finished | — | workplans/INFO-WP-0026-interface-canon-boundary-review.md |
| workplan | INFO-WP-0027 | proposed | — | workplans/INFO-WP-0027-concept-declaration-coverage.md |
| workplan | ITC-WP-0001 | finished | — | workplans/ITC-WP-0001-infospace-scaffold-and-seed-placement.md |
| workplan | ITC-WP-0002 | finished | — | workplans/ITC-WP-0002-service-surface-cli-json-api.md |
| workplan | ITC-WP-0003 | finished | — | workplans/ITC-WP-0003-validation-indexes-and-generated-views.md |
@ -64,6 +65,11 @@
| task | INFO-WP-0025-T02 | done | — | workplans/INFO-WP-0025-federation-interface.md |
| task | INFO-WP-0026-T01 | done | — | workplans/INFO-WP-0026-interface-canon-boundary-review.md |
| task | INFO-WP-0026-T02 | done | — | workplans/INFO-WP-0026-interface-canon-boundary-review.md |
| task | INFO-WP-0027-T01 | todo | — | workplans/INFO-WP-0027-concept-declaration-coverage.md |
| task | INFO-WP-0027-T02 | todo | — | workplans/INFO-WP-0027-concept-declaration-coverage.md |
| task | INFO-WP-0027-T03 | todo | — | workplans/INFO-WP-0027-concept-declaration-coverage.md |
| task | INFO-WP-0027-T04 | todo | — | workplans/INFO-WP-0027-concept-declaration-coverage.md |
| task | INFO-WP-0027-T05 | todo | — | workplans/INFO-WP-0027-concept-declaration-coverage.md |
| task | ITC-WP-0001-T01 | done | — | workplans/ITC-WP-0001-infospace-scaffold-and-seed-placement.md |
| task | ITC-WP-0001-T02 | done | — | workplans/ITC-WP-0001-infospace-scaffold-and-seed-placement.md |
| task | ITC-WP-0001-T03 | done | — | workplans/ITC-WP-0001-infospace-scaffold-and-seed-placement.md |

View file

@ -0,0 +1,174 @@
---
id: INFO-WP-0027
type: workplan
title: "Close the concept-declaration gap so ownership conflicts are detectable"
domain: infotech
repo: info-tech-canon
status: proposed
owner: claude
topic_slug: canon-federation
created: "2026-09-20"
updated: "2026-09-20"
flavor: quality
state_hub_workstream_id: "9df4bb6f-b420-597d-acda-5dc39f00c095"
---
# Concept declaration coverage
## Why
`concept_ownership()` in `src/info_tech_canon/generation.py` builds the ownership
index from exactly two sources: each artifact's title, and its
`owned_concepts` frontmatter. A concept that is defined in prose, is referenced
elsewhere by qualified id, and is treated by the corpus as owned is invisible to
it. `concept_ownership_conflict` in `src/info_tech_canon/service.py` can only
fire on what that index contains, so the conflict check covers a minority of the
concepts the canon actually defines.
Measured on the working tree at `209bb5a`:
- the ownership index holds **164 entries** — 81 from artifact titles, 83 from
`owned_concepts` frontmatter;
- **12 live models and standards declare nothing at all**: access-control, data,
devsecops, governance, information-space, landscape, network, observability,
security, task, tagging, and the kernel map;
- a single bold-definition pattern (`**Name** is|—`) finds **519 defined terms
across 15 live artifacts** that appear in no declaration. That pattern is a
lower bound, not a census: it misses numbered-section definitions and
table-defined terms.
This is not theoretical. The SecurityCanon boundary review
(`infospace/interfaces/security-canon-boundary.md`) checked SecurityCanon's seven
declared concepts against every InfoTechCanon `owned_concepts` declaration,
found no conflict, and recorded that as evidence. It could not have found
`itc-org:Authority` — defined at ITC-ORG section 10.17, assigned to Organization
by the kernel map, and referenced by qualified id in the governance model —
because ITC-ORG's frontmatter does not list it. The gap was caught by hand in
SECURITY-WP-0001-T03 (finding F-1) and would otherwise have shipped as a false
clean result.
SCOPE.md already concedes that the calculation "does not establish ownership of
every concept in prose". This workplan converts that concession into a measured
number and closes the part of it that matters for federation.
## What this is not
Not a complete ontology, and not automated concept extraction promoted to
canon. Extraction produces *candidates for review*; a concept becomes owned
because a human or a reviewed change declares it, never because a regex found
it. No concept is renamed, moved or removed by this workplan.
## Establish the true denominator
```task
id: INFO-WP-0027-T01
status: todo
priority: high
state_hub_task_id: "1e139d9a-8883-59af-a163-1c6da903dad6"
```
Write a candidate extractor over live artifacts (excluding `assimilation/` and
`seeds/`, which preserve source rather than define canon). Cover at least the
bold-definition form, the numbered-section-heading form used by ITC-ORG section
10.17 and ITC-IDENT section 2.10, and terms defined in a table's first column.
Output is a review report under `history/`, listing per artifact: declared
concepts, extracted candidates, and the difference. No corpus change and no
frontmatter edit in this task. The report is the input to T02 and the baseline
the coverage check in T03 measures against.
## Declare concepts for the twelve silent artifacts
```task
id: INFO-WP-0027-T02
status: todo
priority: high
state_hub_task_id: "b086abf1-3b36-5b05-a8a8-c8b12c9ab280"
```
Add reviewed `owned_concepts` frontmatter to the twelve live artifacts that
declare none, working from the T01 candidates rather than from the regex output
directly. Each declared concept must be one the artifact genuinely defines, not
one it merely mentions or imports.
Order by federation exposure, not by file size: access-control, security,
devsecops and governance first, since those are the surfaces SecurityCanon,
InterfaceCanon and the small-saas profile reference. The kernel map is a
different case and may end up declaring nothing — it assigns concepts to owners
rather than defining them, and that judgment should be recorded either way.
Expect this task to surface genuine conflicts once the index grows. A conflict
found here is the workplan working, not a regression; resolve each by naming one
owner, as ADHOC-2026-09-20-T01 did for `Scope`.
## Report coverage instead of asserting completeness
```task
id: INFO-WP-0027-T03
status: todo
priority: medium
state_hub_task_id: "48dbd089-a0bf-5d02-b574-b1acf554f658"
```
Extend the validation coverage report added by INFO-WP-0019 with a
concept-declaration coverage metric: per artifact, declared concepts against
extracted candidates, and a corpus total. Wire the extractor from T01 in as the
measurement, so the number moves when the corpus does.
Decide and record the enforcement level. The recommendation is a warning with an
explicit threshold rather than an error: a hard failure on undeclared prose
terms would fail the corpus today for 519 terms, most of which are legitimately
undeclared prose, and would train reviewers to ignore it. An error is
appropriate for one narrower case — an artifact that declares nothing while
defining concepts that another artifact references by qualified id.
## Re-verify the federation boundaries against the enlarged index
```task
id: INFO-WP-0027-T04
status: todo
priority: medium
state_hub_task_id: "b9313ad5-7cb0-5be6-bc28-196f84640895"
```
Re-run the ownership-conflict check against the enlarged declaration set and
re-verify the two accepted extension boundaries: SecurityCanon's nine owned
concepts and twelve declared imports, and InterfaceCanon's. Record the result in
each boundary file, including the correction if the earlier clean result no
longer holds.
Notify security-canon and interface-canon through the State Hub inbox if either
boundary's evidence changes. This is the task that converts the fix into
restored trust in the earlier reviews.
## Resolve R-3 as the first real use
```task
id: INFO-WP-0027-T05
status: todo
priority: low
state_hub_task_id: "eb02c948-6401-5ef7-a341-4563ee73e00c"
```
Residual R-3 from the SecurityCanon review: `Authority` carries two live senses
inside InfoTechCanon — the recognized right held by an actor (ITC-ORG section
10.17) and an external body compelling disclosure (CARING section 10.7 exposure
mode). Declaring both under T02 forces the question rather than leaving it in
prose.
Resolve by disambiguation, not by rename: CARING's exposure mode is a demand
from an authority, and saying so in one sentence is likely enough. The test is
that a reader arriving from `sec-authority:AuthMode` can tell which sense a given
section means.
Residual R-2 — the proposal to generalise CARING section 32 beyond non-human
subjects — is explicitly *not* in this workplan. It is a semantic change to a
release-candidate standard and needs its own review.
## Done when
The ownership index is built from declarations that cover every concept the
twelve silent artifacts define; coverage is reported as a number that moves with
the corpus; the enforcement level is recorded with its rationale; and both
accepted extension boundaries carry a conflict result re-verified against the
enlarged index.