@mriekki/project-forge 4.11.1 → 4.12.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/assets/components.json +2 -2
- package/assets/generated/ASSEMBLY.json +15 -15
- package/assets/generated/core/core/instructions/project-forge-workflow.instructions.md +8 -0
- package/assets/generated/core/core/process/HUMAN_GATES.md +63 -0
- package/assets/generated/core/core/process/INTERACTIVE_SESSION_GUIDE.md +28 -1
- package/assets/generated/core/core/process/SETUP_ACCEPTANCE_CHECKLIST.md +3 -0
- package/assets/generated/core/core/skills/export-requirements/SKILL.md +20 -1
- package/assets/generated/core/core/skills/refine-requirements/SKILL.md +25 -2
- package/assets/generated/core/core/skills/replatform/SKILL.md +24 -1
- package/assets/generated/core/core/skills/setup/SKILL.md +41 -6
- package/assets/generated/core/core/skills/start-work/SKILL.md +120 -18
- package/assets/generated/core/core/skills/work-item-status/SKILL.md +7 -3
- package/assets/generated/core/tools/vscode_work_item_status/extension/README.md +20 -2
- package/assets/generated/core/tools/vscode_work_item_status/extension/extension.js +136 -1
- package/assets/generated/core/tools/vscode_work_item_status/extension/package.json +11 -5
- package/package.json +1 -1
package/assets/components.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
3
|
"package": "@mriekki/project-forge",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.12.0",
|
|
5
5
|
"defaultProfile": "greenfield-project",
|
|
6
6
|
"profiles": {
|
|
7
7
|
"greenfield-project": {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
},
|
|
14
14
|
"components": {
|
|
15
15
|
"core": {
|
|
16
|
-
"revision": "
|
|
16
|
+
"revision": "ed6a52538a03cb92850cafe0cb8404c39b8e5b89",
|
|
17
17
|
"version": "4.0.0",
|
|
18
18
|
"distribution": "greenfield-workspace",
|
|
19
19
|
"descriptor": "assets/core/distribution.json",
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
3
|
"package": "@mriekki/project-forge",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.12.0",
|
|
5
5
|
"components": {
|
|
6
6
|
"core": {
|
|
7
|
-
"revision": "
|
|
7
|
+
"revision": "ed6a52538a03cb92850cafe0cb8404c39b8e5b89",
|
|
8
8
|
"version": "4.0.0",
|
|
9
9
|
"distribution": "greenfield-workspace",
|
|
10
10
|
"files": [
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
{
|
|
22
22
|
"source": "core/instructions/project-forge-workflow.instructions.md",
|
|
23
23
|
"destination": ".github/instructions/project-forge-workflow.instructions.md",
|
|
24
|
-
"sha256": "
|
|
24
|
+
"sha256": "dd440f677c9ed476bb8b7486500d8acbe2f796272582baadd4d6a60c3d1e662c"
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
"source": "core/instructions/project-forge-docs.instructions.md",
|
|
@@ -41,17 +41,17 @@
|
|
|
41
41
|
{
|
|
42
42
|
"source": "core/skills/refine-requirements/SKILL.md",
|
|
43
43
|
"destination": ".github/skills/refine-requirements/SKILL.md",
|
|
44
|
-
"sha256": "
|
|
44
|
+
"sha256": "5787cd7f70231355b951d58f792665a79da336d6f17ea9f4d6634928ab452623"
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
47
|
"source": "core/skills/start-work/SKILL.md",
|
|
48
48
|
"destination": ".github/skills/start-work/SKILL.md",
|
|
49
|
-
"sha256": "
|
|
49
|
+
"sha256": "d7a592e64a4e64da5a9e03ee34bc4be4b1862c0d56ed5c71a657e268b4b8e9e5"
|
|
50
50
|
},
|
|
51
51
|
{
|
|
52
52
|
"source": "core/skills/setup/SKILL.md",
|
|
53
53
|
"destination": ".github/skills/setup/SKILL.md",
|
|
54
|
-
"sha256": "
|
|
54
|
+
"sha256": "d1c6e7a0a04a1fb358b136ed8f83495c27bf8959ebd8941a3d42397fa4dcbaf1"
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
57
|
"source": "core/skills/build/SKILL.md",
|
|
@@ -66,12 +66,12 @@
|
|
|
66
66
|
{
|
|
67
67
|
"source": "core/skills/export-requirements/SKILL.md",
|
|
68
68
|
"destination": ".github/skills/export-requirements/SKILL.md",
|
|
69
|
-
"sha256": "
|
|
69
|
+
"sha256": "dd82f05b6e2ec7ecf8e7a8592066fd8c6d623c1f184f49838b1e95eb5b53320a"
|
|
70
70
|
},
|
|
71
71
|
{
|
|
72
72
|
"source": "core/skills/replatform/SKILL.md",
|
|
73
73
|
"destination": ".github/skills/replatform/SKILL.md",
|
|
74
|
-
"sha256": "
|
|
74
|
+
"sha256": "561796a829b9c12f8bd2e526f8fe86cbd33d258a5c6b04ca581721e07d984ca7"
|
|
75
75
|
},
|
|
76
76
|
{
|
|
77
77
|
"source": "core/skills/progress/SKILL.md",
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
{
|
|
92
92
|
"source": "core/skills/work-item-status/SKILL.md",
|
|
93
93
|
"destination": ".github/skills/work-item-status/SKILL.md",
|
|
94
|
-
"sha256": "
|
|
94
|
+
"sha256": "ca79843e59e5f50785c3621b6bf8ecb7413307aefce05fec737321589792c3a9"
|
|
95
95
|
},
|
|
96
96
|
{
|
|
97
97
|
"source": "core/skills/cleanup-branches/SKILL.md",
|
|
@@ -181,7 +181,7 @@
|
|
|
181
181
|
{
|
|
182
182
|
"source": "core/process/HUMAN_GATES.md",
|
|
183
183
|
"destination": "docs/process/HUMAN_IN_LOOP_GATES.md",
|
|
184
|
-
"sha256": "
|
|
184
|
+
"sha256": "edad6bd5c659a1cbc6960ce76c269547ec616505b320409b6d3152326d4beaae"
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
"source": "core/process/GUIDED_NEXT_STEPS.md",
|
|
@@ -191,7 +191,7 @@
|
|
|
191
191
|
{
|
|
192
192
|
"source": "core/process/INTERACTIVE_SESSION_GUIDE.md",
|
|
193
193
|
"destination": "docs/process/INTERACTIVE_SESSION_GUIDE.md",
|
|
194
|
-
"sha256": "
|
|
194
|
+
"sha256": "9c4d2ef7eb974faea83dcd1c07c0684aaf351bfebe09186ef7e03cdf1c075c51"
|
|
195
195
|
},
|
|
196
196
|
{
|
|
197
197
|
"source": "core/process/COACHING_GUIDE.md",
|
|
@@ -221,7 +221,7 @@
|
|
|
221
221
|
{
|
|
222
222
|
"source": "core/process/SETUP_ACCEPTANCE_CHECKLIST.md",
|
|
223
223
|
"destination": "docs/process/SETUP_ACCEPTANCE_CHECKLIST.md",
|
|
224
|
-
"sha256": "
|
|
224
|
+
"sha256": "92174c10920f536c9912719a630e07e11c525fa2a7913d239bd097fb67f193a0"
|
|
225
225
|
},
|
|
226
226
|
{
|
|
227
227
|
"source": "core/process/OPERATION_JOURNAL.md",
|
|
@@ -326,17 +326,17 @@
|
|
|
326
326
|
{
|
|
327
327
|
"source": "tools/vscode_work_item_status/extension/package.json",
|
|
328
328
|
"destination": "tools/project-forge-vscode/work-item-status/extension/package.json",
|
|
329
|
-
"sha256": "
|
|
329
|
+
"sha256": "09225a1d9a8a7ceebbba82aafb93a26342da10f1322949cf22061e40196e29df"
|
|
330
330
|
},
|
|
331
331
|
{
|
|
332
332
|
"source": "tools/vscode_work_item_status/extension/extension.js",
|
|
333
333
|
"destination": "tools/project-forge-vscode/work-item-status/extension/extension.js",
|
|
334
|
-
"sha256": "
|
|
334
|
+
"sha256": "b4e70183bb101d879cc0d7834c51ee4cc48683339fca2c390eb3e49a3a3acdac"
|
|
335
335
|
},
|
|
336
336
|
{
|
|
337
337
|
"source": "tools/vscode_work_item_status/extension/README.md",
|
|
338
338
|
"destination": "tools/project-forge-vscode/work-item-status/extension/README.md",
|
|
339
|
-
"sha256": "
|
|
339
|
+
"sha256": "b8fc17974024a84ee12f0fe43c38d379916e9e378f7c1efbf9a14da610af60e8"
|
|
340
340
|
},
|
|
341
341
|
{
|
|
342
342
|
"source": "tools/package/check_baseline.py",
|
|
@@ -14,6 +14,14 @@ Use proportional rigor: `LIGHT`, `STANDARD`, `ELEVATED`.
|
|
|
14
14
|
|
|
15
15
|
Keep explicit human gates for material requirements, substantive plans, meaningful implementation acceptance, the final merge/delivery decision, and production deployment.
|
|
16
16
|
|
|
17
|
+
Before any substantive approval gate, identify the exact PRIMARY review subject and put the best available review surface in front of the human when the host supports it. Treat supporting documents as CONTEXT or TRACEABILITY instead of opening everything. For Markdown prefer rendered preview, for structured approval artifacts prefer formatted source plus a concise summary, for implementation acceptance prefer the meaningful diff/Source Control surface, and for plans prefer the native plan surface or durable plan document. Opening or foregrounding a review surface is read-only presentation and never implies approval.
|
|
18
|
+
|
|
19
|
+
In VS Code, when the Project Forge companion extension is installed and the host can invoke VS Code commands, `projectForge.openReviewArtifact` may be used to foreground an exact workspace-relative repository artifact. Use a stronger native host review/diff surface when available.
|
|
20
|
+
|
|
21
|
+
For STANDARD/ELEVATED work, invoking `/start-work` authorizes context resolution, risk assessment, and planning only. It does **not** authorize substantive implementation or implementation branch setup by itself. Produce the final proposed plan, foreground its review surface, state that implementation has not started, and require an explicit `Approve plan and begin implementation [PLAN APPROVAL + CODE WRITE]` action before code writes or routine implementation branch setup. For ELEVATED work, Reviewer challenges the plan and material findings are reconciled before the human reviews the final proposed plan.
|
|
22
|
+
|
|
23
|
+
If implementation later requires a material change to the approved architecture, scope, schema/data handling, security model, externally visible behavior, major dependencies, or verification strategy, reopen the implementation-plan gate with the revised plan before continuing.
|
|
24
|
+
|
|
17
25
|
Once a bounded action is authorized, routine mechanics inside that scope should proceed without repeated ceremonial confirmation.
|
|
18
26
|
|
|
19
27
|
For implementation, establish the repository-appropriate short-lived work branch as routine setup once implementation itself is authorized; do not add a separate branch-creation gate when branch policy/naming and scope are clear.
|
|
@@ -18,10 +18,73 @@ Workspace/setup acceptance is distinct from generation or installation. Generate
|
|
|
18
18
|
|
|
19
19
|
A human gate is meaningful only when the human understands what is being approved. If the explanation immediately before a gate did not land, re-explain it before asking for approval again. `/wait-what` is the standard read-only communication-repair path when available; invoking it never implies approval of the pending action.
|
|
20
20
|
|
|
21
|
+
## Human review surface contract
|
|
22
|
+
|
|
23
|
+
Before asking for any substantive human approval, identify the exact **review subject** and put the best available review surface in front of the human.
|
|
24
|
+
|
|
25
|
+
Classify review material when more than one artifact is relevant:
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
PRIMARY — the artifact/diff/plan the human is deciding on
|
|
29
|
+
CONTEXT — supporting material that may help review
|
|
30
|
+
TRACEABILITY — provenance/reference material that is not itself being approved
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
When the current host supports opening or foregrounding the PRIMARY review surface, do so automatically immediately before the gate. Prefer the surface that best matches the decision:
|
|
34
|
+
|
|
35
|
+
- Markdown requirements, briefs, ADRs, and design documents → rendered Markdown preview when available;
|
|
36
|
+
- structured JSON approval artifacts → formatted source/editor preview plus a concise human-readable summary;
|
|
37
|
+
- implementation plans → the host's native plan surface, or a durable plan document when one exists;
|
|
38
|
+
- implementation acceptance → the meaningful local diff / Source Control review rather than a prose-only file list;
|
|
39
|
+
- final PR acceptance → the observed PR/diff at the exact reviewed head;
|
|
40
|
+
- other repository artifacts → the host's safest read-only preview/editor surface.
|
|
41
|
+
|
|
42
|
+
Do not open every supporting document and steal focus. Open the PRIMARY surface; name CONTEXT and TRACEABILITY material explicitly and make it easy to open when needed.
|
|
43
|
+
|
|
44
|
+
If the host cannot open the review surface automatically, provide an explicit path/link and enough concise review context that the human knows exactly what to inspect. Never imply that a path reference alone is equivalent to review.
|
|
45
|
+
|
|
46
|
+
Opening, previewing, foregrounding, or navigating to a review surface is **read-only presentation**. It never communicates approval, authorization, or acceptance. Only the explicit gate choice does that.
|
|
47
|
+
|
|
21
48
|
Do not gate routine mechanics individually after a bounded action is already authorized.
|
|
22
49
|
|
|
23
50
|
Missing access to GitHub admin policy metadata is not itself a human gate. Use configured workflow/check results, PR mergeability, repository documentation, and any observable enforced policy as evidence. Do not ask the human to open GitHub Settings and transcribe branch-protection/ruleset check names merely to continue; ask only when unavailable policy information creates a material unresolved decision at merge, release, or another consequential action.
|
|
24
51
|
|
|
52
|
+
## Implementation-plan review gate
|
|
53
|
+
|
|
54
|
+
For STANDARD/ELEVATED work, invoking `/start-work` authorizes requirement/context inspection, risk assessment, and implementation planning. It does **not** authorize substantive implementation by itself.
|
|
55
|
+
|
|
56
|
+
The required boundary is:
|
|
57
|
+
|
|
58
|
+
```text
|
|
59
|
+
requirements/context ready
|
|
60
|
+
→ implementation plan produced
|
|
61
|
+
→ PRIMARY plan review surface opened/foregrounded when supported
|
|
62
|
+
→ HUMAN IMPLEMENTATION-PLAN APPROVAL
|
|
63
|
+
→ short-lived work branch setup
|
|
64
|
+
→ substantive implementation
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Before the approval choice, state unambiguously that implementation has **not** started. The gate should identify the work item, risk level, review subject, key plan coverage, and any unresolved material decisions.
|
|
68
|
+
|
|
69
|
+
Use an explicit action set equivalent to:
|
|
70
|
+
|
|
71
|
+
```text
|
|
72
|
+
IMPLEMENTATION PLAN REVIEW REQUIRED
|
|
73
|
+
|
|
74
|
+
Implementation has NOT started.
|
|
75
|
+
|
|
76
|
+
1. Approve plan and begin implementation [PLAN APPROVAL + CODE WRITE]
|
|
77
|
+
2. Request changes to the plan [PLAN ONLY]
|
|
78
|
+
3. Review assumptions / risks [READ ONLY]
|
|
79
|
+
4. Stop [NO ACTION]
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
When the host exposes structured choice UI, render these as a single-select decision instead of a numbered menu while preserving the consequence labels.
|
|
83
|
+
|
|
84
|
+
For ELEVATED work, Reviewer challenges the proposed plan before the human gate. Reconcile material Reviewer findings into the final proposed plan, then put that final plan in front of the human. Do not ask the human to approve an initial plan while separate Reviewer objections remain unresolved.
|
|
85
|
+
|
|
86
|
+
After approval, routine implementation details may evolve without ceremonial re-approval. Reopen the plan gate when evidence requires a **material** change to approved architecture, scope, schema/data handling, security model, externally visible behavior, major dependencies, or verification strategy. Show what changed, why it changed, and the revised plan before implementation continues.
|
|
87
|
+
|
|
25
88
|
## Implementation branch setup
|
|
26
89
|
|
|
27
90
|
Once implementation itself is authorized, creating/switching to the repository-appropriate short-lived work branch is routine setup, not a separate decision gate, when branch policy/naming and work-item scope are clear and the operation preserves the worktree without history rewriting.
|
|
@@ -40,11 +40,38 @@ Presentation rules:
|
|
|
40
40
|
- use **single-select** when the choices are mutually exclusive or one action is being authorized;
|
|
41
41
|
- use **multi-select** only when selecting several choices at the same time is semantically valid;
|
|
42
42
|
- preserve one-material-question-at-a-time cadence whenever practical even if the host can batch questions;
|
|
43
|
-
- keep consequence/action labels such as `[READ ONLY]`, `[REQUIREMENTS GATE]`, or `[GIT + GITHUB WRITE]` visible when they matter to authorization;
|
|
43
|
+
- keep consequence/action labels such as `[READ ONLY]`, `[REQUIREMENTS GATE]`, `[PLAN APPROVAL + CODE WRITE]`, or `[GIT + GITHUB WRITE]` visible when they matter to authorization;
|
|
44
44
|
- include `Other / specify` or host-supported free-text input when the option set may be incomplete; after `Other / specify`, collect the missing value without forcing another invented menu;
|
|
45
45
|
- accept equivalent free-text answers even when a structured selector is shown, unless the host UI itself requires a selection;
|
|
46
46
|
- map the returned structured value to the same semantic choice the workflow would have accepted by label/text.
|
|
47
47
|
|
|
48
|
+
### Human review surface presentation
|
|
49
|
+
|
|
50
|
+
Before a substantive approval gate, follow the review-surface contract in `HUMAN_GATES.md`.
|
|
51
|
+
|
|
52
|
+
1. Identify the exact PRIMARY review subject.
|
|
53
|
+
2. Separate supporting CONTEXT and TRACEABILITY material when useful.
|
|
54
|
+
3. Put the best available PRIMARY review surface in front of the human before asking for approval.
|
|
55
|
+
4. Only then render the explicit approval/action choice.
|
|
56
|
+
|
|
57
|
+
Use the host's native surface when it is stronger than prose:
|
|
58
|
+
|
|
59
|
+
- Markdown artifact → rendered Markdown preview when supported;
|
|
60
|
+
- JSON approval artifact → formatted editor/preview plus a concise summary;
|
|
61
|
+
- implementation plan → native plan surface or durable plan document;
|
|
62
|
+
- implementation acceptance → Source Control / meaningful diff review;
|
|
63
|
+
- PR acceptance → exact PR/diff surface at the observed head.
|
|
64
|
+
|
|
65
|
+
In VS Code, when the Project Forge companion extension is installed and the host can invoke VS Code commands, `projectForge.openReviewArtifact` is the preferred Project Forge-owned action for repository artifacts. Pass the exact workspace-relative artifact path. The command is presentation-only and must reject targets outside the open workspace. For Markdown it opens rendered preview when available; other supported artifacts open in editor preview.
|
|
66
|
+
|
|
67
|
+
If the host exposes its own safe resource-opening or diff-opening capability, it may use that directly instead. Do not require the Project Forge command when the host already provides a stronger native review surface.
|
|
68
|
+
|
|
69
|
+
Do not automatically open every supporting document. Foreground only the PRIMARY review subject and list supporting context explicitly. If automatic opening is unavailable, provide a direct path/link and state that the human must open/review it before approving.
|
|
70
|
+
|
|
71
|
+
Opening a review surface is never approval. A preview event, editor focus, file read, diff display, or navigation action is read-only presentation and must not advance a gate.
|
|
72
|
+
|
|
73
|
+
For an implementation-plan gate, explicitly state that implementation has **not** started before offering approval. The approval action must be distinct from plan revision/read-only review actions.
|
|
74
|
+
|
|
48
75
|
### Recommendations inside choices
|
|
49
76
|
|
|
50
77
|
A recommendation is optional advice, not a required field and not an accepted decision.
|
|
@@ -31,10 +31,13 @@ After opening/reloading the intended editor workspace:
|
|
|
31
31
|
- [ ] `Reviewer` is discoverable.
|
|
32
32
|
- [ ] `Coach` is discoverable when the workspace includes coaching.
|
|
33
33
|
- [ ] expected Project Forge skills are discoverable, including `/start-work`, `/deliver`, and `/wait-what` when included by the distribution/capability set.
|
|
34
|
+
- [ ] when local `docs/work-items` folders exist, the Project Forge Work Item Status extension is installed/updated by setup and its Explorer decoration is available after any requested one-time VS Code reload; otherwise this check is not applicable.
|
|
34
35
|
- [ ] path-specific instructions are present when the workspace declares them.
|
|
35
36
|
- [ ] path-specific instructions are recognized/applied for matching files when the host supports them.
|
|
36
37
|
- [ ] the human controls the routine model/tier; the workspace does not silently pin or upgrade it.
|
|
37
38
|
|
|
39
|
+
The work-item Explorer decoration is an evidence-derived editor view, not a workflow authority. Its installation/readiness is reported separately from application runtime/build readiness.
|
|
40
|
+
|
|
38
41
|
## Copilot CLI + VS Code discovery
|
|
39
42
|
|
|
40
43
|
When GitHub Copilot CLI is an intended execution surface:
|
|
@@ -115,13 +115,32 @@ Preserved UX/cross-cutting constraints: ...
|
|
|
115
115
|
Roadmap maturity retained: ...
|
|
116
116
|
Implementation-specific material excluded: ...
|
|
117
117
|
Items requiring reconciliation: ...
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Then make the artifact itself the PRIMARY review subject. Before asking for approval:
|
|
121
|
+
1. identify `PROJECT_REQUIREMENTS.json` explicitly;
|
|
122
|
+
2. foreground/open the formatted JSON in the best available editor/preview surface when the host supports it;
|
|
123
|
+
3. keep source authorities as CONTEXT/TRACEABILITY rather than opening them all;
|
|
124
|
+
4. only then ask the approval question.
|
|
125
|
+
|
|
126
|
+
In VS Code, when available, use `projectForge.openReviewArtifact` with `PROJECT_REQUIREMENTS.json`. Opening the file is read-only presentation and never changes its state.
|
|
127
|
+
|
|
128
|
+
Present a gate equivalent to:
|
|
129
|
+
|
|
130
|
+
```text
|
|
131
|
+
HUMAN REVIEW REQUIRED
|
|
132
|
+
|
|
133
|
+
Gate: PORTABLE REQUIREMENTS APPROVAL
|
|
134
|
+
Primary artifact: PROJECT_REQUIREMENTS.json
|
|
135
|
+
Opened: formatted editor preview / <fallback surface>
|
|
136
|
+
Items requiring reconciliation: NONE / list
|
|
118
137
|
|
|
119
138
|
Approve PROJECT_REQUIREMENTS.json as the portable requirements baseline?
|
|
120
139
|
```
|
|
121
140
|
|
|
122
141
|
Only explicit human approval may set `state: "approved"`.
|
|
123
142
|
|
|
124
|
-
`/export-requirements approve` may perform only that bounded finalization after confirming the reviewed content/evidence has not materially changed.
|
|
143
|
+
`/export-requirements approve` may perform only that bounded finalization after confirming the reviewed content/evidence has not materially changed. If the artifact changed materially since review, reopen the review surface and require approval again.
|
|
125
144
|
|
|
126
145
|
## Safety and scope
|
|
127
146
|
|
|
@@ -27,6 +27,8 @@ Read only the minimum relevant context. Do not preload unrelated work items. Do
|
|
|
27
27
|
|
|
28
28
|
Never assume `Jira Epic == Feature Brief`.
|
|
29
29
|
|
|
30
|
+
When review/approval will concern a local artifact, classify it as the PRIMARY review subject. Supporting Feature/Product briefs, ADRs, and design documents are CONTEXT or TRACEABILITY unless they are themselves the decision subject.
|
|
31
|
+
|
|
30
32
|
## 2. Decide whether detail is warranted
|
|
31
33
|
|
|
32
34
|
Detailed refinement is useful for behavior such as:
|
|
@@ -124,6 +126,8 @@ Then present only relevant actions as a **single-select structured choice** when
|
|
|
124
126
|
- `Approve local requirements` `[REQUIREMENTS GATE]` when applicable
|
|
125
127
|
- `Stop` `[NO ACTION]`
|
|
126
128
|
|
|
129
|
+
When the human selects `Review full requirements/work item`, foreground the PRIMARY review surface when the host supports it. For local Markdown requirements, prefer rendered Markdown preview. In VS Code, use `projectForge.openReviewArtifact` with the exact workspace-relative path when available. For an external-primary work item, use the best available external issue/item surface instead of creating a local surrogate solely for preview.
|
|
130
|
+
|
|
127
131
|
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 when that metadata exists; otherwise append `[RECOMMENDED]` to exactly one option label. Briefly explain why in the option description or surrounding prompt. A default/preselected value may match the recommendation, but a default alone must never communicate advice or approval. If there is no clear basis, show the choices without a recommendation and without a preference-implying default. The selected answer, not the recommendation, controls what the session does or records.
|
|
128
132
|
|
|
129
133
|
If the host has no structured choice UI, present the same relevant choices as a concise numbered or lettered text fallback, preserve `[RECOMMENDED]` on the evidence-backed option when applicable, and accept the number/letter, label, or free-form intent. Do not use the text fallback as the normal VS Code path.
|
|
@@ -193,7 +197,26 @@ APPROVED
|
|
|
193
197
|
|
|
194
198
|
Human approval is explicit. Do not infer approval from review/planning/implementation.
|
|
195
199
|
|
|
196
|
-
Before approval
|
|
200
|
+
Before approval:
|
|
201
|
+
1. report coverage and open material decisions;
|
|
202
|
+
2. identify the exact PRIMARY local requirements artifact;
|
|
203
|
+
3. foreground/open that artifact in the best available review surface when the host supports it;
|
|
204
|
+
4. only then render the `[REQUIREMENTS GATE]` choice.
|
|
205
|
+
|
|
206
|
+
For Markdown requirements in VS Code, prefer rendered preview; when the Project Forge companion command is available, invoke `projectForge.openReviewArtifact` with the exact workspace-relative requirements path. If automatic opening is unavailable, provide the exact path/link and explicitly tell the human that this is the artifact being approved.
|
|
207
|
+
|
|
208
|
+
The gate should make the review subject unmistakable, for example:
|
|
209
|
+
|
|
210
|
+
```text
|
|
211
|
+
HUMAN REVIEW REQUIRED
|
|
212
|
+
|
|
213
|
+
Gate: REQUIREMENTS APPROVAL
|
|
214
|
+
Primary artifact: docs/work-items/<work-item>/requirements.md
|
|
215
|
+
Opened: Markdown Preview / <fallback surface>
|
|
216
|
+
Open material decisions: NONE / list
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Only an explicit `[REQUIREMENTS GATE]` choice may change local status to `APPROVED`. Opening the document, viewing the preview, or selecting a read-only review action never changes approval state. When the host offers structured choices, render this approval gate as a single-select action, not a numbered chat menu.
|
|
197
220
|
|
|
198
221
|
External work-item status/approval follows the external team's conventions; Project Forge must not fabricate a local approval state.
|
|
199
222
|
|
|
@@ -222,4 +245,4 @@ Then offer review, more grilling/refinement, approval when applicable, or stop u
|
|
|
222
245
|
|
|
223
246
|
Do not create implementation plans or production code.
|
|
224
247
|
|
|
225
|
-
When requirements are ready, recommend `/start-work <ID-or-key>`.
|
|
248
|
+
When requirements are ready, recommend `/start-work <ID-or-key>`. That command may prepare the implementation plan, but STANDARD/ELEVATED implementation still requires the distinct plan-approval gate defined by `/start-work`.
|
|
@@ -119,4 +119,27 @@ OUTPUT
|
|
|
119
119
|
PROJECT_BOOTSTRAP.json — REVIEW
|
|
120
120
|
```
|
|
121
121
|
|
|
122
|
-
Then
|
|
122
|
+
Then make `PROJECT_BOOTSTRAP.json` the PRIMARY review subject. Before asking for Bootstrap approval:
|
|
123
|
+
|
|
124
|
+
1. identify the exact manifest path and target repository identity;
|
|
125
|
+
2. foreground/open the formatted manifest in the best available review/editor surface when the host supports it;
|
|
126
|
+
3. keep source requirements/catalog evidence as CONTEXT/TRACEABILITY rather than opening everything;
|
|
127
|
+
4. only then render the normal material Bootstrap manifest approval gate.
|
|
128
|
+
|
|
129
|
+
In VS Code, when available, use `projectForge.openReviewArtifact` with the exact workspace-relative `PROJECT_BOOTSTRAP.json` path. Opening the manifest is read-only presentation and never authorizes generation.
|
|
130
|
+
|
|
131
|
+
Present an explicit surface summary such as:
|
|
132
|
+
|
|
133
|
+
```text
|
|
134
|
+
HUMAN REVIEW REQUIRED
|
|
135
|
+
|
|
136
|
+
Gate: BOOTSTRAP MANIFEST APPROVAL
|
|
137
|
+
Primary artifact: PROJECT_BOOTSTRAP.json
|
|
138
|
+
State: REVIEW
|
|
139
|
+
Opened: formatted editor preview / <fallback surface>
|
|
140
|
+
Target: <owner/repository>
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
If the manifest changes materially after review, foreground the changed manifest and reopen approval rather than reusing stale authorization.
|
|
144
|
+
|
|
145
|
+
Approval of replatform intent or manifest review is not approval to merge, release, or deploy the resulting implementation.
|
|
@@ -47,6 +47,7 @@ From the repository root inspect only what is needed:
|
|
|
47
47
|
- `SCAFFOLD_PLAN.json` when present;
|
|
48
48
|
- `.github/project-forge-workspace.json` and Project Forge/component baselines when present;
|
|
49
49
|
- `scripts/setup.ps1` on Windows or `scripts/setup.sh` on macOS;
|
|
50
|
+
- `tools/project-forge-vscode/work-item-status/install.py` and `docs/work-items` when present;
|
|
50
51
|
- current Git branch/status/upstream evidence so setup does not overwrite unrelated work;
|
|
51
52
|
- workstation-local setup/readiness evidence when present;
|
|
52
53
|
- actual workstation OS/platform and machine-local identity needed to describe this workspace instance.
|
|
@@ -84,12 +85,13 @@ Prefer a compact result such as:
|
|
|
84
85
|
```text
|
|
85
86
|
SETUP STATUS
|
|
86
87
|
|
|
87
|
-
Workspace
|
|
88
|
-
Local runtime
|
|
89
|
-
Build/tests
|
|
90
|
-
Local data
|
|
91
|
-
Personal profile
|
|
92
|
-
|
|
88
|
+
Workspace ........... READY / NOT CONFIGURED / BLOCKED
|
|
89
|
+
Local runtime ....... READY / STALE / NOT APPLICABLE
|
|
90
|
+
Build/tests ......... READY / STALE / BLOCKED
|
|
91
|
+
Local data .......... READY / NOT APPLICABLE / BLOCKED
|
|
92
|
+
Personal profile .... READY / DEFERRED / BLOCKED
|
|
93
|
+
Work-item Explorer .. READY / NOT INSTALLED / NOT APPLICABLE / ERROR
|
|
94
|
+
Remote capability ... READY / PARTIAL / NOT CONFIGURED
|
|
93
95
|
|
|
94
96
|
NEXT
|
|
95
97
|
/setup local | /setup remote | /setup <environment> | /next-step
|
|
@@ -126,6 +128,38 @@ A temporary process `PATH` adjustment may prove a diagnosis but does not by itse
|
|
|
126
128
|
|
|
127
129
|
Stop before destructive replacement, unrelated machine mutation, secret disclosure, or repair outside the declared setup contract.
|
|
128
130
|
|
|
131
|
+
### Work-item Explorer decoration
|
|
132
|
+
|
|
133
|
+
When `tools/project-forge-vscode/work-item-status/install.py` exists, treat the Project Forge-owned VS Code work-item status extension as routine workstation setup when local `docs/work-items` folders are present.
|
|
134
|
+
|
|
135
|
+
For `/setup status`, remain read-only. If `docs/work-items` exists, run:
|
|
136
|
+
|
|
137
|
+
```text
|
|
138
|
+
python tools/project-forge-vscode/work-item-status/install.py status --json
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Report the returned state as the `Work-item Explorer` setup dimension. If `docs/work-items` does not exist, report `NOT APPLICABLE` and do not create a local work-item hierarchy merely to enable badges.
|
|
142
|
+
|
|
143
|
+
For normal `/setup` and `/setup local`, when `docs/work-items` exists, run the bounded Project Forge installer:
|
|
144
|
+
|
|
145
|
+
```text
|
|
146
|
+
python tools/project-forge-vscode/work-item-status/install.py install --json
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
This installation is already authorized by `/setup` as routine workstation preparation; do not require a second `/work-item-status enable` confirmation. The installer may replace older versions of this same Project Forge extension only and must not install unrelated extensions, alter Project files, or change Git/GitHub state.
|
|
150
|
+
|
|
151
|
+
If the result has `reloadRequired: true`, tell the developer to reload VS Code once after setup. Do not repeatedly reinstall an already-ready version merely because the editor has not yet been reloaded.
|
|
152
|
+
|
|
153
|
+
If a Project has local `docs/work-items` but the package-managed installer is absent, report:
|
|
154
|
+
|
|
155
|
+
```text
|
|
156
|
+
PROJECT FORGE UPDATE NEEDED
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Route to `/project-forge-update`; do not clone private Project Forge source repositories or download loose extension files as a workaround.
|
|
160
|
+
|
|
161
|
+
A decorator installation error does not erase otherwise valid runtime/build readiness. Report the `Work-item Explorer` dimension as `ACTION NEEDED` or `ERROR`, preserve the other independent setup dimensions, and give the smallest repair/update action.
|
|
162
|
+
|
|
129
163
|
## 4. `/setup local` converges verified local development readiness
|
|
130
164
|
|
|
131
165
|
The first success target is:
|
|
@@ -485,6 +519,7 @@ SETUP RESULT
|
|
|
485
519
|
Local tools/runtime ......... VERIFIED / BLOCKED / NOT APPLICABLE
|
|
486
520
|
Fresh-shell discovery ....... VERIFIED / CAVEAT / BLOCKED
|
|
487
521
|
Build/tests ................. VERIFIED / BLOCKED / NOT RUN
|
|
522
|
+
Work-item Explorer .......... READY / ACTION NEEDED / NOT APPLICABLE
|
|
488
523
|
Remote target access ........ VERIFIED / BLOCKED / NOT CONFIGURED
|
|
489
524
|
Host platform ............... READY / BLOCKED / NOT APPLICABLE
|
|
490
525
|
Deployment path ............. PROVEN / NOT PROVEN / BLOCKED
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: start-work
|
|
3
|
-
description: Assess requirement readiness and implementation risk,
|
|
3
|
+
description: Assess requirement readiness and implementation risk, prepare and review the implementation plan when warranted, then begin bounded implementation only after the required human authorization.
|
|
4
4
|
argument-hint: "<work-item ID, external key, or concise change>"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
disable-model-invocation: true
|
|
@@ -8,6 +8,22 @@ disable-model-invocation: true
|
|
|
8
8
|
|
|
9
9
|
# Start Work
|
|
10
10
|
|
|
11
|
+
## 0. Invocation and implementation boundary
|
|
12
|
+
|
|
13
|
+
`/start-work` is the orchestration entry point for preparing a work item to be implemented. Its invocation authorizes read-only context resolution, requirement-readiness assessment, risk classification, and implementation planning.
|
|
14
|
+
|
|
15
|
+
For **STANDARD** and **ELEVATED** work, invoking `/start-work` does **not** by itself authorize substantive implementation, code writes, or implementation branch setup. Those begin only after the human explicitly approves the final proposed implementation plan at the plan gate defined below.
|
|
16
|
+
|
|
17
|
+
For **LIGHT** work, there is no mandatory formal plan. The human-selected implementation action may authorize bounded implementation directly when the scope is tiny, obvious, and low-risk.
|
|
18
|
+
|
|
19
|
+
Never blur these states:
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
/start-work invoked
|
|
23
|
+
≠ plan approved
|
|
24
|
+
≠ implementation authorized
|
|
25
|
+
```
|
|
26
|
+
|
|
11
27
|
## 1. Resolve the requested work
|
|
12
28
|
|
|
13
29
|
Read `.github/project-forge-workspace.json` when present.
|
|
@@ -22,6 +38,8 @@ Resolve only the context needed:
|
|
|
22
38
|
|
|
23
39
|
Do not require local briefs when the repository uses Jira/Issues. Do not invent external content.
|
|
24
40
|
|
|
41
|
+
When the host can open repository review surfaces, foreground the PRIMARY authoritative requirement/work-item artifact when human review is needed. Treat additional briefs/ADRs/design documents as CONTEXT or TRACEABILITY unless they are themselves the approval subject.
|
|
42
|
+
|
|
25
43
|
## 2. Check requirement readiness before planning
|
|
26
44
|
|
|
27
45
|
Assess:
|
|
@@ -43,7 +61,7 @@ Are material decisions unresolved?
|
|
|
43
61
|
|
|
44
62
|
If detailed precision is warranted but incomplete, recommend `/refine-requirements` or `/grill-me` rather than silently inventing behavior. `/grill-me` may remain read-only or, when the human selects its session-level reconciliation option, write resolved decisions into permitted authorities.
|
|
45
63
|
|
|
46
|
-
If local requirements are DRAFT and carry material behavior, human approval is the gate before substantive planning/implementation.
|
|
64
|
+
If local requirements are DRAFT and carry material behavior, human approval is the gate before substantive planning/implementation. Before that approval, follow `HUMAN_GATES.md`: identify and foreground the PRIMARY requirements review surface when the host supports it.
|
|
47
65
|
|
|
48
66
|
If requirements are already sufficient/approved under the configured model, do not force another refinement cycle.
|
|
49
67
|
|
|
@@ -62,7 +80,9 @@ Do not ask the human to open GitHub Settings and transcribe required-check names
|
|
|
62
80
|
Tiny, obvious, low-risk; no meaningful schema/security/concurrency/deployment/major-UX implications.
|
|
63
81
|
|
|
64
82
|
```text
|
|
65
|
-
|
|
83
|
+
human selects bounded implementation action
|
|
84
|
+
→ short-lived branch setup when appropriate
|
|
85
|
+
→ Agent
|
|
66
86
|
→ relevant checks
|
|
67
87
|
→ human meaningful-diff review
|
|
68
88
|
```
|
|
@@ -76,7 +96,8 @@ Meaningful multi-file work.
|
|
|
76
96
|
```text
|
|
77
97
|
requirements ready as needed
|
|
78
98
|
→ native plan
|
|
79
|
-
→
|
|
99
|
+
→ plan review surface foregrounded
|
|
100
|
+
→ HUMAN IMPLEMENTATION-PLAN APPROVAL
|
|
80
101
|
→ short-lived work branch setup
|
|
81
102
|
→ Agent implementation
|
|
82
103
|
→ checks
|
|
@@ -99,7 +120,9 @@ Use for:
|
|
|
99
120
|
detailed approved requirements / ADR as needed
|
|
100
121
|
→ native plan
|
|
101
122
|
→ Reviewer challenges plan
|
|
102
|
-
→
|
|
123
|
+
→ Reviewer findings reconciled into final proposed plan
|
|
124
|
+
→ final plan review surface foregrounded
|
|
125
|
+
→ HUMAN IMPLEMENTATION-PLAN APPROVAL
|
|
103
126
|
→ short-lived work branch setup
|
|
104
127
|
→ implementation in small slices
|
|
105
128
|
→ stronger verification
|
|
@@ -121,24 +144,100 @@ Relevant choices are:
|
|
|
121
144
|
|
|
122
145
|
Use a numbered text list only when structured choice UI is unavailable. For LIGHT work, do not interrupt with coaching unless requested.
|
|
123
146
|
|
|
124
|
-
## 5. Planning rules
|
|
147
|
+
## 5. Planning rules and mandatory plan gate
|
|
125
148
|
|
|
126
149
|
For STANDARD/ELEVATED work:
|
|
127
|
-
- use the editor's current native planning capability
|
|
128
|
-
- plan approach, affected areas, key decisions, risks, and verification
|
|
129
|
-
-
|
|
130
|
-
- do not
|
|
131
|
-
-
|
|
132
|
-
-
|
|
150
|
+
- use the editor's current native planning capability;
|
|
151
|
+
- plan approach, affected areas, key decisions, risks, non-scope, and verification;
|
|
152
|
+
- do not auto-launch implementation subagents while planning;
|
|
153
|
+
- do not create mandatory `spec.md` or `tasks.md`;
|
|
154
|
+
- save a durable plan only when it is useful across sessions or for genuinely complex/risky work;
|
|
155
|
+
- require explicit human plan approval before implementation or implementation branch setup.
|
|
156
|
+
|
|
157
|
+
For ELEVATED work, Reviewer challenges the proposed plan before the human approval gate. Reconcile material Reviewer findings into the final proposed plan first. The human reviews that final plan, not an earlier plan plus unresolved reviewer objections.
|
|
158
|
+
|
|
159
|
+
### Present the review surface before asking for approval
|
|
160
|
+
|
|
161
|
+
Follow the human-review-surface contract from `HUMAN_GATES.md` and `INTERACTIVE_SESSION_GUIDE.md`.
|
|
162
|
+
|
|
163
|
+
PRIMARY review subject is the final proposed implementation plan. Prefer:
|
|
164
|
+
1. the host's native plan surface when it can be foregrounded;
|
|
165
|
+
2. a durable plan document when one exists and is useful;
|
|
166
|
+
3. otherwise the full substantive plan in the conversation.
|
|
167
|
+
|
|
168
|
+
If a durable plan is a repository artifact and VS Code can invoke the Project Forge companion extension, use `projectForge.openReviewArtifact` with the exact workspace-relative path. If the host exposes a stronger native plan/review surface, use that instead.
|
|
169
|
+
|
|
170
|
+
Before rendering the gate, state explicitly:
|
|
171
|
+
|
|
172
|
+
```text
|
|
173
|
+
Implementation has NOT started.
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Then present a gate equivalent to:
|
|
177
|
+
|
|
178
|
+
```text
|
|
179
|
+
IMPLEMENTATION PLAN REVIEW REQUIRED
|
|
180
|
+
|
|
181
|
+
Work item: <ID / key / concise change>
|
|
182
|
+
Risk: <STANDARD | ELEVATED>
|
|
183
|
+
Review subject: <native plan / exact plan path>
|
|
184
|
+
|
|
185
|
+
Plan covers:
|
|
186
|
+
- approach
|
|
187
|
+
- affected areas
|
|
188
|
+
- key technical decisions
|
|
189
|
+
- risks / mitigations
|
|
190
|
+
- verification strategy
|
|
191
|
+
- explicit non-scope
|
|
192
|
+
|
|
193
|
+
Open material decisions: <NONE | list>
|
|
194
|
+
|
|
195
|
+
Implementation has NOT started.
|
|
196
|
+
|
|
197
|
+
1. Approve plan and begin implementation [PLAN APPROVAL + CODE WRITE]
|
|
198
|
+
2. Request changes to the plan [PLAN ONLY]
|
|
199
|
+
3. Review assumptions / risks [READ ONLY]
|
|
200
|
+
4. Stop [NO ACTION]
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
When the host exposes structured choice UI, render the actions as a single-select control rather than a numbered menu while preserving the consequence labels. Do not preselect or infer `Approve plan and begin implementation` merely because the plan exists or the human invoked `/start-work`.
|
|
204
|
+
|
|
205
|
+
Only option 1 (or equivalent explicit free-text authorization) authorizes substantive implementation. Options 2-4 do not.
|
|
206
|
+
|
|
207
|
+
### Material plan changes after approval
|
|
208
|
+
|
|
209
|
+
Routine implementation details may evolve inside the approved approach. Reopen the implementation-plan gate when new evidence requires a material change to any of:
|
|
210
|
+
- architecture or major component boundaries,
|
|
211
|
+
- approved scope/non-scope,
|
|
212
|
+
- schema/data handling or migration behavior,
|
|
213
|
+
- authentication/security/authorization model,
|
|
214
|
+
- externally visible behavior or contract,
|
|
215
|
+
- major dependencies/integration strategy,
|
|
216
|
+
- verification strategy when the change materially weakens or alters the approved proof.
|
|
217
|
+
|
|
218
|
+
Before continuing, show:
|
|
219
|
+
|
|
220
|
+
```text
|
|
221
|
+
APPROVED PLAN CHANGED
|
|
222
|
+
|
|
223
|
+
Material change: ...
|
|
224
|
+
Reason: ...
|
|
225
|
+
Revised plan: ...
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
Foreground the revised PRIMARY plan review surface when supported, then require renewed plan approval. Do not silently continue implementation under stale authorization.
|
|
133
229
|
|
|
134
230
|
## 6. Working branch setup
|
|
135
231
|
|
|
136
232
|
Once implementation is authorized to begin, establish the repository-appropriate short-lived work branch as routine setup before substantive edits.
|
|
137
233
|
|
|
234
|
+
For STANDARD/ELEVATED work, **plan approval is the implementation authorization boundary**. Do not create/switch the implementation branch merely because `/start-work` was invoked or a plan was produced.
|
|
235
|
+
|
|
138
236
|
Do not ask a separate branch-creation permission when all of the following are true:
|
|
139
|
-
-
|
|
140
|
-
- the
|
|
141
|
-
- the
|
|
237
|
+
- implementation is already authorized under the applicable gate;
|
|
238
|
+
- the current branch is the default/integration branch and repository policy expects short-lived work branches;
|
|
239
|
+
- the work-item boundary is clear;
|
|
240
|
+
- the target branch name is unambiguous under repository convention or the Project Forge fallback below;
|
|
142
241
|
- creating/switching branches does not require history rewriting or discarding work.
|
|
143
242
|
|
|
144
243
|
Branch naming order:
|
|
@@ -152,7 +251,7 @@ If scoped uncommitted changes already exist on the default branch and clearly be
|
|
|
152
251
|
|
|
153
252
|
Stop and ask only when branch policy/naming is materially ambiguous, the intended branch already exists with divergent work, unrelated changes are present, or the operation would require stash/reset/rebase/force/history rewriting.
|
|
154
253
|
|
|
155
|
-
For LIGHT work, branch setup is part of the human-selected implementation action. For STANDARD/ELEVATED work, it is part of the approved implementation start after plan approval.
|
|
254
|
+
For LIGHT work, branch setup is part of the human-selected implementation action. For STANDARD/ELEVATED work, it is part of the explicit approved implementation start after plan approval.
|
|
156
255
|
|
|
157
256
|
## 7. Deployment enabler
|
|
158
257
|
|
|
@@ -182,10 +281,13 @@ Return:
|
|
|
182
281
|
- CURRENT STATE,
|
|
183
282
|
- risk level and why,
|
|
184
283
|
- requirement readiness,
|
|
185
|
-
-
|
|
284
|
+
- current review subject when a human gate is pending,
|
|
285
|
+
- branch state / expected short-lived branch only after implementation is authorized or about to begin,
|
|
186
286
|
- RECOMMENDED NEXT STEP,
|
|
187
287
|
- a small set of relevant action choices.
|
|
188
288
|
|
|
189
289
|
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.
|
|
190
290
|
|
|
191
|
-
|
|
291
|
+
If the workflow has reached the STANDARD/ELEVATED plan gate, stop there until the human selects an explicit plan action. Do not include an alternate implementation action that bypasses the plan gate.
|
|
292
|
+
|
|
293
|
+
Do not skip an unresolved requirement/plan gate merely because implementation is technically possible. Once implementation is explicitly approved, do not insert a separate ceremonial branch-creation gate when the branch setup is safe and deterministic.
|
|
@@ -10,6 +10,8 @@ disable-model-invocation: true
|
|
|
10
10
|
|
|
11
11
|
Purpose: make local `docs/work-items/<ID>-...` folders easier to scan in VS Code without changing work-item paths, ticket content, or Project Forge workflow authority.
|
|
12
12
|
|
|
13
|
+
Normal `/setup` owns automatic installation/update of this Project Forge extension when local `docs/work-items` folders are present. This command remains the focused read-only inspection and manual enable/disable surface.
|
|
14
|
+
|
|
13
15
|
Normal use is read-only:
|
|
14
16
|
|
|
15
17
|
```text
|
|
@@ -72,6 +74,8 @@ python tools/project-forge-vscode/work-item-status/install.py status --json
|
|
|
72
74
|
|
|
73
75
|
Also check whether `docs/work-items` exists. If the Project uses an external-only work-item source with no local work-item folders, report the Explorer decoration as not applicable rather than creating a competing local hierarchy.
|
|
74
76
|
|
|
77
|
+
If local work-item folders are present but the package-managed installer is absent, route to `/project-forge-update`; do not clone Project Forge source repositories or download loose extension files as a workaround.
|
|
78
|
+
|
|
75
79
|
A useful result is:
|
|
76
80
|
|
|
77
81
|
```text
|
|
@@ -84,7 +88,7 @@ Project workflow authority . UNCHANGED
|
|
|
84
88
|
|
|
85
89
|
## 4. Enable
|
|
86
90
|
|
|
87
|
-
`/work-item-status enable` is explicit authorization for one bounded local editor change: install/update the Project Forge-owned extension in this developer's VS Code extensions directory.
|
|
91
|
+
Outside `/setup`, `/work-item-status enable` is explicit authorization for one bounded local editor change: install/update the Project Forge-owned extension in this developer's VS Code extensions directory. Normal `/setup` and `/setup local` already authorize the same bounded install when local `docs/work-items` folders are present, so do not ask for a second confirmation in that flow.
|
|
88
92
|
|
|
89
93
|
Run:
|
|
90
94
|
|
|
@@ -102,7 +106,7 @@ Project Forge: Refresh Work Item Status
|
|
|
102
106
|
|
|
103
107
|
through the VS Code Command Palette.
|
|
104
108
|
|
|
105
|
-
Failure to install this
|
|
109
|
+
Failure to install this editor decoration does **not** make Project setup, implementation, review, delivery, or deployment unready. `/setup` reports the editor dimension separately as action-needed/error and gives the smallest repair/update action without erasing otherwise-valid application/runtime readiness.
|
|
106
110
|
|
|
107
111
|
## 5. Disable
|
|
108
112
|
|
|
@@ -124,4 +128,4 @@ Return:
|
|
|
124
128
|
- a reminder that badges are evidence-derived and non-authoritative;
|
|
125
129
|
- the smallest relevant next action.
|
|
126
130
|
|
|
127
|
-
Do not turn this
|
|
131
|
+
Do not turn this editor convenience into a source of Project workflow authority.
|
|
@@ -1,11 +1,29 @@
|
|
|
1
1
|
# Project Forge Work Item Status
|
|
2
2
|
|
|
3
|
-
This optional local VS Code extension decorates Project Forge work-item folders in the Explorer from repository evidence.
|
|
3
|
+
This optional local VS Code extension decorates Project Forge work-item folders in the Explorer from repository evidence and provides a read-only helper for Project Forge human-review surfaces.
|
|
4
|
+
|
|
5
|
+
## Work-item status
|
|
4
6
|
|
|
5
7
|
- `●` — in progress, supported by the current work-item branch or an open pull request.
|
|
6
8
|
- `✓` — complete, supported by a merged pull request to the repository default branch.
|
|
7
9
|
- no badge — no status is asserted.
|
|
8
10
|
|
|
9
|
-
The
|
|
11
|
+
The status decoration is evidence-derived and non-authoritative. It does not rename or edit work-item folders/documents and does not maintain a second status database. It reads local Git state and, when available, GitHub CLI pull-request metadata. Project Forge's normal repository/PR/CI evidence remains authoritative.
|
|
10
12
|
|
|
11
13
|
Use **Project Forge: Refresh Work Item Status** from the Command Palette to refresh immediately. The extension also refreshes periodically and when common local Git/work-item evidence changes.
|
|
14
|
+
|
|
15
|
+
## Human review artifact helper
|
|
16
|
+
|
|
17
|
+
Project Forge workflows may use **Project Forge: Open Review Artifact** immediately before a human approval gate.
|
|
18
|
+
|
|
19
|
+
The command accepts an exact workspace-relative repository artifact path when invoked programmatically. When run manually from the Command Palette without a path, it asks for the workspace-relative path.
|
|
20
|
+
|
|
21
|
+
Behavior:
|
|
22
|
+
|
|
23
|
+
- Markdown files open in rendered Markdown Preview when available;
|
|
24
|
+
- other repository artifacts open in the normal VS Code editor preview;
|
|
25
|
+
- targets outside the currently open workspace are rejected;
|
|
26
|
+
- missing or ambiguous multi-root targets are reported rather than guessed;
|
|
27
|
+
- opening/previewing an artifact is read-only presentation and never records approval.
|
|
28
|
+
|
|
29
|
+
Project Forge should foreground only the PRIMARY review subject automatically. Supporting CONTEXT and TRACEABILITY documents remain available without stealing focus unless the human chooses to open them.
|
|
@@ -153,6 +153,138 @@ async function computeRootStatus(root) {
|
|
|
153
153
|
return { folders, statusById };
|
|
154
154
|
}
|
|
155
155
|
|
|
156
|
+
function canonicalExistingPath(value) {
|
|
157
|
+
try {
|
|
158
|
+
return fs.realpathSync.native
|
|
159
|
+
? fs.realpathSync.native(value)
|
|
160
|
+
: fs.realpathSync(value);
|
|
161
|
+
} catch {
|
|
162
|
+
return path.resolve(value);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
function isPathInside(root, candidate) {
|
|
167
|
+
const canonicalRoot = canonicalExistingPath(root);
|
|
168
|
+
const canonicalCandidate = canonicalExistingPath(candidate);
|
|
169
|
+
const relative = path.relative(canonicalRoot, canonicalCandidate);
|
|
170
|
+
return relative === '' || (
|
|
171
|
+
relative !== '..' &&
|
|
172
|
+
!relative.startsWith(`..${path.sep}`) &&
|
|
173
|
+
!path.isAbsolute(relative)
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
function reviewTargetPath(target) {
|
|
178
|
+
if (typeof target === 'string') {
|
|
179
|
+
return target.trim();
|
|
180
|
+
}
|
|
181
|
+
if (target && typeof target.fsPath === 'string') {
|
|
182
|
+
return target.fsPath;
|
|
183
|
+
}
|
|
184
|
+
if (target && typeof target.path === 'string') {
|
|
185
|
+
return target.path.trim();
|
|
186
|
+
}
|
|
187
|
+
return '';
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function isRegularFile(candidate) {
|
|
191
|
+
try {
|
|
192
|
+
return fs.statSync(candidate).isFile();
|
|
193
|
+
} catch {
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
async function resolveReviewUri(target) {
|
|
199
|
+
let requested = reviewTargetPath(target);
|
|
200
|
+
if (!requested) {
|
|
201
|
+
requested = (await vscode.window.showInputBox({
|
|
202
|
+
prompt: 'Workspace-relative Project Forge review artifact path',
|
|
203
|
+
placeHolder: 'docs/work-items/.../requirements.md',
|
|
204
|
+
ignoreFocusOut: true,
|
|
205
|
+
})) || '';
|
|
206
|
+
}
|
|
207
|
+
requested = requested.trim();
|
|
208
|
+
if (!requested) {
|
|
209
|
+
return undefined;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
const folders = vscode.workspace.workspaceFolders || [];
|
|
213
|
+
if (!folders.length) {
|
|
214
|
+
throw new Error('No VS Code workspace is open.');
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
if (path.isAbsolute(requested)) {
|
|
218
|
+
const candidate = canonicalExistingPath(requested);
|
|
219
|
+
const owner = folders.find((folder) => isPathInside(folder.uri.fsPath, candidate));
|
|
220
|
+
if (!owner) {
|
|
221
|
+
throw new Error('Review artifact must be inside the open workspace.');
|
|
222
|
+
}
|
|
223
|
+
if (!isRegularFile(candidate)) {
|
|
224
|
+
throw new Error(`Review artifact was not found: ${requested}`);
|
|
225
|
+
}
|
|
226
|
+
return vscode.Uri.file(candidate);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
const matches = [];
|
|
230
|
+
for (const folder of folders) {
|
|
231
|
+
const candidate = canonicalExistingPath(path.resolve(folder.uri.fsPath, requested));
|
|
232
|
+
if (!isPathInside(folder.uri.fsPath, candidate) || !isRegularFile(candidate)) {
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
matches.push({ folder, uri: vscode.Uri.file(candidate) });
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
if (matches.length === 1) {
|
|
239
|
+
return matches[0].uri;
|
|
240
|
+
}
|
|
241
|
+
if (!matches.length) {
|
|
242
|
+
throw new Error(`Review artifact was not found in the open workspace: ${requested}`);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
const activeEditor = vscode.window.activeTextEditor;
|
|
246
|
+
const activeFolder = activeEditor
|
|
247
|
+
? vscode.workspace.getWorkspaceFolder(activeEditor.document.uri)
|
|
248
|
+
: undefined;
|
|
249
|
+
const activeMatch = activeFolder
|
|
250
|
+
? matches.find((entry) => entry.folder.uri.fsPath === activeFolder.uri.fsPath)
|
|
251
|
+
: undefined;
|
|
252
|
+
if (activeMatch) {
|
|
253
|
+
return activeMatch.uri;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
throw new Error(`Review artifact path is ambiguous across workspace folders: ${requested}`);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
async function openReviewArtifact(target) {
|
|
260
|
+
try {
|
|
261
|
+
const uri = await resolveReviewUri(target);
|
|
262
|
+
if (!uri) {
|
|
263
|
+
return undefined;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
const extension = path.extname(uri.fsPath).toLowerCase();
|
|
267
|
+
if (extension === '.md' || extension === '.markdown') {
|
|
268
|
+
try {
|
|
269
|
+
await vscode.commands.executeCommand('markdown.showPreview', uri);
|
|
270
|
+
return uri.toString();
|
|
271
|
+
} catch {
|
|
272
|
+
// Fall back to the normal editor preview surface when Markdown preview is unavailable.
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
await vscode.commands.executeCommand('vscode.open', uri, {
|
|
277
|
+
preview: true,
|
|
278
|
+
preserveFocus: false,
|
|
279
|
+
});
|
|
280
|
+
return uri.toString();
|
|
281
|
+
} catch (error) {
|
|
282
|
+
const message = error && error.message ? error.message : String(error);
|
|
283
|
+
await vscode.window.showWarningMessage(`Project Forge review artifact: ${message}`);
|
|
284
|
+
return undefined;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
156
288
|
class WorkItemDecorationProvider {
|
|
157
289
|
constructor() {
|
|
158
290
|
this._onDidChangeFileDecorations = new vscode.EventEmitter();
|
|
@@ -238,6 +370,9 @@ function activate(context) {
|
|
|
238
370
|
context.subscriptions.push(
|
|
239
371
|
vscode.commands.registerCommand('projectForge.refreshWorkItemStatus', refresh),
|
|
240
372
|
);
|
|
373
|
+
context.subscriptions.push(
|
|
374
|
+
vscode.commands.registerCommand('projectForge.openReviewArtifact', openReviewArtifact),
|
|
375
|
+
);
|
|
241
376
|
context.subscriptions.push(
|
|
242
377
|
vscode.window.onDidChangeWindowState((event) => {
|
|
243
378
|
if (event.focused) {
|
|
@@ -271,4 +406,4 @@ function activate(context) {
|
|
|
271
406
|
|
|
272
407
|
function deactivate() {}
|
|
273
408
|
|
|
274
|
-
module.exports = { activate, deactivate };
|
|
409
|
+
module.exports = { activate, deactivate, openReviewArtifact, resolveReviewUri };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "project-forge-work-item-status",
|
|
3
3
|
"displayName": "Project Forge Work Item Status",
|
|
4
|
-
"description": "Shows evidence-backed Project Forge work-item status badges in
|
|
5
|
-
"version": "0.
|
|
4
|
+
"description": "Shows evidence-backed Project Forge work-item status badges and provides read-only review-surface helpers in VS Code.",
|
|
5
|
+
"version": "0.2.0",
|
|
6
6
|
"publisher": "project-forge",
|
|
7
7
|
"license": "UNLICENSED",
|
|
8
8
|
"engines": {
|
|
@@ -14,10 +14,12 @@
|
|
|
14
14
|
"keywords": [
|
|
15
15
|
"project-forge",
|
|
16
16
|
"work-items",
|
|
17
|
-
"explorer"
|
|
17
|
+
"explorer",
|
|
18
|
+
"review"
|
|
18
19
|
],
|
|
19
20
|
"activationEvents": [
|
|
20
|
-
"workspaceContains:docs/work-items/*"
|
|
21
|
+
"workspaceContains:docs/work-items/*",
|
|
22
|
+
"onCommand:projectForge.openReviewArtifact"
|
|
21
23
|
],
|
|
22
24
|
"main": "./extension.js",
|
|
23
25
|
"extensionKind": [
|
|
@@ -26,7 +28,7 @@
|
|
|
26
28
|
"capabilities": {
|
|
27
29
|
"untrustedWorkspaces": {
|
|
28
30
|
"supported": false,
|
|
29
|
-
"description": "The extension reads local Git state and optional GitHub CLI pull-request evidence."
|
|
31
|
+
"description": "The extension reads local Git state and optional GitHub CLI pull-request evidence, and may open workspace review artifacts on explicit Project Forge commands."
|
|
30
32
|
}
|
|
31
33
|
},
|
|
32
34
|
"contributes": {
|
|
@@ -34,6 +36,10 @@
|
|
|
34
36
|
{
|
|
35
37
|
"command": "projectForge.refreshWorkItemStatus",
|
|
36
38
|
"title": "Project Forge: Refresh Work Item Status"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"command": "projectForge.openReviewArtifact",
|
|
42
|
+
"title": "Project Forge: Open Review Artifact"
|
|
37
43
|
}
|
|
38
44
|
]
|
|
39
45
|
}
|