ADR-0127: The Base-QMS Layers — One Library, Derived Adaptations, Local Records¶
- Status: accepted (2026-08-27 — the rows 28/29 sitting: "I follow all your recommendations", with his own better alternative for the tool-operational documents — import-then-invalidate-then-replace — adopted after scrutiny: "J1 confirmed")
- Date: 2026-08-27
- Deciders: Nicolas Burri
- Relates to: ADR-0031/V016 (BASE_READ — the released-face-only read of the one GLOBAL scope,
REQ-SEP-010/REQ-ADM-007), V017 (derive-source, operation-scoped source reads, the
supersedes/superseded-byrelation kinds §4 leans on), ADR-0125 §6 + Amendment 1 (the distribution mechanism and the id adoption the migration rides), ADR-0113/V106 (the one-shot window §5's runbook discipline protects), ADR-0126 (the dissolution lifecycle this composes with), ADR-0112 (element kinds — the row-29 refusal's subject), ADR-0108 §3 (offer transparency, inherited by §6's demotion sentence), open decisions 28/29 (both his 3am questions, now closed).
Citation correction (2026-09-04, ADR-coherence review §2.5). "Offers say when they filter" is attributed here (header Relates-to, and §6's demotion sentence) to ADR-0108 §3 — but ADR-0108 §3 is the persons-are-global / email-is-the-match-key rule. The offer-transparency sentence is ADR-0124 §5 ("the offer says when it filters", finding 26g). Read both citations as ADR-0124 §5; the rule §6 inherits is unchanged.
Context¶
Customer projects live in dedicated customer organizations, but the governing QMS is its owner's (row 28). Copying it everywhere makes every copy stale; referencing it across orgs needs a principled read. Independently (row 29): deriving a document into a scope that has not activated the element kinds its content carries needs a defined answer. The machinery for both largely exists — BASE_READ, derive-source, SOURCE_UPDATED fan-out — what was missing is the RULING on how a real corpus maps onto it, and the consumption grammar.
Decision¶
1. Three layers, defined by CONSUMPTION, not location¶
- The base library is the one GLOBAL scope — structurally unique by type (V016 resolves it
by
type = 'GLOBAL', never by configuration), fully governed as a working scope by the QMS owner, whose RELEASED face is the only face any other scope reads (BASE_READ; drafts invisible below the application, by RLS). Universally governing documents are READ IN PLACE: zero copies, always current. - The derive layer: template masters live in the base library too; a project that needs an
adapted version DERIVES it (copy into the project's own scope with pinned provenance), adapts
and releases under its own policies, and receives
SOURCE_UPDATED/SOURCE_REVOKEDtasks when the master moves — drift is a tracked worklist, never auto-propagated (silent rewriting would falsify what the project worked under). A project happy with the stock master instantiates it directly. - The working layer: records and everything organization-internal stay in the org-working scope. Records never enter a library.
2. The split rule for a migrating corpus (by document class)¶
- Prescriptive universal (quality manual, SOPs, work instructions, role descriptions) → base library.
- Templates → derive-layer masters in the base library.
- Records → working layer, stay.
- Tool-operational documents whose subject is the tool being LEFT (his ruling, better than
the leave-behind recommendation): they MIGRATE into the base library and are then REVOKED
here — the one place in a migration where a local act is the honest record, because the
retirement genuinely happens on this instance, now, for a true reason. The revocation reason
names the tool change; each thin replacement instruction, when authored, carries a
supersedesrelation to the revoked document. BASE_READ's released-only face keeps retired documents out of every reader's effective library automatically. - Registers the product itself renders as live views (document lists, author directories, addressee overviews) → retire, not migrate; genuine reference content (a glossary) migrates.
- Documents describing the eQMS tool's own operation (monitoring, backups) → instance-operator documentation, out of the corpus.
- Tool-bound but universal work instructions → migrate as-is, then revise in the library: the "we changed tools" revision trail is itself QMS evidence.
- Source-tool validation templates → retire when the product's own validation package (ADR-0061) replaces them; derive-layer until then.
3. BASE_READ staffing: a dedicated auto-assigned reader role¶
A "Base Reader" role carrying exactly BASE_READ, assigned at GLOBAL to every invited user by
the invitation flow — visible and revocable per person, never smuggled into content roles.
4. Replacement authoring is thin, and it is content-lane work¶
Replacement instructions carry the PROCESS (who, what, when, which evidence) and point at the
product manual for tool mechanics — the corpus never re-authors the manual, which would drift
every release. Retirement does not wait for replacements: the revocation reason names the
successor intent; the supersedes link lands when each replacement releases.
5. The migration path is the export twin, with one-shot discipline¶
Export the corpus (ADR-0125), split the bundle by §2's table — a bundle is files; the split is a script over the manifest — and arrival-import the base layer into the GLOBAL scope with id adoption (references stay intact). The working layer stays where it lives. The revocation wave of §2 runs only AFTER the imported corpus is inspected and accepted (§8b discipline): the first local act closes the one-shot window permanently, so "directly invalidate" is deliberately "invalidate after acceptance". Cross-instance distribution follows ADR-0125 §6 (the base library is its owner's export, landed per instance); base-library UPDATE imports — a revision reaching a GLOBAL scope that already holds documents — are a named, sequenced-after arc, not solved here.
6. Consumption grammar: the descendant governs here, said out loud¶
In a scope holding a derived descendant of a base master, every template offer prefers the descendant and DEMOTES the master — never hides it (ADR-0108 §3: offers say when they filter) — with a derived-cause sentence naming the relationship; open drift tasks ride the same sentence. In a scope with no descendant, the master is offered normally.
7. Row 29 — deriving unsupported elements refuses with the remedy in hand¶
Deriving a document whose element kinds the target scope has not activated REFUSES, naming the
missing kinds; for a caller holding ACTIVATE_CATALOG_ENTRIES in the target the refusal offers
the activation directly (one click for the authorized, structurally impossible for anyone else).
Demoting elements to inert text (changes the document's meaning) and auto-activation (violates
target sovereignty) are ruled OUT.
Consequences¶
- Customer projects read ONE living library; adapted templates carry pinned provenance and tracked drift; records stay sovereign per organization.
- The tool transition itself becomes QMS evidence: governed → tool changed → revoked with reason → superseded by the successor, all in the record.
- Build wave (product side): the Base Reader role + invitation wiring (§3), the picker demotion (§6), the derive refusal (§7). Instance side: the bundle-split script and the migration run — scheduled by the owner, not by the build.
- The instance-specific split table (which real documents land where) is INSTANCE data: it lives beside the corpus staging, git-ignored, never in this repository.
Amendment 1 (2026-08-29) — the visibility doctrine¶
Ruled during the genesis sitting ("I agree with all your proposals"), four faces:
- Outside everything: nothing (RLS).
- The library's outward face shows released content, the released history, and WHO-DID (releaser provenance) — never WHO-MAY: the authorization matrix is scope configuration, answered by the QMS's own documents (the document-control SOP), not by the config UI. Since V124, relations and trace links BETWEEN released library documents are part of that face (corpus meaning); the working apparatus — trail, addressees, training mode, workflow bindings — is declared absent in the RLS inventory, not merely unimplemented.
- Inside a project, membership is the boundary and process transparency is deliberate: every member, audience-only included, sees the who-may matrix, the authority view and the full setup truth — the derived-cause grammar depends on naming roles.
- The working layer stays involvement-gated even for members (draft save-points follow draft access, review rounds belong to their participants). Membership shows the machine; participation shows the work in progress.
ADR-0128/-0129 changed REACH, never these faces.