The corpus › Decisions

Kuten

A decision record · kuten

This corpus declares inquiry as what its loop is aimed at. Four of the five measures diverged at adoption and one does now, and the corpus did not move under any of them: the profile is at revision 2, the check learned to read a scoped verb, and 73 commits written phase(<slug>): went from counting as nothing to counting as 17.1%. What survives is the off-vocabulary share, which this record already said it would not close.

Context Contents

A yidam repository has always declared what it is about — the ontology, the classes, the edge policy — and never what its work is for. That second thing had exactly one value, assumed by the four phase types, the four clocks and the genesis rubric, and written down nowhere a tool could read. The kuten layer arrived vendored with the prelude at fc96175, and until this record existed yidam kuten check reported that this repository held none, which is a supported state and not a finding.

Only one profile is vendored, so the choice was inquiry or nothing. It fits: this corpus is authored in git rather than regenerated from something else, it holds 97 open questions, and its object — the Rust workspace and the site — is derived from the corpus rather than the corpus from the object. That is the authored half of the one fork the profile draws, and every history-derived surface here reads it that way already.

The decision Contents

This corpus’s practice is inquiry: the corpus grows through sustained inquiry — questions opened, and settled.

Adopted with yidam kuten adopt against the profile vendored at .yidam/.vendor/prelude/kuten/inquiry/kuten.yml, at revision 1. The revision is copied from that profile, and every consumer reads the kuten at the vintage this repository holds rather than at upstream’s current one.

Four of the five measures diverge, and the declaration is what makes them askable. None of them binds anything, and kuten-check sits beside due rather than inside ci for that reason. This repository’s answers, at adoption:

Phase-commit share: 0% measured, 0.12 to 0.27 declared — and the measurement is the suffix. 73 commits here are written phase(<slug>): …. GRAPH.md reads everything before the first : as the verb, so each of those is the unrecognized verb phase(<slug>) and not one of them counts as settling a phase. Counted by the verb the suffix hides it is 75 of the 429 commits the check measured, 17.5% and inside the band, and 48 of the 401 that are not merges, 12.0% and at the band’s floor. The share depends on how the population is drawn and on no reading of it is the answer zero. The practice is not missing; the spelling makes it unreadable, and 22 phase branches open since 2026-08-24 are the same fact from the other end.

Off-vocabulary share: 49% measured, 0.00 to 0.02 declared. 211 of 429 commits. 80 of those are the suffix again — a valid verb wearing a scope — which leaves 130 that are genuinely outside: corpus, web, connect, add, gate, wiki, perf. The check asks whether those commits are this corpus’s work or an artifact’s, and here the honest answer is the artifact’s. web/tests/unit/commitVerbs.spec.ts already states this and holds the only thing that can be held — that the next instruction telling somebody to commit names its verb. History is not rewritten to match a vocabulary it predates.

Nodes per commit: 0.30 measured, 0.50 to 1.12 declared. Read against maturity, which the profile says to do: 478 commits, and most of them are not corpus commits. The object here is a gated Rust workspace and a gated Astro site, and the band was fitted over corpora whose object is smaller. This one is a fact about the shape of the repository rather than about the rate of inquiry.

Median node lines: 118 measured, 35 to 62 declared — measured on the file. The median description here is 21 lines and all four prose fields together run to 34, which is at the floor of the band rather than double its ceiling. The other 85 lines are properties, links, figures and revisions — structure, not prose. yidam 0.10.0 narrowed node-too-long to the description for exactly this reason, and this band still reads the whole file, so the two disagree about what a node’s length is.

Consequences Contents

Nothing gates on any of it. yidam kuten check writes nothing and exits zero however far the corpus has drifted, and mise run kuten-check is deliberately outside mise run //:ci.

The record is a page on the site like every other decision record, and it moves the decision count the root README carries, so edfund-connect index runs with it.

Every consumer reads revision 1 as vendored here, never upstream’s current one. A later re-vendor that brings revision 2 does not change what this repository declared; a comparison spanning two revisions is annotated rather than quietly made.

Changing this is a superseding decide: record, never an edit to this file and never an edit to the vendored profile, which the next re-vendor discards.

Two of the four divergences are a check reading a suffix the prelude forbids. That is worth reporting upstream rather than absorbing here, and it is the same shape as the three lint defects this repository filed and upstream closed at 0.10.0.

Amendment Contents

Revision 2, adopted with the prelude at 2996286 (template v0.5.0). The number beside kuten: is copied from the vendored profile and never typed from memory, so it moves when the profile does. Three of the four divergences above are gone and not one of them because this corpus changed anything.

phase-commit-share reads 17.1% and sits inside its band. The paragraph above predicted this and named the cause: GRAPH.md reads everything before the first : as the verb, so each of the 73 commits written phase(<slug>): counted as the unrecognized verb phase(<slug>) and the share came out zero. Upstream fixed the predicate rather than the history. 75 of the 438 commits the check now measures — the 73 plus two written phase: bare — which is 17.1% against a declared 12%–27%. The record said “on no reading of it is the answer zero”, and the reading the tool now takes is 17.1%.

nodes-per-commit and median-node-lines are retired, not satisfied. The profile’s classes slot is gone at revision 2 and the comment where the two bands stood is the finding: both measured how old a repository is rather than how it works. Spearman rho(authored commits, nodes per commit) = -0.886 across the fit’s six members, the 1.12 ceiling came from the youngest and the 0.50 floor from the second-oldest, and one member left both bands within six hours of the fit that used it, having changed nothing about its practice. This repository had argued the same thing from its own side — “a fact about the shape of the repository rather than about the rate of inquiry” — and was answering a question that should not have been asked.

median-node-lines is worth one further note, because the disagreement it recorded is now settled from the other end too. That paragraph observed that yidam 0.10.0 narrowed node-too-long to the description while the band read the whole file, so the two disagreed about what a node’s length is. At this pin neither reads what it used to: the band is gone, and the ontology declares which keys hold prose. See “The prose a node holds”.

off-vocabulary-share survives, and the report now decomposes it. 211 of 438 commits carry a verb outside the closed set, which is 48.2% against a declared 0%–2%. 80 of those are a valid verb wearing a conventional-commits scope — 73 phase, 3 fix, 2 consume, 1 vendor, 1 migrate — which the check itself now names as a spelling to repair rather than a vocabulary being ignored. That leaves 131 genuinely outside, 29.9%: corpus 40, web 32, connect 24, add 16, gate 5, wiki 3, perf 2, and nine used once each. The answer is unchanged and so is the ground for it — those commits are the artifact’s work rather than the corpus’s, history is not rewritten to match a vocabulary it predates, and web/tests/unit/commitVerbs.spec.ts holds the only thing that can be held.

Why this is an amendment and not the superseding record consequences: calls for. That paragraph is about the decision, and the decision is unchanged: this corpus still declares inquiry, and nothing here reverses what was chosen. What moved is the vintage of the profile the declaration is read at, which is the case amendment: exists for. It also cannot be done any other way — doctor reads revision: out of this file by name, so a record in a second file would leave the warning standing and put two revisions in the corpus at once. The sentence in consequences: stands for a change of practice, not for a re-vendor; “every consumer reads revision 1” is now revision 2, and it is the same rule either way.

Two things this repository filed as upstream’s to fix came back fixed, which is the second time that has happened here after the three lint defects closed at 0.10.0. Nothing in decision: above is edited: those are the measurements taken at adoption, and editing a recorded measurement to match a later predicate is the one thing that table exists to prevent.

The practice converged on 2026-08-27, and the tail is now ratcheted. Measured 2026-09-07: 7d46e59 — corpus: the district pair, and the hoist that had already happened — is the last commit here written outside the vocabulary, and all 39 commits after it conform, scopes included. So the divergence is entirely historical. It is also permanent, and that is the point worth recording: off-vocabulary-share is a ratio over all of history, so 211 of 443 cannot re-enter a 0%–2% band whatever anyone does next — it would take on the order of ten thousand further clean commits. The band is not a target and was never going to become one.

What can be held is the derivative rather than the level, so web/tests/unit/commitVerbs.spec.ts now fails on any commit after 7d46e59 whose verb is outside the vocabulary or wearing a scope. It forgives everything before the boundary — the part that cannot be fixed — and refuses to let the share grow. The web CI job checks out with fetch-depth: 0 for it, and the test asserts the clone is not shallow rather than passing on an empty log.

This changes no measurement above and does not change what was decided; the answer to the check’s question is still that those 131 commits are the artifact’s work and that history is not rewritten to match a vocabulary it predates. What is new is that the question cannot be asked again about anything committed from here.

Alternatives considered Contents

Hold no kuten. The supported state, and what this repository did until now. Declined because the assumption was being made anyway — by the phase types, by the clocks, by the rubric — and an assumption a tool cannot read is one nothing can be measured against. The four divergences above are the argument: none was visible before the declaration existed.

Adopt the profile’s proposed clocks with it. Declined, and the profile says to: a kuten proposes intervals and the corpus’s own config holds them. .yidam/config.toml keeps questions_after = 200 against a proposed 100, phases_after = 50 against 60, and ttl_days = 730 against 180, each with an argument already written beside it, and it goes on omitting index_after for an index this repository has decided not to build.

Cited by Contents

Nothing in the corpus or the catalog points here yet. A decision nothing reaches is not necessarily stale — plenty of them settle a question that has stayed settled — but it is worth knowing which ones are load-bearing and which are history.