@pmelab/gtd 17.2.0 → 17.3.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pmelab/gtd",
3
- "version": "17.2.0",
3
+ "version": "17.3.0",
4
4
  "private": false,
5
5
  "description": "Git-aware CLI that emits the next prompt for an autonomous coding agent based on the current repository state",
6
6
  "bin": {
@@ -180,13 +180,20 @@ export const questionBarReturn = `- This lap continues the same goal as the firs
180
180
  checkboxes
181
181
  - \`## Answered Questions\` is always the last \`##\` section — a moved
182
182
  question lands there, never wherever \`## Open Questions\` used to sit
183
- - Never re-raise a deleted question, and never re-open a settled
184
- \`## Answered Questions\` entry
183
+ - Never re-raise a deleted question. A settled \`## Answered Questions\`
184
+ entry stays settled, except one carrying a human footnote on its
185
+ \`### \` heading: that is the only entry that may change. Fold the note
186
+ in, then either rewrite the recorded answer in place (still under
187
+ \`## Answered Questions\`) or, when the note leaves the point genuinely
188
+ open, move it back to \`## Open Questions\` as a fresh fork with
189
+ options and the \`_your answer_\` slot. A note that only asks a
190
+ question follows the footnote rule: one \`- A:\` reply, answer unchanged
185
191
  - An answer may earn a follow-up: if it opens a genuinely new fork above
186
192
  the bar — one the answer itself created — raise it as a fresh \`##
187
193
  Open Questions\` entry on this same lap. Never restate a question
188
194
  already asked, and never treat this as licence to re-open a question
189
- already settled under \`## Answered Questions\`
195
+ already settled under \`## Answered Questions\` that carries no
196
+ footnote on its heading
190
197
  - Recognise a silent lap from \`## Open Questions\` still present with
191
198
  nothing ticked and nothing else changed — the human's way of saying
192
199
  the gap is already closed. That lap ends the questions, whatever the
@@ -103,6 +103,25 @@ describe("the shared open-question instruction", () => {
103
103
  })
104
104
  })
105
105
 
106
+ describe("answered-entry footnote exception", () => {
107
+ const exception = "carrying a human footnote on its"
108
+ it("is in the design return lap and loop-back, keeping the deleted-question rule", () => {
109
+ const prompt = renderText(() => designTriagePrompt("base"))
110
+ expect(prompt).toContain("Never re-raise a deleted question")
111
+ expect(prompt).toContain(`entry stays settled, except one ${exception}`)
112
+ expect(prompt).toContain(`stays settled, except\n one ${exception}`)
113
+ expect(prompt).not.toContain("never re-open a settled")
114
+ expect(prompt).not.toContain("never re-open one")
115
+ })
116
+
117
+ it("is in the architecture return lap and keeps the first-lap settled line", () => {
118
+ const prompt = renderText(() => architectureAuthorPrompt())
119
+ expect(prompt).toContain(`entry stays settled, except one ${exception}`)
120
+ expect(prompt).not.toContain("never re-open a settled")
121
+ expect(prompt).toMatch(/treat every decision[\s\S]*as settled — never re-open it/)
122
+ })
123
+ })
124
+
106
125
  describe("architectureAuthorPrompt", () => {
107
126
  it("qualifies the PERMISSIVE default with a settled-requirements exception", () => {
108
127
  const prompt = renderText(() => architectureAuthorPrompt())
@@ -191,8 +191,10 @@ ${questionBarReturn}
191
191
  \`git show ${base}\`. (On the first lap that hash
192
192
  is the process's own diff base, \`${start()}\` — this
193
193
  branch doesn't apply)
194
- - Every decision under \`## Answered Questions\` stays settled —
195
- never re-open one. A genuinely open PRODUCT point may still
194
+ - Every decision under \`## Answered Questions\` stays settled, except
195
+ one carrying a human footnote on its \`### \` heading — the human's
196
+ review-round edit is where such notes arrive; fold the note in and
197
+ rewrite the answer or move it back to \`## Open Questions\`. A genuinely open PRODUCT point may still
196
198
  raise a fresh \`## Open Questions\` entry: the product gate sits
197
199
  on this path exactly as on the first lap
198
200
  - Before grouping anything, run \`${env.testCommand}\`