@mriekki/project-forge 4.13.1 → 4.13.3

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": 2,
3
3
  "package": "@mriekki/project-forge",
4
- "version": "4.13.1",
4
+ "version": "4.13.3",
5
5
  "defaultProfile": "greenfield-project",
6
6
  "profiles": {
7
7
  "greenfield-project": {
@@ -13,7 +13,7 @@
13
13
  },
14
14
  "components": {
15
15
  "core": {
16
- "revision": "a88c33ec1c93e120c70018a01c018f59dc2f74f2",
16
+ "revision": "13efbc5c8e368704a780c88bba6d42165664a74a",
17
17
  "version": "4.0.0",
18
18
  "distribution": "greenfield-workspace",
19
19
  "descriptor": "assets/core/distribution.json",
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
3
  "package": "@mriekki/project-forge",
4
- "version": "4.13.1",
4
+ "version": "4.13.3",
5
5
  "components": {
6
6
  "core": {
7
- "revision": "a88c33ec1c93e120c70018a01c018f59dc2f74f2",
7
+ "revision": "13efbc5c8e368704a780c88bba6d42165664a74a",
8
8
  "version": "4.0.0",
9
9
  "distribution": "greenfield-workspace",
10
10
  "files": [
@@ -71,12 +71,12 @@
71
71
  {
72
72
  "source": "core/skills/export-requirements/SKILL.md",
73
73
  "destination": ".github/skills/export-requirements/SKILL.md",
74
- "sha256": "dd82f05b6e2ec7ecf8e7a8592066fd8c6d623c1f184f49838b1e95eb5b53320a"
74
+ "sha256": "05d2ce830b2924f3508641f6bfa056f577862f27d236526f5a217a790d1ad490"
75
75
  },
76
76
  {
77
77
  "source": "core/skills/replatform/SKILL.md",
78
78
  "destination": ".github/skills/replatform/SKILL.md",
79
- "sha256": "561796a829b9c12f8bd2e526f8fe86cbd33d258a5c6b04ca581721e07d984ca7"
79
+ "sha256": "f2d7e8d0b940fabeae15150d80a758c8b2980a54b0bc47040d07e9703a4cf044"
80
80
  },
81
81
  {
82
82
  "source": "core/skills/progress/SKILL.md",
@@ -236,7 +236,7 @@
236
236
  {
237
237
  "source": "core/process/PROJECT_REQUIREMENTS_EXPORT.md",
238
238
  "destination": "docs/process/PROJECT_REQUIREMENTS_EXPORT.md",
239
- "sha256": "6ef9ecf1bb7c86b5f445554f5e630db36beee34bead2db8ff2597c148fba9c30"
239
+ "sha256": "f3e171cf466db69f46798859d9c174c177f5a1cb02bf19a3f02a66a16f5c43df"
240
240
  },
241
241
  {
242
242
  "source": "core/process/APPLICATION_VERSIONING.md",
@@ -20,6 +20,33 @@ Additional product/domain authorities may include roadmap, system-design/domain
20
20
 
21
21
  The export must retain source paths/authority/provenance so a consumer can trace normalized facts back to their repository authorities.
22
22
 
23
+ ## Canonical contract authority
24
+
25
+ Core owns the `/export-requirements` workflow and Human-in-the-Loop gate. Bootstrap owns the accepted portable-requirements schema and validator.
26
+
27
+ At the start of an export session, resolve the current stable Project Forge descriptor:
28
+
29
+ ```text
30
+ https://raw.githubusercontent.com/mriekki/project-forge-platform/main/chatgpt/current.json
31
+ ```
32
+
33
+ Use the exact immutable `generation.bootstrap.revision` selected there. Through authorized Project Forge/GitHub access, inspect that revision's canonical:
34
+
35
+ ```text
36
+ schemas/project-requirements.schema.json
37
+ tools/project_requirements.py
38
+ ```
39
+
40
+ Do not maintain a competing schema in Core and do not use remembered field shapes, generated examples, or a legacy export as structural authority.
41
+
42
+ If the stable descriptor, exact Bootstrap revision, schema, or validator cannot be resolved, stop before portable-requirements approval with:
43
+
44
+ ```text
45
+ PORTABLE REQUIREMENTS VALIDATION REQUIRED
46
+ ```
47
+
48
+ Unavailability of canonical validation is not permission to infer a compatible shape.
49
+
23
50
  ## Canonical filename and state
24
51
 
25
52
  Only this filename is canonical:
@@ -42,7 +69,7 @@ Only `approved` may be consumed as replatform input.
42
69
 
43
70
  ## Portable content model
44
71
 
45
- The export should represent, when present:
72
+ The exact JSON structure comes from the current Bootstrap schema. Within that structure, the export should represent, when present:
46
73
 
47
74
  - project/product identity;
48
75
  - problem, users/stakeholders, desired outcomes, scope/non-scope;
@@ -107,7 +134,7 @@ Examples:
107
134
 
108
135
  - a Project Blueprint may contain product/domain facts plus current technology baseline;
109
136
  - 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;
137
+ - a UX pattern may contain portable interaction behavior plus component-library detail;
111
138
  - an ADR may establish both a product/security consequence and a stack-specific mechanism.
112
139
 
113
140
  Extract the portable fact, retain source traceability, and exclude/reconcile the mechanism.
@@ -128,6 +155,23 @@ Do not export as portable requirements unless the repository explicitly makes th
128
155
  - Git/PR/CI evidence;
129
156
  - Project Forge/Core/Bootstrap baseline state.
130
157
 
158
+ ## Validation and approval boundary
159
+
160
+ Create or refresh the derived artifact in `state: "review"`, then validate the exact file with the canonical Bootstrap validator from the exact revision resolved for the session.
161
+
162
+ Equivalent validation commands are:
163
+
164
+ ```text
165
+ python tools/project_requirements.py PROJECT_REQUIREMENTS.json
166
+ python tools/project_requirements.py PROJECT_REQUIREMENTS.json --require-approved
167
+ ```
168
+
169
+ The first is required before the human review/approval gate. The second is required after the bounded approval-state transition.
170
+
171
+ If review-state validation fails, repair only the derived export from existing authorities and the canonical schema, then rerun validation. Do not ask for approval until it passes.
172
+
173
+ If an older or malformed export was previously approved but does not validate now, that earlier approval does not automatically authorize a normalized replacement. Preserve the underlying source authority/maturity/provenance, produce a valid `state: "review"` artifact, and obtain a fresh human approval of that exact artifact.
174
+
131
175
  ## Replatform relationship
132
176
 
133
177
  The canonical flow is:
@@ -135,9 +179,12 @@ The canonical flow is:
135
179
  ```text
136
180
  project authorities
137
181
  → /export-requirements
182
+ → current stable Bootstrap contract resolution
138
183
  → PROJECT_REQUIREMENTS.json state=review
184
+ → canonical Bootstrap validation PASS
139
185
  → human approval
140
186
  → PROJECT_REQUIREMENTS.json state=approved
187
+ → canonical Bootstrap validation --require-approved PASS
141
188
  → /replatform <target-stack>
142
189
  → current Bootstrap catalog reconciliation
143
190
  → PROJECT_BOOTSTRAP.json state=review
@@ -28,6 +28,36 @@ It must not answer:
28
28
 
29
29
  > Which framework, language, ORM, build tool, folder layout, or CI implementation should the next repository use?
30
30
 
31
+ ## Canonical Bootstrap contract preflight
32
+
33
+ Before constructing or refreshing `PROJECT_REQUIREMENTS.json`, resolve the current stable Project Forge descriptor from:
34
+
35
+ ```text
36
+ https://raw.githubusercontent.com/mriekki/project-forge-platform/main/chatgpt/current.json
37
+ ```
38
+
39
+ Use the exact `generation.bootstrap.revision` from that descriptor as the Bootstrap contract authority for this export session. Do not use a remembered schema, an older generated example, or this skill's prose as a substitute for the current Bootstrap-owned portable-requirements contract.
40
+
41
+ The stable descriptor must provide `generation.bootstrap.portableRequirements` with public immutable locators for the canonical schema and validator. Require all of the following before continuing:
42
+
43
+ - `portableRequirements.bootstrapRevision` exactly equals `generation.bootstrap.revision`;
44
+ - `portableRequirements.schema.path` equals `schemas/project-requirements.schema.json`;
45
+ - `portableRequirements.validator.path` equals `tools/project_requirements.py`;
46
+ - both locator URLs resolve from an immutable public Platform commit rather than a mutable branch;
47
+ - both advertised SHA-256 values match the retrieved bytes.
48
+
49
+ Fetch and inspect the schema and validator through those public locators. Do not infer or expose the private foundational repository from the bare Bootstrap revision, and do not substitute similarly named files discovered through code search.
50
+
51
+ Bootstrap owns the schema/validator. Platform publishes the reviewed public immutable mirrors/locators. Core owns this orchestration. Do not copy the Bootstrap schema into Core, invent a parallel validator, or infer a compatibility transform for a shape that the canonical validator rejects.
52
+
53
+ If the stable descriptor, exact Bootstrap revision, public locator metadata, canonical schema, canonical validator, or digest verification cannot be resolved and inspected, stop with:
54
+
55
+ ```text
56
+ PORTABLE REQUIREMENTS VALIDATION REQUIRED
57
+ ```
58
+
59
+ Do not create an approval-ready export and do not ask for portable-requirements approval while canonical validation is unavailable.
60
+
31
61
  ## Source model
32
62
 
33
63
  Start from the workspace's declared authority model. In a normal generated Project Forge workspace, inspect as applicable:
@@ -100,15 +130,35 @@ Do not export as portable requirements:
100
130
  - implementation plans, code, review history, branch/PR/CI evidence;
101
131
  - generated Project Forge/Core provenance.
102
132
 
103
- ## Artifact state and human gate
133
+ ## Canonical validation before human review
104
134
 
105
- Default `/export-requirements` writes or refreshes `PROJECT_REQUIREMENTS.json` with `state: "review"` and exact source repository/commit provenance.
135
+ Default `/export-requirements` writes or refreshes `PROJECT_REQUIREMENTS.json` with `state: "review"` and exact source repository/commit provenance, using the current Bootstrap schema as the structural contract.
106
136
 
107
- Before calling it approved, present a compact reconciliation summary:
137
+ Before presenting any approval question, validate that exact file with the canonical Bootstrap validator retrieved and digest-verified from the public locator for the exact revision resolved during preflight. The equivalent canonical source-layout invocation is:
138
+
139
+ ```text
140
+ python tools/project_requirements.py <path-to-PROJECT_REQUIREMENTS.json>
141
+ ```
142
+
143
+ The actual local path may differ by host, but the validator bytes and Bootstrap revision must be the same canonical ones resolved and verified during preflight.
144
+
145
+ If validation fails:
146
+
147
+ 1. report the validator errors;
148
+ 2. repair only the derived export using existing source authorities and the canonical schema;
149
+ 3. preserve source authority, maturity, provenance, open decisions, and non-authorizing roadmap intent;
150
+ 4. rerun canonical validation;
151
+ 5. do not ask for approval until validation passes.
152
+
153
+ Do not silently reinterpret a rejected legacy/export shape, rename fields from memory, promote unresolved decisions, or treat prior human approval of structurally different JSON as approval of a normalized replacement.
154
+
155
+ Before calling a valid export approved, present a compact reconciliation summary:
108
156
 
109
157
  ```text
110
158
  PROJECT REQUIREMENTS EXPORT
111
159
 
160
+ Bootstrap revision: <exact revision>
161
+ Canonical validation: PASS
112
162
  Preserved product/features: ...
113
163
  Preserved domain rules: ...
114
164
  Preserved UX/cross-cutting constraints: ...
@@ -120,7 +170,7 @@ Items requiring reconciliation: ...
120
170
  Then make the artifact itself the PRIMARY review subject. Before asking for approval:
121
171
  1. identify `PROJECT_REQUIREMENTS.json` explicitly;
122
172
  2. foreground/open the formatted JSON in the best available editor/preview surface when the host supports it;
123
- 3. keep source authorities as CONTEXT/TRACEABILITY rather than opening them all;
173
+ 3. keep source authorities and Bootstrap validation evidence as CONTEXT/TRACEABILITY rather than opening them all;
124
174
  4. only then ask the approval question.
125
175
 
126
176
  In VS Code, when available, use `projectForge.openReviewArtifact` with `PROJECT_REQUIREMENTS.json`. Opening the file is read-only presentation and never changes its state.
@@ -133,6 +183,7 @@ HUMAN REVIEW REQUIRED
133
183
  Gate: PORTABLE REQUIREMENTS APPROVAL
134
184
  Primary artifact: PROJECT_REQUIREMENTS.json
135
185
  Opened: formatted editor preview / <fallback surface>
186
+ Canonical Bootstrap validation: PASS @ <exact revision>
136
187
  Items requiring reconciliation: NONE / list
137
188
 
138
189
  Approve PROJECT_REQUIREMENTS.json as the portable requirements baseline?
@@ -140,7 +191,13 @@ Approve PROJECT_REQUIREMENTS.json as the portable requirements baseline?
140
191
 
141
192
  Only explicit human approval may set `state: "approved"`.
142
193
 
143
- `/export-requirements approve` may perform only that bounded finalization after confirming the reviewed content/evidence has not materially changed. If the artifact changed materially since review, reopen the review surface and require approval again.
194
+ `/export-requirements approve` may perform only that bounded finalization after confirming the reviewed content/evidence has not materially changed. After changing `state` to `approved`, rerun the same canonical Bootstrap validator with the equivalent of:
195
+
196
+ ```text
197
+ python tools/project_requirements.py <path-to-PROJECT_REQUIREMENTS.json> --require-approved
198
+ ```
199
+
200
+ If final validation fails, restore/report review state as applicable and do not claim the portable baseline is approved. If the artifact changed materially since review for any reason beyond the bounded approval-state transition, reopen the review surface and require approval again.
144
201
 
145
202
  ## Safety and scope
146
203
 
@@ -22,6 +22,14 @@ PROJECT_REQUIREMENTS.json
22
22
 
23
23
  The file must be `state: "approved"`. Do not accept alternate/legacy requirements-export filenames or infer approval from file existence.
24
24
 
25
+ Before consuming the export, validate it with the canonical Bootstrap portable-requirements validator resolved from the current stable Project Forge descriptor and its `generation.bootstrap.portableRequirements` metadata. Require `portableRequirements.bootstrapRevision` to equal `generation.bootstrap.revision`, fetch the canonical validator from the advertised immutable public locator, verify its advertised SHA-256, and validate the export with that exact validator using `--require-approved`.
26
+
27
+ Do not infer or expose the private foundational repository from the Bootstrap revision, and do not substitute similarly named files discovered through code search. If the public locator metadata, canonical validator, digest verification, or exact Bootstrap revision cannot be resolved, stop with `PORTABLE REQUIREMENTS VALIDATION REQUIRED`.
28
+
29
+ If canonical validation fails, stop and route back through `/export-requirements`; do not normalize, translate, alias, or repair the input inside `/replatform`.
30
+
31
+ A previously human-approved file that does not validate against the canonical portable contract is not valid replatform input until a canonical `state: "review"` export is produced and explicitly approved again.
32
+
25
33
  If the export is missing or stale relative to material source-requirement changes, use `/export-requirements` first.
26
34
 
27
35
  ## Target
@@ -88,7 +96,7 @@ Never:
88
96
  Use the current canonical Bootstrap replatform tooling when available. The expected deterministic boundary is:
89
97
 
90
98
  ```text
91
- approved PROJECT_REQUIREMENTS.json
99
+ approved + canonically valid PROJECT_REQUIREMENTS.json
92
100
  + requested current catalog recipe/stack
93
101
  + target repository identity
94
102
  → PROJECT_BOOTSTRAP.json state=review
@@ -104,6 +112,7 @@ Before generation, summarize at minimum:
104
112
  SOURCE REQUIREMENTS
105
113
  source repository/commit
106
114
  portable requirements export provenance
115
+ canonical Bootstrap validation evidence
107
116
 
108
117
  PRESERVED
109
118
  product/features/domain/UX/cross-cutting intent
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mriekki/project-forge",
3
- "version": "4.13.1",
3
+ "version": "4.13.3",
4
4
  "description": "Public consumer distribution and updater for Project Forge engineering assets.",
5
5
  "type": "module",
6
6
  "bin": {