Development record
The invocation is a position and a target state, and the committed preset for the position supplies the rest
Context
The design fixes the cold-reading invocation at two operands: the operator supplies a position and a target state, and the reading's object and question come from the definition (framework section 8.2 and ruling M8; companion section 4.1). adr-58 added a third operand, the scope, because the assembled input could not be handed to any reader and the instrument had no way to be pointed at anything. The operand kept the property the design protects, that no operand carries prose, and it broke the design's letter.
The maintainer's instruction on 2026-09-02 is that Iteration 2 runs exactly as the design specifies. The scope operand therefore goes, and what it did is kept by other means that the design already admits: the record.
Decision
The invocation is --position and --target, and nothing else.
A committed preset per position supplies what the reading is handed. The preset file already maps each position to the kinds, records and paths it receives (itd-199). The assembler applies the preset for the position it was invoked at, with no operand naming it. Changing what a position reads is a commit to the preset file, reviewed and inside the dirty gate, never a flag. There is no override at invocation and no override stamp; the manifest records the preset applied and its hash, so a run is reproducible from the commit it names.
One preset file, one entry per position. The cold and warm names
retire as invocation tokens; a repository that wants a wider reading commits
a wider entry for that position and the manifest shows it. The size report
goes on stating what a run costs and the over-target line goes on naming the
figure against the target.
No repository path is accepted at the invocation, as before, and the presets remain the only place a path may be named.
Alternatives Considered
- Keep the scope operand and amend the design. Convenient for calibration, and the reason adr-58 was taken. Rejected: the design is to be run as written, and the operand is not needed to point the instrument, since the committed preset points it.
- Keep the operand but default it. Leaves the operator a channel the design closes. Rejected.
Consequences
- adr-58 is superseded. Its preset file, dirty-gate membership and no-path rule survive; its operand does not.
- Brief invariant 15's operand enumeration returns to two.
- itd-199's shipped verb changes:
--scopeis removed, the preset for the position is applied, and the override stamp leaves the manifest. One intent carries that change and lands with itd-194. - itd-184's operand pin is updated to the two operands, and fails closed on any addition as it was designed to.
- The comparative position derives its widening run from the record (adr-2609021016272867) and needs no operand either.
Status note
Accepted by the maintainer on 2026-09-02 by the instruction that Iteration 2 runs exactly as the design specifies. Drafted and adopted in the same change as adr-2609021016272867's correction.
Frontmatter
| id | adr-2609021016286571 |
|---|---|
| type | adr |
| status | accepted |
| date | 2026-09-02 |
.abcd/development/decisions/adrs/2609021016286571-the-invocation-is-a-position-and-a.md
open on GitHub ↗ · commit history ↗
References8
- adr-56An exclusion control asserts only what it can proverelated
- adr-58A reading is commissioned about something, so the invocation takes a scoperelated
- adr-58A reading is commissioned about something, so the invocation takes a scopesupersedes
- adr-2609021016272867The comparative reading receives one widening run's candidates, a positional exception to the prior-run exhaust, with the run derived from the record and no operand addedrelated
- itd-183The cold reading sees exactly what the assembler passes — positive inclusion, field projection, and a per-run manifestrelated
- itd-184Four cold-reading definitions, one blindness core — each position licenses a different output, and none may hold another's licencerelated
- itd-199A reading is about something narrower than everything, and its scope is a committed, adjustable choicerelated
- itd-2609021003095168The invocation is a position and a target state, and the committed preset for the position supplies what the reading is handedrelated
mentions11
- dcn-26090200000000102026-09-02 — The invocation is a position and a target state and nothing else, as the design specifies (maintainer: "all I want is to run Iteration 2 exactly as designed in v4"). adr-2609021016286571 supersedes adr-58: the scope operand and the override stamp go, the committed preset for the position supplies what the reading is handed, and changing it is a commit. adr-2609021016272867 is corrected the same day from a named candidate-run operand to a derived selection: the comparative assembly takes the one committed widening run at the target whose items carry no disposition and no admission, and refuses naming the runs when none or more than one qualifies. Both corrections close the only two points at which the record contradicted the framework's and the companion's letter on the invocation; the earlier entry today that recorded the named operand is superseded by this one.
- dcn-26090200000000112026-09-02 — adr-56's third rule is refined, not contradicted, by the source-and-tests ruling (maintainer): a control that admits an input it cannot examine may pass it only with a per-item unscanned mark in its attestation, so the second rule (an attestation never says more than the examination) carries what the third rule carried; refusal stays the rule for an input the control claims to have examined and could not. Invariant 16 amended to say so. Every ADR is now checked against the framework v4 and the companion v4: adr-58 is superseded by adr-2609021016286571, adr-2609021016272867 is corrected to the derived run, and none of adr-55, adr-57, adr-2609021016275803, adr-2609021016270132, adr-2609021016288378 or adr-2609021016286571 contradicts either document. The two-hundred-thousand-token target is a clarification the documents do not speak to, kept as such.
- iss-2609021816004079The committed preset file's one entry per position is keyed default, a name the implementer chose when the two-operand invocation retired the cold and warm tokens: neither adr-2609021016286571 nor spc-2609021004075744 names the surviving key, and the divergence register, which by its own terms lists every point the materials chose where the documents are open, carries no entry for it. The key is inert at the invocation (a file holding other than one preset is refused), so nothing depends on the word, but the record now carries a name the decision record did not decide. A register entry or a ruling settles it.
- iss-2609090715154147The convention is that a decision record is never amended in place: when a decision changes, a new record is minted and the old one is marked superseded by it, so the decision history stays legible and a reader of the old record is pointed forward rather than misled. Nothing in the tree states it. The typed-link vocabulary is recorded in .abcd/development/principles/decompose-before-filing.md as supersedes / reverses / duplicates / refines, and adr-58 and adr-2609021016286571 demonstrate the shape in practice, but the rule that amendment is not an option is carried only by example, so an agent or a contributor reaching for the smaller edit has nothing to read that refuses it. The gap surfaced when a relocation of the transcript corpus made adr-29's stated location wrong and the question of amend-versus-supersede had to be asked rather than looked up. Fix: state the rule where the conventions live, in the AGENTS.md decisions section or as a principle under .abcd/development/principles/, naming the two typed links and the one edit a superseded record does receive, and say why: an amended record erases the fact that the decision changed, which is the thing the record family exists to preserve. Detector: the conventions text names the rule and a docs test or record-lint rule refuses a decisions section that omits it, or at minimum the rule is present where a contributor reading AGENTS.md would meet it before editing a record.
- iss-2610262031492489Invariant 15 refuses any path at a reading's invocation, but itd-86's cold reading takes exactly one target document.
- itd-194The reading include table admits only what the exclusion floor can read
- itd-2609020625400445A committed preset declares the window it was calibrated for, and the record holds every preset to its declaration
- itd-2609020625407419A comparative reading receives the widening run's items as its candidate set, and characterises them before anyone admits one
- spc-2609020626039834The comparative channel: one widening run's candidates, two fields each, characterised before anyone admits one
- spc-2609020626048722One committed entry per position, in three parts: the object set, the kinds within it and the window it measures at, held by an eval that re-measures every entry on every committed change
- spc-2609021004075744The invocation is a position and a target state: the scope operand and the override stamp leave, and the committed preset for the position is applied by the assembler