stack: Control-Plane-Sprache universell - Achse ist das Publikum, kein Instanz-Schalter (#103)
CI / verify (push) Failing after 45s
Release / release (push) Successful in 38s

Files changed:
- AGENTS.md
- CHANGES.md
- VERSION
- docs/language-boundaries.md
- kb/CONVENTIONS.md
- kb/CONVENTIONS.md.template
- tools/chemenu/commands/dist_cmd.py
This commit is contained in:
2026-09-15 16:58:55 +02:00
parent 05a75065ba
commit f350999053
7 changed files with 206 additions and 14 deletions
+22 -8
View File
@@ -107,15 +107,24 @@ documents. What it may not carry is the same content twice - a README that resta
contract is a second copy that drifts. `docs verify` enforces the specific case that already
happened once: no README may hold a copy of the `wikitool` command table.
**Two languages, and which is which.** Every file in the table above belongs to the stack and
ships to instances that share none of this instance's language choices, so:
**Two languages, and which is which.** Which one a line is written in follows from the *For*
column above - who reads it - and from nothing else: not from who owns the file, and not from
whether it ever leaves this checkout.
1. **The control plane is written in English** - this file, `CLAUDE.md`, every `CONTRACT.md`,
everything under `instructions/`, and the type-specs for non-page artifacts. Quoted
vocabulary is not prose and stays as it is: a section name, a relationship label or a
translated term cited as evidence. What the *instance* owns goes the other way - `kb/` pages
and the page type-specs that shape them follow `kb/CONVENTIONS.md`, which is also where the
instance's own terminology material is reached from.
translated term cited as evidence. What addresses the *page* goes the other way - `kb/` pages,
and inside a page type-spec the parts that become page text - and follows
`kb/CONVENTIONS.md`, which is also where the instance's own terminology material is reached
from.
This holds for a control-plane file an instance writes **only for itself** and never ships:
an instruction of its own, a page type it added (`types/` takes one without a code change),
a further stage contract. Such a file is instance-owned end to end, which settles who may
change it, not who reads it - and the reader is still an agent. There is deliberately no
second language value beside `kb/CONVENTIONS.md`'s `language:`, and no instance setting that
moves this rule; [docs/language-boundaries.md](docs/language-boundaries.md) has the reasoning.
2. **An agent speaks the instance's KB language**, whatever this file is written in. The value
lives in `kb/CONVENTIONS.md`'s `language:` and nowhere else; an instruction that models a
sentence for the user writes it in English like the rest of the control plane, and the agent
@@ -132,14 +141,19 @@ background consulted in passing, not a rule to follow; anything that would bind
type, index, lint or provenance; `dist export` ships it verbatim and no other `tools/wikitool`
command touches it.
Four pages exist today, each read by link rather than automatically:
Five pages are reached from this file, each by link rather than automatically:
[docs/pipeline-rationale.md](docs/pipeline-rationale.md) (why the pipeline has four stages),
[docs/ownership-and-templates.md](docs/ownership-and-templates.md) (why a `.template` split
exists, and why silent overwrite is the failure it guards against),
[docs/why-gates-are-code.md](docs/why-gates-are-code.md) (why the four gates in
[docs/language-boundaries.md](docs/language-boundaries.md) (why the control plane is English
everywhere and the KB language is a value, and why the axis is the reader rather than the
owner), [docs/why-gates-are-code.md](docs/why-gates-are-code.md) (why the four gates in
[Gates](#gates) are code rather than instruction), and
[docs/version-model.md](docs/version-model.md) (why a version number answers a compatibility
question and a migration question separately).
question and a migration question separately). A sixth,
`docs/model-and-effort-selection.md`, is deliberately not linked here but from `CLAUDE.md`: it
decides something only that harness has to decide, and a link here would load it into the other
three.
## Personalization