A preserved method from https://github.com/mattpocock/skills at 3cca18b368ae, path skills/engineering/domain-modeling, MIT. 30 of 184 source lines differ (16%), every difference claimed by an entry of the ledger with its reason. Entries: baseline-copies-2026-09-11, pull-2026-09-11, fold-2026-09-11, fold-walk-2026-09-11, roster-keepers-2026-09-15.
two ADR authorities write to one docs/adr/; the house convention is the dated filename record-architecture-decisions sets, not sequential numbers that collide across concurrent branches.
ADRs live in `docs/adr/` and use sequential numbering: `0001-slug.md`, `0002-slug.md`, etc.
ADRs live in `docs/adr/` and are named `YYYY-MM-DD-short-title.md`: a dated file with a specific, durable title. Sequential numbers are not used, because they conflict across concurrent branches.
Create the `docs/adr/` directory lazily: only when the first ADR is needed.
Create the `docs/adr/` directory lazily: only when the first ADR is needed.
11 unchanged lines
## Template
## Template
```md
```md
# {Short title of the decision}
# {Short title of the decision}
{1-3 sentences: what's the context, what did we decide, and why.}
{1-3 sentences: what's the context, what did we decide, and why.}
```
```
That's it. An ADR can be a single paragraph. The value is in recording *that* a decision was made and *why*, not in filling out sections.
That's it. An ADR can be a single paragraph. The value is in recording *that* a decision was made and *why*, not in filling out sections.
## Optional sections
## Optional sections
Only include these when they add genuine value. Most ADRs won't need them.
Only include these when they add genuine value. Most ADRs won't need them.
vocabularychangedbaseline-copies-2026-09-11
the Status option names sequential ADR-NNNN ids and adds approval metadata the house convention forbids; superseding is recorded by a later ADR linking the earlier one.
- **Status** frontmatter (`proposed | accepted | deprecated | superseded by ADR-NNNN`): useful when decisions are revisited
- **Considered Options**: only when the rejected alternatives are worth remembering
- **Considered Options**: only when the rejected alternatives are worth remembering
- **Consequences**: only when non-obvious downstream effects need to be called out
- **Consequences**: only when non-obvious downstream effects need to be called out
vocabularychangedbaseline-copies-2026-09-11
the Numbering section is the operative half of the sequential scheme; with dated filenames there is nothing to scan or increment.
## Numbering
## Naming
vocabularychangedbaseline-copies-2026-09-11
the Numbering section is the operative half of the sequential scheme; with dated filenames there is nothing to scan or increment.
Scan `docs/adr/` for the highest existing number and increment by one.
Take today's date and a short, specific title: `2026-08-26-raw-sql-for-serializable-reads.md`. Nothing to scan, nothing to increment.
## When to offer an ADR
## When to offer an ADR
14 unchanged lines
All three of these must be true:
All three of these must be true:
1. **Hard to reverse**: the cost of changing your mind later is meaningful
1. **Hard to reverse**: the cost of changing your mind later is meaningful
2. **Surprising without context**: a future reader will look at the code and wonder "why on earth did they do it this way?"
2. **Surprising without context**: a future reader will look at the code and wonder "why on earth did they do it this way?"
3. **The result of a real trade-off**: there were genuine alternatives and you picked one for specific reasons
3. **The result of a real trade-off**: there were genuine alternatives and you picked one for specific reasons
If a decision is easy to reverse, skip it: you'll just reverse it. If it's not surprising, nobody will wonder why. If there was no real alternative, there's nothing to record beyond "we did the obvious thing."
If a decision is easy to reverse, skip it: you'll just reverse it. If it's not surprising, nobody will wonder why. If there was no real alternative, there's nothing to record beyond "we did the obvious thing."
### What qualifies
### What qualifies
- **Architectural shape.** "We're using a monorepo." "The write model is event-sourced, the read model is projected into Postgres."
- **Architectural shape.** "We're using a monorepo." "The write model is event-sourced, the read model is projected into Postgres."
- **Integration patterns between contexts.** "Ordering and Billing communicate via domain events, not synchronous HTTP."
- **Integration patterns between contexts.** "Ordering and Billing communicate via domain events, not synchronous HTTP."
- **Technology choices that carry lock-in.** Database, message bus, auth provider, deployment target. Not every library: just the ones that would take a quarter to swap out.
- **Technology choices that carry lock-in.** Database, message bus, auth provider, deployment target. Not every library: just the ones that would take a quarter to swap out.
- **Boundary and scope decisions.** "Customer data is owned by the Customer context; other contexts reference it by ID only." The explicit no-s are as valuable as the yes-s.
- **Boundary and scope decisions.** "Customer data is owned by the Customer context; other contexts reference it by ID only." The explicit no-s are as valuable as the yes-s.
- **Deliberate deviations from the obvious path.** "We're using manual SQL instead of an ORM because X." Anything where a reasonable reader would assume the opposite. These stop the next engineer from "fixing" something that was deliberate.
- **Deliberate deviations from the obvious path.** "We're using manual SQL instead of an ORM because X." Anything where a reasonable reader would assume the opposite. These stop the next engineer from "fixing" something that was deliberate.
- **Constraints not visible in the code.** "We can't use AWS because of compliance requirements." "Response times must be under 200ms because of the partner API contract."
- **Constraints not visible in the code.** "We can't use AWS because of compliance requirements." "Response times must be under 200ms because of the partner API contract."
- **Rejected alternatives when the rejection is non-obvious.** If you considered GraphQL and picked REST for subtle reasons, record it; otherwise someone will suggest GraphQL again in six months.
- **Rejected alternatives when the rejection is non-obvious.** If you considered GraphQL and picked REST for subtle reasons, record it; otherwise someone will suggest GraphQL again in six months.
SKILL.md
---
---
harnesschangedbaseline-copies-2026-09-11
greenline renders its own frontmatter: quoted name and description, the description from the manifest override where one existed, no upstream activation flag
name: domain-modeling
name: "domain-modeling"
description: Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a CONTEXT.md, or recording or editing an ADR.
description: "Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a CONTEXT.md, or recording or editing an ADR."
---
---
# Domain Modeling
# Domain Modeling
scopechangedfold-2026-09-11
one opening paragraph in the skill's voice after the title: writes the words down while model-the-domain restructures the code; fires on terminology discussion, CONTEXT.md edits, a term change that needs an ADR, and a term doing two jobs, where it is offered in one line; the existing glossary is the home and CONTEXT.md is created only when the repository has none; a durable term decision goes through record-architecture-decisions; it never restructures code and never records a decision that is not one
This skill writes the words down; model-the-domain restructures the code around them. It fires when codebase terminology is under discussion, when `CONTEXT.md` is written or edited, when a term change needs an ADR, and when a term is doing two jobs, where it is offered in one line: name it and write it down? The home for terms is the repository's existing glossary or vocabulary document; `CONTEXT.md` is created only when the repository has none. A term change that is a durable decision goes through record-architecture-decisions, whose dated naming governs ADRs. This skill never restructures code and never records a decision that is not one.
Actively build and sharpen the project's domain model as you design. This is the *active* discipline: challenging terms, inventing edge-case scenarios, and writing the glossary and decisions down the moment they crystallise. (Merely *reading* `CONTEXT.md` for vocabulary is not this skill: that's a one-line habit any skill can do. This skill is for when you're changing the model, not just consuming it.)
Actively build and sharpen the project's domain model as you design. This is the *active* discipline: challenging terms, inventing edge-case scenarios, and writing the glossary and decisions down the moment they crystallise. (Merely *reading* `CONTEXT.md` for vocabulary is not this skill: that's a one-line habit any skill can do. This skill is for when you're changing the model, not just consuming it.)
## File structure
## File structure
5 unchanged lines
Most repos have a single context:
Most repos have a single context:
```
```
/
/
├── CONTEXT.md
├── CONTEXT.md
├── docs/
├── docs/
│ └── adr/
│ └── adr/
vocabularychangedfold-walk-2026-09-11
the ADR example tree shows dated filenames (YYYY-MM-DD-short-title.md), the house convention record-architecture-decisions owns, in place of sequential numbers that collide across branches
│ ├── 0001-event-sourced-orders.md
│ ├── 2026-01-12-event-sourced-orders.md
│ └── 0002-postgres-for-write-model.md
│ └── 2026-02-03-postgres-for-write-model.md
└── src/
└── src/
```
```
13 unchanged lines
If a `CONTEXT-MAP.md` exists at the root, the repo has multiple contexts. The map points to where each one lives:
If a `CONTEXT-MAP.md` exists at the root, the repo has multiple contexts. The map points to where each one lives:
```
```
/
/
├── CONTEXT-MAP.md
├── CONTEXT-MAP.md
├── docs/
├── docs/
│ └── adr/ ← system-wide decisions
│ └── adr/ ← system-wide decisions
├── src/
├── src/
│ ├── ordering/
│ ├── ordering/
│ │ ├── CONTEXT.md
│ │ ├── CONTEXT.md
│ │ └── docs/adr/ ← context-specific decisions
│ │ └── docs/adr/ ← context-specific decisions
│ └── billing/
│ └── billing/
│ ├── CONTEXT.md
│ ├── CONTEXT.md
│ └── docs/adr/
│ └── docs/adr/
```
```
locationchangedfold-walk-2026-09-11
an existing glossary or vocabulary document is the home for terms, whatever its name, and CONTEXT.md is created only when the repository has none; an existing decision home is likewise the home for an ADR (docs/ledger/evidence/qa-s6-block-fixes/artifact-discipline.md, the home rule)
Create files lazily: only when you have something to write. If no `CONTEXT.md` exists, create one when the first term is resolved. If no `docs/adr/` exists, create it when the first ADR is needed.
Create files lazily: only when you have something to write. An existing glossary or vocabulary document is the home for terms, whatever its name; if the repository has none, create `CONTEXT.md` when the first term is resolved. An existing decision home (a decisions document, an ADR directory of its own) is the home for ADRs; if the repository has none, `docs/adr/` is created when the first ADR is needed, seeded by record-architecture-decisions.
## During the session
## During the session
### Challenge against the glossary
### Challenge against the glossary
locationchangedfold-2026-09-11
the artifact-discipline rule (review of 2026-09-11, item 3): an existing glossary or vocabulary document is the home for terms, whatever its name, and CONTEXT.md is created only when the repository has none; an existing decision home is the home for ADRs and docs/adr/ is seeded by record-architecture-decisions only when there is none; the glossary challenge and the inline update read and write that home, with CONTEXT-FORMAT.md governing CONTEXT.md
When the user uses a term that conflicts with the existing language in `CONTEXT.md`, call it out immediately. "Your glossary defines 'cancellation' as X, but you seem to mean Y. Which is it?"
When the user uses a term that conflicts with the existing language in `CONTEXT.md` or the repository's own glossary, call it out immediately. "Your glossary defines 'cancellation' as X, but you seem to mean Y. Which is it?"
### Sharpen fuzzy language
### Sharpen fuzzy language
9 unchanged lines
When the user uses vague or overloaded terms, propose a precise canonical term. "You're saying 'account': do you mean the Customer or the User? Those are different things."
When the user uses vague or overloaded terms, propose a precise canonical term. "You're saying 'account': do you mean the Customer or the User? Those are different things."
### Discuss concrete scenarios
### Discuss concrete scenarios
When domain relationships are being discussed, stress-test them with specific scenarios. Invent scenarios that probe edge cases and force the user to be precise about the boundaries between concepts.
When domain relationships are being discussed, stress-test them with specific scenarios. Invent scenarios that probe edge cases and force the user to be precise about the boundaries between concepts.
### Cross-reference with code
### Cross-reference with code
When the user states how something works, check whether the code agrees. If you find a contradiction, surface it: "Your code cancels entire Orders, but you just said partial cancellation is possible. Which is right?"
When the user states how something works, check whether the code agrees. If you find a contradiction, surface it: "Your code cancels entire Orders, but you just said partial cancellation is possible. Which is right?"
### Update CONTEXT.md inline
### Update CONTEXT.md inline
methodchangedroster-keepers-2026-09-15
the inline update writes CONTEXT.md or the existing glossary right there only when the request's grant covers that file, and otherwise offers the entry in one line and writes on the owner's word, matching the block's situational-skill rule; the earlier location claim stands: an existing glossary is the home for terms and CONTEXT.md is created only when the repository has none (carried from fold-2026-09-11); the method edit is on the operator's word of 2026-09-15 at the card J-8, with J-2 folded in
When a term is resolved, update `CONTEXT.md` right there. Don't batch these up: capture them as they happen. Use the format in [CONTEXT-FORMAT.md](./CONTEXT-FORMAT.md).
When a term is resolved, update `CONTEXT.md`, or the repository's existing glossary in its own format, right there when the request's grant covers that file; otherwise offer the entry in one line and write it on the owner's word. Don't batch these up: capture them as they happen. Use the format in [CONTEXT-FORMAT.md](./CONTEXT-FORMAT.md) for `CONTEXT.md`.
`CONTEXT.md` should be totally devoid of implementation details. Do not treat `CONTEXT.md` as a spec, a scratch pad, or a repository for implementation decisions. It is a glossary and nothing else.
`CONTEXT.md` should be totally devoid of implementation details. Do not treat `CONTEXT.md` as a spec, a scratch pad, or a repository for implementation decisions. It is a glossary and nothing else.
5 unchanged lines
### Offer ADRs sparingly
### Offer ADRs sparingly
Only offer to create an ADR when all three are true:
Only offer to create an ADR when all three are true:
1. **Hard to reverse**: the cost of changing your mind later is meaningful
1. **Hard to reverse**: the cost of changing your mind later is meaningful
2. **Surprising without context**: a future reader will wonder "why did they do it this way?"
2. **Surprising without context**: a future reader will wonder "why did they do it this way?"
3. **The result of a real trade-off**: there were genuine alternatives and you picked one for specific reasons
3. **The result of a real trade-off**: there were genuine alternatives and you picked one for specific reasons
dependencychangedfold-2026-09-11
upstream's 'use the format in ADR-FORMAT.md' goes through record-architecture-decisions, in the repository's decision home under the dated YYYY-MM-DD-short-title.md naming, with ADR-FORMAT.md describing the short form and yielding where they disagree, and carrying the bar only when record-architecture-decisions is not installed; the closing Durable output line names CONTEXT.md entries (or the existing glossary) and an ADR through record-architecture-decisions, with the one-line offer when a term is doing two jobs
If any of the three is missing, skip the ADR. Use the format in [ADR-FORMAT.md](./ADR-FORMAT.md).
If any of the three is missing, skip the ADR. When all three hold, record it through record-architecture-decisions, in the repository's decision home and under its dated `YYYY-MM-DD-short-title.md` naming; [ADR-FORMAT.md](./ADR-FORMAT.md) describes the short form an ADR can take and yields to that convention wherever the two disagree. Where record-architecture-decisions is not installed, ADR-FORMAT.md carries the bar and its dated naming is the convention.
Durable output: CONTEXT.md entries (or the repository's existing glossary), and an ADR through record-architecture-decisions when a term change is a durable decision. Offered in one line when a term is doing two jobs: "name it and write it down?"; applied in the reply otherwise.
agents/openai.yaml
harnessremoved filebaseline-copies-2026-09-11
the renderer generates agents/openai.yaml from the manifest; the vendored copy is not projected
interface:
display_name: "Domain Modeling"
short_description: "Build and sharpen a domain model"
The timeline
Each entry that touched this method, with the differences it claimed as they stood at its commit, read from the repository's history.
2026-09-11baseline-copies-2026-09-11
the cutover to an edited copy (ADR 0039): the composed output written as the copy, every difference from upstream claimed with the reason of the overlay that produced it
ADR-FORMAT.md
vocabularychangedbaseline-copies-2026-09-11
two ADR authorities write to one docs/adr/; the house convention is the dated filename record-architecture-decisions sets, not sequential numbers that collide across concurrent branches.
ADRs live in `docs/adr/` and use sequential numbering: `0001-slug.md`, `0002-slug.md`, etc.
ADRs live in `docs/adr/` and are named `YYYY-MM-DD-short-title.md`: a dated file with a specific, durable title. Sequential numbers are not used, because they conflict across concurrent branches.
vocabularychangedbaseline-copies-2026-09-11
the Status option names sequential ADR-NNNN ids and adds approval metadata the house convention forbids; superseding is recorded by a later ADR linking the earlier one.
- **Status** frontmatter (`proposed | accepted | deprecated | superseded by ADR-NNNN`): useful when decisions are revisited
vocabularychangedbaseline-copies-2026-09-11
the Numbering section is the operative half of the sequential scheme; with dated filenames there is nothing to scan or increment.
## Numbering
## Naming
vocabularychangedbaseline-copies-2026-09-11
the Numbering section is the operative half of the sequential scheme; with dated filenames there is nothing to scan or increment.
Scan `docs/adr/` for the highest existing number and increment by one.
Take today's date and a short, specific title: `2026-08-26-raw-sql-for-serializable-reads.md`. Nothing to scan, nothing to increment.
SKILL.md
harnesschangedbaseline-copies-2026-09-11
greenline renders its own frontmatter: quoted name and description, the description from the manifest override where one existed, no upstream activation flag
name: domain-modeling
name: "domain-modeling"
description: Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a CONTEXT.md, or recording or editing an ADR.
description: "Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a CONTEXT.md, or recording or editing an ADR."
lifecyclechangedbaseline-copies-2026-09-11
greenline prelude, to fold: this skill writes the words, model-the-domain restructures the code; docs/adr/ follows the dated house convention owned by record-architecture-decisions, superseding ADR-FORMAT.md where they disagree
**greenline prelude: the words, not the code.** `model-the-domain` restructures code around the domain; this skill writes the words down. `docs/adr/` is shared: follow the dated naming and the template this repo's `docs/adr/README.md` sets, the house convention that `record-architecture-decisions` owns. This skill's `ADR-FORMAT.md` describes upstream's format and is superseded wherever the two disagree; where `record-architecture-decisions` is not installed and no `docs/adr/README.md` exists yet, this skill carries the bar and `ADR-FORMAT.md`'s dated naming is the convention.
vocabularychangedbaseline-copies-2026-09-11
the example tree showed sequential ADR names against the dated house convention this run standardized (glue run 1, D6)
│ ├── 0001-event-sourced-orders.md
│ ├── 2026-01-12-event-sourced-orders.md
│ └── 0002-postgres-for-write-model.md
│ └── 2026-02-03-postgres-for-write-model.md
agents/openai.yaml
harnessremoved filebaseline-copies-2026-09-11
the renderer generates agents/openai.yaml from the manifest; the vendored copy is not projected
interface:
display_name: "Domain Modeling"
short_description: "Build and sharpen a domain model"
2026-09-11pull-2026-09-11
pin advance to 3cca18b: upstream moved with no change under the vendored paths
2026-09-11fold-2026-09-11
the fold (ADR 0039, S3): the prelude is gone; the words-not-code split with model-the-domain, the existing glossary as the home for terms before CONTEXT.md, and the existing decision home with record-architecture-decisions' dated naming for an ADR sit at the steps that use them, with the Durable output line and the offer rule at the end
SKILL.md
scopechangedfold-2026-09-11
one opening paragraph in the skill's voice after the title: writes the words down while model-the-domain restructures the code; fires on terminology discussion, CONTEXT.md edits, a term change that needs an ADR, and a term doing two jobs, where it is offered in one line; the existing glossary is the home and CONTEXT.md is created only when the repository has none; a durable term decision goes through record-architecture-decisions; it never restructures code and never records a decision that is not one
This skill writes the words down; model-the-domain restructures the code around them. It fires when codebase terminology is under discussion, when `CONTEXT.md` is written or edited, when a term change needs an ADR, and when a term is doing two jobs, where it is offered in one line: name it and write it down? The home for terms is the repository's existing glossary or vocabulary document; `CONTEXT.md` is created only when the repository has none. A term change that is a durable decision goes through record-architecture-decisions, whose dated naming governs ADRs. This skill never restructures code and never records a decision that is not one.
locationchangedfold-2026-09-11
the artifact-discipline rule (review of 2026-09-11, item 3): an existing glossary or vocabulary document is the home for terms, whatever its name, and CONTEXT.md is created only when the repository has none; an existing decision home is the home for ADRs and docs/adr/ is seeded by record-architecture-decisions only when there is none; the glossary challenge and the inline update read and write that home, with CONTEXT-FORMAT.md governing CONTEXT.md
Create files lazily: only when you have something to write. If no `CONTEXT.md` exists, create one when the first term is resolved. If no `docs/adr/` exists, create it when the first ADR is needed.
Create files lazily: only when you have something to write. An existing glossary or vocabulary document is the home for terms, whatever its name; if the repository has none, create `CONTEXT.md` when the first term is resolved. An existing decision home (a decisions document, an ADR directory of its own) is the home for ADRs; if the repository has none, `docs/adr/` is created when the first ADR is needed, seeded by record-architecture-decisions.
locationchangedfold-2026-09-11
the artifact-discipline rule (review of 2026-09-11, item 3): an existing glossary or vocabulary document is the home for terms, whatever its name, and CONTEXT.md is created only when the repository has none; an existing decision home is the home for ADRs and docs/adr/ is seeded by record-architecture-decisions only when there is none; the glossary challenge and the inline update read and write that home, with CONTEXT-FORMAT.md governing CONTEXT.md
When the user uses a term that conflicts with the existing language in `CONTEXT.md`, call it out immediately. "Your glossary defines 'cancellation' as X, but you seem to mean Y. Which is it?"
When the user uses a term that conflicts with the existing language in `CONTEXT.md` or the repository's own glossary, call it out immediately. "Your glossary defines 'cancellation' as X, but you seem to mean Y. Which is it?"
locationchangedfold-2026-09-11
the artifact-discipline rule (review of 2026-09-11, item 3): an existing glossary or vocabulary document is the home for terms, whatever its name, and CONTEXT.md is created only when the repository has none; an existing decision home is the home for ADRs and docs/adr/ is seeded by record-architecture-decisions only when there is none; the glossary challenge and the inline update read and write that home, with CONTEXT-FORMAT.md governing CONTEXT.md
When a term is resolved, update `CONTEXT.md` right there. Don't batch these up: capture them as they happen. Use the format in [CONTEXT-FORMAT.md](./CONTEXT-FORMAT.md).
When a term is resolved, update `CONTEXT.md`, or the repository's existing glossary in its own format, right there. Don't batch these up: capture them as they happen. Use the format in [CONTEXT-FORMAT.md](./CONTEXT-FORMAT.md) for `CONTEXT.md`.
dependencychangedfold-2026-09-11
upstream's 'use the format in ADR-FORMAT.md' goes through record-architecture-decisions, in the repository's decision home under the dated YYYY-MM-DD-short-title.md naming, with ADR-FORMAT.md describing the short form and yielding where they disagree, and carrying the bar only when record-architecture-decisions is not installed; the closing Durable output line names CONTEXT.md entries (or the existing glossary) and an ADR through record-architecture-decisions, with the one-line offer when a term is doing two jobs
If any of the three is missing, skip the ADR. Use the format in [ADR-FORMAT.md](./ADR-FORMAT.md).
If any of the three is missing, skip the ADR. When all three hold, record it through record-architecture-decisions, in the repository's decision home and under its dated `YYYY-MM-DD-short-title.md` naming; [ADR-FORMAT.md](./ADR-FORMAT.md) describes the short form an ADR can take and yields to that convention wherever the two disagree. Where record-architecture-decisions is not installed, ADR-FORMAT.md carries the bar and its dated naming is the convention.
Durable output: CONTEXT.md entries (or the repository's existing glossary), and an ADR through record-architecture-decisions when a term change is a durable decision. Offered in one line when a term is doing two jobs: "name it and write it down?"; applied in the reply otherwise.
2026-09-11fold-walk-2026-09-11
the coherence walk: two reasons restated so a merger can act on them
SKILL.md
vocabularychangedfold-walk-2026-09-11
the ADR example tree shows dated filenames (YYYY-MM-DD-short-title.md), the house convention record-architecture-decisions owns, in place of sequential numbers that collide across branches
│ ├── 0001-event-sourced-orders.md
│ ├── 2026-01-12-event-sourced-orders.md
│ └── 0002-postgres-for-write-model.md
│ └── 2026-02-03-postgres-for-write-model.md
locationchangedfold-walk-2026-09-11
an existing glossary or vocabulary document is the home for terms, whatever its name, and CONTEXT.md is created only when the repository has none; an existing decision home is likewise the home for an ADR (docs/ledger/evidence/qa-s6-block-fixes/artifact-discipline.md, the home rule)
Create files lazily: only when you have something to write. If no `CONTEXT.md` exists, create one when the first term is resolved. If no `docs/adr/` exists, create it when the first ADR is needed.
Create files lazily: only when you have something to write. An existing glossary or vocabulary document is the home for terms, whatever its name; if the repository has none, create `CONTEXT.md` when the first term is resolved. An existing decision home (a decisions document, an ADR directory of its own) is the home for ADRs; if the repository has none, `docs/adr/` is created when the first ADR is needed, seeded by record-architecture-decisions.
2026-09-15roster-keepers-2026-09-15
The inline glossary write ran without the offer the block requires of a situational skill for a durable file the request did not ask for (the audit J-5, finding 13; found again by J-10); the write now waits on the request's grant or an offer, a method edit on the operator's word of 2026-09-15 at the card J-8, with J-2 folded in. The earlier location claim is carried forward.
SKILL.md
methodchangedroster-keepers-2026-09-15
the inline update writes CONTEXT.md or the existing glossary right there only when the request's grant covers that file, and otherwise offers the entry in one line and writes on the owner's word, matching the block's situational-skill rule; the earlier location claim stands: an existing glossary is the home for terms and CONTEXT.md is created only when the repository has none (carried from fold-2026-09-11); the method edit is on the operator's word of 2026-09-15 at the card J-8, with J-2 folded in
When a term is resolved, update `CONTEXT.md` right there. Don't batch these up: capture them as they happen. Use the format in [CONTEXT-FORMAT.md](./CONTEXT-FORMAT.md).
When a term is resolved, update `CONTEXT.md`, or the repository's existing glossary in its own format, right there when the request's grant covers that file; otherwise offer the entry in one line and write it on the owner's word. Don't batch these up: capture them as they happen. Use the format in [CONTEXT-FORMAT.md](./CONTEXT-FORMAT.md) for `CONTEXT.md`.