docs: page-material passages name subtype templates (#117)
CI / verify (push) Successful in 5m27s
CI / pwsh (push) Successful in 2m5s
Release / release (push) Successful in 35s

Files changed:
- CHANGES.md
- VERSION
- docs/language-boundaries.md
- tools/chemenu/commands/dist_cmd.py
- types/type-guidance.md
- types/type-spec.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SnAJ7Z3CpVD3PRbN73QtU2
This commit is contained in:
torbenandClaude Opus 5.5 committed 2026-10-03 17:07:52 +02:00
1 parent d8cb494d58
commit dd565d249f
6 files changed
+26 -12

No files matched your search

+12 -1
View File
@@ -59,7 +59,7 @@ concern - readable here, never shipped as something to parse.
--- ---
## 8.0.0-beta.31 - 2026-10-03 - new: a subtype gets its own page skeleton from types/<type>.<value>.md ## 8.0.0-beta.32 - 2026-10-03 - Page-material passages in type-spec.md, type-guidance.md and language-boundaries.md name subtype templates
**Author:** Torben Nehmer **Author:** Torben Nehmer
@@ -142,8 +142,19 @@ concern - readable here, never shipped as something to parse.
- raw fetch --html record and kb/CONTRACT.md path budget follow the folder accept - raw fetch --html record and kb/CONTRACT.md path budget follow the folder accept
- stack-close no longer records which model and effort ran each phase - stack-close no longer records which model and effort ran each phase
- lint: a wikilink wrapped across a line break is its own finding; rename and rm see it - lint: a wikilink wrapped across a line break is its own finding; rename and rm see it
- Page-material passages in type-spec.md, type-guidance.md and language-boundaries.md name subtype templates
<!-- /wikitool:bumps --> <!-- /wikitool:bumps -->
### Page-material passages in type-spec.md, type-guidance.md and language-boundaries.md name subtype templates
Found in the closing check of the change below: three documents listed what in `types/` is page
material - and therefore in the KB language and the instance's to rewrite - as the `## Template`
block and the `layout:` titles alone. `types/type-spec.md` (§ Who owns a type-spec, its prose and
its language table), `types/type-guidance.md` (§ Conventions) and
`docs/language-boundaries.md` now name the subtype templates `types/<name>.<value>.md` among
them, and a comment in `dist_cmd` does the same for `dist adopt`'s scope. No behaviour change
(Gitea #117).
### new: a subtype gets its own page skeleton from types/<type>.<value>.md ### new: a subtype gets its own page skeleton from types/<type>.<value>.md
A type-spec carried one `## Template` block for every value of its subtype field, so `wikitool A type-spec carried one `## Template` block for every value of its subtype field, so `wikitool
+1 -1
View File
@@ -1 +1 @@
8.0.0-beta.31 8.0.0-beta.32
+5 -3
View File
@@ -90,7 +90,9 @@ Making the control plane English does not make the instance's language an implem
experiences: experiences:
- **Page text.** Every page under `kb/`, and inside the page type-specs exactly the parts that - **Page text.** Every page under `kb/`, and inside the page type-specs exactly the parts that
become page text - each one's `## Template` block and its `layout:` titles. become page text - each one's `## Template` block, its `layout:` titles, and the subtype
templates `types/<name>.<value>.md` beside it, which are page text from the first line to the
last.
- **What an agent says.** An agent speaks the KB language, whatever the file it just read was - **What an agent says.** An agent speaks the KB language, whatever the file it just read was
written in. An instruction that models a sentence for the operator writes that model in written in. An instruction that models a sentence for the operator writes that model in
English, like the rest of the control plane, and the agent delivers it in the instance's English, like the rest of the control plane, and the agent delivers it in the instance's
@@ -103,8 +105,8 @@ English instructions. The English is what the machinery is written in, not what
A page type's contract is where the two languages meet most closely, and it is worth knowing A page type's contract is where the two languages meet most closely, and it is worth knowing
which part is which before editing any of it. Its authoring guidance addresses an agent and is which part is which before editing any of it. Its authoring guidance addresses an agent and is
English; its `## Template` block and `layout:` titles become the literal headings of pages and English; its `## Template` block, `layout:` titles and subtype templates become the literal
follow the KB language; its field names and enum values are identifiers and are translated in headings of pages and follow the KB language; its field names and enum values are identifiers and are translated in
neither direction. neither direction.
The language line did not move when the *file* line did. A `root: kb` type-spec may now put its The language line did not move when the *file* line did. A `root: kb` type-spec may now put its
+2 -2
View File
@@ -748,8 +748,8 @@ def run_export(target: Path, dry_run: bool = False, origin: Optional[Origin] = N
# The other half of the `.template` split above: an instance takes the shipped # The other half of the `.template` split above: an instance takes the shipped
# default as its own by copying it to the unsuffixed name. Only the templates # default as its own by copying it to the unsuffixed name. Only the templates
# whose shipped text is a working default are in scope - each collection's # whose shipped text is a working default are in scope - each collection's
# contract and the page type-specs with their schemas. `kb/CONVENTIONS.md` and # contract and the page type-specs with their schemas and subtype templates.
# the personalization files ship as templates too, but carry a sentinel and # `kb/CONVENTIONS.md` and the personalization files ship as templates too, but carry a sentinel and
# exist to be filled in, so a verbatim copy of them would only be a file # exist to be filled in, so a verbatim copy of them would only be a file
# `doctor` refuses; the agent writes those itself. # `doctor` refuses; the agent writes those itself.
+2 -2
View File
@@ -47,8 +47,8 @@ that file's own `guidance:` frontmatter field.
- `tools/wikitool types describe <name>` composes both halves into one answer; an agent asking - `tools/wikitool types describe <name>` composes both halves into one answer; an agent asking
for a type's contract never needs to know it comes from two files for a type's contract never needs to know it comes from two files
- Written in the control plane's English ([AGENTS.md](../AGENTS.md) § File naming), like a - Written in the control plane's English ([AGENTS.md](../AGENTS.md) § File naming), like a
type-spec's own authoring prose - only the type-spec's `## Template` block and its `layout:` type-spec's own authoring prose - only the type-spec's `## Template` block, its `layout:`
titles are page material titles and its subtype templates (`types/<name>.<value>.md`) are page material
--- ---
+4 -3
View File
@@ -70,9 +70,9 @@ frontmatter before anyone drew it:
| `root: kb` (`entity`, `concept`, `source`, `comparison`, `project`) | A page **this instance** writes | The instance | `types/<name>.md.template` plus its `.schema.yaml.template` and any subtype template's `types/<name>.<value>.md.template`, adopted by a rename | | `root: kb` (`entity`, `concept`, `source`, `comparison`, `project`) | A page **this instance** writes | The instance | `types/<name>.md.template` plus its `.schema.yaml.template` and any subtype template's `types/<name>.<value>.md.template`, adopted by a rename |
| `root: repo` (`instruction`), no `base_dir` (`lint-report`), and `type-spec`/`type-guidance` themselves | A stack artifact | The stack | Verbatim | | `root: repo` (`instruction`), no `base_dir` (`lint-report`), and `type-spec`/`type-guidance` themselves | A stack artifact | The stack | Verbatim |
A page type-spec's frontmatter configuration and its `## Template` body are therefore the A page type-spec's frontmatter configuration and its `## Template` body - and any subtype
instance's to rewrite, and an upgrade does not take that back. Its generic authoring prose is the template beside it (§ "Anatomy of a type") - are therefore the instance's to rewrite, and an
opposite: where the type-spec declares `guidance:`, that prose lives in a separate, stack-owned upgrade does not take that back. Its generic authoring prose is the opposite: where the type-spec declares `guidance:`, that prose lives in a separate, stack-owned
`types/<name>.guidance.md` (§ "Anatomy of a type" below) that ships verbatim and is overwritten `types/<name>.guidance.md` (§ "Anatomy of a type" below) that ships verbatim and is overwritten
by an upgrade like any other machinery file - the type-spec it documents does not have to be by an upgrade like any other machinery file - the type-spec it documents does not have to be
re-adopted, or even touched, for that improvement to arrive. A type-spec that declares no re-adopted, or even touched, for that improvement to arrive. A type-spec that declares no
@@ -96,6 +96,7 @@ owns that file:
| When to use / not to use, authoring guidance | The `guidance:` file, where declared | An agent writing a page | The control plane's — English | | When to use / not to use, authoring guidance | The `guidance:` file, where declared | An agent writing a page | The control plane's — English |
| The frontmatter table documenting this instance's own fields | The type-spec itself | An agent writing a page | The control plane's — English | | The frontmatter table documenting this instance's own fields | The type-spec itself | An agent writing a page | The control plane's — English |
| The `## Template` body, and the `layout:` titles that head a catalog section | The type-spec itself | The page itself | The instance's KB language (`kb/CONVENTIONS.md` `language:`) | | The `## Template` body, and the `layout:` titles that head a catalog section | The type-spec itself | The page itself | The instance's KB language (`kb/CONVENTIONS.md` `language:`) |
| A subtype template's whole text | `types/<name>.<value>.md` | The page itself | The instance's KB language |
| Field names, enum values, `dir:` values, `type:` paths | Either file's frontmatter | The machine | Neither — identifiers, never translated | | Field names, enum values, `dir:` values, `type:` paths | Either file's frontmatter | The machine | Neither — identifiers, never translated |
That is the same prose/identifier cut [kb/CONTRACT.md](../kb/CONTRACT.md#language-and-identifiers) That is the same prose/identifier cut [kb/CONTRACT.md](../kb/CONTRACT.md#language-and-identifiers)