@rasensio/aidlc-content 1.32.0 → 1.34.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.
- package/capabilities/claude-code.yaml +14 -10
- package/capabilities/codex.yaml +7 -6
- package/capabilities/copilot.yaml +7 -6
- package/capabilities/cursor.yaml +7 -6
- package/capabilities/kiro.yaml +6 -6
- package/capabilities/windsurf.yaml +8 -7
- package/package.json +1 -1
- package/skills/00-overview.md +12 -2
- package/skills/04-roadmap.md +22 -7
- package/skills/05-constitution.md +6 -0
- package/skills/90-retrospective.md +6 -3
|
@@ -3,16 +3,20 @@ questions:
|
|
|
3
3
|
mechanism: AskUserQuestion
|
|
4
4
|
directive: >-
|
|
5
5
|
Render each question spec as one question in an AskUserQuestion call. The
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
6
|
+
question text opens with the one-line what it is and its example, then the
|
|
7
|
+
interrogative sentence; each option's label is its choice and its description
|
|
8
|
+
is its observable effect on that example — who would see what, what would be
|
|
9
|
+
rejected — never the mechanism, because the description is all the user sees
|
|
10
|
+
of an option and schema terms there are what made prompts unreadable. Keep
|
|
11
|
+
mechanism terms and citations in the question file. Mark the recommendation by
|
|
12
|
+
putting it first and appending "(Recommended)" to its label. At most four
|
|
13
|
+
options per question and at least two — a spec with more must be split or
|
|
14
|
+
narrowed. Never add an explicit "Other" option: the tool supplies one, and a
|
|
15
|
+
second is a dead choice the user has to rule out. The header is a chip of at
|
|
16
|
+
most 12 characters, so it names the decision, not the question. Put "Why it
|
|
17
|
+
matters", the citations and "If you say nothing" in the question file and name
|
|
18
|
+
its path in one line of the message that carries the call — they do not fit an
|
|
19
|
+
option description, and truncating them is what made questions unanswerable.
|
|
16
20
|
capabilities:
|
|
17
21
|
plan-mode:
|
|
18
22
|
phases: [ideation, requirements, design]
|
package/capabilities/codex.yaml
CHANGED
|
@@ -3,12 +3,13 @@ questions:
|
|
|
3
3
|
mechanism: request_user_input
|
|
4
4
|
directive: >-
|
|
5
5
|
Render each question spec through the structured user-input request when the
|
|
6
|
-
running Codex build exposes one — the
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
arrives and the file is what
|
|
6
|
+
running Codex build exposes one — the one-line what it is with its example,
|
|
7
|
+
then the interrogative, as the prompt; one entry per option carrying its
|
|
8
|
+
observable effect; the recommendation named as such. When it is not available,
|
|
9
|
+
fall back to numbered prose in the message and do not pretend a picker exists.
|
|
10
|
+
Either way the question file is written first and its path named in one line,
|
|
11
|
+
because a sandboxed turn can end before an answer arrives and the file is what
|
|
12
|
+
survives it.
|
|
12
13
|
capabilities:
|
|
13
14
|
code-generation:
|
|
14
15
|
phases: [implementation, testing]
|
|
@@ -3,12 +3,13 @@ questions:
|
|
|
3
3
|
mechanism: null
|
|
4
4
|
directive: >-
|
|
5
5
|
Copilot Chat has no structured question prompt, so render each spec as
|
|
6
|
-
numbered prose in the message: the
|
|
7
|
-
|
|
8
|
-
recommendation and the no-answer outcome.
|
|
9
|
-
every question, whatever was numbered
|
|
10
|
-
answering "3" must be answering the third
|
|
11
|
-
user to reply with the option number or its
|
|
6
|
+
numbered prose in the message: the one-line what it is with its example, then
|
|
7
|
+
the interrogative as a bold line, then the options as a numbered list with the
|
|
8
|
+
consequence on each, then the recommendation and the no-answer outcome.
|
|
9
|
+
Restart option numbering at 1 for every question, whatever was numbered
|
|
10
|
+
earlier in the message — a user answering "3" must be answering the third
|
|
11
|
+
option of that question. Ask the user to reply with the option number or its
|
|
12
|
+
label.
|
|
12
13
|
capabilities:
|
|
13
14
|
plan-mode:
|
|
14
15
|
phases: [ideation, requirements, design]
|
package/capabilities/cursor.yaml
CHANGED
|
@@ -3,12 +3,13 @@ questions:
|
|
|
3
3
|
mechanism: null
|
|
4
4
|
directive: >-
|
|
5
5
|
Cursor has no structured question prompt, so render each spec as numbered
|
|
6
|
-
prose in the chat: the
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
prose in the chat: the one-line what it is with its example, then the
|
|
7
|
+
interrogative as a bold line, then the options as a numbered list with the
|
|
8
|
+
consequence on each, then the recommendation and the no-answer outcome.
|
|
9
|
+
Restart option numbering at 1 for every question, whatever was numbered
|
|
10
|
+
earlier in the message. Name the question file by path so the user can open it
|
|
11
|
+
in the editor — Cursor puts the file a click away, which is what makes the
|
|
12
|
+
longer questions cheap to route there.
|
|
12
13
|
capabilities:
|
|
13
14
|
composer:
|
|
14
15
|
phases: [design, implementation]
|
package/capabilities/kiro.yaml
CHANGED
|
@@ -3,12 +3,12 @@ questions:
|
|
|
3
3
|
mechanism: null
|
|
4
4
|
directive: >-
|
|
5
5
|
Kiro has no structured question prompt, so render each spec as numbered prose
|
|
6
|
-
in the chat: the
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
`.kiro/specs/` — a spec
|
|
11
|
-
question is recorded.
|
|
6
|
+
in the chat: the one-line what it is with its example, then the interrogative
|
|
7
|
+
as a bold line, then the options as a numbered list with the consequence on
|
|
8
|
+
each, then the recommendation and the no-answer outcome. Restart option
|
|
9
|
+
numbering at 1 for every question, whatever was numbered earlier in the
|
|
10
|
+
message. The question file stays under `.aidlc/`, not `.kiro/specs/` — a spec
|
|
11
|
+
session is where the answer lands, not where the question is recorded.
|
|
12
12
|
capabilities:
|
|
13
13
|
spec-driven-development:
|
|
14
14
|
phases: [requirements, design, implementation]
|
|
@@ -3,13 +3,14 @@ questions:
|
|
|
3
3
|
mechanism: null
|
|
4
4
|
directive: >-
|
|
5
5
|
Windsurf has no structured question prompt, so render each spec as numbered
|
|
6
|
-
prose in Cascade: the
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
prose in Cascade: the one-line what it is with its example, then the
|
|
7
|
+
interrogative as a bold line, then the options as a numbered list with the
|
|
8
|
+
consequence on each, then the recommendation and the no-answer outcome.
|
|
9
|
+
Restart option numbering at 1 for every question, whatever was numbered
|
|
10
|
+
earlier in the message. Windsurf's context window is the tightest of the
|
|
11
|
+
supported platforms, so route to the question file sooner here — keep the
|
|
12
|
+
rendered prompt to the what-it-is line, the interrogative, the option labels
|
|
13
|
+
and the file path, and leave the citations in the file.
|
|
13
14
|
capabilities:
|
|
14
15
|
cascade:
|
|
15
16
|
phases: [implementation]
|
package/package.json
CHANGED
package/skills/00-overview.md
CHANGED
|
@@ -165,12 +165,17 @@ Ask the user something when **different answers would change an artifact, a desi
|
|
|
165
165
|
Every question is written first as a **spec** — platform-neutral, and never printed into the conversation. It carries, at minimum:
|
|
166
166
|
|
|
167
167
|
- **The decision**, as one interrogative sentence.
|
|
168
|
+
- **What it is** — what the thing being decided is and what it does, in plain words, shown on one concrete example with names, values or dates. Required on every question: the person answering owns the decision but was not in your research, and does not carry the vocabulary you just read. For an everyday concept this is one sentence; its length scales, its presence does not.
|
|
168
169
|
- **Why it matters** — what it blocks, and what goes wrong if it is guessed.
|
|
169
|
-
- **What the repo already says** — cited as `path:line`, or `path` when the whole file is the point. "Nothing found" is a valid citation; saying nothing is not.
|
|
170
|
-
- **Two to four options**, each with its consequence spelled out.
|
|
170
|
+
- **What the repo already says** — cited as `path:line`, or `path` when the whole file is the point. "Nothing found" is a valid citation; saying nothing is not. Schema terms, mechanism names and citations belong here, not in the options.
|
|
171
|
+
- **Two to four options**, each defined by its observable effect — who sees what, what gets rejected, what gets flagged — with its consequence spelled out. Say what would happen, not how it would be built.
|
|
171
172
|
- **A recommendation**, marked as such — exactly one, with the reason it wins.
|
|
172
173
|
- **If you say nothing** — the outcome of no answer, so that not answering is a choice rather than a stall.
|
|
173
174
|
|
|
175
|
+
When several questions in one file share a concept, open the file with one shared primer that explains it, and have every question reuse the same running example rather than inventing a new one. The reader learns the example once and then sees each option applied to it.
|
|
176
|
+
|
|
177
|
+
The example shows what would really happen. One simplified until it changes the answer misleads as badly as jargon does, and it is harder to spot.
|
|
178
|
+
|
|
174
179
|
Expand every identifier on first use, writing the thing out with the tag in parentheses — "the citation rule (AC-1)", not a bare `AC-1`, `FR3` or `unit-4`. A bare tag assumes the reader carries a mapping they do not have.
|
|
175
180
|
|
|
176
181
|
### Rendering the spec
|
|
@@ -197,6 +202,11 @@ With no interactive terminal, write the file, say where it is, and end the turn.
|
|
|
197
202
|
|
|
198
203
|
When the user shares an idea tangential to the current work, offer to record it in `.aidlc/roadmap/inbox/` (see **aidlc-roadmap**) and continue the current phase — do not derail into ideation. Capture touches no instance state, so it is safe at any point in any phase.
|
|
199
204
|
|
|
205
|
+
Safe for the instance is not the same as free for the person, so two rules bind every item an instance writes, exactly as they bind the capture flow:
|
|
206
|
+
|
|
207
|
+
- **Merge first.** If an open item already owns the area, append a dated `## Received from <instance>` section to that item instead of writing a new one.
|
|
208
|
+
- **No item enters `inbox/` without its six-line executive summary** (the labels are in **aidlc-roadmap**). Write it from what you know; `Not yet decided.` is a valid value for any label, an absent section is not. An item nobody can triage from the top of the file is not a captured idea, it is a decision deferred onto somebody else.
|
|
209
|
+
|
|
200
210
|
## Amendments — changing a completed phase's artifact
|
|
201
211
|
|
|
202
212
|
A completed phase's artifact is changed **only through an amendment**, never edited in
|
package/skills/04-roadmap.md
CHANGED
|
@@ -35,7 +35,15 @@ Projects have more than one person proposing work, with mixed technical depth, s
|
|
|
35
35
|
|
|
36
36
|
**The directory an item sits in is its status.** There is no `status` field, and you must never add one — two representations of one fact drift apart, and a wrong status is indistinguishable from a right one. Changing status means moving the file.
|
|
37
37
|
|
|
38
|
-
`hold/` holds both parked and declined items
|
|
38
|
+
`hold/` holds both parked and declined items, and **the history entry says which**. One directory is deliberate — a sixth status would have to be threaded through every count, every move and every projection — but "not now" and "not ever" are different decisions, and until the reason was written down they were indistinguishable on disk. So every move into `hold/` carries a reason, prefixed `parked — ` or `declined — `:
|
|
39
|
+
|
|
40
|
+
```yaml
|
|
41
|
+
history:
|
|
42
|
+
- { status: backlog, at: 2026-09-22 }
|
|
43
|
+
- { status: hold, at: 2026-09-23, reason: "parked — gated on the accounts table" }
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The consequence worth stating: **agreed work waiting on a trigger belongs in `hold/`, parked, not in `backlog/`.** `backlog/` means "could start now", and an item gated on something that does not exist yet sitting there makes every count of what is ready wrong. Parking it is not dropping it, and the reason is what proves that.
|
|
39
47
|
|
|
40
48
|
## Item Format
|
|
41
49
|
|
|
@@ -59,7 +67,7 @@ history:
|
|
|
59
67
|
- **`id`** is assigned once and never recomputed. Renaming the file or moving it between statuses leaves it unchanged. The `item-` prefix keeps it textually distinct from the filename so nothing derives one from the other.
|
|
60
68
|
- **`source`** records how the item was written: `human` directly, `agent` drafted by an AI agent from someone's description, `import` migrated from an older format.
|
|
61
69
|
- **`depends_on`** names other items by `id`, so a dependency survives its target moving. Build order is derived from this graph when needed — there is no global `order` field, because concurrent capture from independent sessions cannot coordinate a sequence.
|
|
62
|
-
- **`history`** is append-only and advisory. Append `{ status, at }` when you move an item. An absent or incomplete history is never an error, and current status always comes from the directory — never from the last history entry.
|
|
70
|
+
- **`history`** is append-only and advisory. Append `{ status, at }` when you move an item. An absent or incomplete history is never an error, and current status always comes from the directory — never from the last history entry. An entry may carry a third key, `reason`, and a move into `hold/` must; always write it **inside double quotes**, because the entry is a flow mapping and a reason containing a comma or a colon ends it early and takes the whole item's frontmatter with it.
|
|
63
71
|
|
|
64
72
|
Bodies are otherwise free-form. Items authored through the portable skill carry four further headings — Problem, Who it's for, What success looks like, Out of scope — which is a useful shape, not a validated one.
|
|
65
73
|
|
|
@@ -104,6 +112,8 @@ The first section of the body, before anything else, is `## Executive Summary`
|
|
|
104
112
|
|
|
105
113
|
This exists so a triage decision can be made from the top of the file. An item whose value cannot be stated in six lines is an item nobody can decide about, and it will sit in `inbox/` until somebody re-derives the case from scratch.
|
|
106
114
|
|
|
115
|
+
**The rule binds every path that writes into `inbox/`, not just this skill's capture flow.** That includes an item written by an instance mid-phase, one drafted from a conversation that never touched capture, and one you write by hand. It was already the rule here and it was already followed here; what went wrong is that the other paths were never told. On 2026-09-23, 13 of the 18 items in one project's inbox had no summary — every one of them written by an instance, none of them triageable without re-deriving the case first. `Not yet decided.` is a valid value for any label; an absent section is not a valid item. `aidlc doctor` reports `inbox/` items missing one, by name and by missing label; it never writes one, because an invented case reads exactly like a real one.
|
|
116
|
+
|
|
107
117
|
Four rules keep it honest:
|
|
108
118
|
|
|
109
119
|
- **`None` is a real answer for revenue, and often the correct one.** Lifecycle plumbing earns nothing directly. Writing `Indirect` for everything makes the field useless, which is worse than leaving it blank because it reads as answered. This is also the cheapest available check against the self-repair trap: a meta-feature that has to write `Revenue — None` and `Customer value — none, it observes the lifecycle` has declared itself.
|
|
@@ -118,9 +128,10 @@ Older items may predate this section. Add it when you next touch such an item
|
|
|
118
128
|
1. **Resolve the roadmap root.** Always write to the **primary checkout's** `.aidlc/roadmap/`, never a worktree's copy: resolve via `git rev-parse --git-common-dir` (the directory containing that path is the primary checkout). Outside a git repo, use the current project root. Create `inbox/` if missing.
|
|
119
129
|
2. **Name the file.** `YYYYMMDD-<slug>.md` — today's date plus a short (2–4 word) slug.
|
|
120
130
|
3. **Handle collisions.** If the filename already exists in *any* status directory, ask one question — extend the existing item or new item? On extend, append a dated `## Update (YYYY-MM-DD)` section to it where it is; on new, suffix the slug (`-2`). Never silently overwrite.
|
|
121
|
-
4. **
|
|
122
|
-
5. **
|
|
123
|
-
6. **
|
|
131
|
+
4. **Merge first.** Before writing a new file, check whether an open item — anything in `inbox/`, `backlog/` or `in-progress/` — already owns the area this is about. If one does, append a dated `## Received from <source>` section to **that** item and stop; say which item it went to. This is about *subject*, where step 3 is about *filename*: four of those eighteen items were findings about areas an existing item already owned, one of them literally asking somebody to triage another item. Merging them took minutes and removed four files. A new file is the right answer when no open item owns the area — which is most of the time, and the check costs one read of a list you are already looking at.
|
|
132
|
+
5. **Write the file** into `inbox/`, with `source: human`, `promoted_to: null`, and one `history` entry dated today. Record `depends_on` only if the braindump itself names other items; never ask for dependencies. Do not interrogate the user for structure — capture friction kills inboxes; one braindump in, one file out.
|
|
133
|
+
6. **Draft the executive summary from the braindump, do not extract it by interview.** You write those six lines; the user does not. Ask at most one question, and only when the braindump says nothing about who wants this or why — a good one is "would this make money, save money, or is it just something that needs doing?". Anything still unknown is `Not yet decided.`, which is the point of having the label.
|
|
134
|
+
7. **Confirm and return.** Report the file path and the `Recommendation` line, then return to whatever was happening. Showing the recommendation lets the user correct a wrong read immediately, while the context is still in front of them.
|
|
124
135
|
|
|
125
136
|
**Hard rule:** capture never reads or writes anything under `.aidlc/state/` — no claims, no phase files, no transitions log. Two sessions capturing simultaneously just produce two files; no locking exists or is needed. Do not auto-commit; staging is the user's.
|
|
126
137
|
|
|
@@ -130,13 +141,17 @@ If the user includes credentials, tokens, or secrets in a braindump, flag it and
|
|
|
130
141
|
|
|
131
142
|
List each status directory, reading **only frontmatter and the containing directory** — never item bodies. Show each item's date, title, status, and dependencies. Group by status in lifecycle order and give a count per status. Flag `inbox/` items first: they are waiting on a decision only a human can make. Then flag `backlog/` items whose dependencies are all `done` — those are the natural next candidates. Offer to open, triage, promote, or drop.
|
|
132
143
|
|
|
144
|
+
For a `hold/` item, show whether it is **parked or declined**, with its reason, from the last `history` entry — that entry is in the frontmatter, so this costs nothing extra. An item with no reason recorded is reported as `hold — reason not recorded`, never guessed at: parked and declined are opposite answers, and a wrong one either revives work somebody killed or buries work somebody agreed to.
|
|
145
|
+
|
|
133
146
|
The frontmatter-only rule holds for browsing, which is a list and must stay cheap enough to run over the whole roadmap. **Triage** below is the one flow allowed into the body, and only as far as the executive summary.
|
|
134
147
|
|
|
135
148
|
A filename appearing in two status directories is an error: report it rather than guessing which one is current.
|
|
136
149
|
|
|
137
150
|
## Triage
|
|
138
151
|
|
|
139
|
-
Moving an `inbox/` item to `backlog/` means "we agree to do this". Moving it to `hold/` means "not now"
|
|
152
|
+
Moving an `inbox/` item to `backlog/` means "we agree to do this". Moving it to `hold/` means "not now", and carries a reason prefixed `parked — ` or `declined — `. Move the file and append the matching `history` entry. Triage is the one flow that exists purely because more than one person can submit work — do not skip it by promoting straight from `inbox/` unless the user says so.
|
|
153
|
+
|
|
154
|
+
Work you agree with but cannot start — gated on a trigger, a decision, or something that does not exist yet — goes to `hold/` as `parked`, not to `backlog/`. Parking it with its trigger written down is the whole difference between a backlog you can read as "ready" and one where two of eleven entries are waiting on something.
|
|
140
155
|
|
|
141
156
|
Triage is the one flow that reads into the body, and it reads **the executive summary and nothing else**. Six labelled lines per item is what makes triaging a full inbox in one sitting possible; opening whole items is what makes triage something nobody ever gets round to. Show the summary, say which way you would go and why, and let the human decide. If an item has no executive summary, write one from what the item says before asking for a decision — a decision made without one is a decision made twice.
|
|
142
157
|
|
|
@@ -159,7 +174,7 @@ When the instance completes, the `roadmap-done` lifecycle action moves the item
|
|
|
159
174
|
|
|
160
175
|
## Drop
|
|
161
176
|
|
|
162
|
-
Move the item to `hold/` and append the `history` entry
|
|
177
|
+
Move the item to `hold/` and append the `history` entry, with a reason prefixed `declined — `. Dropping is an explicit act — never delete or overwrite an item to get rid of it, and never leave the reason off: `hold/` holds parked work too, and an unexplained entry there is a decision nobody can tell apart from the opposite one.
|
|
163
178
|
|
|
164
179
|
## Projecting to GitHub Issues
|
|
165
180
|
|
|
@@ -145,6 +145,12 @@ Vision source: <path> (<n> statements added, <m> removed)
|
|
|
145
145
|
|
|
146
146
|
## Should NOT-2 still stand, now that the statement it cites is gone?
|
|
147
147
|
|
|
148
|
+
**What it is:** NOT-2 is one of this repo's "must never" rules, and each one
|
|
149
|
+
points at the vision sentence it came from. Say NOT-2 reads "never store
|
|
150
|
+
customer card numbers" and points at the vision line "we do not handle
|
|
151
|
+
payments". That line has now been deleted from the vision, so the rule points
|
|
152
|
+
at nothing.
|
|
153
|
+
|
|
148
154
|
**Why it matters:** NOT-2 is a boundary this repo is held to. Left citing a
|
|
149
155
|
statement the vision no longer carries, it is enforced without a source.
|
|
150
156
|
|
|
@@ -30,9 +30,11 @@ Run the retro **before** any completion cleanup (worktree removal, claim release
|
|
|
30
30
|
3. **Ask — one round-trip.** Three questions in a single message: what surprised us? what would we do differently? what took longer than expected? For **Micro scope**, compress to one question: "anything surprising, worth doing differently, or slower than expected?" Declining the retro is fine: remove the marker, write nothing.
|
|
31
31
|
4. **Write `retrospective.md`** in the instance state dir: the answers; instance metadata (template, scope); per-phase durations (pair each transitions.log `to: X` with the next `from: X`; fall back to the phase YAML's `entered_at`/`completed_at`; note inconsistencies rather than guessing); and the cost summary when available.
|
|
32
32
|
5. **Distill lessons — 0 to 3.** A lesson is a durable, project-general observation ("NDJSON merge=union false-dedups identical same-second events"), not an instance anecdote ("we finished late"). If nothing generalizes, write no lesson — an empty distillation is a valid outcome.
|
|
33
|
-
6. **
|
|
34
|
-
7. **
|
|
35
|
-
8. **
|
|
33
|
+
6. **Cap the follow-ups — 0 to 2 queued roadmap items.** Rank what the work turned up and queue at most the top two into `.aidlc/roadmap/inbox/`, each with its six-line executive summary (see **aidlc-roadmap**). **Zero is a valid outcome**, and often the right one. This is the same cap, in the same shape, as the 0–3 on lessons, and it exists because the lessons cap alone was half a brake: the framework capped what an instance *learned* and capped nothing about what it *queued*, so closing an instance reliably grew the backlog. One measured project emitted five to nine items per close; triage kept three of eighteen.
|
|
34
|
+
7. **Record the rest as observed, not queued.** Everything past the cap goes into `retrospective.md` under `## Observed, not queued`, one line each. **The cap is on queued items, not on observations** — a retro that noticed nine things writes nine and queues two. Findable, attributable, and costing nobody a triage decision. If one of them matters later, it is already written down; promote it then, with the same summary rule.
|
|
35
|
+
8. **Confirm, then append.** Show the distilled entry verbatim and get one confirmation for the whole entry. Never append unconfirmed text — lessons are auto-loaded into every future session, so this confirmation is the injection gate. Redact anything resembling credentials or secrets. On confirm, append to the lessons layer per the write rules below.
|
|
36
|
+
9. **Commit** `retrospective.md` and the lessons append to the **current branch** now, before any worktree cleanup runs.
|
|
37
|
+
10. **Remove the retro-pending marker** if one exists.
|
|
36
38
|
|
|
37
39
|
## Lessons Layer — Write Rules
|
|
38
40
|
|
|
@@ -85,5 +87,6 @@ Run only in the **primary checkout** (not a linked worktree — check `git rev-p
|
|
|
85
87
|
## Rules
|
|
86
88
|
|
|
87
89
|
- The retro never blocks completion: it is non-blocking, declinable, and its absence is never an error.
|
|
90
|
+
- The follow-up cap is never a reason to *not notice* something. Merge first — if an open roadmap item already owns the area, append a dated `## Received from <instance>` section to it rather than spending one of the two slots on a file that duplicates it.
|
|
88
91
|
- Never write lessons without the step-6 confirmation. Never record credentials or secrets.
|
|
89
92
|
- Lessons are historical observations, not directives — phrase them as what was learned, not as instructions to obey.
|