@erclx/aitk 0.56.0 → 0.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "aitk",
3
3
  "description": "Automated governance, versioning, and discovery tools for Claude Code.",
4
- "version": "0.56.0",
4
+ "version": "0.57.0",
5
5
  "author": {
6
6
  "name": "Eric Le",
7
7
  "url": "https://github.com/erclx"
@@ -7,7 +7,7 @@ description: Opens and runs a numbered groundwork folder under `.claude/groundwo
7
7
 
8
8
  Groundwork gathers and weighs. A plan commits. A groundwork folder costs nothing to throw away, which is what makes it the right container for a question nobody has answered yet.
9
9
 
10
- Read `${CLAUDE_SKILL_DIR}/references/folder-format.md` before writing any file in the folder. It holds the reserved numbers, what each required file carries, the conventions, and the anti-patterns.
10
+ Read `.claude/standards/groundwork.md` from the project root before writing any file in the folder, or `${CLAUDE_SKILL_DIR}/../../standards/groundwork.md` when the project does not have it. It holds the reserved numbers, the frontmatter and dating rules, what each required file carries, the conventions, and the anti-patterns. Do not work them from memory.
11
11
 
12
12
  ## Guards
13
13
 
@@ -65,19 +65,9 @@ Then read only what a live question needs. Do not read entire directories specul
65
65
 
66
66
  Do not dispatch subagents. A groundwork track is a conversation, and fanning out loses the reasoning that makes the folder worth keeping. A search too large to run inline is a finding that the question is too broad.
67
67
 
68
- ## Open question format
68
+ ## Open questions in chat
69
69
 
70
- Every open question carries a lean, wherever it appears: inside a topic file, in `00-scope.md`, and in the chat output. A bare numbered list hands the reader a quiz and defers the judgment the track exists to inform.
71
-
72
- ```markdown
73
- 1. <question>
74
- - Leaning: <where the evidence currently points>
75
- - Overturned by: <the finding that would change it>
76
- ```
77
-
78
- - `Leaning:` is weaker than a plan's `- Suggested:`. It records the current read on a question still open by definition, not a decision to accept by default at execution time.
79
- - Pair every lean with what would overturn it. A lean with no falsifier is an opinion.
80
- - On a measurement rather than a judgment, write `- Leaning: none, needs measuring` and drop the overturn line. A guess at a number is worse than an admission.
70
+ The standard sets the open question format and requires it inside a topic file and in `00-scope.md`. Carry the same shape into the chat output, which sits outside the folder the standard governs. A bare numbered list hands the reader a quiz and defers the judgment the track exists to inform.
81
71
 
82
72
  ## Open mode
83
73
 
@@ -85,7 +75,7 @@ Every open question carries a lean, wherever it appears: inside a topic file, in
85
75
  2. Write `README.md` first. Writing it first forces the question of what the track is for.
86
76
  3. Write `01-current-state.md` by measuring now. Never carry a figure from a previous session or from recall without re-measuring it. Measure only what an open question in the folder needs. A number with no question attached is how groundwork turns into the work.
87
77
  4. Write `00-scope.md` when the track is large enough to run away. Skip it on a small track.
88
- 5. Add topic files at `02` through `05` as the subject demands. Close each one with its open questions in the format above.
78
+ 5. Add topic files at `02` through `05` as the subject demands. Close each one with its open questions in the standard's format.
89
79
  6. Keep going. Revise, reframe, and take correction as the questions move. The folder is meant to be rewritten.
90
80
 
91
81
  ## Resume mode
@@ -7,7 +7,7 @@ description: Files a raw brain dump into a numbered intake folder under `.claude
7
7
 
8
8
  Intake dispositions many findings in breadth. A dump goes in, an inventory comes out, and every item carries a problem measured against the tree, one proposed fix, and a verdict. The item that turns out to be already settled is the highest-value output, and it is the one thing neither a plan nor a groundwork track has anywhere to put.
9
9
 
10
- Read `${CLAUDE_SKILL_DIR}/references/folder-format.md` before writing any file in the folder. It holds the numbering, the file map, the frontmatter, and the item template.
10
+ Read `.claude/standards/intake.md` from the project root before writing any file in the folder, or `${CLAUDE_SKILL_DIR}/../../standards/intake.md` when the project does not have it. It holds the numbering, the file map, the frontmatter and dating rules, the item format, and the answer contract. Do not work them from memory.
11
11
 
12
12
  ## Routing
13
13
 
@@ -34,7 +34,7 @@ Using the wrong one fails in two shapes. Intake on a question that needs measuri
34
34
  - Reading is unrestricted inside the project. Measuring is the work.
35
35
  - Treat the folder as gitignored and unbacked. No check reaches its contents, so every rule stated here holds only while a session reads it.
36
36
 
37
- Nothing outside this body carries the floor, and no path-scoped rule can. The item format and the answer contract are heading for a standard covering this folder and a groundwork track together, which is queued rather than written.
37
+ Nothing outside this body carries the write-scope floor, and no path-scoped rule can. A misrouted write lands on a path the folder's glob never matches, so the rule that ships beside the intake standard carries the item format and the answer contract instead, for a session editing the folder with this skill unloaded.
38
38
 
39
39
  ## Step 1: detect open or resume
40
40
 
@@ -71,7 +71,9 @@ Two heading levels is the right depth. A third means the cluster should have bee
71
71
 
72
72
  ## Step 5: disposition each item
73
73
 
74
- Write every item in the format below, in the cluster file its fix belongs to. Close each item with a verdict and an empty operator slot.
74
+ Write every item in the standard's item format, in the cluster file its fix belongs to. Close each item with a verdict and an empty operator slot, and never fill that slot or read an empty one as agreement.
75
+
76
+ Where an item's call is the operator's, pair it with a suggestion rather than a bare question. The toolkit's `decision-help` snippet writes the same shape for chat use, and the standard's item format is the whole spec.
75
77
 
76
78
  ## Step 6: write the index
77
79
 
@@ -81,40 +83,6 @@ Each open question in the index is a labeled markdown link to its owning item's
81
83
 
82
84
  Add `99-next-session.md` only where the pass ends holding context no cluster file carries, such as a dump half filed or a measurement that has to be redone. Write it self-contained, since the folder is unbacked and the conversation behind it compacts away.
83
85
 
84
- ## Item format
85
-
86
- ```markdown
87
- ### N. Short title stating the defect
88
-
89
- - **Problem:** what is wrong today, stated against the tree and carrying a number or a file path
90
- - **Fix:** the one change proposed
91
- - **Worth it:** yes, later, or no, with the reason
92
- - **Open:** only where the call is the operator's
93
- - **Suggested:** the pick in one sentence, then the reason and the main tradeoff in one or two
94
- - **Overlaps:** the live board task that already owns this item
95
- - **You:**
96
- ```
97
-
98
- - `Problem:`, `Fix:`, `Worth it:`, and the empty `You:` slot ship on every item. The other two are conditional.
99
- - `Suggested:` is required whenever `Open:` is present. A bare question invites a bare answer, and `ok` against two defensible options carries no information. Where the answer is the operator's preference rather than a technical call, say so in that form rather than inventing a default. The toolkit's `decision-help` snippet writes the same four-line shape for chat use, and the four lines above are the whole spec.
100
- - `Overlaps:` never replaces `Worth it:`. The items where a live board task might be the thing that is wrong are exactly the ones whose verdict matters most.
101
-
102
- ## The answer contract
103
-
104
- `You:` belongs to the operator and ships empty on every item.
105
-
106
- Empty means unread. It never means agreement. Accepting a verdict is typed as one token, `- **You:** ok`.
107
-
108
- That inverts the plan file's contract, where a blank `- Answer:` means accept the suggestion, and the inversion is deliberate. A plan is read in one sitting with every question already surfaced in chat. An intake folder is read over weeks, so an empty slot is ambiguous between accepting the verdict and never having reached the item, and the second reading is far more likely. Acting on silence as consent ships a change nobody approved.
109
-
110
- Never fill a `You:` slot, and never infer a disposition from an empty one. On a resume pass, report unread items by count rather than deciding them.
111
-
112
- ## Numbering
113
-
114
- Numbers are read order and nothing else. Reserve `00` for the index and carry the domain in every other filename, so `07-tooling.md` says what it holds before anyone opens it.
115
-
116
- Do not reserve mid-range numbers. Clusters differ per dump, so a contract over `06` would force every future intake into one dump's shape. `claude-groundwork` reserves its numbers because its shape is fixed, and that half of the convention does not transfer.
117
-
118
86
  ## Output
119
87
 
120
88
  Emit the full relative path from the project root for every file written, and name the heading and the act beside it. A path alone cannot distinguish three new items from one reworded sentence in a file that holds a dozen items and lives for weeks, so a bare path sends the reader to diff it against memory. This overrides the paths-only reporting the project states generally, which stays right wherever the reader is about to see a diff.
@@ -0,0 +1,16 @@
1
+ ---
2
+ description: Route .claude/groundwork/ edits to the groundwork standard for numbering, frontmatter, and required file contents
3
+ paths:
4
+ - '.claude/groundwork/**'
5
+ ---
6
+
7
+ # Groundwork standards
8
+
9
+ ## Measuring and closing
10
+
11
+ - Never carry a figure from an earlier session without re-measuring it. Mark an inference as an inference.
12
+ - Never close a track while an open question quietly fails an outcome. Resolve it, or record it as knowingly accepted.
13
+
14
+ ## Authority
15
+
16
+ - Follow `.claude/standards/groundwork.md` for reserved numbering, frontmatter and dating, what each required file holds, and the conventions a track keeps. It is the single source.
@@ -0,0 +1,16 @@
1
+ ---
2
+ description: Route .claude/intake/ edits to the intake standard for the item format, the answer contract, and numbering
3
+ paths:
4
+ - '.claude/intake/**'
5
+ ---
6
+
7
+ # Intake standards
8
+
9
+ ## The answer contract
10
+
11
+ - Never fill a `You:` slot and never infer a disposition from an empty one. Empty means unread, never agreement.
12
+ - Report unread items by count on a resume pass. Do not decide one.
13
+
14
+ ## Authority
15
+
16
+ - Follow `.claude/standards/intake.md` for the folder layout, frontmatter and dating, the item format, and retrieval. It is the single source.
@@ -1,2 +1,2 @@
1
1
  extends = ""
2
- rules = ["000-constitution", "010-testing", "020-concurrency", "030-error-handling", "040-performance", "050-logging", "060-naming", "070-planning", "080-config-comments", "090-code-comments", "500-prose", "501-markdown", "510-context", "520-wireframes", "530-requirements", "540-architecture", "550-design", "555-tasks", "560-diagrams", "570-skill", "580-readme", "590-rule-authoring", "591-standard-authoring"]
2
+ rules = ["000-constitution", "010-testing", "020-concurrency", "030-error-handling", "040-performance", "050-logging", "060-naming", "070-planning", "080-config-comments", "090-code-comments", "500-prose", "501-markdown", "510-context", "520-wireframes", "530-requirements", "540-architecture", "550-design", "555-tasks", "556-groundwork", "557-intake", "560-diagrams", "570-skill", "580-readme", "590-rule-authoring", "591-standard-authoring"]
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@erclx/aitk",
3
3
  "type": "module",
4
- "version": "0.56.0",
4
+ "version": "0.57.0",
5
5
  "description": "Infrastructure and quality tooling for developer workflows",
6
6
  "license": "MIT",
7
7
  "bin": {
@@ -45,14 +45,34 @@ for payload in "$SKILLS_JSON" "$GOV_JSON" "$STANDARDS_JSON" "$SNIPPETS_JSON" "$T
45
45
  fi
46
46
  done
47
47
 
48
- export SKILLS_JSON GOV_JSON STANDARDS_JSON SNIPPETS_JSON TOOLING_JSON
48
+ # The catalogs reach the eval as files rather than as environment entries. Linux
49
+ # caps a single env string at 128KB, and the standards payload crossed it, which
50
+ # fails the exec with E2BIG before any stage can report a stale count. A file
51
+ # path is bounded whatever the catalogs grow to.
52
+ PAYLOAD_DIR="$(mktemp -d)"
53
+ trap 'rm -rf "$PAYLOAD_DIR"' EXIT
54
+
55
+ printf '%s' "$SKILLS_JSON" >"$PAYLOAD_DIR/skills.json"
56
+ printf '%s' "$GOV_JSON" >"$PAYLOAD_DIR/gov.json"
57
+ printf '%s' "$STANDARDS_JSON" >"$PAYLOAD_DIR/standards.json"
58
+ printf '%s' "$SNIPPETS_JSON" >"$PAYLOAD_DIR/snippets.json"
59
+ printf '%s' "$TOOLING_JSON" >"$PAYLOAD_DIR/tooling.json"
60
+
61
+ export PAYLOAD_DIR
49
62
  export TEMPLATE OUTPUT LISTED PROJECT_ROOT
50
63
 
51
64
  bun --eval '
52
- const {
53
- SKILLS_JSON, GOV_JSON, STANDARDS_JSON, SNIPPETS_JSON, TOOLING_JSON,
54
- TEMPLATE, OUTPUT, LISTED, PROJECT_ROOT,
55
- } = process.env
65
+ const { readFileSync } = require("node:fs")
66
+
67
+ const { PAYLOAD_DIR, TEMPLATE, OUTPUT, LISTED, PROJECT_ROOT } = process.env
68
+
69
+ const payload = (name) => readFileSync(PAYLOAD_DIR + "/" + name + ".json", "utf8")
70
+
71
+ const SKILLS_JSON = payload("skills")
72
+ const GOV_JSON = payload("gov")
73
+ const STANDARDS_JSON = payload("standards")
74
+ const SNIPPETS_JSON = payload("snippets")
75
+ const TOOLING_JSON = payload("tooling")
56
76
 
57
77
  const listed = Number(LISTED)
58
78
  const skills = JSON.parse(SKILLS_JSON).skills.map((entry) => entry.name)
@@ -0,0 +1,199 @@
1
+ ---
2
+ title: Groundwork reference
3
+ description: Folder layout, reserved numbering, frontmatter and dating, required file contents, and conventions for a measurement track
4
+ ---
5
+
6
+ # Groundwork reference
7
+
8
+ Applies to a groundwork track at `.claude/groundwork/<slug>/`. A track measures one question that has to be settled before anyone can plan against it. The numbering is the table of contents, so a reader opens the folder and knows where to start and what follows without an index maintained inside each file.
9
+
10
+ The folder is gitignored and unbacked. No check reaches its contents and no history recovers a deleted one, so every rule here holds only while a session reads it, and the handoff file has to be self-contained.
11
+
12
+ ## Scope
13
+
14
+ Governs a groundwork track under `.claude/groundwork/<slug>/`: folder layout, reserved numbering, frontmatter and dating, what each required file holds, and the conventions a track keeps.
15
+
16
+ Does not govern:
17
+
18
+ - A dump of many findings filed by domain, each carrying its own verdict: `intake.md`
19
+ - The task file a closing track writes, and the origin line pointing back at the folder: `tasks.md`
20
+ - Voice and word choice: `prose.md`
21
+ - Headings, punctuation, and file references: `markdown.md`
22
+ - When a project opens a track at all, and the procedure that runs one, which belong to the surface driving it
23
+
24
+ ## What a working track looks like
25
+
26
+ A track works when a session that has never seen it re-enters from the folder alone and can answer each of these:
27
+
28
+ - Which single question is being measured, and why is it running now?
29
+ - What is the current state, measured during this pass rather than carried in from an earlier one?
30
+ - Which questions are still open, where does the evidence point, and what would overturn that?
31
+ - What was decided, and what was considered and dropped?
32
+
33
+ A track failing these is non-conforming even when it satisfies every shape rule below.
34
+
35
+ ## Frontmatter and dating
36
+
37
+ Every file carries `title` and `description`. `README.md` carries one field the others do not.
38
+
39
+ - `title` (required): the track subject in sentence case
40
+ - `description` (required): one line naming what the track measures
41
+ - `date` (required, `README.md` only): the day the folder opened, as `YYYY-MM-DD`
42
+
43
+ Carry the opening date as a frontmatter field rather than a sentence in the body. A date written into prose is readable by a person and by nothing that walks the folder, and the two spellings drift once both are permitted. State it once and remove the body sentence rather than leaving the pair in place.
44
+
45
+ Date the folder once rather than every file. A per-file date leaves every other file stale the first time one is edited, while the opening date never rots. The checkable half is the commit each measurement was taken against, which the file holding that measurement names.
46
+
47
+ ## Reserved numbers
48
+
49
+ Five slots carry a fixed meaning. The rest are free, which is what lets the middle of a folder follow its subject.
50
+
51
+ | Number | Holds | Required |
52
+ | ------------ | ----------------------------------------------- | --------------------------- |
53
+ | `00` | Scope: constraints, risks, question list | Large tracks only |
54
+ | `01` | Current state, measured | Always |
55
+ | `02` to `05` | Topic files, whatever the subject demands | As needed |
56
+ | `06` | Decision | To close |
57
+ | `07` | Handoff, self-contained | To close |
58
+ | `08` | Spikes: method, result, and cost per experiment | Tracks that run experiments |
59
+
60
+ A folder missing `06` and `07` is live. That is the only status marker, and no separate tracking is needed.
61
+
62
+ `08` sits after the closing files because it is an appendix. It holds evidence rather than a topic, so folding it into the `02` to `05` range buries it, and a track closes with or without one.
63
+
64
+ ## README.md
65
+
66
+ Orients. Holds no findings.
67
+
68
+ - A one-line definition of the investigation
69
+ - A `## Why` section stating why the track is running now
70
+ - A file-map table of filename and what it holds, kept current as files are added or retired
71
+ - A `## Method` section splitting internal sources from external ones, naming which were used and which were not yet done, and listing under a leads heading any external source found but not opened
72
+ - A `## Prior art` section
73
+ - A `## Source citation` section stating the rule below, so a returning session picks it up from the folder
74
+ - The phase stated out loud in the first three lines, in the form `Groundwork phase. Nothing here is a feature plan.`
75
+
76
+ The file map is how a returning reader re-enters. After the decision, it is the highest-value thing in the folder.
77
+
78
+ Every claim about a source outside the project carries a link to it, wherever the claim appears in the folder. A sentence asserting that a vendor documents something reads the same whether it came from a fetched page or from recall, and a later reader can neither check it nor tell the two apart.
79
+
80
+ A source found and not read is listed as a lead and is never cited. That half is what keeps the rule from producing citation theater, because a link attached to a page nobody opened is worse than no link. Listing it still pays, since it stops a later pass re-searching for what this one already surfaced.
81
+
82
+ Where the track supersedes an earlier plan or an earlier folder, name it and say not to go looking for it. Without that, the old reasoning keeps circulating.
83
+
84
+ ## 01-current-state.md
85
+
86
+ Facts before opinion. Verified measurement only, taken during this pass.
87
+
88
+ - Never carry a figure from a previous session without re-measuring. Stale ratios survive a sunset that invalidates them, and every number built on one is quietly wrong.
89
+ - Mark an inference as an inference where one is unavoidable.
90
+ - Measure only what an open question needs. A number with no question attached is the mechanism by which the groundwork becomes the work.
91
+
92
+ ## 00-scope.md
93
+
94
+ Written when the subject is large enough to run away. Holds constraints, risks, the open question list, and the downstream surfaces a decision would touch. A small track skips it and carries its questions inside the topic files.
95
+
96
+ ## 06-decision.md
97
+
98
+ Closes the folder. Everything above it is input.
99
+
100
+ - The problem stated once
101
+ - The goal
102
+ - The items to do
103
+ - What was considered and dropped
104
+
105
+ The dropped list pays off later. It is what stops a future session re-proposing something already rejected.
106
+
107
+ ## 07-next-session.md
108
+
109
+ Written to survive a compaction that loses the conversation. It repeats facts held elsewhere in the folder rather than pointing at them. That duplication is correct here and wrong everywhere else.
110
+
111
+ ## 08-spikes.md
112
+
113
+ Evidence by experiment, sitting beside the evidence by measurement that `01-current-state.md` holds. Optional, and most tracks never open it, because measuring what is already there settles most questions.
114
+
115
+ Each spike carries four things:
116
+
117
+ - The open question it answers, named by file and number. A spike attached to no question is the same runaway the current-state file is capped against.
118
+ - The method, stated fully enough for a later reader to re-run it. Name the fixture and where it lived, the exact command, and how many repetitions were run. An arm pointed at a fixture inside the project measured the project, so the fixture location is part of whether the result stands.
119
+ - The result, and which question it closes. A spike that settles nothing is still recorded, so a later pass does not pay to learn the same thing twice.
120
+ - The measured cost, and the caveats bounding what the result proves.
121
+
122
+ Cost is a report rather than a limit, and it is what makes the next spike estimable before anyone commits to it. Record it even when it comes to a single read.
123
+
124
+ Reach for a test harness the project already carries before building one. A track needing an experiment no existing harness can express has found a finding, and it belongs in the folder rather than in a new abstraction.
125
+
126
+ One method error is worth naming, because it is made rather than imagined. Counting matches in a transcript overstates whether a file was read, since an instruction naming a path puts that path in the transcript whether or not anything opened it. The check is the tool call.
127
+
128
+ ## Open questions
129
+
130
+ Every open question carries a lean, wherever it appears. A bare numbered list hands the reader a quiz and defers the judgment the track exists to inform.
131
+
132
+ ```markdown
133
+ 1. <question>
134
+ - Leaning: <where the evidence currently points>
135
+ - Overturned by: <the finding that would change it>
136
+ ```
137
+
138
+ - Pair every lean with what would overturn it. A lean with no falsifier is an opinion.
139
+ - On a measurement rather than a judgment, write `- Leaning: none, needs measuring` and drop the overturn line. A guess at a number is worse than an admission.
140
+ - Mark each question open or answered, and repeat the open ones at the end of the file they belong to. That gives the decision file its agenda for free.
141
+
142
+ A lean is weaker than the suggestion a plan file carries. It records the current read on a question still open by definition, not a decision to accept by default at execution time.
143
+
144
+ ## Conventions
145
+
146
+ - State a number with what it settles. The strongest sections are the ones where a measurement answers a named question and says so.
147
+ - Send a finding that would change an existing standard or rule to a backlog. Only a demonstrated failure changes one.
148
+ - Let the file count follow the number of genuinely separable questions, not the importance of the topic. A large topic with one question is a small folder.
149
+
150
+ ## Anti-patterns
151
+
152
+ - **The groundwork becomes the work.** Gathering expands until the measuring costs more than the change it justifies. Cap it, and drop any thread with no question attached.
153
+ - **Deciding by omission.** Closing a track while an unresolved question quietly fails an outcome. Resolve it or record it as knowingly accepted.
154
+ - **Recording a constraint discovered while defending a decision.** Check a constraint against the alternative design before writing it down, or a fact about the current shape gets written up as inherent to the problem.
155
+ - **A plan written before the groundwork.** Every track that has done this had to supersede the plan it wrote.
156
+ - **The date left in the body.** A frontmatter field and a sentence both claiming the opening date resolve to whichever a reader happens to hit, and only one of them is readable by a walker.
157
+
158
+ ## Template
159
+
160
+ ```markdown
161
+ ---
162
+ title: <Track subject>
163
+ description: <one line naming what the track measures>
164
+ date: <YYYY-MM-DD>
165
+ ---
166
+
167
+ # <Track subject>
168
+
169
+ Groundwork phase. Nothing here is a feature plan.
170
+
171
+ <One line defining the investigation.>
172
+
173
+ ## Why
174
+
175
+ <Why the track is running now.>
176
+
177
+ ## Files
178
+
179
+ | File | Holds |
180
+ | --------------------- | --------------- |
181
+ | `01-current-state.md` | <what it holds> |
182
+
183
+ ## Method
184
+
185
+ <Internal sources used, external sources used, and what is not yet done.>
186
+
187
+ ### Leads
188
+
189
+ - <external source found but not opened>
190
+
191
+ ## Prior art
192
+
193
+ <Earlier plans, folders, or decisions this track supersedes or builds on.>
194
+
195
+ ## Source citation
196
+
197
+ Every claim about a source outside the project carries a link. A source found
198
+ and not read is listed as a lead and is never cited.
199
+ ```
@@ -11,6 +11,8 @@ Reference docs for consistent authoring across the toolkit and target projects.
11
11
  - [Context entry reference](context.md): Shape and content rules for .claude/context/<domain>.md entries
12
12
  - [Design reference](design.md): Shape and content rules for .claude/DESIGN.md
13
13
  - [Diagram reference](diagrams.md): Shape and content rules for .claude/diagrams/<kind>.md files
14
+ - [Groundwork reference](groundwork.md): Folder layout, reserved numbering, frontmatter and dating, required file contents, and conventions for a measurement track
15
+ - [Intake reference](intake.md): Folder layout, reserved index number, frontmatter and dating, the item template, the answer contract, and retrieval
14
16
  - [Markdown reference](markdown.md): Headings, paragraph and list structure, code spans, punctuation, emphasis, and file references
15
17
  - [Prose reference](prose.md): Voice, language, and frontmatter wording for reference markdown
16
18
  - [Publish reference](publish.md): Scan run against finished text leaving through a channel no automated check covers
@@ -1,14 +1,37 @@
1
1
  ---
2
- title: Intake folder reference
3
- description: Reserved index number, file map, frontmatter and dating, the item template, retrieval, and anti-patterns
2
+ title: Intake reference
3
+ description: Folder layout, reserved index number, frontmatter and dating, the item template, the answer contract, and retrieval
4
4
  ---
5
5
 
6
- # Intake folder reference
6
+ # Intake reference
7
7
 
8
- Applies to an intake folder at `.claude/intake/<slug>/`. One folder holds one dump, filed by domain, and every finding in it is an item carrying a measured problem and a verdict.
8
+ Applies to an intake folder at `.claude/intake/<slug>/`. One folder holds one dump, filed by domain, and every finding in it is an item carrying a measured problem, one proposed fix, and a verdict.
9
9
 
10
10
  The folder is gitignored and unbacked. No check reaches its contents, so the shape below survives only by being read.
11
11
 
12
+ ## Scope
13
+
14
+ Governs an intake folder under `.claude/intake/<slug>/`: folder layout, the reserved index number, frontmatter and dating, the item format, the answer contract, and retrieval.
15
+
16
+ Does not govern:
17
+
18
+ - One question measured in depth before anyone can plan against it: `groundwork.md`
19
+ - The task file promoting an item onto the board, and the origin line pointing back at the folder: `tasks.md`
20
+ - Voice and word choice: `prose.md`
21
+ - Headings, punctuation, and file references: `markdown.md`
22
+ - Which findings belong in a dump at all, and the procedure that files one, which belong to the surface driving it
23
+
24
+ ## What a working intake looks like
25
+
26
+ An intake works when a reader returning weeks later can act on it from the folder alone:
27
+
28
+ - Which items are ready to promote, and what does shipping each one cost?
29
+ - What measurement stands behind each problem line, and against which commit was it taken?
30
+ - Which items has the operator answered, and which has nobody reached?
31
+ - Which live board task does an item already overlap?
32
+
33
+ An intake failing these is non-conforming even when it satisfies every shape rule below.
34
+
12
35
  ## Files
13
36
 
14
37
  | File | Holds | Required |
@@ -19,13 +42,19 @@ The folder is gitignored and unbacked. No check reaches its contents, so the sha
19
42
 
20
43
  `00` is the only reserved number. Everything else is read order, and the domain rides in the filename so a reader knows what `07-tooling.md` holds without opening it.
21
44
 
22
- Do not reserve mid-range numbers. Clusters differ per dump, so a contract over `06` would force every future intake into one dump's shape. Groundwork reserves its numbers because its shape is fixed, and that half of the convention does not transfer.
45
+ Do not reserve mid-range numbers. Clusters differ per dump, so a contract over `06` would force every future intake into one dump's shape. A folder whose shape is fixed can reserve its numbers, and that half of the convention does not transfer.
23
46
 
24
47
  Let the file count follow the number of separable domains. A large dump with two domains is a small folder.
25
48
 
26
49
  ## Frontmatter and dating
27
50
 
28
- Every file carries `title` and `description` per the project's prose standard. `00-overview.md` carries one field the others do not, a `date` holding the day the folder opened.
51
+ Every file carries `title` and `description`. `00-overview.md` carries one field the others do not.
52
+
53
+ - `title` (required): the dump subject in sentence case
54
+ - `description` (required): one line naming what the dump covers
55
+ - `date` (required, `00-overview.md` only): the day the folder opened, as `YYYY-MM-DD`
56
+
57
+ Carry the opening date as a frontmatter field rather than a sentence in the body. A date written into prose is readable by a person and by nothing that walks the folder, and the two spellings drift once both are permitted.
29
58
 
30
59
  Date the folder once rather than every file. Twelve dated files leave eleven stale the first time one cluster is edited, and the opening date never rots. The checkable half is the commit, which the overview body names as what the claims were measured against.
31
60
 
@@ -44,7 +73,7 @@ The index carries no answer slot. One question in two answerable places has no r
44
73
 
45
74
  Where an item touches a task already on the board, say so in the index rather than only inside the item. A reader deciding what to promote reads the index first.
46
75
 
47
- ## Item template
76
+ ## Item format
48
77
 
49
78
  ```markdown
50
79
  ### N. Short title stating the defect
@@ -58,11 +87,23 @@ Where an item touches a task already on the board, say so in the index rather th
58
87
  - **You:**
59
88
  ```
60
89
 
61
- `Problem:`, `Fix:`, `Worth it:`, and the empty `You:` slot ship on every item. `Open:` appears only where the call is the operator's, `Suggested:` is required whenever it does, and `Overlaps:` is optional and never replaces the verdict.
90
+ - `Problem:`, `Fix:`, `Worth it:`, and the empty `You:` slot ship on every item. The other two are conditional.
91
+ - `Suggested:` is required whenever `Open:` is present. A bare question invites a bare answer, and `ok` against two defensible options carries no information. Where the answer is the operator's preference rather than a technical call, say so in that form rather than inventing a default.
92
+ - `Overlaps:` never replaces `Worth it:`. The items where a live board task might be the thing that is wrong are exactly the ones whose verdict matters most.
62
93
 
63
94
  Two heading levels is the right depth inside a cluster file. A third means the cluster should have been its own file.
64
95
 
65
- An item may carry a bolded standalone line between the bullets where a finding needs a name of its own. Keep it rare. Everything that fits the four bullets belongs in them.
96
+ An item may carry a bolded standalone line between the bullets where a finding needs a name of its own. Keep it rare. Everything fitting the four bullets belongs in them.
97
+
98
+ ## The answer contract
99
+
100
+ `You:` belongs to the operator and ships empty on every item.
101
+
102
+ Empty means unread. It never means agreement. Accepting a verdict is typed as one token, `- **You:** ok`.
103
+
104
+ That inverts the plan file's contract, where a blank answer slot means accept the suggestion, and the inversion is deliberate. A plan is read in one sitting with every question already surfaced in conversation. An intake folder is read over weeks, so an empty slot is ambiguous between accepting the verdict and never having reached the item, and the second reading is far more likely. Acting on silence as consent ships a change nobody approved.
105
+
106
+ Never fill a `You:` slot, and never infer a disposition from an empty one. On a resume pass, report unread items by count rather than deciding them.
66
107
 
67
108
  ## Retrieval
68
109
 
@@ -95,3 +136,45 @@ Both walk `###` headings, which is the mechanical reason an answer typed anywher
95
136
  - **The overlap that ate the verdict.** Replacing `Worth it:` with `Overlaps:` drops the call on the items most likely to change what a live task should do.
96
137
  - **A question in two places.** An open question answerable in the index and on the item resolves to whichever a reader happens to open.
97
138
  - **The dump filed as one concern.** Forty findings under one heading is a folder nobody can promote from, and the split by domain is what makes each item liftable on its own.
139
+ - **The date left in the body.** A frontmatter field and a sentence both claiming the opening date resolve to whichever a reader happens to hit, and only one of them is readable by a walker.
140
+
141
+ ## Template
142
+
143
+ ```markdown
144
+ ---
145
+ title: <Dump subject>
146
+ description: <one line naming what the dump covers>
147
+ date: <YYYY-MM-DD>
148
+ ---
149
+
150
+ # <Dump subject>
151
+
152
+ <One line on what the dump covers and the commit it was measured against.>
153
+
154
+ ## Item format
155
+
156
+ <the item format block, copied so a returning session picks the shape up here>
157
+
158
+ ## The answer contract
159
+
160
+ `You:` ships empty and empty means unread. Accepting a verdict is typed as
161
+ `- **You:** ok`. Nothing here is decided by silence.
162
+
163
+ ## Clusters
164
+
165
+ | File | Holds | Items | Open |
166
+ | ---------------- | --------------- | ----- | ---- |
167
+ | `NN-<domain>.md` | <what it holds> | <n> | <n> |
168
+
169
+ ## Verdicts
170
+
171
+ <counts across the folder>
172
+
173
+ ## Ready
174
+
175
+ - <item, grouped by what shipping it costs>
176
+
177
+ ## Open questions
178
+
179
+ 1. [<question>](NN-<domain>.md#n-short-title-stating-the-defect)
180
+ ```
@@ -1,107 +0,0 @@
1
- ---
2
- title: Groundwork folder reference
3
- description: Reserved file numbers, required file contents, and anti-patterns for a .claude/groundwork/ folder
4
- ---
5
-
6
- # Groundwork folder reference
7
-
8
- Applies to a groundwork folder at `.claude/groundwork/<slug>/`. The numbering is the table of contents: a reader opens the folder and knows where to start and what follows, with no index maintained inside each file. Protect that first, because the instinct when adding a file mid-track is to name it for its topic instead.
9
-
10
- The folder is gitignored and unbacked. It dies with the machine, which is why the handoff file has to be self-contained.
11
-
12
- ## Reserved numbers
13
-
14
- Five slots carry a fixed meaning. The rest are free, which is what lets the middle of a folder follow its subject.
15
-
16
- | Number | Holds | Required |
17
- | ------------ | ----------------------------------------------- | --------------------------- |
18
- | `00` | Scope: constraints, risks, question list | Large tracks only |
19
- | `01` | Current state, measured | Always |
20
- | `02` to `05` | Topic files, whatever the subject demands | As needed |
21
- | `06` | Decision | To close |
22
- | `07` | Handoff, self-contained | To close |
23
- | `08` | Spikes: method, result, and cost per experiment | Tracks that run experiments |
24
-
25
- A folder missing `06` and `07` is live. That is the only status marker, and no separate tracking is needed.
26
-
27
- `08` sits after the closing files because it is an appendix. It holds evidence rather than a topic, so folding it into the `02` to `05` range buries it, and a track closes with or without one.
28
-
29
- ## README.md
30
-
31
- Orients. Holds no findings.
32
-
33
- - A one-line definition of the investigation
34
- - The date opened
35
- - A `## Why` section stating why the track is running now
36
- - A file-map table of filename and what it holds, kept current as files are added or retired
37
- - A `## Method` section splitting internal sources from external ones, naming which were used and which were not yet done, and listing under a leads heading any external source found but not opened
38
- - A `## Prior art` section
39
- - A `## Source citation` section stating the rule below, so a returning session picks it up from the folder
40
- - The phase stated out loud in the first three lines, in the form `Groundwork phase. Nothing here is a feature plan.`
41
-
42
- The file map is how a returning reader re-enters. After the decision, it is the highest-value thing in the folder.
43
-
44
- Every claim about a source outside the project carries a link to it, wherever the claim appears in the folder. A sentence asserting that the vendor documents something reads the same whether it came from a fetched page or from recall, and a later reader can neither check it nor tell the two apart.
45
-
46
- A source found and not read is listed as a lead and is never cited. That half is what keeps the rule from producing citation theater, because a link attached to a page nobody opened is worse than no link. Listing it still pays, since it stops a later pass re-searching for what this one already surfaced.
47
-
48
- Where the track supersedes an earlier plan or an earlier folder, name it and say not to go looking for it. Without that, the old reasoning keeps circulating.
49
-
50
- ## 01-current-state.md
51
-
52
- Facts before opinion. Verified measurement only, taken during this pass.
53
-
54
- - Never carry a figure from a previous session without re-measuring. Stale ratios survive a sunset that invalidates them, and every number built on top of one is quietly wrong.
55
- - Mark an inference as an inference where one is unavoidable.
56
- - Measure only what an open question needs. A number with no question attached is the mechanism by which the groundwork becomes the work.
57
-
58
- ## 00-scope.md
59
-
60
- Written when the subject is large enough to run away. Holds constraints, risks, the open question list, and the downstream surfaces a decision would touch. A small track skips it and carries its questions inside the topic files.
61
-
62
- ## 06-decision.md
63
-
64
- Closes the folder. Everything above it is input.
65
-
66
- - The problem stated once
67
- - The goal
68
- - The items to do
69
- - What was considered and dropped
70
-
71
- The dropped list pays off later. It is what stops a future session re-proposing something already rejected.
72
-
73
- ## 07-next-session.md
74
-
75
- Written to survive a compaction that loses the conversation. It repeats facts held elsewhere in the folder rather than pointing at them. That duplication is correct here and wrong everywhere else.
76
-
77
- ## 08-spikes.md
78
-
79
- Evidence by experiment, sitting beside the evidence by measurement `01-current-state.md` holds. Optional, and most tracks never open it, because measuring what is already there settles most questions.
80
-
81
- Each spike carries four things:
82
-
83
- - The open question it answers, named by file and number. A spike attached to no question is the same runaway the current-state file is capped against.
84
- - The method, stated fully enough for a later reader to re-run it. Name the fixture and where it lived, the exact command, and how many repetitions were run. A headless arm pointed at a fixture inside the repository measured the repository, so the fixture location is part of whether the result stands.
85
- - The result, and which question it closes. A spike that settles nothing is still recorded, so a later pass does not pay to learn the same thing twice.
86
- - The measured cost, and the caveats that bound what the result proves.
87
-
88
- Cost is a report rather than a limit, and it is what makes the next spike estimable before anyone commits to it. Record it even when it comes to a single read.
89
-
90
- Reach for a test harness the project already carries before building one. A track that needs an experiment no existing harness can express has found a finding, and it belongs in the folder rather than in a new abstraction.
91
-
92
- One method error is worth naming here, because it was made and corrected rather than imagined. Counting matches in a transcript overstates whether a file was read, since an instruction that names a path puts that path in the transcript whether or not anything opened it. The check is the tool call.
93
-
94
- ## Conventions
95
-
96
- - Questions carry an open or answered marker, and open ones repeat at the end of the file they belong to. That gives `06-decision.md` its agenda for free.
97
- - Every open question carries a lean and what would overturn it, in the open question format in `SKILL.md`. A measurement question records that it needs measuring instead of guessing.
98
- - State a number with what it settles. The strongest sections are the ones where a measurement answers a named question and says so.
99
- - Send findings that would change an existing standard or rule to a backlog. Only a demonstrated failure changes one.
100
- - Let the file count follow the number of genuinely separable questions, not the importance of the topic. A large topic with one question is a small folder.
101
-
102
- ## Anti-patterns
103
-
104
- - **The groundwork becomes the work.** Gathering expands until the measuring costs more than the change it justifies. Cap it, and drop any thread with no question attached.
105
- - **Deciding by omission.** Closing a track while an unresolved question quietly fails an outcome. Resolve it or record it as knowingly accepted.
106
- - **Recording a constraint discovered while defending a decision.** Check a constraint against the alternative design before writing it down, or a fact about the current shape gets written up as inherent to the problem.
107
- - **A plan written before the groundwork.** Every track that has done this had to supersede the plan it wrote.