You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: agents/approach-explorer.md
+9Lines changed: 9 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,6 +10,7 @@ Your job:
10
10
- capture decisions concrete enough that downstream agents never re-ask the user
11
11
- classify gray areas as taste, technical, or hybrid — and adapt your approach accordingly
12
12
- write APPROACH.md for the planner and plan-checker to consume
13
+
- when `workflow.discuss: true`, record explicit alignment proof in APPROACH.md before planning can proceed
13
14
14
15
The user is the visionary. You are the thinking partner. Ask about vision and implementation choices. Do NOT ask about codebase patterns, technical risks, or architecture — those are the researcher's and planner's jobs.
15
16
@@ -22,6 +23,8 @@ Do NOT:
22
23
- Present options without research backing (for technical gray areas)
23
24
- Accept vague answers without probing ("it should be nice" → push for specifics)
24
25
- Skip areas because you think you know best
26
+
- Treat "No questions needed" as valid under `workflow.discuss: true` unless the user explicitly approved a skip
27
+
- Hide user-alignment proof in chat memory, PLAN metadata, or agent discretion instead of APPROACH.md
25
28
- Ask about technical implementation details (planner's job)
26
29
- Expand scope during discussion (phase boundary is FIXED)
27
30
- Fire questions without building on previous answers
@@ -48,10 +51,12 @@ Read only the explicit inputs provided. Extract only what you need:
48
51
-**Phase research** (if exists): skim for findings relevant to gray area identification
49
52
-**Codebase files** (if provided): existing patterns and conventions that inform approach choices
50
53
-**Existing APPROACH.md** (if updating): load current decisions as starting point
54
+
-**Project config** (if provided from `.planning/config.json`): check `workflow.discuss` to decide whether alignment proof is mandatory
51
55
</input_contract>
52
56
53
57
<output_contract>
54
58
-**Artifact:**`{padded_phase}-APPROACH.md` in the phase directory, using the approach template
59
+
-**Alignment proof:** when `workflow.discuss: true`, APPROACH.md must include `alignment_status: user_confirmed` or `alignment_status: approved_skip` with the canonical fields `alignment_method`, `user_confirmed_at`, `explicit_skip_approved`, `skip_scope`, `skip_rationale`, and `confirmed_decisions`. `Agent's Discretion` is not alignment proof.
55
60
-**Downstream consumers:**
56
61
- Planner reads locked decisions to constrain implementation choices
@@ -118,6 +123,8 @@ Present each gray area individually with:
118
123
119
124
If the user delegates an area, mark it as "Agent's Discretion" and move to the next.
120
125
126
+
If the whole phase appears to need no discussion under `workflow.discuss: true`, ask the user to approve that skip explicitly. Record it as `alignment_status: approved_skip` with `explicit_skip_approved: true`, `alignment_method`, `user_confirmed_at`, `skip_scope`, `skip_rationale`, and `confirmed_decisions: ["N/A - approved skip"]`. Do not create a proofless APPROACH.md.
127
+
121
128
## Step 5: Adaptive Deep-Dive
122
129
123
130
For each area the user chose to discuss:
@@ -165,6 +172,7 @@ Before writing the final APPROACH.md, verify:
165
172
-[ ] Taste decisions reflect actual user statements, not agent assumptions
166
173
-[ ] Scope stayed within phase boundary
167
174
-[ ] All "Agent's Discretion" areas are explicitly marked
175
+
-[ ] If `workflow.discuss: true`, APPROACH.md records `alignment_status: user_confirmed` or `alignment_status: approved_skip`; proofless, missing, or agent-discretion-only alignment is invalid
168
176
169
177
If any check fails, address it with the user before proceeding.
170
178
@@ -298,6 +306,7 @@ Ready for assumptions?"
298
306
- Scope creep is captured as deferred ideas, never acted on
299
307
- Assumptions are surfaced with honest confidence levels
300
308
- "Agent's Discretion" areas are explicitly marked
309
+
- Under `workflow.discuss: true`, user alignment is proven in APPROACH.md with `user_confirmed` or explicit `approved_skip` metadata
Copy file name to clipboardExpand all lines: agents/planner.md
+32-3Lines changed: 32 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -50,7 +50,7 @@ When APPROACH.md exists for the target phase, the orchestrator passes it as inpu
50
50
Honor the user's choice from APPROACH.md. Note the tension in the plan's Notes section so the user is aware, but do not override their decision.
51
51
52
52
**If no APPROACH.md exists:**
53
-
Plan using SPEC.md and research only. The plan-checker will skip the approach_alignment dimension.
53
+
If the orchestrator indicates `workflow.discuss: true`, stop and request approach exploration or an approved skip before planning. Otherwise plan using SPEC.md and research only under `reduced_alignment`; the plan-checker may skip the approach_alignment dimension only in that reduced-alignment mode.
54
54
</approach_decisions>
55
55
56
56
<goal_backward>
@@ -182,7 +182,7 @@ Wave rule:
182
182
Write one or more `PLAN.md` files to the phase directory.
Copy file name to clipboardExpand all lines: bin/adapters/claude.mjs
+9-7Lines changed: 9 additions & 7 deletions
Original file line number
Diff line number
Diff line change
@@ -61,22 +61,24 @@ Execution flow:
61
61
2. Resolve the target phase from the command arguments. If no phase is provided, choose the first roadmap phase that is not complete.
62
62
3. **Approach exploration** (before planning):
63
63
a. Check \`.planning/config.json\` for \`workflow.discuss\`. If \`false\` or missing, skip to step 4 and report \`reduced_alignment\` in the summary.
64
-
b. Check if \`{phase_dir}/{padded_phase}-APPROACH.md\` exists. If it does, offer the user: "Use existing" / "Update it" / "View it". If "Use existing", load decisions and skip to step 4.
65
-
c. If no APPROACH.md exists (or user chose "Update"): invoke the native \`gsdd-approach-explorer\` subagent with the phase goal, requirement IDs, SPEC locked decisions, phase research, and relevant codebase files.
64
+
b. Check if \`{phase_dir}/{padded_phase}-APPROACH.md\` exists. If it does, offer the user: "Use existing" / "Update it" / "View it". If "Use existing", load decisions, then validate the alignment proof before step 4; proofless or invalid existing APPROACH.md must be updated, not silently trusted.
65
+
c. If no APPROACH.md exists (or user chose "Update"): invoke the native \`gsdd-approach-explorer\` subagent with the phase goal, requirement IDs, project config from \`.planning/config.json\` (especially \`workflow.discuss\`), SPEC locked decisions, phase research, and relevant codebase files.
66
66
d. The explorer runs a GSD-style interactive conversation with the user (gray areas, research, deep-dive questions, assumptions) and writes APPROACH.md.
67
-
e. Load APPROACH.md decisions as locked constraints alongside SPEC.md decisions.
67
+
e. Before planning, confirm APPROACH.md records all canonical proof fields: \`alignment_status\`, \`alignment_method\`, \`user_confirmed_at\`, \`explicit_skip_approved\`, \`skip_scope\`, \`skip_rationale\`, and \`confirmed_decisions\`. For \`alignment_status: user_confirmed\`, \`confirmed_decisions\` must name the locked decisions and skip fields may be \`false\`/\`N/A\`; for \`alignment_status: approved_skip\`, \`explicit_skip_approved: true\`, \`skip_scope\`, and \`skip_rationale\` must be substantive. Agent-only "No questions needed" is not valid proof under \`workflow.discuss: true\`.
68
+
f. Load APPROACH.md decisions as locked constraints alongside SPEC.md decisions.
68
69
4. Produce the initial phase plan according to \`.agents/skills/gsdd-plan/SKILL.md\`. Pass APPROACH.md decisions (if any) as locked constraints to the planner.
69
-
5. If \`.planning/config.json\` has \`workflow.planCheck: false\`, stop after planner self-check and explicitly report reduced assurance.
70
+
5. If \`.planning/config.json\` has \`workflow.planCheck: false\`, stop after planner self-check and explicitly report reduced assurance. This only skips the independent checker; it does not skip the step 3 alignment-proof gate when \`workflow.discuss: true\`.
70
71
6. If \`workflow.planCheck: true\`, invoke the native \`gsdd-plan-checker\` subagent with fresh context.
71
72
7. Pass only explicit inputs to the checker:
72
73
- target phase goal and requirement IDs
73
74
- relevant locked decisions / deferred items from \`.planning/SPEC.md\`
75
+
- project config from \`.planning/config.json\`, especially \`workflow.discuss\` and \`workflow.planCheck\`
74
76
- approach decisions from \`.planning/phases/*-APPROACH.md\` (if exists)
75
77
- relevant phase research file(s)
76
78
- produced \`.planning/phases/*-PLAN.md\` file(s)
77
79
8. Require the checker to return a single JSON object with this shape:
78
80
{
79
-
"status": "passed",
81
+
"status": "issues_found",
80
82
"summary": "One sentence overall assessment",
81
83
"issues": [
82
84
{
@@ -89,10 +91,10 @@ Execution flow:
89
91
}
90
92
]
91
93
}
92
-
Status must be either "${CHECKER_STATUSES[0]}" or "${CHECKER_STATUSES[1]}".
94
+
Status must be either "${CHECKER_STATUSES[0]}" or "${CHECKER_STATUSES[1]}". Use "passed" only when "issues": []; any blocker or warning must use "issues_found".
93
95
9. If the checker returns \`passed\`, finish and summarize.
94
96
10. If the checker returns \`issues_found\`, revise the existing plan files only where needed, then run the checker again.
95
-
11. Maximum ${MAX_CHECKER_CYCLES} checker cycles total. If blockers remain after cycle ${MAX_CHECKER_CYCLES}, stop and escalate to the user instead of pretending the plan is ready.
97
+
11. Maximum ${MAX_CHECKER_CYCLES} checker cycles total. If any blockers or warnings remain after cycle ${MAX_CHECKER_CYCLES}, stop and escalate to the user instead of pretending the plan is ready.
Copy file name to clipboardExpand all lines: bin/adapters/opencode.mjs
+9-7Lines changed: 9 additions & 7 deletions
Original file line number
Diff line number
Diff line change
@@ -169,22 +169,24 @@ Execution flow:
169
169
2. Resolve the target phase from the command arguments. If no phase is provided, choose the first roadmap phase that is not complete.
170
170
3. **Approach exploration** (before planning):
171
171
a. Check \`.planning/config.json\` for \`workflow.discuss\`. If \`false\` or missing, skip to step 4 and report \`reduced_alignment\` in the summary.
172
-
b. Check if \`{phase_dir}/{padded_phase}-APPROACH.md\` exists. If it does, offer the user: "Use existing" / "Update it" / "View it". If "Use existing", load decisions and skip to step 4.
173
-
c. If no APPROACH.md exists (or user chose "Update"): invoke the \`gsdd-approach-explorer\` subagent with the phase goal, requirement IDs, SPEC locked decisions, phase research, and relevant codebase files.
172
+
b. Check if \`{phase_dir}/{padded_phase}-APPROACH.md\` exists. If it does, offer the user: "Use existing" / "Update it" / "View it". If "Use existing", load decisions, then validate the alignment proof before step 4; proofless or invalid existing APPROACH.md must be updated, not silently trusted.
173
+
c. If no APPROACH.md exists (or user chose "Update"): invoke the \`gsdd-approach-explorer\` subagent with the phase goal, requirement IDs, project config from \`.planning/config.json\` (especially \`workflow.discuss\`), SPEC locked decisions, phase research, and relevant codebase files.
174
174
d. The explorer runs a GSD-style interactive conversation with the user (gray areas, research, deep-dive questions, assumptions) and writes APPROACH.md.
175
-
e. Load APPROACH.md decisions as locked constraints alongside SPEC.md decisions.
175
+
e. Before planning, confirm APPROACH.md records all canonical proof fields: \`alignment_status\`, \`alignment_method\`, \`user_confirmed_at\`, \`explicit_skip_approved\`, \`skip_scope\`, \`skip_rationale\`, and \`confirmed_decisions\`. For \`alignment_status: user_confirmed\`, \`confirmed_decisions\` must name the locked decisions and skip fields may be \`false\`/\`N/A\`; for \`alignment_status: approved_skip\`, \`explicit_skip_approved: true\`, \`skip_scope\`, and \`skip_rationale\` must be substantive. Agent-only "No questions needed" is not valid proof under \`workflow.discuss: true\`.
176
+
f. Load APPROACH.md decisions as locked constraints alongside SPEC.md decisions.
176
177
4. Produce the initial phase plan according to \`.agents/skills/gsdd-plan/SKILL.md\`. Pass APPROACH.md decisions (if any) as locked constraints to the planner.
177
-
5. If \`.planning/config.json\` has \`workflow.planCheck: false\`, stop after planner self-check and explicitly report reduced assurance.
178
+
5. If \`.planning/config.json\` has \`workflow.planCheck: false\`, stop after planner self-check and explicitly report reduced assurance. This only skips the independent checker; it does not skip the step 3 alignment-proof gate when \`workflow.discuss: true\`.
178
179
6. If \`workflow.planCheck: true\`, invoke the hidden \`gsdd-plan-checker\` subagent with fresh context.
179
180
7. Pass only explicit inputs to the checker:
180
181
- target phase goal and requirement IDs
181
182
- relevant locked decisions / deferred items from \`.planning/SPEC.md\`
183
+
- project config from \`.planning/config.json\`, especially \`workflow.discuss\` and \`workflow.planCheck\`
182
184
- approach decisions from \`.planning/phases/*-APPROACH.md\` (if exists)
183
185
- relevant phase research file(s)
184
186
- produced \`.planning/phases/*-PLAN.md\` file(s)
185
187
8. Require the checker to return a single JSON object with this shape:
186
188
{
187
-
"status": "passed",
189
+
"status": "issues_found",
188
190
"summary": "One sentence overall assessment",
189
191
"issues": [
190
192
{
@@ -197,10 +199,10 @@ Execution flow:
197
199
}
198
200
]
199
201
}
200
-
Status must be either "${CHECKER_STATUSES[0]}" or "${CHECKER_STATUSES[1]}".
202
+
Status must be either "${CHECKER_STATUSES[0]}" or "${CHECKER_STATUSES[1]}". Use "passed" only when "issues": []; any blocker or warning must use "issues_found".
201
203
9. If the checker returns \`passed\`, finish and summarize.
202
204
10. If the checker returns \`issues_found\`, revise the existing plan files only where needed, then run the checker again.
203
-
11. Maximum ${MAX_CHECKER_CYCLES} checker cycles total. If blockers remain after cycle ${MAX_CHECKER_CYCLES}, stop and escalate to the user instead of pretending the plan is ready.
205
+
11. Maximum ${MAX_CHECKER_CYCLES} checker cycles total. If any blockers or warnings remain after cycle ${MAX_CHECKER_CYCLES}, stop and escalate to the user instead of pretending the plan is ready.
Copy file name to clipboardExpand all lines: distilled/DESIGN.md
+3-2Lines changed: 3 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1365,6 +1365,7 @@ Both paths produce identical output: `{padded_phase}-APPROACH.md` in the phase d
1365
1365
| Questioning style | Rigid 4-question batched loop | Adaptive convergence (2-6 questions depending on complexity) | Fixed batch sizes don't match decision complexity. Some areas resolve in 2 questions, others need 6 |
1366
1366
| Pre-question research | No research before asking | Research subagent per technical area returns structured summary before asking | Users make better decisions when presented with researched options and trade-offs |
1367
1367
| Quality gate | None | Self-check before writing APPROACH.md (concrete decisions, no vague language, source backing, scope compliance) | Prevents weak outputs that force re-asking during planning |
1368
+
| Alignment proof gate | None |`APPROACH.md` records `alignment_status: user_confirmed` or explicit `approved_skip`, and planning validates this before goal-backward planning when `workflow.discuss: true`| Prevents native or existing-artifact paths from turning mandatory discussion into artifact theater |
1368
1369
| Intermediate persistence | No persistence until final output | Confirmed decisions written to disk incrementally | Protects against context limits in long conversations |
| Plan-checker integration | None | New `approach_alignment` dimension in plan-checker | Verifies plans honor approach decisions, not just requirements |
@@ -1398,11 +1399,11 @@ Isolating research in subagents and returning compressed summaries follows the C
1398
1399
1399
1400
**Trade-offs:**
1400
1401
1401
-
- Benefit: planner receives locked user decisions instead of guessing approaches; plan-checker can verify approach alignment; context stays lean via research isolation
1402
+
- Benefit: planner receives locked user decisions instead of guessing approaches; plan-checker can verify approach alignment; existing APPROACH artifacts are not trusted unless their alignment proof is valid; context stays lean via research isolation
1402
1403
- Cost: adds one interactive step before planning (~5-15 minutes of user time per phase); hybrid architecture is more complex than a single monolithic workflow
1403
1404
- Mitigation: `workflow.discuss: true|false` toggle in `.planning/config.json` allows skipping with explicit `reduced_alignment` reporting; taste areas skip research entirely. Default is `false` (opt-in) to stay consistent with GSDD's stripped-down identity; users enable it explicitly
0 commit comments