@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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "package": "@mriekki/project-forge",
4
- "version": "2.0.0",
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": "80ff581ec89533f5a22bd05c65c7b67bb314c715",
18
- "version": "3.0.0",
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.0.0",
4
+ "version": "2.1.0",
5
5
  "components": {
6
6
  "core": {
7
7
  "repository": "mriekki/project-forge-core",
8
- "commit": "80ff581ec89533f5a22bd05c65c7b67bb314c715",
9
- "version": "3.0.0",
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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mriekki/project-forge",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "Public consumer distribution and updater for Project Forge engineering assets.",
5
5
  "type": "module",
6
6
  "bin": {