Development record
2026-09-25 — The layered configuration resolver has one home, `internal/core/layered`, and two file families; every later consumer reads through it rather than opening a file of its own (lane implementer, autonomous run A, on spc-2609180535002478 part 1). Precedence is flag, then repository, then machine, then bundled, and every value comes back with the layer and the origin that supplied it. The families are `layered.Config`, which is `.abcd/config.json` in the checkout the session resolved and `~/.abcd/config.json` on the machine, and `layered.OracleRouting`, which is `.abcd/config/oracle-routing.json` and `~/.abcd/oracle-routing.json`, the files itd-2609170822093401 names. Scalar keys go in `Config` under a namespace: `pace.*` (itd-2609201925079472), `oracle.review` (itd-6), `roles.<role>.runner` (itd-2609201916056194) and `match.threshold` (itd-2609212137116617). The per-agent routing table keeps its own file, as its intent names, and no new file family is added without an entry here. Loudness: an absent file is an absent layer; a present file that is malformed, symlinked, carries a key twice, trails content, declares the wrong `schema_version`, or (machine layer) is not the caller's own owner-only-writable file is an error naming it; a consumer claims its namespace and every key in it (`Stack.Claim`, with `*` for an open segment such as the role name), and an unknown key under a claimed namespace is refused. Because ahoy writes `oracle.backend` into the shared file, whoever claims `oracle` lists `backend` too. A winning value that does not decode or fails its check is refused, and nothing falls through to a lower layer or to the default.
2026-09-25 — The layered configuration resolver has one home, internal/core/layered, and two file families; every later consumer reads through it rather than opening a file of its own (lane implementer, autonomous run A, on spc-2609180535002478 part 1). Precedence is flag, then repository, then machine, then bundled, and every value comes back with the layer and the origin that supplied it. The families are layered.Config, which is .abcd/config.json in the checkout the session resolved and ~/.abcd/config.json on the machine, and layered.OracleRouting, which is .abcd/config/oracle-routing.json and ~/.abcd/oracle-routing.json, the files itd-2609170822093401 names. Scalar keys go in Config under a namespace: pace.* (itd-2609201925079472), oracle.review (itd-6), roles.<role>.runner (itd-2609201916056194) and match.threshold (itd-2609212137116617). The per-agent routing table keeps its own file, as its intent names, and no new file family is added without an entry here. Loudness: an absent file is an absent layer; a present file that is malformed, symlinked, carries a key twice, trails content, declares the wrong schema_version, or (machine layer) is not the caller's own owner-only-writable file is an error naming it; a consumer claims its namespace and every key in it (Stack.Claim, with * for an open segment such as the role name), and an unknown key under a claimed namespace is refused. Because ahoy writes oracle.backend into the shared file, whoever claims oracle lists backend too. A winning value that does not decode or fails its check is refused, and nothing falls through to a lower layer or to the default.
Frontmatter
| id | dcn-2609250000000005 |
|---|---|
| type | decision |
| date | 2026-09-25 |
.abcd/work/decisions/dcn-2609250000000005-the-layered-configuration-resolver-has.md
open on GitHub ↗ · commit history ↗
mentions6
- itd-6RepoPrompt over MCP is one opt-in reviewer route, beside the host's own agents
- itd-2609170822093401abcd proposes the model each agent deserves, and facilitates it where it can
- itd-2609201916056194A role runs through the command-line harness the operator chose, and every fall back to the host is recorded
- itd-2609201925079472An autonomous run paces itself by default, and one flag sets the pace
- itd-2609212137116617A new capture or draft is matched against the record before it is written
- spc-2609180535002478abcd proposes the model each agent deserves, and facilitates it where it can