@mriekki/project-forge 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/assets/components.json +3 -3
  2. package/assets/core/distribution.json +7 -0
  3. package/assets/generated/ASSEMBLY.json +55 -20
  4. package/assets/generated/core/core/agents/reviewer.agent.md +1 -1
  5. package/assets/generated/core/core/instructions/project-forge-workflow.instructions.md +5 -1
  6. package/assets/generated/core/core/process/APPLICATION_VERSIONING.md +137 -0
  7. package/assets/generated/core/core/process/GUIDED_NEXT_STEPS.md +22 -6
  8. package/assets/generated/core/core/process/INTERACTIVE_SESSION_GUIDE.md +31 -1
  9. package/assets/generated/core/core/process/OPERATION_JOURNAL.md +140 -0
  10. package/assets/generated/core/core/process/PROJECT_REQUIREMENTS_EXPORT.md +165 -0
  11. package/assets/generated/core/core/skills/build/SKILL.md +70 -0
  12. package/assets/generated/core/core/skills/cleanup-branches/SKILL.md +6 -10
  13. package/assets/generated/core/core/skills/code-walkthrough/SKILL.md +12 -8
  14. package/assets/generated/core/core/skills/core-sync/SKILL.md +17 -11
  15. package/assets/generated/core/core/skills/define-feature/SKILL.md +9 -18
  16. package/assets/generated/core/core/skills/deliver/SKILL.md +12 -8
  17. package/assets/generated/core/core/skills/deploy/SKILL.md +2 -2
  18. package/assets/generated/core/core/skills/export-requirements/SKILL.md +132 -0
  19. package/assets/generated/core/core/skills/grill-with-docs/SKILL.md +6 -8
  20. package/assets/generated/core/core/skills/next-step/SKILL.md +10 -11
  21. package/assets/generated/core/core/skills/project-forge-update/SKILL.md +10 -6
  22. package/assets/generated/core/core/skills/pull-latest/SKILL.md +16 -10
  23. package/assets/generated/core/core/skills/refine-requirements/SKILL.md +37 -16
  24. package/assets/generated/core/core/skills/replatform/SKILL.md +122 -0
  25. package/assets/generated/core/core/skills/run/SKILL.md +75 -0
  26. package/assets/generated/core/core/skills/setup/SKILL.md +20 -17
  27. package/assets/generated/core/core/skills/start-work/SKILL.md +11 -9
  28. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "package": "@mriekki/project-forge",
4
- "version": "2.0.0",
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": "80ff581ec89533f5a22bd05c65c7b67bb314c715",
18
- "version": "3.0.0",
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.0.0",
4
+ "version": "2.2.0",
5
5
  "components": {
6
6
  "core": {
7
7
  "repository": "mriekki/project-forge-core",
8
- "commit": "80ff581ec89533f5a22bd05c65c7b67bb314c715",
9
- "version": "3.0.0",
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": "ad00d8d0fad932687a8c7372e70993ba0f40f3f763a8b41fd9b6ee03a9a70df0"
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": "1cd1677a5692d00c252a3b38a07e7ae1b70edc0bd23436b8c2c424efb62217e1"
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": "1efa4c18d41deb4b26f132d440d881310864f8b0d37423d6b23431efeedb2e78"
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": "c2c24089f5f5437de1702777dc60e794e26a1a0919eba7e39c32d137fdf23471"
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": "70ee4dcf4fd3568c835428dae4b2a830604793d3d486e1c903c26e100fab6e64"
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": "edc58cdd20c3401ee20a725e18063e604830396f6b88f9bf2555b3f043362c7f"
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": "e700e914afc291ffb1153bb796a8ef150c624c5b54032e29d3abda221260285f"
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": "68c05ad11f9c9fad7b0bc122995ca259fd54c523cb1fa5ac0e105ae523ef9d86"
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": "ffe9dbc862f83828b3acd8f8bf49ea912b7998dc0c844655bf83dfafcf7f4434"
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": "99b082f5a6eb183161bc6dc2f40e383e744a4443e6e3c56615ca9d010845eaf8"
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": "ca7dc6669c6eb81fd3a7961dc123cc9822fcccb7da3e86e3391f5f92b15fe093"
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": "70170e57a77f143c719a8c349161c580e339397e782d28133d9f3734f6625847"
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": "97accdf58527f51c0e5f5b8e6a75468d9d687bc2c07dcd9ab6ff1bef9f103c58"
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": "7bacd366014bf8c890328ec2b78412a39a0abff2f6b44dd53ca129102a7a30c8"
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": "0391f98dac6dfd41882c330425567ae595fde01fce63de521563c95647d2b889"
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": "3a6ec8523fdb1c4f4e357b13fc712bd7f732ea9cd25754ae4f8c84fb438f2452"
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": "15d47509919e83786ada6df1e5482bd9f73ca4955cda66287f6d6b1f9722c853"
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 OPTIONS menu. Reviewer itself does not commit, push, create/merge PRs, or deploy.
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. 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.
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
- OPTIONS
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 options.
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 option authorizes only the bounded action described, except where a skill explicitly defines a continuous session or compound mechanical action.
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.