@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.
- package/assets/components.json +3 -3
- package/assets/core/distribution.json +7 -0
- package/assets/generated/ASSEMBLY.json +55 -20
- package/assets/generated/core/core/agents/reviewer.agent.md +1 -1
- package/assets/generated/core/core/instructions/project-forge-workflow.instructions.md +5 -1
- package/assets/generated/core/core/process/APPLICATION_VERSIONING.md +137 -0
- package/assets/generated/core/core/process/GUIDED_NEXT_STEPS.md +22 -6
- package/assets/generated/core/core/process/INTERACTIVE_SESSION_GUIDE.md +31 -1
- package/assets/generated/core/core/process/OPERATION_JOURNAL.md +140 -0
- package/assets/generated/core/core/process/PROJECT_REQUIREMENTS_EXPORT.md +165 -0
- package/assets/generated/core/core/skills/build/SKILL.md +70 -0
- package/assets/generated/core/core/skills/cleanup-branches/SKILL.md +6 -10
- package/assets/generated/core/core/skills/code-walkthrough/SKILL.md +12 -8
- package/assets/generated/core/core/skills/core-sync/SKILL.md +17 -11
- package/assets/generated/core/core/skills/define-feature/SKILL.md +9 -18
- package/assets/generated/core/core/skills/deliver/SKILL.md +12 -8
- package/assets/generated/core/core/skills/deploy/SKILL.md +2 -2
- package/assets/generated/core/core/skills/export-requirements/SKILL.md +132 -0
- package/assets/generated/core/core/skills/grill-with-docs/SKILL.md +6 -8
- package/assets/generated/core/core/skills/next-step/SKILL.md +10 -11
- package/assets/generated/core/core/skills/project-forge-update/SKILL.md +10 -6
- package/assets/generated/core/core/skills/pull-latest/SKILL.md +16 -10
- package/assets/generated/core/core/skills/refine-requirements/SKILL.md +37 -16
- package/assets/generated/core/core/skills/replatform/SKILL.md +122 -0
- package/assets/generated/core/core/skills/run/SKILL.md +75 -0
- package/assets/generated/core/core/skills/setup/SKILL.md +20 -17
- package/assets/generated/core/core/skills/start-work/SKILL.md +11 -9
- package/package.json +1 -1
package/assets/components.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"package": "@mriekki/project-forge",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.2.0",
|
|
5
5
|
"defaultProfile": "greenfield-project",
|
|
6
6
|
"profiles": {
|
|
7
7
|
"greenfield-project": {
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
"components": {
|
|
15
15
|
"core": {
|
|
16
16
|
"repository": "mriekki/project-forge-core",
|
|
17
|
-
"commit": "
|
|
18
|
-
"version": "3.
|
|
17
|
+
"commit": "d4487e07e732db4129bd092f86f6ceab36b02c15",
|
|
18
|
+
"version": "3.3.0",
|
|
19
19
|
"distribution": "greenfield-workspace",
|
|
20
20
|
"descriptor": "assets/core/distribution.json",
|
|
21
21
|
"sourceRoot": "assets/generated/core",
|
|
@@ -13,6 +13,10 @@
|
|
|
13
13
|
{"source":"core/skills/refine-requirements/SKILL.md","destination":".github/skills/refine-requirements/SKILL.md"},
|
|
14
14
|
{"source":"core/skills/start-work/SKILL.md","destination":".github/skills/start-work/SKILL.md"},
|
|
15
15
|
{"source":"core/skills/setup/SKILL.md","destination":".github/skills/setup/SKILL.md"},
|
|
16
|
+
{"source":"core/skills/build/SKILL.md","destination":".github/skills/build/SKILL.md"},
|
|
17
|
+
{"source":"core/skills/run/SKILL.md","destination":".github/skills/run/SKILL.md"},
|
|
18
|
+
{"source":"core/skills/export-requirements/SKILL.md","destination":".github/skills/export-requirements/SKILL.md"},
|
|
19
|
+
{"source":"core/skills/replatform/SKILL.md","destination":".github/skills/replatform/SKILL.md"},
|
|
16
20
|
{"source":"core/skills/progress/SKILL.md","destination":".github/skills/progress/SKILL.md"},
|
|
17
21
|
{"source":"core/skills/next-step/SKILL.md","destination":".github/skills/next-step/SKILL.md"},
|
|
18
22
|
{"source":"core/skills/deliver/SKILL.md","destination":".github/skills/deliver/SKILL.md"},
|
|
@@ -44,6 +48,9 @@
|
|
|
44
48
|
{"source":"core/process/PROJECT_DOCUMENTATION_FRAMEWORK.md","destination":"docs/process/PROJECT_DOCUMENTATION_FRAMEWORK.md"},
|
|
45
49
|
{"source":"core/process/PROJECT_FORGE_ENGINEERING_GUIDE.md","destination":"docs/project-forge/PROJECT_FORGE_ENGINEERING_GUIDE.md"},
|
|
46
50
|
{"source":"core/process/SETUP_ACCEPTANCE_CHECKLIST.md","destination":"docs/process/SETUP_ACCEPTANCE_CHECKLIST.md"},
|
|
51
|
+
{"source":"core/process/OPERATION_JOURNAL.md","destination":"docs/process/OPERATION_JOURNAL.md"},
|
|
52
|
+
{"source":"core/process/PROJECT_REQUIREMENTS_EXPORT.md","destination":"docs/process/PROJECT_REQUIREMENTS_EXPORT.md"},
|
|
53
|
+
{"source":"core/process/APPLICATION_VERSIONING.md","destination":"docs/process/APPLICATION_VERSIONING.md"},
|
|
47
54
|
{"source":"core/templates/PULL_REQUEST_TEMPLATE.md","destination":".github/PULL_REQUEST_TEMPLATE.md"},
|
|
48
55
|
{"source":"core/templates/PRODUCT_BRIEF_TEMPLATE.md","destination":"docs/templates/PRODUCT_BRIEF_TEMPLATE.md"},
|
|
49
56
|
{"source":"core/templates/FEATURE_BRIEF_TEMPLATE.md","destination":"docs/templates/FEATURE_BRIEF_TEMPLATE.md"},
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"package": "@mriekki/project-forge",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.2.0",
|
|
5
5
|
"components": {
|
|
6
6
|
"core": {
|
|
7
7
|
"repository": "mriekki/project-forge-core",
|
|
8
|
-
"commit": "
|
|
9
|
-
"version": "3.
|
|
8
|
+
"commit": "d4487e07e732db4129bd092f86f6ceab36b02c15",
|
|
9
|
+
"version": "3.3.0",
|
|
10
10
|
"distribution": "greenfield-workspace",
|
|
11
11
|
"files": [
|
|
12
12
|
{
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
{
|
|
18
18
|
"source": "core/agents/reviewer.agent.md",
|
|
19
19
|
"destination": ".github/agents/reviewer.agent.md",
|
|
20
|
-
"sha256": "
|
|
20
|
+
"sha256": "94255c72a6c875722ebaf8b0cb328fe019856c01443b550ca6e2f6c422da983e"
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
23
|
"source": "core/agents/coach.agent.md",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
{
|
|
28
28
|
"source": "core/instructions/project-forge-workflow.instructions.md",
|
|
29
29
|
"destination": ".github/instructions/project-forge-workflow.instructions.md",
|
|
30
|
-
"sha256": "
|
|
30
|
+
"sha256": "aa03af8ef23d32d90a85adaeb549873e4de32798c58bfdaf7fe4183a549b1a17"
|
|
31
31
|
},
|
|
32
32
|
{
|
|
33
33
|
"source": "core/instructions/project-forge-docs.instructions.md",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
{
|
|
38
38
|
"source": "core/skills/define-feature/SKILL.md",
|
|
39
39
|
"destination": ".github/skills/define-feature/SKILL.md",
|
|
40
|
-
"sha256": "
|
|
40
|
+
"sha256": "c9f85d76a701b3d1af5c70cd74b19ce119b5735cf3537e2618159d58394ffd02"
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
"source": "core/skills/grill-me/SKILL.md",
|
|
@@ -47,22 +47,42 @@
|
|
|
47
47
|
{
|
|
48
48
|
"source": "core/skills/grill-with-docs/SKILL.md",
|
|
49
49
|
"destination": ".github/skills/grill-with-docs/SKILL.md",
|
|
50
|
-
"sha256": "
|
|
50
|
+
"sha256": "facdfecee977ab01bbe908f6f122e483ea27c98a8f1562973f59f9266b63323e"
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
"source": "core/skills/refine-requirements/SKILL.md",
|
|
54
54
|
"destination": ".github/skills/refine-requirements/SKILL.md",
|
|
55
|
-
"sha256": "
|
|
55
|
+
"sha256": "ee5085ac6bbf8fb33ab5f6b52e0ac954c164fd3ea51f90965c9bde86adc88def"
|
|
56
56
|
},
|
|
57
57
|
{
|
|
58
58
|
"source": "core/skills/start-work/SKILL.md",
|
|
59
59
|
"destination": ".github/skills/start-work/SKILL.md",
|
|
60
|
-
"sha256": "
|
|
60
|
+
"sha256": "5f4d46323d19bb7a1d4e64f233ae64aae8e1874da072d38cb344d3d834bdea8e"
|
|
61
61
|
},
|
|
62
62
|
{
|
|
63
63
|
"source": "core/skills/setup/SKILL.md",
|
|
64
64
|
"destination": ".github/skills/setup/SKILL.md",
|
|
65
|
-
"sha256": "
|
|
65
|
+
"sha256": "c295193b341accf03a35105e2e4defdf11aee0198b1e24b74ab371f3a6824985"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"source": "core/skills/build/SKILL.md",
|
|
69
|
+
"destination": ".github/skills/build/SKILL.md",
|
|
70
|
+
"sha256": "0659ad88cac5ca652eedba648d10a39ca1d51d65db638ce41b392067a3fd6128"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"source": "core/skills/run/SKILL.md",
|
|
74
|
+
"destination": ".github/skills/run/SKILL.md",
|
|
75
|
+
"sha256": "6bdf23f46609d1b85147347d313d7c4bf13bd8bfc91d4b782fc7a311189ffbe3"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"source": "core/skills/export-requirements/SKILL.md",
|
|
79
|
+
"destination": ".github/skills/export-requirements/SKILL.md",
|
|
80
|
+
"sha256": "6ef2675eafdbcc809f6fb9533ab41ff032a1f3ff4789b1d5825d27cf696d0715"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"source": "core/skills/replatform/SKILL.md",
|
|
84
|
+
"destination": ".github/skills/replatform/SKILL.md",
|
|
85
|
+
"sha256": "86e17bf376f395e5f5f018d8def7f5d99b9f4baef30c0b1d20f5caaac5c993c8"
|
|
66
86
|
},
|
|
67
87
|
{
|
|
68
88
|
"source": "core/skills/progress/SKILL.md",
|
|
@@ -72,32 +92,32 @@
|
|
|
72
92
|
{
|
|
73
93
|
"source": "core/skills/next-step/SKILL.md",
|
|
74
94
|
"destination": ".github/skills/next-step/SKILL.md",
|
|
75
|
-
"sha256": "
|
|
95
|
+
"sha256": "7c24a15b9069dcc5218319ab7fb72231e48efd2ebd325d8ff250e142cb3aa813"
|
|
76
96
|
},
|
|
77
97
|
{
|
|
78
98
|
"source": "core/skills/deliver/SKILL.md",
|
|
79
99
|
"destination": ".github/skills/deliver/SKILL.md",
|
|
80
|
-
"sha256": "
|
|
100
|
+
"sha256": "238d6c81a7253c4241e4cf8588be5a5986b406b7e3a56cac115fc47a46071c71"
|
|
81
101
|
},
|
|
82
102
|
{
|
|
83
103
|
"source": "core/skills/cleanup-branches/SKILL.md",
|
|
84
104
|
"destination": ".github/skills/cleanup-branches/SKILL.md",
|
|
85
|
-
"sha256": "
|
|
105
|
+
"sha256": "b44af82b8e21693fcc600cb9628c50f49a117c7cfb7840af0f2ccedad2f96dc7"
|
|
86
106
|
},
|
|
87
107
|
{
|
|
88
108
|
"source": "core/skills/pull-latest/SKILL.md",
|
|
89
109
|
"destination": ".github/skills/pull-latest/SKILL.md",
|
|
90
|
-
"sha256": "
|
|
110
|
+
"sha256": "709471b55c41ec72fe0ca4eb87af0740ab9a947ef0b31c36f8cf51afc58d3ccb"
|
|
91
111
|
},
|
|
92
112
|
{
|
|
93
113
|
"source": "core/skills/project-forge-update/SKILL.md",
|
|
94
114
|
"destination": ".github/skills/project-forge-update/SKILL.md",
|
|
95
|
-
"sha256": "
|
|
115
|
+
"sha256": "3463a68171fa30ef10f1ca514424236317ec364f015c5446f49911a1a3c9bb12"
|
|
96
116
|
},
|
|
97
117
|
{
|
|
98
118
|
"source": "core/skills/core-sync/SKILL.md",
|
|
99
119
|
"destination": ".github/skills/core-sync/SKILL.md",
|
|
100
|
-
"sha256": "
|
|
120
|
+
"sha256": "cbc498597cea7a48004fc507f9a6efc130544e57f347c0efdbb073f71f14965e"
|
|
101
121
|
},
|
|
102
122
|
{
|
|
103
123
|
"source": "core/skills/upstream-fix/SKILL.md",
|
|
@@ -122,7 +142,7 @@
|
|
|
122
142
|
{
|
|
123
143
|
"source": "core/skills/deploy/SKILL.md",
|
|
124
144
|
"destination": ".github/skills/deploy/SKILL.md",
|
|
125
|
-
"sha256": "
|
|
145
|
+
"sha256": "a2092940eea537223abcd4ed1cbea20dccdead538b21841b305f243686715af0"
|
|
126
146
|
},
|
|
127
147
|
{
|
|
128
148
|
"source": "core/skills/tear-down/SKILL.md",
|
|
@@ -152,7 +172,7 @@
|
|
|
152
172
|
{
|
|
153
173
|
"source": "core/skills/code-walkthrough/SKILL.md",
|
|
154
174
|
"destination": ".github/skills/code-walkthrough/SKILL.md",
|
|
155
|
-
"sha256": "
|
|
175
|
+
"sha256": "34cb60680a3effc6af3a5ec22fe0c20d4b9b8064b8b808afed673be988b0f210"
|
|
156
176
|
},
|
|
157
177
|
{
|
|
158
178
|
"source": "core/skills/learning-review/SKILL.md",
|
|
@@ -182,12 +202,12 @@
|
|
|
182
202
|
{
|
|
183
203
|
"source": "core/process/GUIDED_NEXT_STEPS.md",
|
|
184
204
|
"destination": "docs/process/GUIDED_NEXT_STEPS.md",
|
|
185
|
-
"sha256": "
|
|
205
|
+
"sha256": "f25f08e6b2e904f44652fb7ea78b9f576f544a55950d63741b6f4806e4ee3287"
|
|
186
206
|
},
|
|
187
207
|
{
|
|
188
208
|
"source": "core/process/INTERACTIVE_SESSION_GUIDE.md",
|
|
189
209
|
"destination": "docs/process/INTERACTIVE_SESSION_GUIDE.md",
|
|
190
|
-
"sha256": "
|
|
210
|
+
"sha256": "c35f2f4bc1b52746b205eab65982b32d9a2fe58f1c750f9744ddfdd320c3f52c"
|
|
191
211
|
},
|
|
192
212
|
{
|
|
193
213
|
"source": "core/process/COACHING_GUIDE.md",
|
|
@@ -219,6 +239,21 @@
|
|
|
219
239
|
"destination": "docs/process/SETUP_ACCEPTANCE_CHECKLIST.md",
|
|
220
240
|
"sha256": "b5f8b39de15b464a1c80b26a6c150c6d2a363751abc05d33df4cebcad6b49d9b"
|
|
221
241
|
},
|
|
242
|
+
{
|
|
243
|
+
"source": "core/process/OPERATION_JOURNAL.md",
|
|
244
|
+
"destination": "docs/process/OPERATION_JOURNAL.md",
|
|
245
|
+
"sha256": "16e2d502d7b0f923b4ea2e34bdcaaed73cdc0933fd6ef54a1278dd25f25b5140"
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"source": "core/process/PROJECT_REQUIREMENTS_EXPORT.md",
|
|
249
|
+
"destination": "docs/process/PROJECT_REQUIREMENTS_EXPORT.md",
|
|
250
|
+
"sha256": "6ef9ecf1bb7c86b5f445554f5e630db36beee34bead2db8ff2597c148fba9c30"
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
"source": "core/process/APPLICATION_VERSIONING.md",
|
|
254
|
+
"destination": "docs/process/APPLICATION_VERSIONING.md",
|
|
255
|
+
"sha256": "846abd1085501bebf3ffd8025f875dcf2bfb3f57e67110e684c605ae11c3246b"
|
|
256
|
+
},
|
|
222
257
|
{
|
|
223
258
|
"source": "core/templates/PULL_REQUEST_TEMPLATE.md",
|
|
224
259
|
"destination": ".github/PULL_REQUEST_TEMPLATE.md",
|
|
@@ -72,7 +72,7 @@ READY / CHANGES REQUIRED / INSUFFICIENT EVIDENCE
|
|
|
72
72
|
|
|
73
73
|
## Guided ending
|
|
74
74
|
|
|
75
|
-
After findings use CURRENT STATE, RECOMMENDED NEXT STEP, and a small
|
|
75
|
+
After findings use CURRENT STATE, RECOMMENDED NEXT STEP, and a small set of relevant action choices. When the host exposes structured question controls, render mutually exclusive actions through **single-select** UI following `INTERACTIVE_SESSION_GUIDE.md`; in VS Code use the native question surface such as `vscode_askQuestions`. Use a numbered text menu only when structured choice UI is unavailable. Reviewer itself does not commit, push, create/merge PRs, or deploy.
|
|
76
76
|
|
|
77
77
|
When implementation is READY and the human accepts the meaningful local diff, explicitly recommend:
|
|
78
78
|
|
|
@@ -20,7 +20,11 @@ For implementation, establish the repository-appropriate short-lived work branch
|
|
|
20
20
|
|
|
21
21
|
Continuous modes such as `/grill-me`, `/grill-with-docs`, `/refine-requirements`, `/coach`, `/learning-review`, and `/deployment-readiness` continue until stopped or naturally complete.
|
|
22
22
|
|
|
23
|
-
During interactive questioning, prefer concise choice-first options for genuinely bounded human decisions, including `Other / specify` and `Not sure — recommend one` when appropriate.
|
|
23
|
+
During interactive questioning, prefer concise choice-first options for genuinely bounded human decisions, including `Other / specify` and `Not sure — recommend one` when appropriate. When the host exposes native structured question controls, use them instead of a plain numbered chat list. In VS Code, use the host's structured question surface such as `vscode_askQuestions` when available: single-select for mutually exclusive decisions/actions and multi-select only when several simultaneous selections are valid. A textual numbered menu is only the fallback when structured choice UI is unavailable.
|
|
24
|
+
|
|
25
|
+
Make a recommendation only when current evidence, repository policy, or a clear engineering tradeoff supports one. Mark exactly one supported choice with the host's `recommended` indicator when available and give a brief rationale. If no option is clearly better, do not mark any option recommended. A recommendation is advice, not approval: record only the human's selected/confirmed answer. If the human asks for no recommendation on one decision, honor that for that decision only; later questions may still include evidence-backed recommendations.
|
|
26
|
+
|
|
27
|
+
Keep factual/environment-specific values and questions intended to elicit the human's own framing, reasoning, debugging approach, design rationale, or understanding open-ended unless options are later useful as scaffolding.
|
|
24
28
|
|
|
25
29
|
For deployment readiness, inspect existing non-secret configuration before asking setup questions. Show already-known simple machine facts such as hostname/address, deployment user, port, and target OS for confirmation. Ask only for missing or conflicting facts. Keep deployment-tool implementation identifiers such as logical target names, `targetName`, SSH aliases, profile paths, and trust-file paths internal unless troubleshooting or genuine ambiguity requires them.
|
|
26
30
|
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Project Forge Application Versioning
|
|
2
|
+
|
|
3
|
+
Every Project Forge application must implement a real runtime version identity. A static label that never changes across builds is not sufficient.
|
|
4
|
+
|
|
5
|
+
## Contract
|
|
6
|
+
|
|
7
|
+
Application versioning has two layers:
|
|
8
|
+
|
|
9
|
+
1. **release version** — a deliberate Semantic Version such as `0.1.0` or `1.0.0`;
|
|
10
|
+
2. **build identity** — automatically derived evidence that identifies the exact built artifact.
|
|
11
|
+
|
|
12
|
+
The normal human-readable form is intentionally simple:
|
|
13
|
+
|
|
14
|
+
```text
|
|
15
|
+
v1.0.0 (build 142)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
The machine/informational form may carry richer provenance:
|
|
19
|
+
|
|
20
|
+
```text
|
|
21
|
+
1.0.0+build.142.sha.a1b2c3d
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
A build record should expose equivalent fields when available:
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
releaseVersion: 1.0.0
|
|
28
|
+
buildNumber: 142
|
|
29
|
+
commit: a1b2c3d
|
|
30
|
+
builtAtUtc: 2026-10-21T20:15:00Z
|
|
31
|
+
informationalVersion: 1.0.0+build.142.sha.a1b2c3d
|
|
32
|
+
displayVersion: v1.0.0 (build 142)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Release version
|
|
36
|
+
|
|
37
|
+
Use Semantic Versioning (`MAJOR.MINOR.PATCH`) for the application release version.
|
|
38
|
+
|
|
39
|
+
Recommended default for a new project under active development:
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
0.1.0
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Promote deliberately. The first accepted V1 release may become `1.0.0`; later major/minor/patch changes follow the project's release policy.
|
|
46
|
+
|
|
47
|
+
The release version is expected to remain stable across multiple development builds. It must not be bumped merely to create a unique build identity.
|
|
48
|
+
|
|
49
|
+
Use one stack-native authoritative source for the release version. Do not maintain unrelated duplicated constants or decorative `VERSION.md` values that can drift from the built application.
|
|
50
|
+
|
|
51
|
+
## Build identity
|
|
52
|
+
|
|
53
|
+
A releasable CI-built artifact must receive an automatically derived build identity.
|
|
54
|
+
|
|
55
|
+
Preferred evidence:
|
|
56
|
+
|
|
57
|
+
- monotonically increasing CI/build sequence number;
|
|
58
|
+
- exact source commit, with a short commit acceptable for display and the full commit retained in machine evidence when practical;
|
|
59
|
+
- UTC build timestamp as supplemental evidence.
|
|
60
|
+
|
|
61
|
+
The canonical informational form is conceptually:
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
<releaseVersion>+build.<buildNumber>.sha.<shortCommit>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
A timestamp may be appended as metadata, but a date alone should not replace a sequencing value when the build system can provide a monotonic run/build number.
|
|
68
|
+
|
|
69
|
+
For local developer builds where no CI build number exists, use an explicitly non-release identity such as:
|
|
70
|
+
|
|
71
|
+
```text
|
|
72
|
+
0.1.0+local.20261021T201500Z.sha.a1b2c3d
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Do not invent a CI/release build number for a local build.
|
|
76
|
+
|
|
77
|
+
## Runtime exposure
|
|
78
|
+
|
|
79
|
+
The running application must make its effective version identity observable.
|
|
80
|
+
|
|
81
|
+
For applications with a user interface, expose a concise human-readable value in an appropriate low-noise surface such as About, Settings, diagnostics, or a footer:
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
v1.0.0 (build 142)
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Also provide machine-readable or diagnostic evidence when the stack/application shape supports it, for example:
|
|
88
|
+
|
|
89
|
+
- a version/info endpoint;
|
|
90
|
+
- CLI `--version` output;
|
|
91
|
+
- startup diagnostic metadata;
|
|
92
|
+
- an application metadata object consumed by the UI.
|
|
93
|
+
|
|
94
|
+
The display must be derived from the same build identity as the machine evidence rather than maintained as a separate hard-coded string.
|
|
95
|
+
|
|
96
|
+
## Stack-specific implementation
|
|
97
|
+
|
|
98
|
+
The contract is stack-independent; the implementation is not.
|
|
99
|
+
|
|
100
|
+
Examples of appropriate stack-native sources include:
|
|
101
|
+
|
|
102
|
+
- .NET/Blazor/ASP.NET: project/package version plus assembly/informational version metadata;
|
|
103
|
+
- Node/React/Angular: package/project version plus build-time injected CI/commit metadata;
|
|
104
|
+
- Java/Spring: Maven/Gradle project version plus generated build metadata/resources.
|
|
105
|
+
|
|
106
|
+
These examples are implementation guidance, not a fixed technology requirement. Prefer the repository's native build/package mechanism.
|
|
107
|
+
|
|
108
|
+
## Build and run helpers
|
|
109
|
+
|
|
110
|
+
`/build` should report the effective release/build identity when the selected build produces or exposes it.
|
|
111
|
+
|
|
112
|
+
`/run` should report the effective runtime version when the started application exposes it.
|
|
113
|
+
|
|
114
|
+
Neither helper should invent version information or mutate release version state merely to make version evidence appear.
|
|
115
|
+
|
|
116
|
+
## Delivery and deployment
|
|
117
|
+
|
|
118
|
+
A deployable artifact should be traceable to one version identity and one source commit. Deployment evidence may record the version/build identity, but deployment must not silently rewrite it.
|
|
119
|
+
|
|
120
|
+
A release tag, GitHub release, package version, container tag, or deployment label does not substitute for runtime application version evidence unless the built application actually consumes that same authoritative version metadata.
|
|
121
|
+
|
|
122
|
+
## Replatforming
|
|
123
|
+
|
|
124
|
+
Application versioning is a reusable engineering requirement, not a portable product requirement.
|
|
125
|
+
|
|
126
|
+
`PROJECT_REQUIREMENTS.json` therefore does not need to encode stack-specific version mechanics. A replatformed project must receive the current Project Forge application-versioning contract and implement it using the target stack's native facilities.
|
|
127
|
+
|
|
128
|
+
## Acceptance
|
|
129
|
+
|
|
130
|
+
Application foundation is not complete until:
|
|
131
|
+
|
|
132
|
+
- one authoritative release version source exists;
|
|
133
|
+
- a build can derive a unique build identity without manually editing display text;
|
|
134
|
+
- the source commit is traceable from build evidence;
|
|
135
|
+
- a running application exposes the effective version in an appropriate human-readable form;
|
|
136
|
+
- release/CI builds use a real sequencing value when the CI system provides one;
|
|
137
|
+
- local builds are clearly distinguishable from release/CI builds.
|
|
@@ -11,18 +11,34 @@ CURRENT STATE
|
|
|
11
11
|
RECOMMENDED NEXT STEP
|
|
12
12
|
<one action and why>
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
CHOICES
|
|
15
|
+
<only the relevant bounded actions, rendered through host structured choice UI when available>
|
|
16
|
+
|
|
17
|
+
RECOMMENDED PATH
|
|
18
|
+
<only when multiple future steps are useful>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
For the current choice, follow `INTERACTIVE_SESSION_GUIDE.md`:
|
|
22
|
+
|
|
23
|
+
- use the host's structured choice UI when available; in VS Code use the native question surface such as `vscode_askQuestions`;
|
|
24
|
+
- action menus are normally **single-select** because the developer is choosing one next action;
|
|
25
|
+
- use multi-select only when the workflow explicitly permits several simultaneous selections;
|
|
26
|
+
- make the recommended choice visible when evidence supports one;
|
|
27
|
+
- include `Other / specify` or free-text when the action space may be incomplete;
|
|
28
|
+
- keep genuinely open-ended questions open-ended.
|
|
29
|
+
|
|
30
|
+
A textual numbered menu is only the documented fallback when no structured choice UI is available. Fallback shape:
|
|
31
|
+
|
|
32
|
+
```text
|
|
33
|
+
OPTIONS — TEXT FALLBACK ONLY
|
|
15
34
|
1. ... [READ ONLY]
|
|
16
35
|
2. ... [MODIFIES DOCS]
|
|
17
36
|
3. ... [MODIFIES FILES]
|
|
18
37
|
4. ... [GIT + GITHUB WRITE]
|
|
19
38
|
5. Stop [NO ACTION]
|
|
20
|
-
|
|
21
|
-
RECOMMENDED PATH
|
|
22
|
-
<only when multiple future steps are useful>
|
|
23
39
|
```
|
|
24
40
|
|
|
25
|
-
Show only relevant
|
|
41
|
+
Show only relevant choices.
|
|
26
42
|
|
|
27
43
|
Standard action labels include:
|
|
28
44
|
|
|
@@ -41,7 +57,7 @@ Standard action labels include:
|
|
|
41
57
|
[NO ACTION]
|
|
42
58
|
```
|
|
43
59
|
|
|
44
|
-
A selected
|
|
60
|
+
A selected choice authorizes only the bounded action described, except where a skill explicitly defines a continuous session or compound mechanical action.
|
|
45
61
|
|
|
46
62
|
A manually invoked compound action skill may itself be the bounded authorization for its routine mechanics. `/deliver`, for example, may proceed through safe short-lived-branch setup/recovery, staging, commit, push, PR creation/update, and CI inspection without inserting separate options for each mechanical step. It still stops at its explicit merge/finalize gate and whenever evidence becomes ambiguous or unsafe.
|
|
47
63
|
|
|
@@ -27,12 +27,42 @@ Choose the question shape based on what the interaction is trying to learn or de
|
|
|
27
27
|
When a material question has a reasonable bounded answer space and the human is choosing or confirming a decision, prefer a concise choice-first presentation:
|
|
28
28
|
|
|
29
29
|
- offer a small set of plausible choices, normally 3-6;
|
|
30
|
-
- mark a materially preferred option as `RECOMMENDED` when current evidence or repository guidance justifies it;
|
|
31
30
|
- include `Other / specify` when the choices are not exhaustive;
|
|
32
31
|
- include `Not sure — recommend one` when the human can reasonably delegate the choice;
|
|
33
32
|
- accept a choice label/text or a free-form answer;
|
|
34
33
|
- treat choices as interaction aids, not additional requirements.
|
|
35
34
|
|
|
35
|
+
### Host-native structured choice UI
|
|
36
|
+
|
|
37
|
+
When the current host exposes a structured question/choice UI, use it for bounded choices instead of rendering a plain numbered chat menu. In VS Code, use the native question surface exposed by the host, such as `vscode_askQuestions` when available.
|
|
38
|
+
|
|
39
|
+
Presentation rules:
|
|
40
|
+
|
|
41
|
+
- use **single-select** when the choices are mutually exclusive or one action is being authorized;
|
|
42
|
+
- use **multi-select** only when selecting several choices at the same time is semantically valid;
|
|
43
|
+
- preserve one-material-question-at-a-time cadence whenever practical even if the host can batch questions;
|
|
44
|
+
- keep consequence/action labels such as `[READ ONLY]`, `[REQUIREMENTS GATE]`, or `[GIT + GITHUB WRITE]` visible when they matter to authorization;
|
|
45
|
+
- 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;
|
|
46
|
+
- accept equivalent free-text answers even when a structured selector is shown, unless the host UI itself requires a selection;
|
|
47
|
+
- map the returned structured value to the same semantic choice the workflow would have accepted by label/text.
|
|
48
|
+
|
|
49
|
+
### Recommendations inside choices
|
|
50
|
+
|
|
51
|
+
A recommendation is optional advice, not a required field and not an accepted decision.
|
|
52
|
+
|
|
53
|
+
- mark **exactly one** choice as `RECOMMENDED` only when current evidence, repository policy, or a clear engineering tradeoff supports it;
|
|
54
|
+
- use the host's `recommended` indicator/metadata when available and add a brief rationale in the choice description or surrounding prompt;
|
|
55
|
+
- do not mark multiple choices recommended;
|
|
56
|
+
- do not invent a preference merely to populate recommendation metadata;
|
|
57
|
+
- when no option is clearly better, present the choices with **no recommendation**;
|
|
58
|
+
- if the human asks for no recommendation on a specific decision, omit the recommendation for that question only; later questions may still include evidence-backed recommendations;
|
|
59
|
+
- the human may select a different option or answer free-form;
|
|
60
|
+
- record only the human's selected/confirmed answer as the requirement, action, or decision. Never record the recommendation itself as accepted state.
|
|
61
|
+
|
|
62
|
+
A structured selector is presentation, not extra authorization. Selecting a choice authorizes only the action/session that the workflow says that choice authorizes.
|
|
63
|
+
|
|
64
|
+
When the host has no structured question UI, use a concise textual fallback. A numbered list is acceptable **only as this fallback**; keep the same labels/recommendation/consequence tags and accept the number, label, or a free-form answer. Do not use a plain numbered list as the normal VS Code interaction when native structured choice UI is available.
|
|
65
|
+
|
|
36
66
|
Keep questions open-ended when predefined choices would weaken the purpose of the interaction. This includes:
|
|
37
67
|
|
|
38
68
|
- user-authored problem/outcome/workflow framing where the human's own wording matters;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# Project Forge Operation Journal
|
|
2
|
+
|
|
3
|
+
Project Forge uses local operation journals to preserve durable, workstation-local evidence for consequential deterministic operations without turning normal read-only guidance into noisy state.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
An operation journal answers:
|
|
8
|
+
|
|
9
|
+
- what deterministic operation ran;
|
|
10
|
+
- when it started and finished;
|
|
11
|
+
- which workspace/platform/provenance it used;
|
|
12
|
+
- which bounded steps ran and their outcomes;
|
|
13
|
+
- where a failure occurred;
|
|
14
|
+
- what final status was reached.
|
|
15
|
+
|
|
16
|
+
The journal is diagnostic evidence. It is not a second workflow database and it does not replace Git, GitHub, CI, deployment state, or human acceptance.
|
|
17
|
+
|
|
18
|
+
## Location
|
|
19
|
+
|
|
20
|
+
Store local journals under the ignored Project Forge cache:
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
.project-forge/
|
|
24
|
+
logs/
|
|
25
|
+
<operation>/
|
|
26
|
+
<timestamp>-<run-id>.log
|
|
27
|
+
latest.log
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Examples:
|
|
31
|
+
|
|
32
|
+
```text
|
|
33
|
+
.project-forge/logs/setup/2026-10-20T190523-0700-18432.log
|
|
34
|
+
.project-forge/logs/build/...
|
|
35
|
+
.project-forge/logs/run/...
|
|
36
|
+
.project-forge/logs/project-forge-update/...
|
|
37
|
+
.project-forge/logs/deployment-readiness/...
|
|
38
|
+
.project-forge/logs/deploy/...
|
|
39
|
+
.project-forge/logs/tear-down/...
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
`latest.log` may be a copied summary/current run for convenience. Implementations must not depend on symlink support.
|
|
43
|
+
|
|
44
|
+
Operation journals are workstation-local and must remain ignored by Git. They are never part of `CORE_BASELINE.json`, `PROJECT_FORGE_BASELINE.json`, or application provenance.
|
|
45
|
+
|
|
46
|
+
## Operations that should journal
|
|
47
|
+
|
|
48
|
+
Journal deterministic operations when durable local diagnostics materially help:
|
|
49
|
+
|
|
50
|
+
- `/setup` and repository-local setup/doctor execution;
|
|
51
|
+
- `/build` when build diagnostics/artifact evidence are useful;
|
|
52
|
+
- `/run` as a concise startup/health receipt when useful, not as an unbounded application log sink;
|
|
53
|
+
- `/project-forge-update` apply/verification work;
|
|
54
|
+
- `/developer-env-mode` when it mutates or converges local runtime state;
|
|
55
|
+
- `/deployment-readiness` when it performs preparation or repair;
|
|
56
|
+
- environment proof operations;
|
|
57
|
+
- `/deploy` and `/tear-down`;
|
|
58
|
+
- other bounded deterministic operations that mutate workstation or remote environment state.
|
|
59
|
+
|
|
60
|
+
`/deliver` may write a concise local receipt, but Git commits, PRs, CI, and merge history remain its authoritative durable evidence.
|
|
61
|
+
|
|
62
|
+
Read-only orientation normally does **not** create a journal:
|
|
63
|
+
|
|
64
|
+
- `/progress`;
|
|
65
|
+
- `/next-step`;
|
|
66
|
+
- `/wait-what`;
|
|
67
|
+
- read-only documentation/learning navigation;
|
|
68
|
+
- read-only status checks unless a caller explicitly requests troubleshooting evidence.
|
|
69
|
+
|
|
70
|
+
Remote GitHub Actions already retain their own workflow logs. Do not duplicate complete remote logs locally; record only the local request/provenance/result receipt when useful.
|
|
71
|
+
|
|
72
|
+
## Minimum record
|
|
73
|
+
|
|
74
|
+
A journal should capture, when available:
|
|
75
|
+
|
|
76
|
+
```text
|
|
77
|
+
operation
|
|
78
|
+
run identifier
|
|
79
|
+
started/finished timestamps
|
|
80
|
+
workspace root or project identity
|
|
81
|
+
platform/architecture
|
|
82
|
+
relevant Project Forge/Core/Bootstrap/Deployment provenance
|
|
83
|
+
step name
|
|
84
|
+
step status
|
|
85
|
+
resolved tool/version evidence
|
|
86
|
+
sanitized command identity
|
|
87
|
+
exit code
|
|
88
|
+
sanitized failure summary
|
|
89
|
+
final status
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
For `/build`, include the requested target and explicit artifact/output paths when the repository build contract establishes them.
|
|
93
|
+
|
|
94
|
+
For `/run`, record only bounded startup evidence such as target, command identity, process/startup result, established local endpoint/health result, and stop guidance. Do not continuously tee long-running application output into the Project Forge journal.
|
|
95
|
+
|
|
96
|
+
Prefer stable event names and compact machine-readable fields inside a human-readable `.log`. JSON Lines is acceptable when the implementation already uses structured events.
|
|
97
|
+
|
|
98
|
+
At completion, report the journal path to the developer when the operation was consequential or when diagnostics were produced.
|
|
99
|
+
|
|
100
|
+
## Security and privacy boundary
|
|
101
|
+
|
|
102
|
+
Operation journals are diagnostic artifacts, not raw transcripts.
|
|
103
|
+
|
|
104
|
+
Never log:
|
|
105
|
+
|
|
106
|
+
- passwords, PATs, API keys, access tokens, private SSH keys, or secret values;
|
|
107
|
+
- credential-manager contents;
|
|
108
|
+
- full process environment dumps;
|
|
109
|
+
- request/response bodies that may contain credentials;
|
|
110
|
+
- arbitrary stdin or secure-prompt contents;
|
|
111
|
+
- known-host private material or mutable application data merely for convenience.
|
|
112
|
+
|
|
113
|
+
Prefer allowlisted structured fields over blind stdout/stderr capture.
|
|
114
|
+
|
|
115
|
+
When command arguments or error text may contain secrets, redact before writing. Implementations should log a command identity such as executable + safe arguments, step name, return code, and a bounded sanitized failure summary rather than blindly teeing every subprocess byte.
|
|
116
|
+
|
|
117
|
+
A local journal must not weaken an existing secure prompt, credential boundary, or Human-in-the-Loop gate.
|
|
118
|
+
|
|
119
|
+
## Lifecycle
|
|
120
|
+
|
|
121
|
+
For a mutating deterministic operation:
|
|
122
|
+
|
|
123
|
+
1. create the journal before the first material mutation;
|
|
124
|
+
2. record operation/provenance preflight;
|
|
125
|
+
3. append bounded step outcomes as work proceeds;
|
|
126
|
+
4. flush useful failure evidence before returning/raising;
|
|
127
|
+
5. record one final state such as `READY`, `SUCCESS`, `DEFERRED`, `BLOCKED`, `FAILED`, or a domain-specific equivalent;
|
|
128
|
+
6. refresh `latest.log` only after the run has a coherent record.
|
|
129
|
+
|
|
130
|
+
A failed operation keeps its timestamped journal. Do not erase failure evidence merely because a later retry succeeds.
|
|
131
|
+
|
|
132
|
+
## Retention
|
|
133
|
+
|
|
134
|
+
Journals are disposable local diagnostics. Project Forge may prune old logs using a conservative size/count policy, but must preserve the current run while it is active and should retain enough recent history to diagnose repeated failures.
|
|
135
|
+
|
|
136
|
+
Do not silently upload operation journals to GitHub, ChatGPT, telemetry, or another machine. A developer may explicitly choose to share a relevant sanitized excerpt when troubleshooting.
|
|
137
|
+
|
|
138
|
+
## Relationship to human acceptance
|
|
139
|
+
|
|
140
|
+
A successful journal entry is machine evidence only. It never marks editor/workspace acceptance, meaningful-diff acceptance, merge authorization, release publication, or production deployment approval on the human's behalf.
|