@mriekki/project-forge 2.0.0 → 2.2.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.
Files changed (28) hide show
  1. package/assets/components.json +3 -3
  2. package/assets/core/distribution.json +7 -0
  3. package/assets/generated/ASSEMBLY.json +55 -20
  4. package/assets/generated/core/core/agents/reviewer.agent.md +1 -1
  5. package/assets/generated/core/core/instructions/project-forge-workflow.instructions.md +5 -1
  6. package/assets/generated/core/core/process/APPLICATION_VERSIONING.md +137 -0
  7. package/assets/generated/core/core/process/GUIDED_NEXT_STEPS.md +22 -6
  8. package/assets/generated/core/core/process/INTERACTIVE_SESSION_GUIDE.md +31 -1
  9. package/assets/generated/core/core/process/OPERATION_JOURNAL.md +140 -0
  10. package/assets/generated/core/core/process/PROJECT_REQUIREMENTS_EXPORT.md +165 -0
  11. package/assets/generated/core/core/skills/build/SKILL.md +70 -0
  12. package/assets/generated/core/core/skills/cleanup-branches/SKILL.md +6 -10
  13. package/assets/generated/core/core/skills/code-walkthrough/SKILL.md +12 -8
  14. package/assets/generated/core/core/skills/core-sync/SKILL.md +17 -11
  15. package/assets/generated/core/core/skills/define-feature/SKILL.md +9 -18
  16. package/assets/generated/core/core/skills/deliver/SKILL.md +12 -8
  17. package/assets/generated/core/core/skills/deploy/SKILL.md +2 -2
  18. package/assets/generated/core/core/skills/export-requirements/SKILL.md +132 -0
  19. package/assets/generated/core/core/skills/grill-with-docs/SKILL.md +6 -8
  20. package/assets/generated/core/core/skills/next-step/SKILL.md +10 -11
  21. package/assets/generated/core/core/skills/project-forge-update/SKILL.md +10 -6
  22. package/assets/generated/core/core/skills/pull-latest/SKILL.md +16 -10
  23. package/assets/generated/core/core/skills/refine-requirements/SKILL.md +37 -16
  24. package/assets/generated/core/core/skills/replatform/SKILL.md +122 -0
  25. package/assets/generated/core/core/skills/run/SKILL.md +75 -0
  26. package/assets/generated/core/core/skills/setup/SKILL.md +20 -17
  27. package/assets/generated/core/core/skills/start-work/SKILL.md +11 -9
  28. package/package.json +1 -1
@@ -70,7 +70,7 @@ When deterministic setup passes but human workspace acceptance is still needed,
70
70
 
71
71
  When the workspace is accepted and the first approved work item is clear, recommend `/start-work <ID>`.
72
72
 
73
- If the developer wants the broader status instead of one action, offer `/progress` as a read-only option.
73
+ If the developer wants the broader status instead of one action, offer `/progress` as a read-only choice.
74
74
 
75
75
  ## 3. Engineering/delivery states
76
76
 
@@ -111,14 +111,13 @@ CURRENT STATE
111
111
  RECOMMENDED NEXT STEP
112
112
  <one action and why>
113
113
 
114
- OPTIONS
115
- 1. ... [READ ONLY]
116
- 2. ... [MODIFIES FILES]
117
- 3. ... [GIT + GITHUB WRITE]
118
- 4. Stop [NO ACTION]
114
+ CHOICES
115
+ <only relevant bounded actions, rendered through structured choice UI when available>
119
116
  ```
120
117
 
121
- Only show relevant options. `/next-step` orients; it does not become another workflow database.
118
+ When there is more than one relevant action, use the host's native **single-select structured choice UI** following `INTERACTIVE_SESSION_GUIDE.md`. In VS Code, use the question surface such as `vscode_askQuestions` when available. Keep consequence labels visible, mark the recommended choice where evidence supports one, and include `Other / specify` or free-text only when the action space may be incomplete. Use multi-select only for an explicitly multi-action workflow; ordinary `/next-step` choices are mutually exclusive.
119
+
120
+ A textual numbered `OPTIONS` list is only the fallback when no structured choice UI is available. Only show relevant choices. `/next-step` orients; it does not become another workflow database.
122
121
 
123
122
  For an unprepared generated workspace, a good result is simply:
124
123
 
@@ -128,12 +127,10 @@ Local setup has not been completed on this computer.
128
127
 
129
128
  RECOMMENDED NEXT STEP
130
129
  /setup
131
-
132
- OPTIONS
133
- 1. /progress [READ ONLY]
134
- 2. Stop [NO ACTION]
135
130
  ```
136
131
 
132
+ If useful, offer `/progress` `[READ ONLY]` and `Stop` `[NO ACTION]` through the structured selector; do not print a numbered menu in normal VS Code use.
133
+
137
134
  ## 5. Optional documentation and learning choices
138
135
 
139
136
  When implementation is stable enough to understand or document, `/next-step` may offer these choices without making them gates:
@@ -147,6 +144,8 @@ When implementation is stable enough to understand or document, `/next-step` may
147
144
  /system-lab [changes <work-item>]
148
145
  ```
149
146
 
147
+ If the human is being asked to select one of these bounded next actions, use the same single-select structured-choice rule. The command list above is descriptive, not a required numbered menu.
148
+
150
149
  Prefer `/docs` for the coherent project briefing/document map, `/code-walkthrough` for implementation flow, `/db-lab` for concrete schema/query/index/ORM evidence, and `/system-lab` for architecture/runtime/failure/scale evidence.
151
150
 
152
151
  Safe generated projections may be prepared automatically. Do not silently rewrite project-owned prose, accept an ADR, or make learning mandatory before `/deliver` unless the approved work item explicitly requires it.
@@ -124,7 +124,7 @@ For a Bootstrap-generated consumer, also preview the companion generated-consume
124
124
 
125
125
  ## 5. Present one bounded update choice
126
126
 
127
- When the exact target package plan and any generated-consumer companion plan are safe, present:
127
+ When the exact target package plan and any generated-consumer companion plan are safe, show the reviewed evidence:
128
128
 
129
129
  ```text
130
130
  PROJECT FORGE UPDATE READY
@@ -137,13 +137,17 @@ Core: <old> → <new>
137
137
  Deployment: <old> → <new> / unchanged
138
138
  Generated consumer metadata: <not present / coherent update planned>
139
139
  Managed drift/conflicts: NONE
140
-
141
- 1. Apply the exact Project Forge package update [GIT + FILE WRITE] — recommended
142
- 2. Keep inspecting only [READ ONLY]
143
- 3. Stop [NO ACTION]
144
140
  ```
145
141
 
146
- Choosing option 1 authorizes only:
142
+ Then use the host-native **single-select structured choice UI** when available; in VS Code use the native question surface such as `vscode_askQuestions`. Offer:
143
+
144
+ - `Apply the exact Project Forge package update` `[GIT + FILE WRITE]` — `RECOMMENDED`
145
+ - `Keep inspecting only` `[READ ONLY]`
146
+ - `Stop` `[NO ACTION]`
147
+
148
+ Use a numbered text menu only when structured choice UI is unavailable.
149
+
150
+ Choosing `Apply the exact Project Forge package update` authorizes only:
147
151
 
148
152
  - creation/switch to one repository-appropriate short-lived update branch when needed;
149
153
  - exact target package apply;
@@ -49,21 +49,25 @@ Never use `reset --hard`, force-push, merge, or rebase as part of `/pull-latest`
49
49
 
50
50
  ## 3. Choose the update target
51
51
 
52
+ When the user must choose an update action, use the host-native **single-select structured choice UI** when available; in VS Code use the native question surface such as `vscode_askQuestions`. Use a numbered text menu only when structured choice UI is unavailable.
53
+
52
54
  If the human supplied a branch, use that branch as the requested target when it can be resolved safely.
53
55
 
54
- If no branch was supplied and the current branch is the default branch, present:
56
+ If no branch was supplied and the current branch is the default branch, show:
55
57
 
56
58
  ```text
57
59
  PULL LATEST READY
58
60
 
59
61
  Current branch: <branch>
60
62
  Working tree: CLEAN
61
-
62
- 1. Refresh remote state and pull latest <branch> [GIT WRITE] — recommended
63
- 2. Stop [NO ACTION]
64
63
  ```
65
64
 
66
- If no branch was supplied and the current branch is a non-default branch, present:
65
+ Then offer:
66
+
67
+ - `Refresh remote state and pull latest <branch>` `[GIT WRITE]` — `RECOMMENDED`
68
+ - `Stop` `[NO ACTION]`
69
+
70
+ If no branch was supplied and the current branch is a non-default branch, show:
67
71
 
68
72
  ```text
69
73
  PULL LATEST READY
@@ -71,13 +75,15 @@ PULL LATEST READY
71
75
  Current branch: <branch>
72
76
  Default branch: <default>
73
77
  Working tree: CLEAN
74
-
75
- 1. Refresh and pull the current branch [GIT WRITE]
76
- 2. Switch to the default branch and pull latest [GIT WRITE] — recommended for returning to baseline
77
- 3. Stop [NO ACTION]
78
78
  ```
79
79
 
80
- Only the selected option authorizes fetch/switch/pull mechanics for the selected branch.
80
+ Then offer:
81
+
82
+ - `Refresh and pull the current branch` `[GIT WRITE]`
83
+ - `Switch to the default branch and pull latest` `[GIT WRITE]` — `RECOMMENDED` when returning to baseline
84
+ - `Stop` `[NO ACTION]`
85
+
86
+ Only the selected choice authorizes fetch/switch/pull mechanics for the selected branch.
81
87
 
82
88
  ## 4. Refresh remote state
83
89
 
@@ -113,22 +113,24 @@ STATUS
113
113
  <DRAFT / APPROVED / external status / not represented locally>
114
114
  ```
115
115
 
116
- Then present only relevant choices, for example:
116
+ Then present only relevant actions as a **single-select structured choice** when the host supports it. In VS Code, use the native question surface such as `vscode_askQuestions` rather than printing a numbered menu. Conceptual choices may include:
117
117
 
118
- ```text
119
- 1. Review outcomes [READ ONLY]
120
- 2. Review rules [READ ONLY]
121
- 3. Review acceptance scenarios [READ ONLY]
122
- 4. Refine identified gaps [MODIFIES DOCS or PROPOSED EXTERNAL UPDATE]
123
- 5. Grill an unresolved decision [READ ONLY]
124
- 6. Review full requirements/work item [READ ONLY]
125
- 7. Approve local requirements when applicable [REQUIREMENTS GATE]
126
- 8. Stop [NO ACTION]
127
- ```
118
+ - `Review outcomes` `[READ ONLY]`
119
+ - `Review rules` `[READ ONLY]`
120
+ - `Review acceptance scenarios` `[READ ONLY]`
121
+ - `Refine identified gaps` `[MODIFIES DOCS or PROPOSED EXTERNAL UPDATE]`
122
+ - `Grill an unresolved decision` `[READ ONLY]`
123
+ - `Review full requirements/work item` `[READ ONLY]`
124
+ - `Approve local requirements` `[REQUIREMENTS GATE]` when applicable
125
+ - `Stop` `[NO ACTION]`
126
+
127
+ Make a recommendation only when current requirement evidence or a clear engineering tradeoff supports one. If so, mark exactly one choice with the host's `recommended` indicator and briefly explain why. If there is no clear basis, show the choices without a recommendation. The selected answer, not the recommendation, controls what the session does or records.
128
+
129
+ If the host has no structured choice UI, present the same relevant choices as a concise numbered text fallback and accept the number, label, or free-form intent. Do not use the numbered fallback as the normal VS Code path.
128
130
 
129
131
  ## 5. Active refinement session
130
132
 
131
- Once the human selects a modifying refinement option, enter a bounded continuous session:
133
+ Once the human selects a modifying refinement choice, enter a bounded continuous session:
132
134
 
133
135
  ```text
134
136
  ask one material requirement question
@@ -139,7 +141,26 @@ ask one material requirement question
139
141
  → next material question
140
142
  ```
141
143
 
142
- For bounded requirement decisions such as lifecycle policy, validation behavior, destructive/reversible handling, or a small set of credible alternatives, use the choice-first interaction guidance from `INTERACTIVE_SESSION_GUIDE.md`. Keep outcome wording, workflow descriptions, acceptance intent, and other human-authored framing open-ended when predefined choices would constrain the requirement.
144
+ For bounded requirement decisions such as lifecycle policy, validation behavior, destructive/reversible handling, or a small set of credible alternatives, use the choice-first interaction guidance from `INTERACTIVE_SESSION_GUIDE.md`. Render mutually exclusive alternatives through host-native **single-select** controls when available. Use multi-select only when the requirement genuinely permits multiple simultaneous selections. Keep `Other / specify` or free-text available when the option set may be incomplete. Keep outcome wording, workflow descriptions, acceptance intent, and other human-authored framing open-ended when predefined choices would constrain the requirement.
145
+
146
+ Recommendation behavior follows the shared guide: recommend at most one option, only when evidence/tradeoffs support it; give a concise rationale; never record the recommendation as accepted until the human selects or confirms it; and honor a `no recommendation` request for that question only.
147
+
148
+ Example of a supported recommendation:
149
+
150
+ ```text
151
+ Decision: How should a browser-to-real-SQLite path be proven for a narrowly scoped work item?
152
+
153
+ Choices:
154
+ - Integration test against real SQLite
155
+ - Browser smoke check through the API
156
+ - Both
157
+ - Other / specify
158
+
159
+ Recommendation: Both
160
+ Why: one real-SQLite integration test proves the persistence path and one browser smoke check proves the browser/API path without implying a broad end-to-end suite.
161
+ ```
162
+
163
+ Treat this as advice for the human to accept, change, or replace. Do not record `Both` as a requirement until the human selects or confirms it.
143
164
 
144
165
  Do not ask after each answer whether to update.
145
166
 
@@ -162,7 +183,7 @@ Stop automatic reconciliation when an answer would:
162
183
  - require a cross-cutting architecture decision,
163
184
  - remain too ambiguous to record faithfully.
164
185
 
165
- Then present a small explicit choice.
186
+ Then present a small explicit choice using the same host-native structured-choice rule. Keep the question open-ended instead when the human needs to explain or reframe the conflict in their own words.
166
187
 
167
188
  ## 7. Approval gate
168
189
 
@@ -175,7 +196,7 @@ APPROVED
175
196
 
176
197
  Human approval is explicit. Do not infer approval from review/planning/implementation.
177
198
 
178
- Before approval report coverage and open material decisions. Only an explicit `[REQUIREMENTS GATE]` choice may change local status to `APPROVED`.
199
+ Before approval report coverage and open material decisions. Only an explicit `[REQUIREMENTS GATE]` choice may change local status to `APPROVED`. When the host offers structured choices, render this approval gate as a single-select action, not a numbered chat menu.
179
200
 
180
201
  External work-item status/approval follows the external team's conventions; Project Forge must not fabricate a local approval state.
181
202
 
@@ -198,7 +219,7 @@ Authority/status:
198
219
  <source and status>
199
220
  ```
200
221
 
201
- Then offer review, more grilling/refinement, approval when applicable, or stop.
222
+ Then offer review, more grilling/refinement, approval when applicable, or stop using the same structured-choice-first rule.
202
223
 
203
224
  ## 9. Stop boundary
204
225
 
@@ -0,0 +1,122 @@
1
+ ---
2
+ name: replatform
3
+ description: "Create a new implementation proposal from approved PROJECT_REQUIREMENTS.json and a requested target stack without rewriting the source project in place."
4
+ argument-hint: "<target-stack-or-recipe>"
5
+ user-invocable: true
6
+ disable-model-invocation: true
7
+ ---
8
+
9
+ # Replatform
10
+
11
+ `/replatform` creates a new implementation proposal for the same product/system intent using a different technology stack.
12
+
13
+ It never rewrites the source application in place.
14
+
15
+ ## Required input
16
+
17
+ Use only the canonical portable export:
18
+
19
+ ```text
20
+ PROJECT_REQUIREMENTS.json
21
+ ```
22
+
23
+ The file must be `state: "approved"`. Do not accept alternate/legacy requirements-export filenames or infer approval from file existence.
24
+
25
+ If the export is missing or stale relative to material source-requirement changes, use `/export-requirements` first.
26
+
27
+ ## Target
28
+
29
+ The invocation supplies a target stack or current Bootstrap recipe, for example:
30
+
31
+ ```text
32
+ /replatform angular java
33
+ /replatform java-angular-sqlite
34
+ /replatform blazor sqlite
35
+ ```
36
+
37
+ Resolve support against the current canonical Project Forge Bootstrap catalog. General model knowledge may explain an uncataloged technology, but label it `CATALOG GAP` and do not fabricate Bootstrap automation/support.
38
+
39
+ ## Output boundary
40
+
41
+ The operation produces a new `PROJECT_BOOTSTRAP.json` proposal with `state: "review"` for a new target repository.
42
+
43
+ It must record derivation provenance back to the approved requirements export/source repository and identify the selected current Bootstrap catalog/protocol and Project Forge package provenance.
44
+
45
+ Do not generate application source or mutate the target repository until the normal Bootstrap manifest review/approval gate is complete.
46
+
47
+ ## Reconciliation rules
48
+
49
+ Preserve from the approved requirements export:
50
+
51
+ - product problem/goals/users/outcomes;
52
+ - Product Feature intent and target maturity;
53
+ - approved functional/domain requirements and acceptance criteria;
54
+ - domain concepts, relationships, invariants, lifecycle/state semantics, and business rules;
55
+ - portable security/privacy/reliability/data constraints;
56
+ - portable design, accessibility, responsive, and interaction intent;
57
+ - roadmap maturity (`committed`, `planned`, `directional`);
58
+ - explicitly preserved learning intent.
59
+
60
+ Re-derive for the requested stack:
61
+
62
+ - Engineering Enablers;
63
+ - framework/application shell work;
64
+ - implementation architecture/topology;
65
+ - persistence/ORM implementation;
66
+ - API/client implementation choices;
67
+ - build/run/test commands and package tooling;
68
+ - stack-specific ADRs;
69
+ - CI implementation details;
70
+ - deployment mechanics that depend on the new architecture.
71
+
72
+ Do not automatically preserve source Engineering Enabler IDs. Product Feature IDs may remain traceable when the semantic Feature is unchanged; record source IDs even when the new implementation re-slices or renumbers work.
73
+
74
+ ## New-repository rule
75
+
76
+ Replatforming requires a new target repository identity. The source repository is read-only evidence.
77
+
78
+ Never:
79
+
80
+ - overwrite the source repository;
81
+ - replace its `PROJECT_BOOTSTRAP.json`;
82
+ - delete or rewrite source implementation history;
83
+ - copy source application code by default;
84
+ - copy secrets, production data, credentials, machine bindings, or execution evidence.
85
+
86
+ ## Bootstrap execution
87
+
88
+ Use the current canonical Bootstrap replatform tooling when available. The expected deterministic boundary is:
89
+
90
+ ```text
91
+ approved PROJECT_REQUIREMENTS.json
92
+ + requested current catalog recipe/stack
93
+ + target repository identity
94
+ → PROJECT_BOOTSTRAP.json state=review
95
+ ```
96
+
97
+ If canonical Bootstrap replatform tooling/current catalog evidence is unavailable in the current environment, stop with `REPLATFORM HANDOFF REQUIRED`. Do not invent a manifest from stale remembered catalog facts.
98
+
99
+ ## Human gate
100
+
101
+ Before generation, summarize at minimum:
102
+
103
+ ```text
104
+ SOURCE REQUIREMENTS
105
+ source repository/commit
106
+ portable requirements export provenance
107
+
108
+ PRESERVED
109
+ product/features/domain/UX/cross-cutting intent
110
+ roadmap maturity
111
+
112
+ RE-DERIVED
113
+ stack-specific architecture and Engineering Enablers
114
+
115
+ TARGET STACK
116
+ resolved current catalog recipe and support state
117
+
118
+ OUTPUT
119
+ PROJECT_BOOTSTRAP.json — REVIEW
120
+ ```
121
+
122
+ Then use the normal material Bootstrap manifest approval gate. Approval of replatform intent is not approval to merge, release, or deploy the resulting implementation.
@@ -0,0 +1,75 @@
1
+ ---
2
+ name: run
3
+ description: "Run the current project locally through its repository-owned runtime command without conflating local execution with deployment."
4
+ argument-hint: "[target|all]"
5
+ user-invocable: true
6
+ disable-model-invocation: true
7
+ ---
8
+
9
+ # Run
10
+
11
+ `/run` is the normal convenience entry point for starting the project locally. It resolves and delegates to repository-owned runtime commands rather than requiring the developer to remember framework-specific launch syntax.
12
+
13
+ ## Contract
14
+
15
+ Invoking `/run` authorizes one bounded local start attempt for the requested target. It does not authorize setup, source edits, deployment, release publication, Production access, or persistent background services outside the repository's normal local-development contract.
16
+
17
+ Resolve the local runtime command from current repository evidence in this order:
18
+
19
+ 1. an explicit repository-owned run/dev wrapper or documented command;
20
+ 2. an explicit package/task script whose purpose is local run/dev;
21
+ 3. an unambiguous ecosystem-native local entry point already present in the repository.
22
+
23
+ Do not guess. If the repository has multiple independent runtimes and no documented default, require a target such as `/run web`, `/run api`, or `/run all`.
24
+
25
+ ## Preconditions
26
+
27
+ Before starting:
28
+
29
+ - identify repository root and current Git state;
30
+ - inspect `PROJECT_BOOTSTRAP.json` and scaffold/readiness evidence when present;
31
+ - verify the selected runtime entry point exists;
32
+ - inspect any documented local ports/health endpoints;
33
+ - do not create an intentionally deferred scaffold merely to make `/run` succeed.
34
+
35
+ If runtime source is intentionally deferred or absent, return `RUN NOT AVAILABLE` and identify the owning work item or missing marker when repository evidence provides it.
36
+
37
+ If workstation tools or dependencies are missing, recommend `/setup` instead of silently installing them.
38
+
39
+ ## Execution
40
+
41
+ Start the process in an observable developer-controlled terminal/process surface. Do not hide a long-running application in an unexplained background process.
42
+
43
+ Report:
44
+
45
+ - target;
46
+ - resolved command identity;
47
+ - process/startup result;
48
+ - effective application release/build identity when the running application exposes it;
49
+ - local URL/port or health evidence only when repository/runtime evidence establishes it;
50
+ - how to stop the process.
51
+
52
+ When `/run all` is explicitly supported, start only the repository-defined set of local components and make each process/endpoint visible.
53
+
54
+ When the project implements `docs/process/APPLICATION_VERSIONING.md`, prefer runtime-observed version evidence over a source-file guess. Do not synthesize a build number or claim that a static source label proves the running artifact's identity.
55
+
56
+ ## Operation journal
57
+
58
+ `/run` may write a concise sanitized startup receipt under `.project-forge/logs/run/` following `docs/process/OPERATION_JOURNAL.md`.
59
+
60
+ Record startup command identity, target, timestamps, startup/health result, observed application version/build identity, and endpoint when established. Do not duplicate or continuously capture unbounded application stdout/stderr into the Project Forge journal.
61
+
62
+ ## Deployment boundary
63
+
64
+ `/run` is not `/deploy local`.
65
+
66
+ It must not:
67
+
68
+ - mutate remote environments;
69
+ - publish images/packages/releases;
70
+ - change deployment bindings;
71
+ - infer Production configuration;
72
+ - bump or rewrite release version state;
73
+ - stage, commit, push, merge, or clean branches.
74
+
75
+ A successful `/run` proves only that the requested local runtime started with the evidence observed in that session.
@@ -138,26 +138,25 @@ If GitHub is temporarily unavailable, otherwise-ready local development remains
138
138
 
139
139
  After local readiness/profile state is understood, show the environments that this workstation can be prepared to use.
140
140
 
141
- Prefer a multi-select/checkbox-style interaction when the surface supports it. The conceptual shape is:
141
+ This is an intentionally **multi-select** decision because preparing the workstation for several environments in one setup session is valid. When the host exposes structured choice UI, use its native multi-select control; in VS Code use the question surface such as `vscode_askQuestions`. Do not emulate checkboxes as ordinary chat text when native multi-select is available.
142
142
 
143
- ```text
144
- SET UP THIS WORKSTATION FOR
143
+ Conceptual choices are:
145
144
 
146
- [x] Local development — recommended
147
- [ ] Staging
148
- [ ] Production
149
- [ ] <other project-defined environment, e.g. Demo>
150
- [ ] Other / define another environment
151
- ```
145
+ - `Local development`
146
+ - each existing project-defined environment from current topology
147
+ - `Other / define another environment`
148
+
149
+ Recommend/select `Local development` by default only because Project Forge's local-first setup policy makes it the normal initial capability and remote environments must not block local coding. Surface that rationale briefly. Do not automatically mark any additional environment recommended without project-specific evidence.
150
+
151
+ If the host has no structured multi-select UI, a checkbox-like or concise textual list is the documented fallback. Free-form selection remains valid.
152
152
 
153
153
  Rules:
154
154
 
155
- - Local development is the recommended/default initial selection.
156
155
  - Existing named environments come from the project's current deployment topology, not a hard-coded Staging/Production list.
157
156
  - Show each environment's purpose/role compactly when the name alone is ambiguous.
158
- - Free-form selection remains valid when checkbox UI is unavailable.
159
157
  - Selecting an environment means **prepare this workstation for that environment**; it does not deploy the project's real application.
160
158
  - Do not force the developer to configure every environment in one session. `/setup` can be rerun later to add another capability.
159
+ - The recorded setup scope comes from the developer's actual selections, not from any recommended/default choice.
161
160
 
162
161
  ### Topology source of truth
163
162
 
@@ -188,7 +187,7 @@ Isolation ....... <project/catalog-supported option>
188
187
  Exposure ........ <project/catalog-supported option>
189
188
  ```
190
189
 
191
- Provide recommended choices from the existing project topology/catalog and always allow `Other / specify` or `Not sure — recommend one` where appropriate.
190
+ Use host-native single-select controls for bounded mutually exclusive fields such as purpose/placement/isolation/exposure when available. Keep names, targets, and other factual values open-ended. Recommend at most one option only when current topology/catalog evidence or a clear engineering tradeoff supports it; otherwise show the bounded choices without a recommendation. Always allow `Other / specify` or `Not sure — recommend one` where appropriate.
192
191
 
193
192
  Persist the approved logical environment definition before claiming it is configured. Normalize the command-facing name to the repository-supported safe slug form. Once saved, all normal environment commands use that exact name, for example:
194
193
 
@@ -263,19 +262,23 @@ If cleanup fails, report `PROOF PASSED — CLEANUP ACTION NEEDED`; do not claim
263
262
 
264
263
  For a selected **non-Production** environment, the developer's explicit `/setup` selection plus a clear preview of the disposable proof may cover the bounded proof write. Use the deterministic tool's exact authorization contract and do not add multiple ceremonial prompts.
265
264
 
266
- For any environment whose resolved purpose is **production**, keep one explicit consequential gate before the proof writes to it:
265
+ For any environment whose resolved purpose is **production**, keep one explicit consequential gate before the proof writes to it. Render this gate through host-native **single-select** structured choice UI when available:
267
266
 
268
267
  ```text
269
268
  PRODUCTION ENVIRONMENT PROOF
270
269
 
271
270
  Project Forge is ready to temporarily deploy a disposable environment probe to <name>,
272
271
  verify it, and remove it. No project application or project data will be deployed.
273
-
274
- 1. Run Production environment proof
275
- 2. Verify access/readiness only
276
- 3. Skip this environment for now
277
272
  ```
278
273
 
274
+ Choices:
275
+
276
+ - `Run Production environment proof`
277
+ - `Verify access/readiness only`
278
+ - `Skip this environment for now`
279
+
280
+ Do not mark a choice recommended merely because a recommendation field exists. Recommend `Run Production environment proof` only when the selected setup goal and current evidence make end-to-end proof the clearly preferred next step, and explain why. Use a numbered text fallback only when structured choice UI is unavailable.
281
+
279
282
  A custom Production name such as `prod-east` remains Production because of its resolved purpose/classification. Never downgrade Production safety based on the literal environment string.
280
283
 
281
284
  ## 8. First real application deployment remains streamlined
@@ -111,16 +111,16 @@ Explain why the level was chosen.
111
111
 
112
112
  ## 4. Optional learning checkpoint
113
113
 
114
- For STANDARD/ELEVATED work, once requirements are ready, coaching may be offered but is never required:
114
+ For STANDARD/ELEVATED work, once requirements are ready, coaching may be offered but is never required. When the human needs to choose, render a **single-select structured choice** through the host UI when available; in VS Code use the native question surface such as `vscode_askQuestions`.
115
115
 
116
- ```text
117
- 1. Continue without coaching — recommended default
118
- 2. /coach for a short pre-build concept review
119
- 3. /grill-me for challenge rather than teaching
120
- 4. Stop
121
- ```
116
+ Relevant choices are:
122
117
 
123
- For LIGHT work, do not interrupt with coaching unless requested.
118
+ - `Continue without coaching` — `RECOMMENDED` default
119
+ - `/coach` for a short pre-build concept review
120
+ - `/grill-me` for challenge rather than teaching
121
+ - `Stop`
122
+
123
+ Use a numbered text list only when structured choice UI is unavailable. For LIGHT work, do not interrupt with coaching unless requested.
124
124
 
125
125
  ## 5. Planning rules
126
126
 
@@ -185,6 +185,8 @@ Return:
185
185
  - requirement readiness,
186
186
  - branch state / expected short-lived branch when implementation is about to begin,
187
187
  - RECOMMENDED NEXT STEP,
188
- - a small numbered OPTIONS menu with action labels.
188
+ - a small set of relevant action choices.
189
+
190
+ Render mutually exclusive next actions through the host's **single-select structured choice UI** when available, following `INTERACTIVE_SESSION_GUIDE.md`. In VS Code, use the native question surface such as `vscode_askQuestions`. Make the recommended action visible when evidence supports one, include `Other / specify` or free-text only when the action set may be incomplete, and use a numbered text menu only as the no-structured-UI fallback.
189
191
 
190
192
  Do not skip an unresolved requirement/plan gate merely because implementation is technically possible. Once implementation is selected/approved, do not insert a separate ceremonial branch-creation gate when the branch setup is safe and deterministic.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mriekki/project-forge",
3
- "version": "2.0.0",
3
+ "version": "2.2.0",
4
4
  "description": "Public consumer distribution and updater for Project Forge engineering assets.",
5
5
  "type": "module",
6
6
  "bin": {