stack: TOC-Scope auf types/ und docs/, Sprachregeln nach AGENTS.md zentralisiert, alle Templates auf Control-Plane-Sprache, --breaking akkumuliert (schliesst #99)
CI / verify (push) Successful in 45s
Release / release (push) Successful in 36s

Files changed:
- AGENTS.md
- CHANGES.md
- ENVIRONMENT.md.template
- SOUL.md
- SOUL.md.template
- USER.md.template
- VERSION
- docs/ownership-and-templates.md
- docs/version-model.md
- instructions/CONTRACT.md
- instructions/dev/doc-pull-through.md
- instructions/dev/stack-close/SKILL.md
- instructions/dev/stack-dev/SKILL.md
- instructions/dev/version-parts.md
- instructions/setup-instance.md
- kb/CONVENTIONS.md
- kb/CONVENTIONS.md.template
- kb/concepts/COLLECTION.md
- kb/sources/COLLECTION.md
- tools/CONTRACT.md
- tools/chemenu/commands/types_cmd.py
- tools/chemenu/commands/version_cmd.py
- tools/chemenu/tests/test_toc.py
- tools/chemenu/tests/test_version_cmd.py
- tools/chemenu/toc.py
- tools/chemenu/version.py
- types/comparison.md
- types/concept.md
- types/entity.md
- types/lint-report.md
- types/source.md
This commit is contained in:
2026-09-15 16:21:02 +02:00
parent c0dc2129bb
commit c64479fe02
31 changed files with 1093 additions and 603 deletions
+10
View File
@@ -9,6 +9,16 @@ below). Others - `USER.md`,
`SOUL.md`, `kb/CONVENTIONS.md`, `ENVIRONMENT.md` - describe one particular instance, and
overwriting them would silently erase a choice someone made on purpose.
<!-- wikitool:toc -->
## Contents
- [Two different kinds of truth](#two-different-kinds-of-truth)
- [Why silent overwrite is the failure being designed against](#why-silent-overwrite-is-the-failure-being-designed-against)
- [Why the boundary is a predicate rather than a list](#why-the-boundary-is-a-predicate-rather-than-a-list)
- [Why a `.template`, not just an absent file](#why-a-template-not-just-an-absent-file)
- [The consequence in practice](#the-consequence-in-practice)
<!-- /wikitool:toc -->
## Two different kinds of truth
The stack-owned files describe how the tool works. `kb/CONTRACT.md` opens by saying it holds
+20 -2
View File
@@ -3,6 +3,19 @@
A stack version number looks like it answers one question. It actually answers two, and the two
are independent of each other.
<!-- wikitool:toc -->
## Contents
- [Two questions, not one](#two-questions-not-one)
- [Why "kb/ untouched" is not proof of anything](#why-kb-untouched-is-not-proof-of-anything)
- [Reading compatibility off the leftmost non-zero component](#reading-compatibility-off-the-leftmost-non-zero-component)
- [Downgrade is half the promise](#downgrade-is-half-the-promise)
- [A promise made to a machine, not only to a person](#a-promise-made-to-a-machine-not-only-to-a-person)
- [The 2.0.0 story](#the-200-story)
- [Why a number is only spent by a release](#why-a-number-is-only-spent-by-a-release)
- [Where the procedure lives](#where-the-procedure-lives)
<!-- /wikitool:toc -->
## Two questions, not one
The first question is whether the new version is a drop-in replacement for the old one - whether
@@ -114,6 +127,11 @@ because there is nothing yet to promise.
## Where the procedure lives
The drop-in test, the catalogue of changes that cross the boundary with no page touched, and the
steps for a boundary-crossing bump - the `--breaking` line, the migration document or
steps for a boundary-crossing bump - the `--breaking` lines, the migration document or
`--no-migration` reason, talking to the user before bumping - are one procedure, kept at one
place: [instructions/dev/version-parts.md](../instructions/dev/version-parts.md).
place: `instructions/dev/version-parts.md`.
Named as a plain path rather than linked, because it is not here to link to. `dist export`
prunes `instructions/dev/` wholesale, so that file exists only in the origin repo - the place
where a version is bumped at all. An instance reads this page to understand what a version
number promises it; it never runs the procedure.