docs(canon): ADR-006 canon federation and concept ownership (proposed)
Proposes three federated canons (Custodian, InfoTech, Commerce) with declared concept ownership. Renames identity-canon to commerce-canon in place; identity content emigrates to a new InfoTechCanon model. Assigns all ~60 identity-canon glossary concepts to exactly one owner and lists six unresolved collisions as open questions rather than deciding them silently. Status is proposed — canon changes are review-gated. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
5cadb3a296
commit
56044d63ab
1 changed files with 184 additions and 0 deletions
184
canon/architecture/adr-006-canon-federation-concept-ownership.md
Normal file
184
canon/architecture/adr-006-canon-federation-concept-ownership.md
Normal file
|
|
@ -0,0 +1,184 @@
|
||||||
|
---
|
||||||
|
id: ADR-006
|
||||||
|
type: architecture-decision-record
|
||||||
|
title: "Canon Federation and Concept Ownership Across InfoTech and Commerce"
|
||||||
|
status: proposed
|
||||||
|
decided_by: Bernd Worsch
|
||||||
|
date: "2026-08-16"
|
||||||
|
tags: ["architecture", "canon", "concept-ownership", "info-tech-canon", "commerce-canon", "identity", "orthogonality"]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ADR-006: Canon Federation and Concept Ownership Across InfoTech and Commerce
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
Proposed. Canon changes are review-gated; this ADR is the review artifact for
|
||||||
|
the identity/commerce split and must be accepted before content moves.
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
The ecosystem currently runs two independent canons in the same market domain
|
||||||
|
(`infotech`), with **no cross-reference in either direction**:
|
||||||
|
|
||||||
|
- `info-tech-canon` — InfoTechCanon, v0.6.0, status `service-baseline`. Kernel +
|
||||||
|
12 models + 3 standards, with declared concept ownership per model, an
|
||||||
|
orthogonality rule ("standards can import but not redefine each other"), and a
|
||||||
|
live CLI/JSON/API surface built on `infospace-bench`.
|
||||||
|
- `identity-canon` — documentation-only research repo, category `research`. Three
|
||||||
|
`IDENTITY-WP-*` workplans, all `finished`; no active work since the
|
||||||
|
commercial-identity research pass. ~60 concepts in
|
||||||
|
`canon/CanonicalGlossary.md`.
|
||||||
|
|
||||||
|
Two problems follow.
|
||||||
|
|
||||||
|
**Concept-ownership collision.** `InfoTechCanonOrganizationModel` (`:55`)
|
||||||
|
declares ownership of `Actor, Person, Organization, OrganizationalUnit, Team,
|
||||||
|
Group, Role, Position, Membership, Assignment, Responsibility, Authority,
|
||||||
|
Accountability`. `InfoTechCanonAccessControlModel` (`:106`) declares `Subject,
|
||||||
|
Principal, AccessRole, Permission, ...`. identity-canon independently defines
|
||||||
|
`Actor, Natural Person, Collective Actor, Organization, Group, Role, Membership
|
||||||
|
Relationship, Authenticated Subject, Authorization Principal`. Two canons claim
|
||||||
|
the same concepts — exactly what InfoTechCanon's orthogonality rule exists to
|
||||||
|
prevent.
|
||||||
|
|
||||||
|
**An unowned gap.** `InfoTechCanonAccessControlModel` (`:214`, "Boundary with
|
||||||
|
Identity and Authentication") explicitly pushes identity provisioning,
|
||||||
|
authentication factors, identity proofing, and account lifecycle out of scope,
|
||||||
|
and `:41` does the same for generic organization modelling. So `Account,
|
||||||
|
Identity Record, Identifier, Credential, Claim, Persona, Tenant, Realm,
|
||||||
|
Synonymity Assertion, Assurance Level` belong to no model at all.
|
||||||
|
|
||||||
|
**Business semantics are accumulating in the wrong places.** Roughly a third of
|
||||||
|
identity-canon's glossary is not identity but counterparty/commercial modelling
|
||||||
|
(`Legal Entity, Beneficial Owner, Customer, Vendor, Commercial Commitment,
|
||||||
|
Payment Mandate, Pipeline Pursuit, Counterparty Assurance Gradient, ...`) —
|
||||||
|
hence the repo's `government` secondary domain. Independently,
|
||||||
|
`info-tech-canon/demand/CapabilityProvisionEconomics.md` (status `accepted`,
|
||||||
|
2026-08-15) records procurement and economics demand arriving in `ITC-CAP` from
|
||||||
|
consumer `resource-control`, domain `financials`. Two unrelated donors pushing
|
||||||
|
commercial semantics into technical canon is a domain boundary, not a
|
||||||
|
coincidence. InfoTechCanon's own Purpose/Demand extension names this
|
||||||
|
`ScopePressure`.
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
**1. Three canons, federated by declared ownership.**
|
||||||
|
|
||||||
|
| Canon | Owns | Repo |
|
||||||
|
|---|---|---|
|
||||||
|
| Custodian canon | ecosystem-normative governance: constitution, values, standards, ADRs, charters | `the-custodian/canon/` |
|
||||||
|
| InfoTechCanon | semantics of information-processing systems | `info-tech-canon` |
|
||||||
|
| CommerceCanon | counterparty and commercial-relationship semantics | `commerce-canon` |
|
||||||
|
|
||||||
|
Canons import but do not redefine each other's concepts, applying InfoTechCanon's
|
||||||
|
existing orthogonality rule one level up.
|
||||||
|
|
||||||
|
**2. `identity-canon` is renamed to `commerce-canon`, in place.** Git history,
|
||||||
|
State Hub registration, `.repo-classification.yaml`, and the finished
|
||||||
|
`IDENTITY-WP-*` workplans are retained as provenance for the commercial content
|
||||||
|
that stays. Identity content emigrates; nothing is archived. Structure follows
|
||||||
|
`info-tech-canon` (`canon.yaml`, `infospace/` with kernel/models/standards,
|
||||||
|
`assimilation/`, `mappings/`, `profiles/`) per
|
||||||
|
`InfoTechCanonRepositoryLayoutStandard`.
|
||||||
|
|
||||||
|
**3. Identity becomes an InfoTechCanon model**, at
|
||||||
|
`infospace/models/identity/InfoTechCanonIdentityModel.md` (`itc-ident`),
|
||||||
|
importing rather than redefining upstream concepts. This fills the gap
|
||||||
|
`InfoTechCanonAccessControlModel:214` leaves open.
|
||||||
|
|
||||||
|
**4. Concept ownership is assigned as follows.**
|
||||||
|
|
||||||
|
*Imported by `itc-ident`, owned by `itc-org`:*
|
||||||
|
`Actor` · `Natural Person` → `Person` · `Artificial Agent` → `Agent` ·
|
||||||
|
`Organization` · `Group` · `Role` · `Membership Relationship` → `Membership`
|
||||||
|
|
||||||
|
*Imported by `itc-ident`, owned by `itc-access`:*
|
||||||
|
`Authenticated Subject` → `Subject` · `Authorization Principal` → `Principal`
|
||||||
|
|
||||||
|
This follows identity-canon's own design principles: P1 makes `Actor` the
|
||||||
|
participation root (owned upstream by `itc-org`), and P6 "Keep Authorization
|
||||||
|
Projections Separate" already treats subject/principal as projections rather
|
||||||
|
than identity-owned definitions.
|
||||||
|
|
||||||
|
*Owned by `itc-ident` (new):*
|
||||||
|
`Account` · `Service Account` · `Identity Record` · `Identifier` ·
|
||||||
|
`Scoped Identifier` · `Pseudonymous Identifier` · `Credential` · `Claim` ·
|
||||||
|
`Profile` · `Persona` · `Tenant` · `Realm` · `Synonymity Assertion` ·
|
||||||
|
`Lifecycle State` · the actor-linking relationship taxonomy
|
||||||
|
(`Relationship`, `Affiliation`, `Following`, `Representation`, `Delegation`,
|
||||||
|
`Administration`, `Trust`) · convenience terms `User`, `Subscriber`
|
||||||
|
|
||||||
|
*Owned by `commerce-canon`:*
|
||||||
|
`Legal Entity` · `Legal Person` · `Beneficial Owner` ·
|
||||||
|
`Beneficial Ownership Relationship` · `Beneficial Ownership Exemption` ·
|
||||||
|
`Customer` · `Vendor` · `Commercial Relationship` · `Commercial Commitment` ·
|
||||||
|
`Payment Instrument Reference` · `Payment Mandate` · `Pipeline Pursuit` ·
|
||||||
|
`Commercial Record` · `Counterparty Assurance Gradient` · `Reputation Signal` ·
|
||||||
|
`Performance Evidence` · `Adjudication Outcome` · `Registry Identifier` ·
|
||||||
|
`Proxy Commercial Identifier` · convenience terms `Reputation`,
|
||||||
|
`Customer Account`
|
||||||
|
|
||||||
|
Identifier subtypes demonstrate the intended pattern: `itc-ident` owns
|
||||||
|
`Identifier`; `commerce-canon` owns `Registry Identifier` and `Proxy Commercial
|
||||||
|
Identifier` as specializations of it.
|
||||||
|
|
||||||
|
**5. CommerceCanon grows by demand signal, not speculative authoring.** New
|
||||||
|
content enters through the mechanism InfoTechCanon already runs — a demand
|
||||||
|
signal with named consumer evidence (see `demand/`). Plausible future consumers
|
||||||
|
(`fin-hub`, `target-revenue`, `adaptive-pricing`, `qonto-assistant`) must pull;
|
||||||
|
the canon does not push.
|
||||||
|
|
||||||
|
**6. The Federated Organization Standard stays in Custodian canon.**
|
||||||
|
`canon/standards/federated-organization-standard_v1.0.md` is ecosystem-normative
|
||||||
|
organizational architecture, human-gated — not commercial vocabulary. If it ever
|
||||||
|
moves, it becomes an InfoTechCanon organization standard, not a CommerceCanon one.
|
||||||
|
|
||||||
|
## Open questions
|
||||||
|
|
||||||
|
These are unresolved collisions that must be settled before the affected
|
||||||
|
concepts move. They are deliberately listed rather than silently decided.
|
||||||
|
|
||||||
|
1. **`Scope`.** identity-canon P3 makes it first-class; `itc-access` uses "access
|
||||||
|
scope" throughout. Does `itc-ident` own `Scope` with `itc-access` importing,
|
||||||
|
or the reverse?
|
||||||
|
2. **`Assurance Level` vs `itc-gov` `Assurance`.** Specialization or distinct
|
||||||
|
concept? `Counterparty Assurance Gradient` builds on whichever wins.
|
||||||
|
3. **`Evidence Source` vs `itc-gov` `Evidence`.** Likely an `itc-gov`
|
||||||
|
specialization rather than an identity-owned concept.
|
||||||
|
4. **`Relationship Tuple`.** A Zanzibar/OpenFGA-style authorization primitive —
|
||||||
|
plausibly `itc-access`, not `itc-ident`.
|
||||||
|
5. **`Adjudication Outcome` vs `itc-access` `AuthorizationDecision` and `itc-gov`
|
||||||
|
`Decision`.** Three candidate owners.
|
||||||
|
6. **`Community`, `Family Or Household`.** Social collectives absent from
|
||||||
|
`itc-org`, which covers enterprise structures (`Team`, `Group`,
|
||||||
|
`OrganizationalUnit`). Recommend extending `itc-org` rather than placing them
|
||||||
|
in `itc-ident`.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
**Positive.** Every concept gains exactly one owner. The identity gap that
|
||||||
|
`itc-access` explicitly declines is filled. Commercial semantics get a home
|
||||||
|
before they accrete further into technical canon. A dormant research repo with
|
||||||
|
no inbound references becomes a canon with declared consumers. A second canon
|
||||||
|
tests whether `InfoTechCanonRepositoryLayoutStandard` is a real standard or
|
||||||
|
merely InfoTechCanon's own shape described back to itself.
|
||||||
|
|
||||||
|
**Negative.** This is a concept-ownership reconciliation, not a file move: the
|
||||||
|
first ~15 glossary entries must be rewritten as imports. Three canons cost more
|
||||||
|
coordination than one. The `identity-canon` name disappears from tooling,
|
||||||
|
bookmarks, and any external reference.
|
||||||
|
|
||||||
|
**Risks.** CommerceCanon could repeat identity-canon's failure mode — dormant,
|
||||||
|
zero consumers, drifting — if it launches as a scaffold. Mitigated by decision 2
|
||||||
|
(it opens holding real, research-backed content) and decision 5 (growth requires
|
||||||
|
consumer evidence).
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
- ADR-001 — workplans originate as repo files; hub is a read model
|
||||||
|
- ADR-005 — cross-repo workplans live in dedicated project repos
|
||||||
|
- `info-tech-canon/infospace/models/organization/InfoTechCanonOrganizationModel.md:55`
|
||||||
|
- `info-tech-canon/infospace/models/access-control/InfoTechCanonAccessControlModel.md:106`, `:214`
|
||||||
|
- `info-tech-canon/infospace/models/governance/InfoTechCanonGovernanceModel.md:107`
|
||||||
|
- `info-tech-canon/demand/CapabilityProvisionEconomics.md`
|
||||||
|
- `identity-canon/canon/CanonicalGlossary.md`, `canon/DesignPrinciples.md`
|
||||||
Loading…
Add table
Add a link
Reference in a new issue