@mriekki/project-forge 2.0.0 → 2.1.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 +38 -3
- package/assets/generated/core/core/process/APPLICATION_VERSIONING.md +137 -0
- 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/export-requirements/SKILL.md +132 -0
- package/assets/generated/core/core/skills/replatform/SKILL.md +122 -0
- package/assets/generated/core/core/skills/run/SKILL.md +75 -0
- 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.1.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": "fd071b9516cb40093f30be41ab695139eb16bb4c",
|
|
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.1.0",
|
|
5
5
|
"components": {
|
|
6
6
|
"core": {
|
|
7
7
|
"repository": "mriekki/project-forge-core",
|
|
8
|
-
"commit": "
|
|
9
|
-
"version": "3.
|
|
8
|
+
"commit": "fd071b9516cb40093f30be41ab695139eb16bb4c",
|
|
9
|
+
"version": "3.3.0",
|
|
10
10
|
"distribution": "greenfield-workspace",
|
|
11
11
|
"files": [
|
|
12
12
|
{
|
|
@@ -64,6 +64,26 @@
|
|
|
64
64
|
"destination": ".github/skills/setup/SKILL.md",
|
|
65
65
|
"sha256": "e700e914afc291ffb1153bb796a8ef150c624c5b54032e29d3abda221260285f"
|
|
66
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"
|
|
86
|
+
},
|
|
67
87
|
{
|
|
68
88
|
"source": "core/skills/progress/SKILL.md",
|
|
69
89
|
"destination": ".github/skills/progress/SKILL.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",
|
|
@@ -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.
|
|
@@ -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.
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# Project Requirements Export
|
|
2
|
+
|
|
3
|
+
`PROJECT_REQUIREMENTS.json` is the canonical portable Project Forge interchange artifact for durable product, domain, experience, roadmap, and approved cross-cutting intent.
|
|
4
|
+
|
|
5
|
+
It exists to support workflows such as replatforming the same product onto a different implementation stack without treating the source repository's framework/tool choices as product requirements.
|
|
6
|
+
|
|
7
|
+
## Authority
|
|
8
|
+
|
|
9
|
+
The JSON file is a **derived export**, not a competing source of truth.
|
|
10
|
+
|
|
11
|
+
Repository authorities continue to own their facts. In a normal generated workspace that commonly means:
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
docs/product/PRODUCT_BRIEF.md
|
|
15
|
+
→ docs/work-items/<FB-...>/brief.md
|
|
16
|
+
→ approved requirements.md when present
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Additional product/domain authorities may include roadmap, system-design/domain invariants, product-level design/accessibility guidance, accepted ADR consequences, and project-owned decisions.
|
|
20
|
+
|
|
21
|
+
The export must retain source paths/authority/provenance so a consumer can trace normalized facts back to their repository authorities.
|
|
22
|
+
|
|
23
|
+
## Canonical filename and state
|
|
24
|
+
|
|
25
|
+
Only this filename is canonical:
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
PROJECT_REQUIREMENTS.json
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The contract has no compatibility alias or alternate export filename.
|
|
32
|
+
|
|
33
|
+
State is explicit:
|
|
34
|
+
|
|
35
|
+
```text
|
|
36
|
+
draft
|
|
37
|
+
review
|
|
38
|
+
approved
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Only `approved` may be consumed as replatform input.
|
|
42
|
+
|
|
43
|
+
## Portable content model
|
|
44
|
+
|
|
45
|
+
The export should represent, when present:
|
|
46
|
+
|
|
47
|
+
- project/product identity;
|
|
48
|
+
- problem, users/stakeholders, desired outcomes, scope/non-scope;
|
|
49
|
+
- product workflows/capabilities and success measures;
|
|
50
|
+
- Feature Briefs with source ID, title, target milestone, target disposition, authority/status/maturity, outcomes, scope/non-scope, workflows, business/domain rules, dependencies, acceptance criteria, learning objectives, and open questions;
|
|
51
|
+
- domain concepts and relationships;
|
|
52
|
+
- domain invariants, lifecycle/state semantics, and business rules;
|
|
53
|
+
- cross-cutting security/privacy, accessibility, reliability, performance, and data requirements;
|
|
54
|
+
- portable product/UX principles, responsive constraints, and interaction intent;
|
|
55
|
+
- roadmap milestones/sequencing facts that express product intent;
|
|
56
|
+
- accepted decisions whose consequences are portable;
|
|
57
|
+
- explicit learning intent/future ideas while preserving their non-authorizing maturity;
|
|
58
|
+
- exact source repository/commit and contributing artifact paths.
|
|
59
|
+
|
|
60
|
+
## Product Brief model
|
|
61
|
+
|
|
62
|
+
Project Forge generated workspaces currently use one canonical product authority:
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
docs/product/PRODUCT_BRIEF.md
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
The export therefore uses one normalized `product` object rather than inventing a multi-Product-Brief hierarchy.
|
|
69
|
+
|
|
70
|
+
If a non-generated/adopted workspace declares a different authority model, export only what that model actually establishes. Do not manufacture a second Product Brief merely to fit Project Forge defaults.
|
|
71
|
+
|
|
72
|
+
## Work-item maturity
|
|
73
|
+
|
|
74
|
+
Preserve maturity exactly.
|
|
75
|
+
|
|
76
|
+
Typical generated-project semantics include:
|
|
77
|
+
|
|
78
|
+
```text
|
|
79
|
+
V1 + committed
|
|
80
|
+
V2 + planned
|
|
81
|
+
V3 + directional
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Presence in `PROJECT_REQUIREMENTS.json` is never implementation authorization. A roadmap Feature remains roadmap/directional until separately promoted through the normal requirements/work-item process.
|
|
85
|
+
|
|
86
|
+
## Engineering Enablers
|
|
87
|
+
|
|
88
|
+
Engineering Enablers are usually implementation-specific and are not portable product requirements.
|
|
89
|
+
|
|
90
|
+
The export may retain an enabler in source traceability when it establishes a durable cross-cutting requirement, but replatforming normally re-derives stack-specific enablers rather than copying their IDs/scope.
|
|
91
|
+
|
|
92
|
+
Examples:
|
|
93
|
+
|
|
94
|
+
```text
|
|
95
|
+
PRESERVE: secure individual authentication is required for remote internet use
|
|
96
|
+
RE-DERIVE: configure ASP.NET authentication middleware
|
|
97
|
+
|
|
98
|
+
PRESERVE: database schema changes must be reproducible and controlled
|
|
99
|
+
RE-DERIVE: use EF Core migrations
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Mixed authorities
|
|
103
|
+
|
|
104
|
+
Some documents mix durable intent with implementation choices. Treat these as classification inputs rather than all-or-nothing copies.
|
|
105
|
+
|
|
106
|
+
Examples:
|
|
107
|
+
|
|
108
|
+
- a Project Blueprint may contain product/domain facts plus current technology baseline;
|
|
109
|
+
- a System Design may contain portable domain invariants plus React/.NET/SQLite topology;
|
|
110
|
+
- a UX pattern may contain portable interaction behavior plus component-library details;
|
|
111
|
+
- an ADR may establish both a product/security consequence and a stack-specific mechanism.
|
|
112
|
+
|
|
113
|
+
Extract the portable fact, retain source traceability, and exclude/reconcile the mechanism.
|
|
114
|
+
|
|
115
|
+
## Exclusions
|
|
116
|
+
|
|
117
|
+
Do not export as portable requirements unless the repository explicitly makes them true product constraints:
|
|
118
|
+
|
|
119
|
+
- programming languages/frameworks/component libraries;
|
|
120
|
+
- ORMs, package managers, build tools, test runners;
|
|
121
|
+
- repository/project directory layouts;
|
|
122
|
+
- generated client/tooling mechanisms;
|
|
123
|
+
- CI implementation commands;
|
|
124
|
+
- current deployment host/provider bindings;
|
|
125
|
+
- secrets/credentials/private runtime values;
|
|
126
|
+
- application source code;
|
|
127
|
+
- work-item plans/review/delivery history;
|
|
128
|
+
- Git/PR/CI evidence;
|
|
129
|
+
- Project Forge/Core/Bootstrap baseline state.
|
|
130
|
+
|
|
131
|
+
## Replatform relationship
|
|
132
|
+
|
|
133
|
+
The canonical flow is:
|
|
134
|
+
|
|
135
|
+
```text
|
|
136
|
+
project authorities
|
|
137
|
+
→ /export-requirements
|
|
138
|
+
→ PROJECT_REQUIREMENTS.json state=review
|
|
139
|
+
→ human approval
|
|
140
|
+
→ PROJECT_REQUIREMENTS.json state=approved
|
|
141
|
+
→ /replatform <target-stack>
|
|
142
|
+
→ current Bootstrap catalog reconciliation
|
|
143
|
+
→ PROJECT_BOOTSTRAP.json state=review
|
|
144
|
+
→ human Bootstrap approval
|
|
145
|
+
→ deterministic generation into a new repository
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
`PROJECT_BOOTSTRAP.json` remains the generation/provenance contract for one implementation. `PROJECT_REQUIREMENTS.json` remains the portable product/domain interchange contract.
|
|
149
|
+
|
|
150
|
+
## No in-place replatforming
|
|
151
|
+
|
|
152
|
+
Replatforming creates a sibling/new implementation repository. It never rewrites the source application in place.
|
|
153
|
+
|
|
154
|
+
This preserves historical truth and allows multiple implementations of the same product intent to coexist, such as:
|
|
155
|
+
|
|
156
|
+
```text
|
|
157
|
+
Family Meal Planner requirements
|
|
158
|
+
├── React + ASP.NET Core implementation
|
|
159
|
+
├── Angular + Spring Boot implementation
|
|
160
|
+
└── Blazor + ASP.NET Core implementation
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Security
|
|
164
|
+
|
|
165
|
+
The export must not contain secrets, credentials, private keys, access tokens, production data, machine-local bindings, or arbitrary runtime/log transcripts.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: build
|
|
3
|
+
description: "Build the current project through its repository-owned build command without turning local compilation into setup, testing, delivery, or deployment."
|
|
4
|
+
argument-hint: "[target|all]"
|
|
5
|
+
user-invocable: true
|
|
6
|
+
disable-model-invocation: true
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Build
|
|
10
|
+
|
|
11
|
+
`/build` is a thin local helper. It hides framework-specific command details while preserving the repository as the authority for how the project builds.
|
|
12
|
+
|
|
13
|
+
## Contract
|
|
14
|
+
|
|
15
|
+
Invoking `/build` authorizes one bounded local build attempt for the requested target. It does not authorize setup, dependency upgrades, source edits, delivery, release publication, deployment, or Production access.
|
|
16
|
+
|
|
17
|
+
Resolve the build command from current repository evidence in this order:
|
|
18
|
+
|
|
19
|
+
1. an explicit repository-owned build wrapper or documented build command;
|
|
20
|
+
2. an explicit package/task script whose purpose is build;
|
|
21
|
+
3. an unambiguous ecosystem-native build entry point already present in the repository.
|
|
22
|
+
|
|
23
|
+
Do not invent a command because a framework is recognizable. If multiple materially different build targets exist and no default is documented, require a target such as `/build web`, `/build api`, or `/build all`.
|
|
24
|
+
|
|
25
|
+
## Preconditions
|
|
26
|
+
|
|
27
|
+
Before execution:
|
|
28
|
+
|
|
29
|
+
- identify the repository root and current Git state;
|
|
30
|
+
- inspect `PROJECT_BOOTSTRAP.json` and scaffold/readiness evidence when present;
|
|
31
|
+
- verify that the selected build entry point exists;
|
|
32
|
+
- do not create an intentionally deferred scaffold merely to make `/build` succeed.
|
|
33
|
+
|
|
34
|
+
If the approved scaffold is deferred or required build markers do not exist, return `BUILD NOT AVAILABLE` with the smallest relevant reason. Do not run installation/scaffolding commands as an implicit repair.
|
|
35
|
+
|
|
36
|
+
If dependencies or workstation tools are missing, recommend `/setup` rather than broadening `/build`.
|
|
37
|
+
|
|
38
|
+
## Execution
|
|
39
|
+
|
|
40
|
+
Run the selected build visibly and report:
|
|
41
|
+
|
|
42
|
+
- target;
|
|
43
|
+
- resolved repository-owned command identity;
|
|
44
|
+
- success/failure and exit code when available;
|
|
45
|
+
- produced artifact/output locations when the build contract makes them explicit;
|
|
46
|
+
- effective application release/build identity when the build exposes it;
|
|
47
|
+
- a concise actionable failure summary.
|
|
48
|
+
|
|
49
|
+
Do not add linting, tests, formatting, packaging, container publishing, or code generation unless the repository's selected build command already defines them as part of that build.
|
|
50
|
+
|
|
51
|
+
When the project implements `docs/process/APPLICATION_VERSIONING.md`, report observed version evidence from the build output/artifact metadata. Do not synthesize a build number, commit, or display version when the repository did not produce it.
|
|
52
|
+
|
|
53
|
+
## Operation journal
|
|
54
|
+
|
|
55
|
+
A consequential build may write a concise sanitized journal under `.project-forge/logs/build/` following `docs/process/OPERATION_JOURNAL.md`.
|
|
56
|
+
|
|
57
|
+
Record the command identity, target, timestamps, exit status, explicit artifact paths, and observed application version/build identity when available. Do not blindly capture unlimited compiler/application output or secrets.
|
|
58
|
+
|
|
59
|
+
## Git and lifecycle boundary
|
|
60
|
+
|
|
61
|
+
`/build` must not:
|
|
62
|
+
|
|
63
|
+
- edit source or configuration to fix a build;
|
|
64
|
+
- stage, commit, push, open/update PRs, merge, or clean branches;
|
|
65
|
+
- mark a work item accepted or delivered;
|
|
66
|
+
- bump the application's release version merely to create a unique build;
|
|
67
|
+
- publish a package/image/release;
|
|
68
|
+
- deploy locally or remotely.
|
|
69
|
+
|
|
70
|
+
A successful build is local machine evidence only.
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: export-requirements
|
|
3
|
+
description: "Export the workspace's durable product, domain, UX, roadmap, and approved feature intent into canonical PROJECT_REQUIREMENTS.json without copying stack-specific implementation choices."
|
|
4
|
+
argument-hint: "[review|approve]"
|
|
5
|
+
user-invocable: true
|
|
6
|
+
disable-model-invocation: true
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Export Project Requirements
|
|
10
|
+
|
|
11
|
+
`/export-requirements` creates the portable Project Forge requirements interchange artifact:
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
PROJECT_REQUIREMENTS.json
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
It is a derived export of the workspace's existing authorities. It is not a competing requirements database and it never outranks the source Product Brief, Feature Briefs, approved detailed requirements, accepted product/domain decisions, or other repository authorities.
|
|
18
|
+
|
|
19
|
+
## Purpose
|
|
20
|
+
|
|
21
|
+
Use this export when the same product/system intent should be carried into a new implementation, especially `/replatform`.
|
|
22
|
+
|
|
23
|
+
The export answers:
|
|
24
|
+
|
|
25
|
+
> What must remain true about the product, domain, user experience, roadmap, and accepted cross-cutting behavior independent of this implementation stack?
|
|
26
|
+
|
|
27
|
+
It must not answer:
|
|
28
|
+
|
|
29
|
+
> Which framework, language, ORM, build tool, folder layout, or CI implementation should the next repository use?
|
|
30
|
+
|
|
31
|
+
## Source model
|
|
32
|
+
|
|
33
|
+
Start from the workspace's declared authority model. In a normal generated Project Forge workspace, inspect as applicable:
|
|
34
|
+
|
|
35
|
+
1. `docs/product/PRODUCT_BRIEF.md` as product authority;
|
|
36
|
+
2. `docs/product/IMPLEMENTATION_ROADMAP.md` for milestone/feature maturity and product sequencing facts;
|
|
37
|
+
3. Product Feature folders under `docs/work-items/`, including `brief.md` and approved `requirements.md`;
|
|
38
|
+
4. product/domain portions of architecture or system-design documents;
|
|
39
|
+
5. durable domain concepts, relationships, invariants, and business rules;
|
|
40
|
+
6. product-level design principles, accessibility/responsive requirements, and relevant interaction patterns;
|
|
41
|
+
7. accepted ADRs/decisions that constrain product/domain behavior;
|
|
42
|
+
8. approved cross-cutting security/privacy, reliability, performance, and data requirements;
|
|
43
|
+
9. learning goals/future ideas when they are explicitly part of project intent, preserving their non-authorizing status.
|
|
44
|
+
|
|
45
|
+
Treat summaries such as AI context briefs as reference/navigation unless the repository declares them authoritative.
|
|
46
|
+
|
|
47
|
+
## Preserve authority and maturity
|
|
48
|
+
|
|
49
|
+
Do not flatten roadmap maturity.
|
|
50
|
+
|
|
51
|
+
Preserve distinctions such as:
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
V1 / committed / approved
|
|
55
|
+
V2 / planned / roadmap
|
|
56
|
+
V3 / directional / roadmap
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
A directional Feature remains directional in the export. Exporting it must not promote it into implementation scope.
|
|
60
|
+
|
|
61
|
+
## Classification
|
|
62
|
+
|
|
63
|
+
Classify source material before export.
|
|
64
|
+
|
|
65
|
+
### Preserve
|
|
66
|
+
|
|
67
|
+
Normally portable:
|
|
68
|
+
|
|
69
|
+
- product problem, goals, users, outcomes, scope/non-scope;
|
|
70
|
+
- Feature Brief intent and product dependencies;
|
|
71
|
+
- approved functional/domain requirements and acceptance criteria;
|
|
72
|
+
- domain concepts, relationships, invariants, lifecycle/state semantics, business rules;
|
|
73
|
+
- security/privacy outcomes and constraints;
|
|
74
|
+
- accessibility/responsive/product-experience requirements;
|
|
75
|
+
- product-level design principles and interaction intent;
|
|
76
|
+
- milestone/roadmap target and maturity;
|
|
77
|
+
- learning intent when explicitly part of the project.
|
|
78
|
+
|
|
79
|
+
### Reconcile
|
|
80
|
+
|
|
81
|
+
Require human review when a durable requirement is mixed with implementation detail, for example:
|
|
82
|
+
|
|
83
|
+
- API/persistence semantics expressed using a current framework;
|
|
84
|
+
- architecture documents containing both domain invariants and technology topology;
|
|
85
|
+
- ADRs that combine product consequences with stack choices;
|
|
86
|
+
- UX patterns containing both user behavior and component-library detail.
|
|
87
|
+
|
|
88
|
+
Preserve the durable intent and exclude/rephrase the implementation-specific mechanism.
|
|
89
|
+
|
|
90
|
+
### Exclude / re-derive
|
|
91
|
+
|
|
92
|
+
Do not export as portable requirements:
|
|
93
|
+
|
|
94
|
+
- React, Angular, Blazor, Java, C#, Spring Boot, ASP.NET Core, ORM, package-manager, or build-tool choices unless they are explicitly approved product constraints;
|
|
95
|
+
- source directory/project layout;
|
|
96
|
+
- framework/component-library implementation details;
|
|
97
|
+
- stack-specific Engineering Enablers;
|
|
98
|
+
- CI implementation commands;
|
|
99
|
+
- deployment scripts/bindings/credentials;
|
|
100
|
+
- implementation plans, code, review history, branch/PR/CI evidence;
|
|
101
|
+
- generated Project Forge/Core provenance.
|
|
102
|
+
|
|
103
|
+
## Artifact state and human gate
|
|
104
|
+
|
|
105
|
+
Default `/export-requirements` writes or refreshes `PROJECT_REQUIREMENTS.json` with `state: "review"` and exact source repository/commit provenance.
|
|
106
|
+
|
|
107
|
+
Before calling it approved, present a compact reconciliation summary:
|
|
108
|
+
|
|
109
|
+
```text
|
|
110
|
+
PROJECT REQUIREMENTS EXPORT
|
|
111
|
+
|
|
112
|
+
Preserved product/features: ...
|
|
113
|
+
Preserved domain rules: ...
|
|
114
|
+
Preserved UX/cross-cutting constraints: ...
|
|
115
|
+
Roadmap maturity retained: ...
|
|
116
|
+
Implementation-specific material excluded: ...
|
|
117
|
+
Items requiring reconciliation: ...
|
|
118
|
+
|
|
119
|
+
Approve PROJECT_REQUIREMENTS.json as the portable requirements baseline?
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Only explicit human approval may set `state: "approved"`.
|
|
123
|
+
|
|
124
|
+
`/export-requirements approve` may perform only that bounded finalization after confirming the reviewed content/evidence has not materially changed.
|
|
125
|
+
|
|
126
|
+
## Safety and scope
|
|
127
|
+
|
|
128
|
+
The skill may create/update only `PROJECT_REQUIREMENTS.json` unless the human separately authorizes source-document edits.
|
|
129
|
+
|
|
130
|
+
It must not silently rewrite source Product/Feature Briefs, requirements, architecture, ADRs, roadmap, or design documents to make export easier.
|
|
131
|
+
|
|
132
|
+
Do not export secrets, credentials, production values, personal runtime data, or machine-local bindings.
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: replatform
|
|
3
|
+
description: "Create a new implementation proposal from approved PROJECT_REQUIREMENTS.json and a requested target stack without rewriting the source project in place."
|
|
4
|
+
argument-hint: "<target-stack-or-recipe>"
|
|
5
|
+
user-invocable: true
|
|
6
|
+
disable-model-invocation: true
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Replatform
|
|
10
|
+
|
|
11
|
+
`/replatform` creates a new implementation proposal for the same product/system intent using a different technology stack.
|
|
12
|
+
|
|
13
|
+
It never rewrites the source application in place.
|
|
14
|
+
|
|
15
|
+
## Required input
|
|
16
|
+
|
|
17
|
+
Use only the canonical portable export:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
PROJECT_REQUIREMENTS.json
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
The file must be `state: "approved"`. Do not accept alternate/legacy requirements-export filenames or infer approval from file existence.
|
|
24
|
+
|
|
25
|
+
If the export is missing or stale relative to material source-requirement changes, use `/export-requirements` first.
|
|
26
|
+
|
|
27
|
+
## Target
|
|
28
|
+
|
|
29
|
+
The invocation supplies a target stack or current Bootstrap recipe, for example:
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
/replatform angular java
|
|
33
|
+
/replatform java-angular-sqlite
|
|
34
|
+
/replatform blazor sqlite
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Resolve support against the current canonical Project Forge Bootstrap catalog. General model knowledge may explain an uncataloged technology, but label it `CATALOG GAP` and do not fabricate Bootstrap automation/support.
|
|
38
|
+
|
|
39
|
+
## Output boundary
|
|
40
|
+
|
|
41
|
+
The operation produces a new `PROJECT_BOOTSTRAP.json` proposal with `state: "review"` for a new target repository.
|
|
42
|
+
|
|
43
|
+
It must record derivation provenance back to the approved requirements export/source repository and identify the selected current Bootstrap catalog/protocol and Project Forge package provenance.
|
|
44
|
+
|
|
45
|
+
Do not generate application source or mutate the target repository until the normal Bootstrap manifest review/approval gate is complete.
|
|
46
|
+
|
|
47
|
+
## Reconciliation rules
|
|
48
|
+
|
|
49
|
+
Preserve from the approved requirements export:
|
|
50
|
+
|
|
51
|
+
- product problem/goals/users/outcomes;
|
|
52
|
+
- Product Feature intent and target maturity;
|
|
53
|
+
- approved functional/domain requirements and acceptance criteria;
|
|
54
|
+
- domain concepts, relationships, invariants, lifecycle/state semantics, and business rules;
|
|
55
|
+
- portable security/privacy/reliability/data constraints;
|
|
56
|
+
- portable design, accessibility, responsive, and interaction intent;
|
|
57
|
+
- roadmap maturity (`committed`, `planned`, `directional`);
|
|
58
|
+
- explicitly preserved learning intent.
|
|
59
|
+
|
|
60
|
+
Re-derive for the requested stack:
|
|
61
|
+
|
|
62
|
+
- Engineering Enablers;
|
|
63
|
+
- framework/application shell work;
|
|
64
|
+
- implementation architecture/topology;
|
|
65
|
+
- persistence/ORM implementation;
|
|
66
|
+
- API/client implementation choices;
|
|
67
|
+
- build/run/test commands and package tooling;
|
|
68
|
+
- stack-specific ADRs;
|
|
69
|
+
- CI implementation details;
|
|
70
|
+
- deployment mechanics that depend on the new architecture.
|
|
71
|
+
|
|
72
|
+
Do not automatically preserve source Engineering Enabler IDs. Product Feature IDs may remain traceable when the semantic Feature is unchanged; record source IDs even when the new implementation re-slices or renumbers work.
|
|
73
|
+
|
|
74
|
+
## New-repository rule
|
|
75
|
+
|
|
76
|
+
Replatforming requires a new target repository identity. The source repository is read-only evidence.
|
|
77
|
+
|
|
78
|
+
Never:
|
|
79
|
+
|
|
80
|
+
- overwrite the source repository;
|
|
81
|
+
- replace its `PROJECT_BOOTSTRAP.json`;
|
|
82
|
+
- delete or rewrite source implementation history;
|
|
83
|
+
- copy source application code by default;
|
|
84
|
+
- copy secrets, production data, credentials, machine bindings, or execution evidence.
|
|
85
|
+
|
|
86
|
+
## Bootstrap execution
|
|
87
|
+
|
|
88
|
+
Use the current canonical Bootstrap replatform tooling when available. The expected deterministic boundary is:
|
|
89
|
+
|
|
90
|
+
```text
|
|
91
|
+
approved PROJECT_REQUIREMENTS.json
|
|
92
|
+
+ requested current catalog recipe/stack
|
|
93
|
+
+ target repository identity
|
|
94
|
+
→ PROJECT_BOOTSTRAP.json state=review
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
If canonical Bootstrap replatform tooling/current catalog evidence is unavailable in the current environment, stop with `REPLATFORM HANDOFF REQUIRED`. Do not invent a manifest from stale remembered catalog facts.
|
|
98
|
+
|
|
99
|
+
## Human gate
|
|
100
|
+
|
|
101
|
+
Before generation, summarize at minimum:
|
|
102
|
+
|
|
103
|
+
```text
|
|
104
|
+
SOURCE REQUIREMENTS
|
|
105
|
+
source repository/commit
|
|
106
|
+
portable requirements export provenance
|
|
107
|
+
|
|
108
|
+
PRESERVED
|
|
109
|
+
product/features/domain/UX/cross-cutting intent
|
|
110
|
+
roadmap maturity
|
|
111
|
+
|
|
112
|
+
RE-DERIVED
|
|
113
|
+
stack-specific architecture and Engineering Enablers
|
|
114
|
+
|
|
115
|
+
TARGET STACK
|
|
116
|
+
resolved current catalog recipe and support state
|
|
117
|
+
|
|
118
|
+
OUTPUT
|
|
119
|
+
PROJECT_BOOTSTRAP.json — REVIEW
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Then use the normal material Bootstrap manifest approval gate. Approval of replatform intent is not approval to merge, release, or deploy the resulting implementation.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: run
|
|
3
|
+
description: "Run the current project locally through its repository-owned runtime command without conflating local execution with deployment."
|
|
4
|
+
argument-hint: "[target|all]"
|
|
5
|
+
user-invocable: true
|
|
6
|
+
disable-model-invocation: true
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Run
|
|
10
|
+
|
|
11
|
+
`/run` is the normal convenience entry point for starting the project locally. It resolves and delegates to repository-owned runtime commands rather than requiring the developer to remember framework-specific launch syntax.
|
|
12
|
+
|
|
13
|
+
## Contract
|
|
14
|
+
|
|
15
|
+
Invoking `/run` authorizes one bounded local start attempt for the requested target. It does not authorize setup, source edits, deployment, release publication, Production access, or persistent background services outside the repository's normal local-development contract.
|
|
16
|
+
|
|
17
|
+
Resolve the local runtime command from current repository evidence in this order:
|
|
18
|
+
|
|
19
|
+
1. an explicit repository-owned run/dev wrapper or documented command;
|
|
20
|
+
2. an explicit package/task script whose purpose is local run/dev;
|
|
21
|
+
3. an unambiguous ecosystem-native local entry point already present in the repository.
|
|
22
|
+
|
|
23
|
+
Do not guess. If the repository has multiple independent runtimes and no documented default, require a target such as `/run web`, `/run api`, or `/run all`.
|
|
24
|
+
|
|
25
|
+
## Preconditions
|
|
26
|
+
|
|
27
|
+
Before starting:
|
|
28
|
+
|
|
29
|
+
- identify repository root and current Git state;
|
|
30
|
+
- inspect `PROJECT_BOOTSTRAP.json` and scaffold/readiness evidence when present;
|
|
31
|
+
- verify the selected runtime entry point exists;
|
|
32
|
+
- inspect any documented local ports/health endpoints;
|
|
33
|
+
- do not create an intentionally deferred scaffold merely to make `/run` succeed.
|
|
34
|
+
|
|
35
|
+
If runtime source is intentionally deferred or absent, return `RUN NOT AVAILABLE` and identify the owning work item or missing marker when repository evidence provides it.
|
|
36
|
+
|
|
37
|
+
If workstation tools or dependencies are missing, recommend `/setup` instead of silently installing them.
|
|
38
|
+
|
|
39
|
+
## Execution
|
|
40
|
+
|
|
41
|
+
Start the process in an observable developer-controlled terminal/process surface. Do not hide a long-running application in an unexplained background process.
|
|
42
|
+
|
|
43
|
+
Report:
|
|
44
|
+
|
|
45
|
+
- target;
|
|
46
|
+
- resolved command identity;
|
|
47
|
+
- process/startup result;
|
|
48
|
+
- effective application release/build identity when the running application exposes it;
|
|
49
|
+
- local URL/port or health evidence only when repository/runtime evidence establishes it;
|
|
50
|
+
- how to stop the process.
|
|
51
|
+
|
|
52
|
+
When `/run all` is explicitly supported, start only the repository-defined set of local components and make each process/endpoint visible.
|
|
53
|
+
|
|
54
|
+
When the project implements `docs/process/APPLICATION_VERSIONING.md`, prefer runtime-observed version evidence over a source-file guess. Do not synthesize a build number or claim that a static source label proves the running artifact's identity.
|
|
55
|
+
|
|
56
|
+
## Operation journal
|
|
57
|
+
|
|
58
|
+
`/run` may write a concise sanitized startup receipt under `.project-forge/logs/run/` following `docs/process/OPERATION_JOURNAL.md`.
|
|
59
|
+
|
|
60
|
+
Record startup command identity, target, timestamps, startup/health result, observed application version/build identity, and endpoint when established. Do not duplicate or continuously capture unbounded application stdout/stderr into the Project Forge journal.
|
|
61
|
+
|
|
62
|
+
## Deployment boundary
|
|
63
|
+
|
|
64
|
+
`/run` is not `/deploy local`.
|
|
65
|
+
|
|
66
|
+
It must not:
|
|
67
|
+
|
|
68
|
+
- mutate remote environments;
|
|
69
|
+
- publish images/packages/releases;
|
|
70
|
+
- change deployment bindings;
|
|
71
|
+
- infer Production configuration;
|
|
72
|
+
- bump or rewrite release version state;
|
|
73
|
+
- stage, commit, push, merge, or clean branches.
|
|
74
|
+
|
|
75
|
+
A successful `/run` proves only that the requested local runtime started with the evidence observed in that session.
|