feat: Prosa ist kein Identifier - Link-Taxonomie als Enum, generierte Regionen mit Markern (4.0.0)
Files changed: - .gitea/workflows/ci.yml - AGENTS.md - CHANGES.md - VERSION - instructions/CONTRACT.md - instructions/link-taxonomy.md - instructions/migrations/4.0.0-link-taxonomy.md - instructions/setup-instance.md - kb/CONTRACT.md - kb/CONVENTIONS.md - kb/CONVENTIONS.md.template - kb/comparisons/COLLECTION.md - kb/concepts/COLLECTION.md - kb/entities/COLLECTION.md - kb/sources/COLLECTION.md - tools/CONTRACT.md - tools/README.md - tools/chemenu/blocks.py - tools/chemenu/cli.py - tools/chemenu/commands/cite_cmd.py - tools/chemenu/commands/dist_cmd.py - tools/chemenu/commands/docs_verify.py - tools/chemenu/commands/doctor.py - tools/chemenu/commands/links_cmd.py - tools/chemenu/commands/migrate_cmd.py - tools/chemenu/commands/new_page.py - tools/chemenu/commands/page_ops.py - tools/chemenu/commands/run_budget.py - tools/chemenu/commands/xref.py - tools/chemenu/conventions.py - tools/chemenu/corpus_diff.py - tools/chemenu/frontmatter_io.py - tools/chemenu/kb_collections.py - tools/chemenu/kb_state.py - tools/chemenu/links.py - tools/chemenu/lint_core.py - tools/chemenu/provenance.py - tools/chemenu/sections.py - tools/chemenu/tests/conftest.py - tools/chemenu/tests/test_blocks.py - tools/chemenu/tests/test_cite_cmd.py - tools/chemenu/tests/test_conventions.py - tools/chemenu/tests/test_dist_cmd.py - tools/chemenu/tests/test_doctor.py - tools/chemenu/tests/test_migrate_cmd.py - tools/chemenu/tests/test_new_page.py - tools/chemenu/tests/test_pipeline_l0.py - tools/chemenu/tests/test_types_cmd.py - tools/chemenu/tests/test_xref.py - types/concept.schema.yaml - types/entity.md - types/entity.schema.yaml - types/instruction.schema.yaml - types/type-spec.md - work/link-taxonomy-migration/README.md - work/link-taxonomy-migration/plan.md
This commit is contained in:
@@ -65,11 +65,31 @@ catalogue of authoring profiles an instance may adopt into its own `kb/CONVENTIO
|
||||
|
||||
## `instructions/migrations/`
|
||||
|
||||
A content migration is a Manual instruction with two extra frontmatter fields
|
||||
A content migration is a Manual instruction with three extra frontmatter fields
|
||||
(`types/instruction.schema.yaml`): `migrates_to:`, the stack version whose content shape it
|
||||
produces, and `migration_kind:` (`mechanical` | `assisted`). It lives at
|
||||
produces; `migration_kind:` (`mechanical` | `assisted`); and `obligation:`
|
||||
(`required` | `offered`, default `required`). It lives at
|
||||
`instructions/migrations/<version>-<slug>.md`.
|
||||
|
||||
`migration_kind:` and `obligation:` are **two axes, not one**. The first says how the work is
|
||||
carried out, the second whether it has to happen at all:
|
||||
|
||||
| `obligation:` | Means | `migrate status` |
|
||||
|---|---|---|
|
||||
| `required` | The content must reach the new shape or it no longer fits the machinery | Counted as outstanding; `migrate done` advances `kb_version` through it, in chain order |
|
||||
| `offered` | A file the instance owns still works as it is, and the stack proposes a better default | Listed separately, never blocks, no ordering rule. `migrate done` records it in the applied ledger and leaves `kb_version` where it is |
|
||||
|
||||
Keeping them apart is what stops `migrate status` crying wolf: an instance nagged about an
|
||||
improvement it declined stops reading the nag that means its content no longer fits its
|
||||
machinery. And because taking an offer deliberately does not move the version, the **applied
|
||||
ledger** - not `kb_version` - is what makes an offer stop being offered; without that record
|
||||
there is no way to tell a taken offer from an ignored one.
|
||||
|
||||
An `offered` migration is what makes an instance-owned file upgradeable at all. `dist export`
|
||||
records a sha256 per shipped file in `.wikitool-release.json`, so `migrate status` can say which
|
||||
of those files the instance edited and which it merely received - the first have to be
|
||||
reconciled by a person, the second can simply be copied over.
|
||||
|
||||
The tier fits exactly: a migration must never be picked up implicitly - it rewrites the corpus -
|
||||
and it is referenced by nothing, because `tools/wikitool migrate status` finds it by reading the
|
||||
directory and comparing `migrates_to:` against this instance's `kb_version`. That is also why
|
||||
|
||||
Reference in New Issue
Block a user