gsdd-cli 0.21.0 → 0.23.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/README.md +3 -1
- package/agents/executor.md +12 -1
- package/agents/planner.md +2 -0
- package/agents/verifier.md +1 -1
- package/bin/gsdd.mjs +3 -2
- package/bin/lib/control-map.mjs +629 -0
- package/bin/lib/health.mjs +2 -2
- package/bin/lib/init-flow.mjs +7 -7
- package/bin/lib/init-runtime.mjs +3 -0
- package/bin/lib/rendering.mjs +5 -0
- package/bin/lib/ui-proof.mjs +136 -13
- package/distilled/DESIGN.md +63 -7
- package/distilled/EVIDENCE-INDEX.md +23 -0
- package/distilled/README.md +9 -0
- package/distilled/templates/delegates/plan-checker.md +1 -0
- package/distilled/templates/ui-proof.md +33 -7
- package/distilled/workflows/execute.md +5 -4
- package/distilled/workflows/pause.md +2 -0
- package/distilled/workflows/plan.md +7 -6
- package/distilled/workflows/progress.md +4 -0
- package/distilled/workflows/quick.md +6 -3
- package/distilled/workflows/resume.md +4 -0
- package/distilled/workflows/verify.md +1 -0
- package/docs/USER-GUIDE.md +2 -0
- package/package.json +2 -2
|
@@ -4,6 +4,10 @@ Use this template when work affects rendered UI or when a plan defines `ui_proof
|
|
|
4
4
|
|
|
5
5
|
UI proof uses the existing closure evidence kinds only: `code`, `test`, `runtime`, `delivery`, and `human`. Screenshots, traces, videos, reports, accessibility scans, Gherkin, visual diffs, and manual notes are artifact types or activities that map onto those evidence kinds. They are not new evidence kinds.
|
|
6
6
|
|
|
7
|
+
For live rendered UI evidence, default to `agent-browser`: open the route, capture an interactive snapshot/refs when interaction is part of the claim, exercise the changed flow, capture screenshots for the planned viewport(s), and record console/network observations when they affect the claim. If the repo already has Playwright tests or a package script wrapping them, those remain the canonical repeatable regression path; use them as `test` evidence and use `agent-browser` for complementary live runtime proof. Do not introduce new Playwright, Cypress, Storybook, CI, browser MCP, or visual-regression infrastructure just to satisfy this template. Use Playwright scripting only for checks `agent-browser` cannot cover cleanly, such as JS-disabled behavior, structured console listeners, or multi-context testing.
|
|
8
|
+
|
|
9
|
+
Tool availability is part of the proof record. In runtimes where `agent-browser` is not available, first state that availability constraint, then use the closest project-native interactive browser path and record the fallback in `evidence_inputs.tools_used`, `commands_or_manual_steps`, and `claim_limits`. A fallback can support a narrowed local runtime claim, but it must not silently pretend that the default `agent-browser` path ran.
|
|
10
|
+
|
|
7
11
|
## Planned Proof Slots
|
|
8
12
|
|
|
9
13
|
Every UI-sensitive plan needs either at least one slot under `ui_proof_slots` or an explicit `no_ui_proof_rationale` explaining why no rendered UI proof is required.
|
|
@@ -19,13 +23,15 @@ ui_proof_slots:
|
|
|
19
23
|
minimum_observations:
|
|
20
24
|
- "Changed control is visible and usable in the stated state."
|
|
21
25
|
- "Expected interaction completes without console/runtime error."
|
|
26
|
+
expected_artifact_types: [screenshot, report]
|
|
27
|
+
validation_command: "gsdd ui-proof compare {work_item_dir}/ui-proof-slots.json {work_item_dir}/UI-PROOF.md"
|
|
22
28
|
environment:
|
|
23
29
|
app_url: "http://localhost:3000"
|
|
24
30
|
data_state: "synthetic or seeded data"
|
|
25
31
|
viewport:
|
|
26
32
|
width: 1280
|
|
27
33
|
height: 720
|
|
28
|
-
notes: "
|
|
34
|
+
notes: "State why this viewport is enough for the claim, or add separate slots/observations for mobile, desktop, or responsive states."
|
|
29
35
|
manual_acceptance_required: false
|
|
30
36
|
claim_limit: "Does not prove cross-browser layout, full accessibility conformance, production delivery, or unrelated UI states."
|
|
31
37
|
no_ui_proof_rationale: null
|
|
@@ -34,6 +40,8 @@ no_ui_proof_rationale: null
|
|
|
34
40
|
Slot rules:
|
|
35
41
|
- Keep each slot tied to one exact UI claim.
|
|
36
42
|
- Use the lightest proof that can catch a botched rendered experience for that claim.
|
|
43
|
+
- Specify the route/state, viewport choice, minimum observations, expected artifact types, and runnable validation path tightly enough that a checker can reject vague proof before execution.
|
|
44
|
+
- The planner chooses the viewport set, but the slot must explain the choice. Include desktop and mobile proof when the claim covers responsive layout or when the changed surface is likely to behave differently across those sizes; otherwise narrow the claim limit.
|
|
37
45
|
- Source annotations, AST/cAST findings, semantic search hits, comments, and Semble-like retrieval may help discover proof obligations. They are discovery hints only; they do not satisfy proof slots.
|
|
38
46
|
- Do not add Playwright, Cypress, Storybook, Cucumber, CI, browser MCP, or visual-regression tooling by default.
|
|
39
47
|
- Human approval is required for visual taste, accessibility judgment, baseline acceptance, subjective polish/layout quality, and privacy publication decisions.
|
|
@@ -43,6 +51,8 @@ Slot rules:
|
|
|
43
51
|
|
|
44
52
|
Create or update this bundle during execution or verification when planned UI proof slots exist. JSON is the canonical machine-readable proof bundle format. Markdown proof files must include fenced JSON for deterministic validation.
|
|
45
53
|
|
|
54
|
+
Replace placeholders such as `{work_item_dir}` with the current phase, quick-task, or brownfield-change directory before running commands or validating the bundle.
|
|
55
|
+
|
|
46
56
|
```json
|
|
47
57
|
{
|
|
48
58
|
"proof_bundle_version": 1,
|
|
@@ -58,7 +68,7 @@ Create or update this bundle during execution or verification when planned UI pr
|
|
|
58
68
|
},
|
|
59
69
|
"environment": {
|
|
60
70
|
"app_url": "http://localhost:3000",
|
|
61
|
-
"browser": "
|
|
71
|
+
"browser": "agent-browser default; record fallback when unavailable",
|
|
62
72
|
"browser_version": "record if known",
|
|
63
73
|
"os": "record if relevant",
|
|
64
74
|
"data_state": "synthetic or seeded data"
|
|
@@ -70,7 +80,7 @@ Create or update this bundle during execution or verification when planned UI pr
|
|
|
70
80
|
},
|
|
71
81
|
"evidence_inputs": {
|
|
72
82
|
"kinds": ["test", "runtime"],
|
|
73
|
-
"tools_used": ["
|
|
83
|
+
"tools_used": ["playwright", "agent-browser"]
|
|
74
84
|
},
|
|
75
85
|
"commands_or_manual_steps": [
|
|
76
86
|
{
|
|
@@ -80,7 +90,12 @@ Create or update this bundle during execution or verification when planned UI pr
|
|
|
80
90
|
"attempts": 1
|
|
81
91
|
},
|
|
82
92
|
{
|
|
83
|
-
"
|
|
93
|
+
"command": "agent-browser open http://localhost:3000/example && agent-browser snapshot -i && agent-browser screenshot {work_item_dir}/artifacts/example-1280.png --full",
|
|
94
|
+
"result": "passed",
|
|
95
|
+
"attempts": 1
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"manual_step": "Using agent-browser refs, complete the changed interaction as a synthetic user and check for visible breakage or relevant console/network failures.",
|
|
84
99
|
"result": "passed"
|
|
85
100
|
}
|
|
86
101
|
],
|
|
@@ -93,7 +108,7 @@ Create or update this bundle during execution or verification when planned UI pr
|
|
|
93
108
|
"state": "role, data state, feature flag, loading/error/empty state, or component story"
|
|
94
109
|
},
|
|
95
110
|
"evidence_kind": "runtime",
|
|
96
|
-
"artifact_refs": ["test-results/changed-flow-report/index.html"],
|
|
111
|
+
"artifact_refs": ["test-results/changed-flow-report/index.html", "{work_item_dir}/artifacts/example-1280.png"],
|
|
97
112
|
"privacy": {
|
|
98
113
|
"data_classification": "synthetic",
|
|
99
114
|
"raw_artifacts_safe_to_publish": false,
|
|
@@ -112,6 +127,15 @@ Create or update this bundle during execution or verification when planned UI pr
|
|
|
112
127
|
"sensitivity": "possible",
|
|
113
128
|
"safe_to_publish": false,
|
|
114
129
|
"notes": "Local report only; not public proof."
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"path": "{work_item_dir}/artifacts/example-1280.png",
|
|
133
|
+
"type": "screenshot",
|
|
134
|
+
"visibility": "local_only",
|
|
135
|
+
"retention": "temporary_review",
|
|
136
|
+
"sensitivity": "possible",
|
|
137
|
+
"safe_to_publish": false,
|
|
138
|
+
"notes": "Local screenshot only; not public proof unless sanitized and reclassified."
|
|
115
139
|
}
|
|
116
140
|
],
|
|
117
141
|
"privacy": {
|
|
@@ -129,7 +153,8 @@ Create or update this bundle during execution or verification when planned UI pr
|
|
|
129
153
|
"claim_status": "passed",
|
|
130
154
|
"comparison_status_by_slot": {
|
|
131
155
|
"ui-01": "satisfied"
|
|
132
|
-
}
|
|
156
|
+
},
|
|
157
|
+
"failure_classification": null
|
|
133
158
|
},
|
|
134
159
|
"claim_limits": [
|
|
135
160
|
"Does not prove Safari/WebKit behavior.",
|
|
@@ -149,10 +174,11 @@ Bundle rules:
|
|
|
149
174
|
- Local-only or `safe_to_publish: false` artifacts can support local review only; they must not back tracked, public, delivery, release, or publication proof claims.
|
|
150
175
|
- Human acceptance may close a narrowed claim only by recording waiver, deferment, or proof debt; it must not upgrade missing or mismatched non-human proof to `satisfied`.
|
|
151
176
|
- Quick-mode UI proof should use deterministic synthetic IDs such as `quick-001` and `quick-001-ui-01` when roadmap requirement IDs do not exist.
|
|
177
|
+
- Classify failed UI proof using existing GSDD gap/proof-debt language: `product_bug`, `missing_infra`, `flaky_harness`, or `ambiguous_spec`. Do not add new result statuses or evidence kinds for those causes.
|
|
152
178
|
|
|
153
179
|
## Deterministic Validation
|
|
154
180
|
|
|
155
|
-
Use `gsdd ui-proof validate <path>` on JSON proof-bundle metadata or markdown fenced JSON before relying on a bundle for closure; add `--claim <public|publication|tracked|delivery|release>` only when validating that stronger proof use. Use `gsdd ui-proof compare <planned-slots-json> [observed-bundle-json ...]` when verifying planned proof slots against observed bundles through the deterministic product-facing path. Required observed-bundle top-level fields are `proof_bundle_version`, `scope`, `route_state`, `environment`, `viewport`, `evidence_inputs`, `commands_or_manual_steps`, `observations`, `artifacts`, `privacy`, `result`, and `claim_limits`. The validator checks required bundle and observation fields, structured command/manual-step entries, fixed evidence kinds, `result.claim_status`, observation `result`, comparison statuses, non-empty claim limits, locked artifact and observation privacy fields, observation-to-artifact references, workspace-relative/http(s) artifact references, and explicit public/tracked/delivery proof claims that rely on local-only, unsafe, unsanitized, or privacy-contradictory artifacts. `claim_status`, observation `result`, and command/manual-step `result` use `passed`, `failed`, `partial`, `waived`, `deferred`, or `not_applicable
|
|
181
|
+
Use `gsdd ui-proof validate <path>` on JSON proof-bundle metadata or markdown fenced JSON before relying on a bundle for closure; add `--claim <public|publication|tracked|delivery|release>` only when validating that stronger proof use. Use `gsdd ui-proof compare <planned-slots-json> [observed-bundle-json ...]` when verifying planned proof slots against observed bundles through the deterministic product-facing path. Required planned-slot fields are `slot_id`, `claim`, `route_state`, `required_evidence_kinds`, `minimum_observations`, `expected_artifact_types`, `validation_command`, `environment`, `viewport`, `manual_acceptance_required`, and `claim_limit`. Required observed-bundle top-level fields are `proof_bundle_version`, `scope`, `route_state`, `environment`, `viewport`, `evidence_inputs`, `commands_or_manual_steps`, `observations`, `artifacts`, `privacy`, `result`, and `claim_limits`. The validator checks planned-slot specificity, required bundle and observation fields, structured command/manual-step entries, fixed evidence kinds, concise `tools_used` IDs, `result.claim_status`, observation `result`, comparison statuses, failure classification for failed/partial proof, non-empty claim limits, locked artifact and observation privacy fields, observation-to-artifact references, workspace-relative/http(s) artifact references, existing local artifact paths when validating from files, and explicit public/tracked/delivery proof claims that rely on local-only, unsafe, unsanitized, or privacy-contradictory artifacts. `claim_status`, observation `result`, and command/manual-step `result` use `passed`, `failed`, `partial`, `waived`, `deferred`, or `not_applicable`; failed/partial proof uses `product_bug`, `missing_infra`, `flaky_harness`, or `ambiguous_spec`. It does not inspect raw screenshot, trace, video, DOM, or report contents and does not require any specific browser provider such as `agent-browser`.
|
|
156
182
|
|
|
157
183
|
## Comparison Statuses
|
|
158
184
|
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
<role>
|
|
2
2
|
You are the EXECUTOR. Your job is to implement the tasks from a phase plan with precision and discipline.
|
|
3
3
|
|
|
4
|
-
You follow the plan
|
|
5
|
-
You DO NOT freelance. You DO NOT add features outside the plan.
|
|
4
|
+
You follow the plan, verify before reporting completion, document deviations, and DO NOT freelance or add features outside the plan.
|
|
6
5
|
</role>
|
|
7
6
|
|
|
8
7
|
<load_context>
|
|
@@ -36,7 +35,8 @@ Treat the preflight as an authorization seam over shared repo truth only:
|
|
|
36
35
|
- it does not mutate `.planning/ROADMAP.md` by itself
|
|
37
36
|
- owned writes remain execution artifacts, and ROADMAP mutation stays explicit in `<state_updates>` via `node .planning/bin/gsdd.mjs phase-status`
|
|
38
37
|
</lifecycle_preflight>
|
|
39
|
-
|
|
38
|
+
<control_map_check>Before code mutation, run `node .planning/bin/gsdd.mjs control-map --json` when available. Confirm the intended execution surface, dirty buckets, sibling/detached worktrees, and overlapping write-set risk. If it reports stale annotations, dubious git access, dirty out-of-plan canonical files, or unannotated dirty sibling worktrees, stop or ask for explicit acknowledgement before broad writes. Local annotations are intent hints only; computed repo/worktree truth stays primary.
|
|
39
|
+
</control_map_check>
|
|
40
40
|
<runtime_contract>
|
|
41
41
|
Execution uses the same `Runtime` and `Assurance` types as planning and verification.
|
|
42
42
|
Infer runtime from the launching surface when obvious: `.claude/` -> `claude-code`, `.codex/` or Codex portable skill -> `codex-cli`, `.opencode/` -> `opencode`, otherwise `other`.
|
|
@@ -166,8 +166,9 @@ Before reporting a task complete:
|
|
|
166
166
|
|
|
167
167
|
### UI Proof Execution
|
|
168
168
|
If the plan defines non-empty `ui_proof_slots`, create or update the observed UI proof bundle before claiming completion; required top-level fields are `proof_bundle_version`, `scope`, `route_state`, `environment`, `viewport`, `evidence_inputs`, `commands_or_manual_steps`, `observations`, `artifacts`, `privacy`, `result`, and `claim_limits`.
|
|
169
|
-
Use
|
|
169
|
+
Use `agent-browser` as the default live UI proof path. Record the planned route/state open, interactive snapshots/refs when interaction is part of the claim, changed-flow interaction, screenshots for planned viewport(s), and relevant console/network observations. If `agent-browser` is unavailable, record the availability constraint and the closest project-native interactive browser fallback in the proof bundle instead of silently treating the fallback as the default path. If the repo already has Playwright tests or a package script wrapping them, run the relevant targeted test as canonical repeatable regression evidence; keep `agent-browser` as complementary runtime proof. Use Playwright scripting only for checks `agent-browser` cannot cover cleanly, such as JS-disabled, structured console, or multi-context verification. Do not install Playwright, Cypress, Cucumber, Storybook, browser MCP, CI, or visual-regression tooling by default. Screenshots, traces, videos, reports, accessibility scans, Gherkin, visual diffs, and manual notes map onto existing evidence kinds, not new evidence kinds; reference raw artifacts by path/link instead of storing them inline.
|
|
170
170
|
Each artifact entry must include `visibility`, `retention`, `sensitivity`, and `safe_to_publish`; raw screenshots, traces, videos, DOM snapshots, and reports default to `local_only` and `safe_to_publish: false` unless explicitly sanitized. Use `gsdd ui-proof validate <path>` when bundle metadata exists, adding `--claim <...>` only when relying on the bundle for public, tracked, delivery, release, or publication proof. Visual taste, accessibility judgment, baseline acceptance, subjective polish/layout quality, and privacy publication decisions require human evidence or explicit waiver; artifact count, source comments, AST/cAST findings, semantic search, and Semble-like retrieval are not proof. If evidence does not match the slot claim, route/state, observation, artifact path/manual step, privacy metadata, result, and claim limit, record proof debt, waiver, deferment, or reduced claim language rather than `satisfied` proof.
|
|
171
|
+
Classify failed UI proof using existing gap/proof-debt language: `product_bug`, `missing_infra`, `flaky_harness`, or `ambiguous_spec`. Do not add new evidence kinds or result statuses for those causes.
|
|
171
172
|
|
|
172
173
|
### Git Guidance
|
|
173
174
|
|
|
@@ -39,6 +39,8 @@ Store the detected work type as `$WORK_TYPE` (one of: `phase`, `quick`, `generic
|
|
|
39
39
|
<gather_state>
|
|
40
40
|
Build a draft checkpoint from artifact truth before asking the user to restate work. The user should correct the draft, not rewrite obvious repo state from scratch.
|
|
41
41
|
|
|
42
|
+
When available, run `node .planning/bin/gsdd.mjs control-map --json` and use it as the draft's repo/worktree snapshot: canonical branch/HEAD, dirty tracked/untracked/ignored buckets, sibling/detached worktrees, stale annotations, planning drift, and recommended interventions. Include only a compact summary or pointer in `.planning/.continue-here.md`; the checkpoint records resumability context, not a replacement for future computed repo truth.
|
|
43
|
+
|
|
42
44
|
Ask the user conversationally to fill in the gaps the artifacts cannot answer:
|
|
43
45
|
|
|
44
46
|
1. **What was completed** this session
|
|
@@ -32,12 +32,12 @@ If the preflight result is `blocked`, STOP and report the blocker instead of inf
|
|
|
32
32
|
|
|
33
33
|
<integration_surface_check>
|
|
34
34
|
Before planning roadmap work, inspect the live integration surface separately from checkpoint or planning artifacts:
|
|
35
|
-
-
|
|
36
|
-
- divergence
|
|
37
|
-
-
|
|
38
|
-
- whether the current branch appears stale/spent or mixed-scope
|
|
35
|
+
- Run `node .planning/bin/gsdd.mjs control-map --json` when available.
|
|
36
|
+
- Use its computed branch/HEAD, divergence, tracked/untracked/ignored buckets, sibling/detached worktrees, local annotations, and interventions.
|
|
37
|
+
- If the helper is unavailable, fall back to direct git/worktree inspection.
|
|
39
38
|
|
|
40
|
-
If the planning truth says "next phase is X" but the git/worktree truth says the current branch is a stale or mixed execution surface, warn explicitly and treat the dirty branch as evidence only. Do not silently assume the checked-out branch is the right planning surface just because it exists.
|
|
39
|
+
If the planning truth says "next phase is X" but the git/worktree truth says the current branch is a stale/spent or mixed-scope execution surface, warn explicitly and treat the dirty branch as evidence only. Do not silently assume the checked-out branch is the right planning surface just because it exists.
|
|
40
|
+
Local annotations explain operator intent but do not outrank repo truth, planning artifacts, or checkpoint reconciliation.
|
|
41
41
|
</integration_surface_check>
|
|
42
42
|
|
|
43
43
|
<runtime_contract>
|
|
@@ -136,8 +136,9 @@ If any of these are missing or contradictory, STOP. Report the exact missing con
|
|
|
136
136
|
</phase_contract_gate>
|
|
137
137
|
|
|
138
138
|
<ui_proof_planning>
|
|
139
|
-
For UI-sensitive work, include compact `ui_proof_slots` with `slot_id`, optional `requirement_id`, `claim`, `route_state`, fixed evidence kinds (`code`, `test`, `runtime`, `delivery`, `human`), `minimum_observations`, `environment`, `viewport`, `manual_acceptance_required`, and `claim_limit`; otherwise set `no_ui_proof_rationale`.
|
|
139
|
+
For UI-sensitive work, include compact `ui_proof_slots` with `slot_id`, optional `requirement_id`, `claim`, `route_state`, fixed evidence kinds (`code`, `test`, `runtime`, `delivery`, `human`), `minimum_observations`, `expected_artifact_types`, `validation_command`, `environment`, `viewport`, `manual_acceptance_required`, and `claim_limit`; otherwise set `no_ui_proof_rationale`.
|
|
140
140
|
Do not create slots for backend-only, CLI-only, docs-only, or refactor-only work unless the plan claims a visible UI outcome. Evidence must later match claim, route/state, observation, artifact path, evidence kind, privacy metadata, result, and claim limit; local-only or unsafe artifacts cannot support public, publication, tracked, delivery, or release proof claims. Human approval does not replace required `code`, `test`, `runtime`, or `delivery` evidence.
|
|
141
|
+
For live rendered UI proof, plan `agent-browser` as the default runtime evidence path and existing Playwright/package-script browser tests as the repeatable regression path when the repo already has them. If the runtime does not provide `agent-browser`, require the plan to state that availability constraint and name the closest project-native interactive browser fallback before narrowing the claim. The planner chooses the viewport set, but each slot must explain why the chosen viewport(s) are enough for the claim or narrow the claim limit; responsive claims need desktop/mobile or equivalent state coverage. Do not plan new browser infrastructure by default, and use Playwright scripting only for checks `agent-browser` cannot cover cleanly, such as JS-disabled, structured console, or multi-context verification.
|
|
141
142
|
</ui_proof_planning>
|
|
142
143
|
<goal_backward_planning>
|
|
143
144
|
Plan backward from success criteria.
|
|
@@ -6,6 +6,10 @@ Core mindset: derive state from primary artifacts. ROADMAP.md checkboxes, phase
|
|
|
6
6
|
Scope boundary: you are NOT resume.md. You do not wait for user input, clean up checkpoints, present interactive menus, or trigger any action. You report and suggest only.
|
|
7
7
|
</role>
|
|
8
8
|
|
|
9
|
+
<control_map>
|
|
10
|
+
At the start of status reporting, run `node .planning/bin/gsdd.mjs control-map --json` when the local helper exists. Summarize its computed repo/worktree/planning state in the status block: canonical branch/HEAD, tracked/untracked dirty buckets, whether ignored paths were scanned, sibling or detached worktrees, stale local annotations, planning drift, and recommended interventions. Use `--with-ignored` before making a clean-workspace claim that includes ignored or generated surfaces. Treat the command output as read-only computed evidence. Local annotations under `.planning/.local/` explain intent but never outrank repo truth, planning artifacts, or checkpoint reconciliation.
|
|
11
|
+
</control_map>
|
|
12
|
+
|
|
9
13
|
<prerequisites>
|
|
10
14
|
`.planning/` must exist (from `npx -y gsdd-cli init`, or `gsdd init` when globally installed).
|
|
11
15
|
|
|
@@ -45,7 +45,7 @@ Store the response as `$DESCRIPTION`. If empty, re-prompt.
|
|
|
45
45
|
6. If `.planning/codebase/` exists, read whichever of `.planning/codebase/ARCHITECTURE.md`, `.planning/codebase/STACK.md`, `.planning/codebase/CONVENTIONS.md`, and `.planning/codebase/CONCERNS.md` are present. Summarize key findings from available docs in <=500 words as `$CODEBASE_CONTEXT`, emphasizing: safest surfaces to touch, risky zones to avoid, must-know conventions/traps, and what must be re-verified after change. Note any missing docs in the summary.
|
|
46
46
|
7. If `.planning/codebase/` does not exist, build a just-enough inline brownfield baseline instead of stopping. Read the repo root guidance that is cheap and stable (`README.md`, root manifest such as `package.json` / `pyproject.toml` / `Cargo.toml` when present, top-level app entrypoints, and any obviously relevant config or module files surfaced by `$DESCRIPTION`). Summarize the findings in <=500 words as `$CODEBASE_CONTEXT`, explicitly labeling it as a provisional baseline and calling out unknowns. Emphasize: likely implementation surface, likely dependency boundaries, conventions already visible, risky areas to avoid touching blindly, and what must be re-verified after the change. If the repo is still too unclear after this pass, keep that uncertainty explicit so Step 3.6 can recommend `/gsdd-map-codebase`.
|
|
47
47
|
8. **Session-boundary fallback:** If `.planning/.continue-here.bak` exists, read its `<judgment>` section. Use `<active_constraints>` and `<anti_regression>` rules as task-scoping context (do not violate active constraints; do not regress on listed invariants). After reading, run `node .planning/bin/gsdd.mjs file-op delete .planning/.continue-here.bak --missing ok` (auto-clean).
|
|
48
|
-
9. Inspect the live branch/worktree surface separately from checkpoint or planning artifacts.
|
|
48
|
+
9. Inspect the live branch/worktree surface separately from checkpoint or planning artifacts. Run `node .planning/bin/gsdd.mjs control-map --json` when available and use its computed repo/worktree/planning truth to identify stale/spent branches, dirty tracked/untracked/ignored buckets, sibling or detached worktrees, local annotations, and cleanup obligations. This is advisory for quick tasks unless the mismatch makes the task description materially misleading; local annotations are intent hints, not product truth.
|
|
49
49
|
|
|
50
50
|
If `.planning/quick/` does not exist, create it along with an empty `LOG.md`:
|
|
51
51
|
|
|
@@ -118,9 +118,10 @@ Delegate to the planner role in quick mode.
|
|
|
118
118
|
- No research phase, no ROADMAP requirements
|
|
119
119
|
- Do NOT extract phase requirement IDs — there is no active phase
|
|
120
120
|
- Derive must-haves directly from the task description
|
|
121
|
-
- If the quick task is UI-sensitive, include proportional `ui_proof_slots` with slot_id, claim, route_state, required_evidence_kinds, minimum_observations, environment, viewport, manual_acceptance_required, and claim_limit; otherwise include a short `no_ui_proof_rationale`
|
|
121
|
+
- If the quick task is UI-sensitive, include proportional `ui_proof_slots` with slot_id, claim, route_state, required_evidence_kinds, minimum_observations, expected_artifact_types, validation_command, environment, viewport, manual_acceptance_required, and claim_limit; otherwise include a short `no_ui_proof_rationale`
|
|
122
122
|
- UI proof slots must be matchable to exact observed evidence later: claim, route/state, observation, evidence kind, artifact path or manual step, privacy metadata, result, and claim limit. Discovery hints from source comments, AST/cAST, semantic search, or Semble-like retrieval do not satisfy proof.
|
|
123
123
|
- Observed artifact metadata must include `visibility`, `retention`, `sensitivity`, and `safe_to_publish`; raw screenshots, traces, videos, DOM snapshots, and reports are local-only/unsafe by default. Use `gsdd ui-proof validate <path>` or `gsdd health` when a bundle exists; add `--claim <...>` only for public, publication, tracked, delivery, or release proof use.
|
|
124
|
+
- For live rendered UI proof, default to `agent-browser` snapshots/refs, interactions, screenshots, and relevant console/network observations. If unavailable, state the availability constraint and closest project-native interactive browser fallback before narrowing the claim. Existing Playwright/package-script browser tests remain the canonical repeatable regression path when present. The viewport set is plan-owned, but under-specified viewport coverage is weak proof; explain the chosen viewport(s) or narrow the claim limit.
|
|
124
125
|
- Keep UI proof proportional: do not scaffold Playwright, Cypress, Cucumber, Storybook, CI, browser MCP, or visual-regression tooling by default
|
|
125
126
|
- Ignore <planning_process> Step 1 requirement extraction; use inline goal-backward planning only
|
|
126
127
|
- Target minimal context usage
|
|
@@ -160,7 +161,8 @@ Read `.planning/config.json`.
|
|
|
160
161
|
- Mode: quick
|
|
161
162
|
|
|
162
163
|
**Constraints:**
|
|
163
|
-
- Check 5 dimensions
|
|
164
|
+
- Check 5 dimensions by default: `requirement_coverage`, `task_completeness`, `dependency_correctness`, `scope_sanity`, `must_have_quality`
|
|
165
|
+
- If the quick plan contains `ui_proof_slots` or a rendered UI claim, also check `closure_honesty` so weak UI proof slots block execution
|
|
164
166
|
- Skip: `key_link_completeness`, `context_compliance`, `goal_achievement`, `approach_alignment`
|
|
165
167
|
- Maximum 1 revision cycle (if blockers found, send back to planner once, then accept result)
|
|
166
168
|
- Blocker threshold: only block on `task_completeness` or `scope_sanity` violations
|
|
@@ -268,6 +270,7 @@ Delegate to the executor role.
|
|
|
268
270
|
- Do NOT update ROADMAP.md phase status or SPEC.md current state
|
|
269
271
|
- Create summary at: `.planning/quick/$NEXT_NUM-$SLUG/$NEXT_NUM-SUMMARY.md`
|
|
270
272
|
- If the quick plan defines `ui_proof_slots`, create or update `.planning/quick/$NEXT_NUM-$SLUG/UI-PROOF.md` with fenced JSON containing required top-level fields: `proof_bundle_version`, `scope`, `route_state`, `environment`, `viewport`, `evidence_inputs`, `commands_or_manual_steps`, `observations`, `artifacts`, `privacy`, `result`, and `claim_limits`
|
|
273
|
+
- For live UI proof, record `agent-browser` in `evidence_inputs.tools_used` when used, the exact commands or manual ref-based steps, screenshot/report artifact paths, and any relevant console/network observations. If `agent-browser` was unavailable, record that availability constraint and fallback tool explicitly. If existing Playwright tests supplied regression evidence, record the package command and result separately from the `agent-browser` runtime observation.
|
|
271
274
|
- Human approval for visual taste, accessibility judgment, baseline acceptance, subjective polish/layout quality, or privacy publication does not replace required `code`, `test`, `runtime`, or `delivery` evidence
|
|
272
275
|
|
|
273
276
|
**Output:** `.planning/quick/$NEXT_NUM-$SLUG/$NEXT_NUM-SUMMARY.md`
|
|
@@ -35,6 +35,10 @@ Treat the preflight as an authorization seam over shared repo truth only:
|
|
|
35
35
|
|
|
36
36
|
<process>
|
|
37
37
|
|
|
38
|
+
<control_map_reconciliation>
|
|
39
|
+
Before routing from a checkpoint, run `node .planning/bin/gsdd.mjs control-map --json` when available. Reconcile the checkpoint narrative against computed repo/worktree/planning truth: canonical branch/HEAD, tracked/untracked/ignored dirty buckets, sibling or detached worktrees, local annotations, active brownfield anchors, and planning drift. If the checkpoint understates dirty work, points at a stale branch/worktree, or conflicts with the active planning/brownfield surface, stop and present the mismatch before recommending execution. Local annotations are useful intent hints, not authority.
|
|
40
|
+
</control_map_reconciliation>
|
|
41
|
+
|
|
38
42
|
<detect_state>
|
|
39
43
|
Check for project artifacts in order:
|
|
40
44
|
|
|
@@ -131,6 +131,7 @@ Note: this step does NOT replace levels 1–3. An artifact can satisfy the evide
|
|
|
131
131
|
<ui_proof_comparison>
|
|
132
132
|
If the plan defines non-empty `ui_proof_slots`, compare planned UI proof against observed bundles before closure. Prefer `gsdd ui-proof compare <planned-slots-json> [observed-bundle-json ...]` when planned slots are available as JSON or fenced JSON; otherwise perform the same field-by-field comparison and record reduced assurance if no deterministic command could run. If the plan records only `no_ui_proof_rationale`, verify the rationale instead of requiring a bundle. Each observed bundle must include top-level `proof_bundle_version`, `scope`, `route_state`, `environment`, `viewport`, `evidence_inputs`, `commands_or_manual_steps`, `observations`, `artifacts`, `privacy`, `result`, and `claim_limits`.
|
|
133
133
|
Classify each slot as exactly one of: `satisfied`, `partial`, `missing`, `waived`, `deferred`, or `not_applicable`. Waiver/deferment narrows the claim; it is not proof. Screenshots, traces, videos, reports, accessibility scans, Gherkin, visual diffs, and manual notes are artifact types or activities mapped onto existing evidence kinds, not new evidence kinds. Artifact count is never proof; each artifact must tie to the slot claim, route/state, observation, artifact path/link, privacy metadata, and claim limit.
|
|
134
|
+
For live UI runtime proof, expect `agent-browser` as the default captured tool unless the observed bundle explains a project-native equivalent or an availability constraint. Do not fail solely because another browser tool was used, but downgrade vague proof that lacks exact route/state, planned viewport coverage or rationale, interactive steps/refs where relevant, screenshot/report artifacts, or relevant console/network observations. Existing Playwright tests count as canonical repeatable regression evidence, not a replacement for scoped runtime evidence when the slot requires `runtime`.
|
|
134
135
|
Artifact privacy metadata must include `visibility`, `retention`, `sensitivity`, and `safe_to_publish`; raw screenshots, traces, videos, DOM snapshots, and reports default to local-only and unsafe unless sanitized. Run `gsdd ui-proof validate <path>` or treat `gsdd health` E10 as blocking; add `--claim <...>` when relying on the bundle for public, tracked, delivery, release, or publication proof. Visual taste, accessibility judgment, baseline acceptance, subjective polish/layout quality, and privacy publication require human evidence or explicit waiver; human approval does not replace required `code`, `test`, `runtime`, or `delivery` evidence. Source annotations, AST/cAST findings, semantic search, comments, and Semble-like retrieval are discovery hints only.
|
|
135
136
|
</ui_proof_comparison>
|
|
136
137
|
|
package/docs/USER-GUIDE.md
CHANGED
|
@@ -185,6 +185,7 @@ The 7 check dimensions: requirement coverage, task completeness, dependency corr
|
|
|
185
185
|
| `npx -y gsdd-cli init [--tools <platform>]` | Set up `.planning/`, generate skills/adapters |
|
|
186
186
|
| `npx -y gsdd-cli update [--tools <platform>]` | Regenerate skills/adapters from latest sources |
|
|
187
187
|
| `npx -y gsdd-cli update --templates` | Refresh role contracts and delegates (warns about user modifications) |
|
|
188
|
+
| `npx -y gsdd-cli control-map [--json] [--with-ignored]` | Show computed repo/worktree/planning state, dirty buckets, optional ignored-path scan, local annotations, and safe next interventions |
|
|
188
189
|
| `npx -y gsdd-cli find-phase [N]` | Show phase info as JSON (for agent consumption) |
|
|
189
190
|
| `npx -y gsdd-cli verify <N>` | Run artifact checks for phase N |
|
|
190
191
|
| `npx -y gsdd-cli scaffold phase <N> [name]` | Create a new phase plan file |
|
|
@@ -447,6 +448,7 @@ Switch to budget profile: `npx -y gsdd-cli models profile budget` (or `gsdd mode
|
|
|
447
448
|
gsdd.ps1 # PowerShell shim for the local helper surface
|
|
448
449
|
lib/ # Copied helper-runtime support modules
|
|
449
450
|
generation-manifest.json # SHA-256 hashes for template versioning
|
|
451
|
+
.local/ # Local-only operational annotations; not product truth
|
|
450
452
|
.continue-here.md # Session checkpoint (created by pause, consumed by resume)
|
|
451
453
|
research/ # Domain research outputs
|
|
452
454
|
codebase/ # Codebase maps (4 files: STACK, ARCHITECTURE, CONVENTIONS, CONCERNS)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gsdd-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.23.0",
|
|
4
4
|
"description": "Workspine — a repo-native delivery spine for long-horizon AI-assisted work, with directly validated support for Claude Code, Codex CLI, and OpenCode, published as gsdd-cli.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
10
|
"test": "npm run test:gsdd",
|
|
11
|
-
"test:gsdd": "node tests/gsdd.init.test.cjs && node tests/gsdd.models.test.cjs && node tests/gsdd.consumer-ceremony.test.cjs && node tests/gsdd.manifest.test.cjs && node tests/gsdd.plan.adapters.test.cjs && node tests/gsdd.audit-milestone.test.cjs && node tests/gsdd.invariants.test.cjs && node tests/gsdd.guards.test.cjs && node tests/gsdd.health.test.cjs && node tests/gsdd.scenarios.test.cjs && node tests/gsdd.cross-runtime.test.cjs && node tests/phase.test.cjs && node tests/session-fingerprint.test.cjs",
|
|
11
|
+
"test:gsdd": "node tests/gsdd.init.test.cjs && node tests/gsdd.models.test.cjs && node tests/gsdd.consumer-ceremony.test.cjs && node tests/gsdd.manifest.test.cjs && node tests/gsdd.plan.adapters.test.cjs && node tests/gsdd.audit-milestone.test.cjs && node tests/gsdd.invariants.test.cjs && node tests/gsdd.guards.test.cjs && node tests/gsdd.health.test.cjs && node tests/gsdd.scenarios.test.cjs && node tests/gsdd.cross-runtime.test.cjs && node tests/gsdd.control-map.test.cjs && node tests/phase.test.cjs && node tests/session-fingerprint.test.cjs",
|
|
12
12
|
"prepublishOnly": "node -e \"const ok=process.env.GITHUB_ACTIONS==='true'&&process.env.GITHUB_REF_NAME==='main'&&process.env.GITHUB_WORKFLOW==='Release'; if(!ok){console.error('Refusing to publish gsdd-cli outside the GitHub Actions Release workflow on main.'); process.exit(1)}\""
|
|
13
13
|
},
|
|
14
14
|
"devDependencies": {
|