info-tech-canon/infospace/assimilation/intake-and-assimilation-practice.md
tegwick 686bfb5a9d
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Add feedback/ for consumer reports on canon-concept utility
A third front door next to incoming/ and demand/: longitudinal PurposeFit
evidence, not a change request and not a canon artifact. Seeded with the
resource-control backup-cycle mapping.
2026-08-15 18:49:24 +02:00

212 lines
9.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Intake and Assimilation Practice
**Status:** Practice (normative for this repository)
**Applies to:** every external or internally-drafted document, schema, vocabulary,
or model proposed for absorption into InfoTechCanon
**Anchors:** `InfoTechCanonCore` §14 (Assimilation Model), §8.13 (ChangeRecord),
§8.14 (DecisionRecord), §27.4 (Minimal Assimilation Profile)
---
## 1. Why this exists
New concepts and terminology arrive continuously — from consumers, from external
standards, from Bernd's own drafts. Without a fixed pipeline they either rot in a
drop directory or get pasted into the canon without comparison, which is the
anti-pattern Core §29.6 names explicitly ("Assimilation by copy-paste").
This practice defines the full path:
```text
incoming/ drop zone, un-reviewed, never referenced by canon
│ (1) intake
infospace/assimilation/<slug>/source/ processed input, frozen snapshot
│ (2) scope, extract, compare
infospace/assimilation/<slug>/ assimilation workspace + proposals
│ (3) disposition decision ← human gate
infospace/{models,standards,...}/ canon change (adopt / adapt)
│ (4) register + regenerate + validate
canon.yaml version bump + CHANGELOG.md new canon version with change notes
```
**Governing rule (Core §14.7):** assimilation produces *proposals*, not automatic
canon changes. Steps 12 may run unattended. Step 3 requires an explicit
disposition recorded by the canon owner.
---
## 2. The drop zone: `incoming/`
- `incoming/` holds raw, un-reviewed inputs exactly as received. Do not edit them.
- Nothing in the canon (`canon.yaml`, `infospace/artifacts/index.yaml`, links from
canon documents) may reference a path under `incoming/`.
- An input may be several files (a Markdown document plus its machine-readable
companion). Keep them together; they assimilate as one unit.
- `incoming/` is expected to be **empty** after a processing session. A file
remaining there is an unprocessed backlog item, not a resting place.
Related but distinct front doors — do not confuse them:
| Directory | Holds | Next step |
|---|---|---|
| `incoming/` | raw candidate material to absorb | this practice |
| `demand/` | a stated consumer need, not yet a work item | workplan + design |
| `feedback/` | observed utility of existing canon concepts | cite; spawn `demand/` only if a gap needs work |
| `seeds/` | historical provenance of first-generation canon files | frozen |
If an input turns out to be a *need* rather than a *body of knowledge*, move it to
`demand/` and open a workplan instead of an assimilation workspace.
If an input is a report on whether existing concepts hit or missed, move it to
`feedback/`. A single arrival may split: utility evidence stays in `feedback/`,
requested changes go to `demand/`.
---
## 3. Stage 1 — Intake
Create the workspace and move the input into it. Use `git mv` so the provenance
chain stays visible in history.
```bash
slug=<kebab-slug>
mkdir -p infospace/assimilation/$slug/source
git mv incoming/<file> infospace/assimilation/$slug/source/
```
The snapshot under `source/` is **frozen**: it is the evidence of what was
assimilated and what version it was. Later revisions of the same external body
arrive as a new intake with a new `source_version`, never as an edit in place.
Write `infospace/assimilation/<slug>/assimilation.yaml` conforming to
`infospace/schemas/assimilation.schema.yaml`:
```yaml
id: assimilation/<slug>
title: <human title>
source: <source body name and version>
source_version: "<version>"
source_type: external-standard | internal-draft | product-schema | ...
source_files: [source/<file>, ...]
requested_by: <who>
status: intake | scoping | analysis | proposed | decided | closed
disposition: observe | map | adopt | adapt | reject # provisional until stage 3
impacts: [<artifact ids the input touches>]
```
## 4. Stage 2 — Scoping, extraction, comparison
Produce the Minimal Assimilation Profile (Core §27.4). One file per output so
each can be reviewed and diffed independently:
| File | Content |
|---|---|
| `ASSIMILATION.md` | the record: scope, stages, findings, recommendation |
| `source-summary.md` | faithful précis of the input, no canon opinion |
| `extracted-concepts.yaml` | every concept the input introduces, with its own terms |
| `comparison-matrix.md` | each extracted concept classified against the canon |
| `mappings.yaml` | concept-level mappings to existing canon owners |
| `proposed-changes.md` | concrete, reviewable canon change proposals |
| `open-questions.md` | unresolved issues blocking or following adoption |
Classify every extracted concept with one of the Core §14.6 result categories:
`already_covered`, `covered_differently`, `broader_than_existing`,
`narrower_than_existing`, `missing_concept`, `conflicting_concept`,
`implementation_detail_only`, `viewpoint_difference`,
`terminology_difference_only`.
Two canon principles decide most rows:
- **Single canonical owner** (Core §6.2) — a concept has exactly one owning
artifact. If the input redefines something an existing model owns, that is a
mapping or a conflict, never a second definition.
- **Import, do not redefine** (Core §6.3) — where the input needs a concept the
canon already owns, the proposal is an import, not a copy.
## 5. Stage 3 — Disposition (human gate)
The canon owner records one disposition for the assimilation as a whole, and, where
they differ, per proposed change:
| Disposition | Meaning | Canon effect |
|---|---|---|
| `observe` | recorded, no change yet | workspace only |
| `map` | related to canon via mappings | `infospace/mappings/` entries |
| `adopt` | taken in essentially as-is | new/extended canon artifact |
| `adapt` | taken in, restructured to canon shape | new/extended canon artifact |
| `reject` | out of scope or conflicting | rationale in the record |
Record the decision in `ASSIMILATION.md` as a DecisionRecord (Core §8.14):
Context, Decision, Options Considered, Rationale, Consequences, Review Trigger.
Set `status: decided` and the final `disposition` in `assimilation.yaml`.
For `adopt`/`adapt`, open a workplan (`workplans/ITC-WP-NNNN-<slug>.md`) for any
follow-on work that is not completed in the same session — mappings to sibling
models, profiles, schemas, consumer alignment notes.
## 6. Stage 4 — Transforming into the canon
When adopting or adapting, the new artifact is written in canon shape, not pasted:
1. **Place** it under the correct classification — `infospace/models/<domain>/`
for a broad domain structure, `infospace/standards/<name>/` for a cross-cutting
convention or named framework, `infospace/patterns/`, `infospace/profiles/`.
2. **Head it with canon frontmatter**`id`, `title`, `short_name`, `type`,
`status`, `version`, `source_version`, `source_file`, `canonical_owner`,
`namespace`, `imports`, `related`, `owned_concepts`, `created_at`, `updated_at`.
`source_version` and `source_file` preserve the provenance chain back to the
frozen snapshot (see CARING for the reference example).
3. **Separate normative prose from data.** Human-readable normative content goes
in the Markdown; enumerations, catalogs and baselines go in a sibling YAML that
is the single machine-readable source of truth. Do not maintain the same list
in both.
4. **Declare owned concepts and imports** so ownership stays checkable, and add
the imported-from relationships rather than restating imported definitions.
5. **Register** the artifact:
- `canon.yaml``kernel:` / `models:` / `standards:` entry with `path` and `status`
- `infospace/artifacts/index.yaml``id`, `path`, `kind`, `title`, `provenance`
(with `source_path` pointing at the frozen snapshot), `relationships`
- `infospace/infospace.yaml``disciplines:` entry for the primary document
6. **Regenerate and validate**:
```bash
make agent-briefs && make index && make tree
make validate && make test
```
Generated files (agent briefs, retrieval indexes, views) carry a
`GENERATED` notice — never hand-edit them; fix the source and regenerate.
## 7. Stage 5 — New canon version with change notes
A canon change that adds, removes, or redefines canonical concepts produces a new
canon version.
- **Version field:** `canon.yaml → version`, semantic:
- *patch* — editorial, generated output, no concept change;
- *minor* — new artifact, new concepts, backward-compatible extension;
- *major* — a concept is removed, renamed, or its ownership moves; identifiers
are durable interfaces, so any break requires migration semantics.
- **Change notes:** every version gets an entry in `CHANGELOG.md` at the repo root,
structured as a ChangeRecord (Core §8.13): what changed, rationale, whether it is
breaking, what it supersedes, and the assimilation or workplan that produced it.
- **Artifact status:** a newly assimilated artifact enters at `proposed` or
`draft` status and is promoted only after practical use, even when the canon
version itself is released.
- Close the loop: set the assimilation `status: closed`, add a progress event, and
run `statehub fix-consistency` if workplan files changed.
## 8. Session checklist
```text
[ ] incoming/ is empty (every input intaken or routed to demand/)
[ ] each input has a frozen source/ snapshot and an assimilation.yaml
[ ] Minimal Assimilation Profile files exist and every concept is classified
[ ] disposition recorded as a DecisionRecord
[ ] adopted artifacts registered in canon.yaml, artifacts/index.yaml, infospace.yaml
[ ] make agent-briefs && make index && make tree && make validate && make test pass
[ ] canon.yaml version bumped and CHANGELOG.md entry written
[ ] follow-on workplan opened for anything deferred
```