@mriekki/project-forge 4.11.2 → 4.13.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/README.md +2 -0
- package/assets/components.json +3 -3
- package/assets/core/distribution.json +2 -0
- package/assets/deployment/distribution.json +2 -0
- package/assets/generated/ASSEMBLY.json +38 -18
- package/assets/generated/core/core/instructions/project-forge-local-development.instructions.md +28 -0
- package/assets/generated/core/core/instructions/project-forge-workflow.instructions.md +8 -0
- package/assets/generated/core/core/process/HUMAN_GATES.md +63 -0
- package/assets/generated/core/core/process/INTERACTIVE_SESSION_GUIDE.md +28 -1
- package/assets/generated/core/core/process/LOCAL_DEVELOPMENT_COMMANDS.md +103 -0
- package/assets/generated/core/core/skills/build/SKILL.md +10 -5
- package/assets/generated/core/core/skills/export-requirements/SKILL.md +20 -1
- package/assets/generated/core/core/skills/refine-requirements/SKILL.md +25 -2
- package/assets/generated/core/core/skills/replatform/SKILL.md +24 -1
- package/assets/generated/core/core/skills/run/SKILL.md +39 -13
- package/assets/generated/core/core/skills/start-work/SKILL.md +120 -18
- package/assets/generated/core/tools/vscode_work_item_status/extension/README.md +20 -2
- package/assets/generated/core/tools/vscode_work_item_status/extension/extension.js +136 -1
- package/assets/generated/core/tools/vscode_work_item_status/extension/package.json +11 -5
- package/assets/generated/deployment/docs/RECOVERY_READINESS.md +66 -0
- package/assets/generated/deployment/src/project_forge_deployment/recovery_scope.py +116 -0
- package/assets/generated/deployment/src/project_forge_deployment/sqlite_adapter.py +27 -2
- package/assets/generated/deployment/src/project_forge_deployment/sqlite_adapter_remote.py +9 -6
- package/assets/generated/deployment/src/project_forge_deployment/sqlite_cli.py +23 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -113,6 +113,8 @@ Generated Projects receive an exact approved package during deterministic genera
|
|
|
113
113
|
|
|
114
114
|
That Project workflow resolves the supported exact package version and preserves the managed-baseline, drift, review, and delivery guardrails. Do not use a floating `@latest` package update as the normal Builder path: npm publication can intentionally occur before the stable public contract is advanced to the new version.
|
|
115
115
|
|
|
116
|
+
Package-managed updates follow the **Exact Managed Set** invariant: after a successful update, every path still managed by the selected package/profile has the package-defined content, and every previously managed path that the new package retires has either been removed or explicitly transferred out of Project Forge ownership. Unmanaged consumer files are not directory-mirrored or pruned. See [`docs/system/PROJECT_FORGE_EXACT_MANAGED_SET.md`](docs/system/PROJECT_FORGE_EXACT_MANAGED_SET.md).
|
|
117
|
+
|
|
116
118
|
The package CLI remains available for exact-version troubleshooting and maintainer verification. Use the exact version recorded by the Project or selected by the Project Forge workflow rather than a floating tag.
|
|
117
119
|
|
|
118
120
|
## Maintainer system reference
|
package/assets/components.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
3
|
"package": "@mriekki/project-forge",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.13.0",
|
|
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": "
|
|
16
|
+
"revision": "27f6824d1a53daa7e0c51bf286cce6767ddca3f7",
|
|
17
17
|
"version": "4.0.0",
|
|
18
18
|
"distribution": "greenfield-workspace",
|
|
19
19
|
"descriptor": "assets/core/distribution.json",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"canonicalDescriptor": "distributions/greenfield-workspace.json"
|
|
22
22
|
},
|
|
23
23
|
"deployment": {
|
|
24
|
-
"revision": "
|
|
24
|
+
"revision": "1119331414ec53e0c48b864403fabfef7998df60",
|
|
25
25
|
"distribution": "greenfield-project",
|
|
26
26
|
"descriptor": "assets/deployment/distribution.json",
|
|
27
27
|
"sourceRoot": "assets/generated/deployment",
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
"mappings": [
|
|
6
6
|
{"source":"core/agents/reviewer.agent.md","destination":".github/agents/reviewer.agent.md"},
|
|
7
7
|
{"source":"core/instructions/project-forge-workflow.instructions.md","destination":".github/instructions/project-forge-workflow.instructions.md"},
|
|
8
|
+
{"source":"core/instructions/project-forge-local-development.instructions.md","destination":".github/instructions/project-forge-local-development.instructions.md"},
|
|
8
9
|
{"source":"core/instructions/project-forge-docs.instructions.md","destination":".github/instructions/project-forge-docs.instructions.md"},
|
|
9
10
|
{"source":"core/skills/define-feature/SKILL.md","destination":".github/skills/define-feature/SKILL.md"},
|
|
10
11
|
{"source":"core/skills/grill-me/SKILL.md","destination":".github/skills/grill-me/SKILL.md"},
|
|
@@ -48,6 +49,7 @@
|
|
|
48
49
|
{"source":"core/process/OPERATION_JOURNAL.md","destination":"docs/process/OPERATION_JOURNAL.md"},
|
|
49
50
|
{"source":"core/process/PROJECT_REQUIREMENTS_EXPORT.md","destination":"docs/process/PROJECT_REQUIREMENTS_EXPORT.md"},
|
|
50
51
|
{"source":"core/process/APPLICATION_VERSIONING.md","destination":"docs/process/APPLICATION_VERSIONING.md"},
|
|
52
|
+
{"source":"core/process/LOCAL_DEVELOPMENT_COMMANDS.md","destination":"docs/process/LOCAL_DEVELOPMENT_COMMANDS.md"},
|
|
51
53
|
{"source":"core/templates/PULL_REQUEST_TEMPLATE.md","destination":".github/PULL_REQUEST_TEMPLATE.md"},
|
|
52
54
|
{"source":"core/templates/PRODUCT_BRIEF_TEMPLATE.md","destination":"docs/templates/PRODUCT_BRIEF_TEMPLATE.md"},
|
|
53
55
|
{"source":"core/templates/FEATURE_BRIEF_TEMPLATE.md","destination":"docs/templates/FEATURE_BRIEF_TEMPLATE.md"},
|
|
@@ -42,6 +42,7 @@
|
|
|
42
42
|
{"source": "src/project_forge_deployment/profiles.py", "destination": "tools/project-forge-deployment/project_forge_deployment/profiles.py"},
|
|
43
43
|
{"source": "src/project_forge_deployment/project_topology.py", "destination": "tools/project-forge-deployment/project_forge_deployment/project_topology.py"},
|
|
44
44
|
{"source": "src/project_forge_deployment/proof_receipt.py", "destination": "tools/project-forge-deployment/project_forge_deployment/proof_receipt.py"},
|
|
45
|
+
{"source": "src/project_forge_deployment/recovery_scope.py", "destination": "tools/project-forge-deployment/project_forge_deployment/recovery_scope.py"},
|
|
45
46
|
{"source": "src/project_forge_deployment/registry_access.py", "destination": "tools/project-forge-deployment/project_forge_deployment/registry_access.py"},
|
|
46
47
|
{"source": "src/project_forge_deployment/registry_cli.py", "destination": "tools/project-forge-deployment/project_forge_deployment/registry_cli.py"},
|
|
47
48
|
{"source": "src/project_forge_deployment/route_registry.py", "destination": "tools/project-forge-deployment/project_forge_deployment/route_registry.py"},
|
|
@@ -62,6 +63,7 @@
|
|
|
62
63
|
{"source": "docs/WORKSPACE_INSTANCES.md", "destination": "docs/project-forge/WORKSPACE_INSTANCES.md"},
|
|
63
64
|
{"source": "docs/ENVIRONMENT_PROOF.md", "destination": "docs/project-forge/ENVIRONMENT_PROOF.md"},
|
|
64
65
|
{"source": "docs/PROJECT_TOPOLOGY_BINDING.md", "destination": "docs/project-forge/PROJECT_TOPOLOGY_BINDING.md"},
|
|
66
|
+
{"source": "docs/RECOVERY_READINESS.md", "destination": "docs/project-forge/RECOVERY_READINESS.md"},
|
|
65
67
|
{"source": "docs/images/developer-environment-journey.svg", "destination": "docs/project-forge/images/developer-environment-journey.svg"},
|
|
66
68
|
{"source": "docs/images/personal-environment-architecture.svg", "destination": "docs/project-forge/images/personal-environment-architecture.svg"},
|
|
67
69
|
{"source": "docs/images/project-environment-model.svg", "destination": "docs/project-forge/images/project-environment-model.svg"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
3
|
"package": "@mriekki/project-forge",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.13.0",
|
|
5
5
|
"components": {
|
|
6
6
|
"core": {
|
|
7
|
-
"revision": "
|
|
7
|
+
"revision": "27f6824d1a53daa7e0c51bf286cce6767ddca3f7",
|
|
8
8
|
"version": "4.0.0",
|
|
9
9
|
"distribution": "greenfield-workspace",
|
|
10
10
|
"files": [
|
|
@@ -21,7 +21,12 @@
|
|
|
21
21
|
{
|
|
22
22
|
"source": "core/instructions/project-forge-workflow.instructions.md",
|
|
23
23
|
"destination": ".github/instructions/project-forge-workflow.instructions.md",
|
|
24
|
-
"sha256": "
|
|
24
|
+
"sha256": "dd440f677c9ed476bb8b7486500d8acbe2f796272582baadd4d6a60c3d1e662c"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"source": "core/instructions/project-forge-local-development.instructions.md",
|
|
28
|
+
"destination": ".github/instructions/project-forge-local-development.instructions.md",
|
|
29
|
+
"sha256": "e7f884f123877b21913af111cde42fc0ff0ac82abe6fd18b8f4584d749fb6c3a"
|
|
25
30
|
},
|
|
26
31
|
{
|
|
27
32
|
"source": "core/instructions/project-forge-docs.instructions.md",
|
|
@@ -41,12 +46,12 @@
|
|
|
41
46
|
{
|
|
42
47
|
"source": "core/skills/refine-requirements/SKILL.md",
|
|
43
48
|
"destination": ".github/skills/refine-requirements/SKILL.md",
|
|
44
|
-
"sha256": "
|
|
49
|
+
"sha256": "5787cd7f70231355b951d58f792665a79da336d6f17ea9f4d6634928ab452623"
|
|
45
50
|
},
|
|
46
51
|
{
|
|
47
52
|
"source": "core/skills/start-work/SKILL.md",
|
|
48
53
|
"destination": ".github/skills/start-work/SKILL.md",
|
|
49
|
-
"sha256": "
|
|
54
|
+
"sha256": "d7a592e64a4e64da5a9e03ee34bc4be4b1862c0d56ed5c71a657e268b4b8e9e5"
|
|
50
55
|
},
|
|
51
56
|
{
|
|
52
57
|
"source": "core/skills/setup/SKILL.md",
|
|
@@ -56,22 +61,22 @@
|
|
|
56
61
|
{
|
|
57
62
|
"source": "core/skills/build/SKILL.md",
|
|
58
63
|
"destination": ".github/skills/build/SKILL.md",
|
|
59
|
-
"sha256": "
|
|
64
|
+
"sha256": "e7ba7663a99603f1212930045bec420c71774e56cad963e38867242605afdad4"
|
|
60
65
|
},
|
|
61
66
|
{
|
|
62
67
|
"source": "core/skills/run/SKILL.md",
|
|
63
68
|
"destination": ".github/skills/run/SKILL.md",
|
|
64
|
-
"sha256": "
|
|
69
|
+
"sha256": "3dfc25cff7b03eafe0b8d64cc2102584c7b90793f434313f62c9e61c1b587c9e"
|
|
65
70
|
},
|
|
66
71
|
{
|
|
67
72
|
"source": "core/skills/export-requirements/SKILL.md",
|
|
68
73
|
"destination": ".github/skills/export-requirements/SKILL.md",
|
|
69
|
-
"sha256": "
|
|
74
|
+
"sha256": "dd82f05b6e2ec7ecf8e7a8592066fd8c6d623c1f184f49838b1e95eb5b53320a"
|
|
70
75
|
},
|
|
71
76
|
{
|
|
72
77
|
"source": "core/skills/replatform/SKILL.md",
|
|
73
78
|
"destination": ".github/skills/replatform/SKILL.md",
|
|
74
|
-
"sha256": "
|
|
79
|
+
"sha256": "561796a829b9c12f8bd2e526f8fe86cbd33d258a5c6b04ca581721e07d984ca7"
|
|
75
80
|
},
|
|
76
81
|
{
|
|
77
82
|
"source": "core/skills/progress/SKILL.md",
|
|
@@ -181,7 +186,7 @@
|
|
|
181
186
|
{
|
|
182
187
|
"source": "core/process/HUMAN_GATES.md",
|
|
183
188
|
"destination": "docs/process/HUMAN_IN_LOOP_GATES.md",
|
|
184
|
-
"sha256": "
|
|
189
|
+
"sha256": "edad6bd5c659a1cbc6960ce76c269547ec616505b320409b6d3152326d4beaae"
|
|
185
190
|
},
|
|
186
191
|
{
|
|
187
192
|
"source": "core/process/GUIDED_NEXT_STEPS.md",
|
|
@@ -191,7 +196,7 @@
|
|
|
191
196
|
{
|
|
192
197
|
"source": "core/process/INTERACTIVE_SESSION_GUIDE.md",
|
|
193
198
|
"destination": "docs/process/INTERACTIVE_SESSION_GUIDE.md",
|
|
194
|
-
"sha256": "
|
|
199
|
+
"sha256": "9c4d2ef7eb974faea83dcd1c07c0684aaf351bfebe09186ef7e03cdf1c075c51"
|
|
195
200
|
},
|
|
196
201
|
{
|
|
197
202
|
"source": "core/process/COACHING_GUIDE.md",
|
|
@@ -238,6 +243,11 @@
|
|
|
238
243
|
"destination": "docs/process/APPLICATION_VERSIONING.md",
|
|
239
244
|
"sha256": "846abd1085501bebf3ffd8025f875dcf2bfb3f57e67110e684c605ae11c3246b"
|
|
240
245
|
},
|
|
246
|
+
{
|
|
247
|
+
"source": "core/process/LOCAL_DEVELOPMENT_COMMANDS.md",
|
|
248
|
+
"destination": "docs/process/LOCAL_DEVELOPMENT_COMMANDS.md",
|
|
249
|
+
"sha256": "44a62a68cbf211658d0e928f595b357fab3993eebbe5228ffeab9336b79e7ba6"
|
|
250
|
+
},
|
|
241
251
|
{
|
|
242
252
|
"source": "core/templates/PULL_REQUEST_TEMPLATE.md",
|
|
243
253
|
"destination": ".github/PULL_REQUEST_TEMPLATE.md",
|
|
@@ -326,17 +336,17 @@
|
|
|
326
336
|
{
|
|
327
337
|
"source": "tools/vscode_work_item_status/extension/package.json",
|
|
328
338
|
"destination": "tools/project-forge-vscode/work-item-status/extension/package.json",
|
|
329
|
-
"sha256": "
|
|
339
|
+
"sha256": "09225a1d9a8a7ceebbba82aafb93a26342da10f1322949cf22061e40196e29df"
|
|
330
340
|
},
|
|
331
341
|
{
|
|
332
342
|
"source": "tools/vscode_work_item_status/extension/extension.js",
|
|
333
343
|
"destination": "tools/project-forge-vscode/work-item-status/extension/extension.js",
|
|
334
|
-
"sha256": "
|
|
344
|
+
"sha256": "b4e70183bb101d879cc0d7834c51ee4cc48683339fca2c390eb3e49a3a3acdac"
|
|
335
345
|
},
|
|
336
346
|
{
|
|
337
347
|
"source": "tools/vscode_work_item_status/extension/README.md",
|
|
338
348
|
"destination": "tools/project-forge-vscode/work-item-status/extension/README.md",
|
|
339
|
-
"sha256": "
|
|
349
|
+
"sha256": "b8fc17974024a84ee12f0fe43c38d379916e9e378f7c1efbf9a14da610af60e8"
|
|
340
350
|
},
|
|
341
351
|
{
|
|
342
352
|
"source": "tools/package/check_baseline.py",
|
|
@@ -351,7 +361,7 @@
|
|
|
351
361
|
]
|
|
352
362
|
},
|
|
353
363
|
"deployment": {
|
|
354
|
-
"revision": "
|
|
364
|
+
"revision": "1119331414ec53e0c48b864403fabfef7998df60",
|
|
355
365
|
"distribution": "greenfield-project",
|
|
356
366
|
"files": [
|
|
357
367
|
{
|
|
@@ -549,6 +559,11 @@
|
|
|
549
559
|
"destination": "tools/project-forge-deployment/project_forge_deployment/proof_receipt.py",
|
|
550
560
|
"sha256": "9b4bbb559747fc4ee3ba984a050fc6425e532527ae82f9897c73e04d8d0291b6"
|
|
551
561
|
},
|
|
562
|
+
{
|
|
563
|
+
"source": "src/project_forge_deployment/recovery_scope.py",
|
|
564
|
+
"destination": "tools/project-forge-deployment/project_forge_deployment/recovery_scope.py",
|
|
565
|
+
"sha256": "1773369f26dea95795eb971a8433699897db74d6c38223c0d93c8626c3b9f2aa"
|
|
566
|
+
},
|
|
552
567
|
{
|
|
553
568
|
"source": "src/project_forge_deployment/registry_access.py",
|
|
554
569
|
"destination": "tools/project-forge-deployment/project_forge_deployment/registry_access.py",
|
|
@@ -577,17 +592,17 @@
|
|
|
577
592
|
{
|
|
578
593
|
"source": "src/project_forge_deployment/sqlite_adapter.py",
|
|
579
594
|
"destination": "tools/project-forge-deployment/project_forge_deployment/sqlite_adapter.py",
|
|
580
|
-
"sha256": "
|
|
595
|
+
"sha256": "ab0fe2a1009ac1883ee7c9344c84240051648ccd1f05df9166cd81f6a216f893"
|
|
581
596
|
},
|
|
582
597
|
{
|
|
583
598
|
"source": "src/project_forge_deployment/sqlite_adapter_remote.py",
|
|
584
599
|
"destination": "tools/project-forge-deployment/project_forge_deployment/sqlite_adapter_remote.py",
|
|
585
|
-
"sha256": "
|
|
600
|
+
"sha256": "6c7ba2c49f8ae97a28927f694df23b7f18de1247aac4bc4dce858859fb2199ed"
|
|
586
601
|
},
|
|
587
602
|
{
|
|
588
603
|
"source": "src/project_forge_deployment/sqlite_cli.py",
|
|
589
604
|
"destination": "tools/project-forge-deployment/project_forge_deployment/sqlite_cli.py",
|
|
590
|
-
"sha256": "
|
|
605
|
+
"sha256": "37132cc141afe9196a96fd91db55597998886d037b2baded62526c08df148f5d"
|
|
591
606
|
},
|
|
592
607
|
{
|
|
593
608
|
"source": "src/project_forge_deployment/sqlite_import_recovery.py",
|
|
@@ -649,6 +664,11 @@
|
|
|
649
664
|
"destination": "docs/project-forge/PROJECT_TOPOLOGY_BINDING.md",
|
|
650
665
|
"sha256": "50988ac1d797494bcb2d5dd6cece04f6313fb30179ca3132191dea75bcd759cd"
|
|
651
666
|
},
|
|
667
|
+
{
|
|
668
|
+
"source": "docs/RECOVERY_READINESS.md",
|
|
669
|
+
"destination": "docs/project-forge/RECOVERY_READINESS.md",
|
|
670
|
+
"sha256": "ae94a858c9431ad1f432cb75e76b532d83f69c8ca163707ac12d9ea11c60edc1"
|
|
671
|
+
},
|
|
652
672
|
{
|
|
653
673
|
"source": "docs/images/developer-environment-journey.svg",
|
|
654
674
|
"destination": "docs/project-forge/images/developer-environment-journey.svg",
|
package/assets/generated/core/core/instructions/project-forge-local-development.instructions.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
applyTo: "**"
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Project Forge Local Development Contract
|
|
6
|
+
|
|
7
|
+
Keep Core stack-neutral and Projects operationally deterministic. Follow `docs/process/LOCAL_DEVELOPMENT_COMMANDS.md` when it exists.
|
|
8
|
+
|
|
9
|
+
When an Engineering Enabler or equivalent foundational work item first establishes executable application topology, establish unambiguous repository-owned build and run commands for the normal developer path. Do not require a particular wrapper language or invent placeholder commands before executable topology exists.
|
|
10
|
+
|
|
11
|
+
For Feature Brief and Engineering Enabler implementation/validation, default application execution and persistence operations to the established Project-owned local developer runtime and its associated persistence unless the developer explicitly selects a supported alternative. When the Project defines a local container/database pair as that topology, do not silently substitute a native process or separate checkout database.
|
|
12
|
+
|
|
13
|
+
If the established default runtime/persistence is absent, stopped, stale, or blocked by initialization/schema prerequisites, route through `/setup local` or the repository-owned repair workflow. Do not bypass it by selecting another runtime/database. Preserve `/run`'s no-implicit-setup/no-automatic-migration boundary.
|
|
14
|
+
|
|
15
|
+
When a work item materially changes executable topology, assess and maintain the affected Project-owned engineering interfaces in the same accepted change:
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
BUILD CONTRACT IMPACT
|
|
19
|
+
RUN CONTRACT IMPACT
|
|
20
|
+
SETUP CONTRACT IMPACT
|
|
21
|
+
CI CONTRACT IMPACT
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Examples include build-system changes, native/container changes, component composition, persistence ownership/location, launch profiles/ports, transport/authentication requirements, readiness checks, and stop/cleanup mechanics.
|
|
25
|
+
|
|
26
|
+
Prefer the same underlying repository-owned build entry point in CI where practical. Preserve repository-required isolated/disposable test runtimes and databases; never redirect automated tests into mutable developer data merely to reuse the normal developer runtime.
|
|
27
|
+
|
|
28
|
+
A failing or stale established build/run command is a Project contract problem. Do not silently bypass it with ecosystem-native inference. Framework-native discovery remains a fallback only while no Project-owned command contract exists yet or when the developer explicitly selects a supported alternative.
|
|
@@ -14,6 +14,14 @@ Use proportional rigor: `LIGHT`, `STANDARD`, `ELEVATED`.
|
|
|
14
14
|
|
|
15
15
|
Keep explicit human gates for material requirements, substantive plans, meaningful implementation acceptance, the final merge/delivery decision, and production deployment.
|
|
16
16
|
|
|
17
|
+
Before any substantive approval gate, identify the exact PRIMARY review subject and put the best available review surface in front of the human when the host supports it. Treat supporting documents as CONTEXT or TRACEABILITY instead of opening everything. For Markdown prefer rendered preview, for structured approval artifacts prefer formatted source plus a concise summary, for implementation acceptance prefer the meaningful diff/Source Control surface, and for plans prefer the native plan surface or durable plan document. Opening or foregrounding a review surface is read-only presentation and never implies approval.
|
|
18
|
+
|
|
19
|
+
In VS Code, when the Project Forge companion extension is installed and the host can invoke VS Code commands, `projectForge.openReviewArtifact` may be used to foreground an exact workspace-relative repository artifact. Use a stronger native host review/diff surface when available.
|
|
20
|
+
|
|
21
|
+
For STANDARD/ELEVATED work, invoking `/start-work` authorizes context resolution, risk assessment, and planning only. It does **not** authorize substantive implementation or implementation branch setup by itself. Produce the final proposed plan, foreground its review surface, state that implementation has not started, and require an explicit `Approve plan and begin implementation [PLAN APPROVAL + CODE WRITE]` action before code writes or routine implementation branch setup. For ELEVATED work, Reviewer challenges the plan and material findings are reconciled before the human reviews the final proposed plan.
|
|
22
|
+
|
|
23
|
+
If implementation later requires a material change to the approved architecture, scope, schema/data handling, security model, externally visible behavior, major dependencies, or verification strategy, reopen the implementation-plan gate with the revised plan before continuing.
|
|
24
|
+
|
|
17
25
|
Once a bounded action is authorized, routine mechanics inside that scope should proceed without repeated ceremonial confirmation.
|
|
18
26
|
|
|
19
27
|
For implementation, establish the repository-appropriate short-lived work branch as routine setup once implementation itself is authorized; do not add a separate branch-creation gate when branch policy/naming and scope are clear.
|
|
@@ -18,10 +18,73 @@ Workspace/setup acceptance is distinct from generation or installation. Generate
|
|
|
18
18
|
|
|
19
19
|
A human gate is meaningful only when the human understands what is being approved. If the explanation immediately before a gate did not land, re-explain it before asking for approval again. `/wait-what` is the standard read-only communication-repair path when available; invoking it never implies approval of the pending action.
|
|
20
20
|
|
|
21
|
+
## Human review surface contract
|
|
22
|
+
|
|
23
|
+
Before asking for any substantive human approval, identify the exact **review subject** and put the best available review surface in front of the human.
|
|
24
|
+
|
|
25
|
+
Classify review material when more than one artifact is relevant:
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
PRIMARY — the artifact/diff/plan the human is deciding on
|
|
29
|
+
CONTEXT — supporting material that may help review
|
|
30
|
+
TRACEABILITY — provenance/reference material that is not itself being approved
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
When the current host supports opening or foregrounding the PRIMARY review surface, do so automatically immediately before the gate. Prefer the surface that best matches the decision:
|
|
34
|
+
|
|
35
|
+
- Markdown requirements, briefs, ADRs, and design documents → rendered Markdown preview when available;
|
|
36
|
+
- structured JSON approval artifacts → formatted source/editor preview plus a concise human-readable summary;
|
|
37
|
+
- implementation plans → the host's native plan surface, or a durable plan document when one exists;
|
|
38
|
+
- implementation acceptance → the meaningful local diff / Source Control review rather than a prose-only file list;
|
|
39
|
+
- final PR acceptance → the observed PR/diff at the exact reviewed head;
|
|
40
|
+
- other repository artifacts → the host's safest read-only preview/editor surface.
|
|
41
|
+
|
|
42
|
+
Do not open every supporting document and steal focus. Open the PRIMARY surface; name CONTEXT and TRACEABILITY material explicitly and make it easy to open when needed.
|
|
43
|
+
|
|
44
|
+
If the host cannot open the review surface automatically, provide an explicit path/link and enough concise review context that the human knows exactly what to inspect. Never imply that a path reference alone is equivalent to review.
|
|
45
|
+
|
|
46
|
+
Opening, previewing, foregrounding, or navigating to a review surface is **read-only presentation**. It never communicates approval, authorization, or acceptance. Only the explicit gate choice does that.
|
|
47
|
+
|
|
21
48
|
Do not gate routine mechanics individually after a bounded action is already authorized.
|
|
22
49
|
|
|
23
50
|
Missing access to GitHub admin policy metadata is not itself a human gate. Use configured workflow/check results, PR mergeability, repository documentation, and any observable enforced policy as evidence. Do not ask the human to open GitHub Settings and transcribe branch-protection/ruleset check names merely to continue; ask only when unavailable policy information creates a material unresolved decision at merge, release, or another consequential action.
|
|
24
51
|
|
|
52
|
+
## Implementation-plan review gate
|
|
53
|
+
|
|
54
|
+
For STANDARD/ELEVATED work, invoking `/start-work` authorizes requirement/context inspection, risk assessment, and implementation planning. It does **not** authorize substantive implementation by itself.
|
|
55
|
+
|
|
56
|
+
The required boundary is:
|
|
57
|
+
|
|
58
|
+
```text
|
|
59
|
+
requirements/context ready
|
|
60
|
+
→ implementation plan produced
|
|
61
|
+
→ PRIMARY plan review surface opened/foregrounded when supported
|
|
62
|
+
→ HUMAN IMPLEMENTATION-PLAN APPROVAL
|
|
63
|
+
→ short-lived work branch setup
|
|
64
|
+
→ substantive implementation
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Before the approval choice, state unambiguously that implementation has **not** started. The gate should identify the work item, risk level, review subject, key plan coverage, and any unresolved material decisions.
|
|
68
|
+
|
|
69
|
+
Use an explicit action set equivalent to:
|
|
70
|
+
|
|
71
|
+
```text
|
|
72
|
+
IMPLEMENTATION PLAN REVIEW REQUIRED
|
|
73
|
+
|
|
74
|
+
Implementation has NOT started.
|
|
75
|
+
|
|
76
|
+
1. Approve plan and begin implementation [PLAN APPROVAL + CODE WRITE]
|
|
77
|
+
2. Request changes to the plan [PLAN ONLY]
|
|
78
|
+
3. Review assumptions / risks [READ ONLY]
|
|
79
|
+
4. Stop [NO ACTION]
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
When the host exposes structured choice UI, render these as a single-select decision instead of a numbered menu while preserving the consequence labels.
|
|
83
|
+
|
|
84
|
+
For ELEVATED work, Reviewer challenges the proposed plan before the human gate. Reconcile material Reviewer findings into the final proposed plan, then put that final plan in front of the human. Do not ask the human to approve an initial plan while separate Reviewer objections remain unresolved.
|
|
85
|
+
|
|
86
|
+
After approval, routine implementation details may evolve without ceremonial re-approval. Reopen the plan gate when evidence requires a **material** change to approved architecture, scope, schema/data handling, security model, externally visible behavior, major dependencies, or verification strategy. Show what changed, why it changed, and the revised plan before implementation continues.
|
|
87
|
+
|
|
25
88
|
## Implementation branch setup
|
|
26
89
|
|
|
27
90
|
Once implementation itself is authorized, creating/switching to the repository-appropriate short-lived work branch is routine setup, not a separate decision gate, when branch policy/naming and work-item scope are clear and the operation preserves the worktree without history rewriting.
|
|
@@ -40,11 +40,38 @@ Presentation rules:
|
|
|
40
40
|
- use **single-select** when the choices are mutually exclusive or one action is being authorized;
|
|
41
41
|
- use **multi-select** only when selecting several choices at the same time is semantically valid;
|
|
42
42
|
- preserve one-material-question-at-a-time cadence whenever practical even if the host can batch questions;
|
|
43
|
-
- keep consequence/action labels such as `[READ ONLY]`, `[REQUIREMENTS GATE]`, or `[GIT + GITHUB WRITE]` visible when they matter to authorization;
|
|
43
|
+
- keep consequence/action labels such as `[READ ONLY]`, `[REQUIREMENTS GATE]`, `[PLAN APPROVAL + CODE WRITE]`, or `[GIT + GITHUB WRITE]` visible when they matter to authorization;
|
|
44
44
|
- include `Other / specify` or host-supported free-text input when the option set may be incomplete; after `Other / specify`, collect the missing value without forcing another invented menu;
|
|
45
45
|
- accept equivalent free-text answers even when a structured selector is shown, unless the host UI itself requires a selection;
|
|
46
46
|
- map the returned structured value to the same semantic choice the workflow would have accepted by label/text.
|
|
47
47
|
|
|
48
|
+
### Human review surface presentation
|
|
49
|
+
|
|
50
|
+
Before a substantive approval gate, follow the review-surface contract in `HUMAN_GATES.md`.
|
|
51
|
+
|
|
52
|
+
1. Identify the exact PRIMARY review subject.
|
|
53
|
+
2. Separate supporting CONTEXT and TRACEABILITY material when useful.
|
|
54
|
+
3. Put the best available PRIMARY review surface in front of the human before asking for approval.
|
|
55
|
+
4. Only then render the explicit approval/action choice.
|
|
56
|
+
|
|
57
|
+
Use the host's native surface when it is stronger than prose:
|
|
58
|
+
|
|
59
|
+
- Markdown artifact → rendered Markdown preview when supported;
|
|
60
|
+
- JSON approval artifact → formatted editor/preview plus a concise summary;
|
|
61
|
+
- implementation plan → native plan surface or durable plan document;
|
|
62
|
+
- implementation acceptance → Source Control / meaningful diff review;
|
|
63
|
+
- PR acceptance → exact PR/diff surface at the observed head.
|
|
64
|
+
|
|
65
|
+
In VS Code, when the Project Forge companion extension is installed and the host can invoke VS Code commands, `projectForge.openReviewArtifact` is the preferred Project Forge-owned action for repository artifacts. Pass the exact workspace-relative artifact path. The command is presentation-only and must reject targets outside the open workspace. For Markdown it opens rendered preview when available; other supported artifacts open in editor preview.
|
|
66
|
+
|
|
67
|
+
If the host exposes its own safe resource-opening or diff-opening capability, it may use that directly instead. Do not require the Project Forge command when the host already provides a stronger native review surface.
|
|
68
|
+
|
|
69
|
+
Do not automatically open every supporting document. Foreground only the PRIMARY review subject and list supporting context explicitly. If automatic opening is unavailable, provide a direct path/link and state that the human must open/review it before approving.
|
|
70
|
+
|
|
71
|
+
Opening a review surface is never approval. A preview event, editor focus, file read, diff display, or navigation action is read-only presentation and must not advance a gate.
|
|
72
|
+
|
|
73
|
+
For an implementation-plan gate, explicitly state that implementation has **not** started before offering approval. The approval action must be distinct from plan revision/read-only review actions.
|
|
74
|
+
|
|
48
75
|
### Recommendations inside choices
|
|
49
76
|
|
|
50
77
|
A recommendation is optional advice, not a required field and not an accepted decision.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Local Development Command Contract
|
|
2
|
+
|
|
3
|
+
## Principle
|
|
4
|
+
|
|
5
|
+
Project Forge Core is generic; each executable Project should become deterministic.
|
|
6
|
+
|
|
7
|
+
Bootstrap and early discovery do not need to know framework-specific build/run mechanics. Once an Engineering Enabler or equivalent foundational work item establishes executable application topology, the Project should expose unambiguous repository-owned commands for normal developer build and run behavior.
|
|
8
|
+
|
|
9
|
+
This contract does not require literal `build.ps1` or `run.ps1` files and does not introduce a `PROJECT_COMMANDS.json` registry. A repository-owned command may be a wrapper script, package/task script, Compose command, build-tool target, Make target, or another deterministic command already owned by the Project.
|
|
10
|
+
|
|
11
|
+
## Establishment
|
|
12
|
+
|
|
13
|
+
When the first foundational Engineering Enabler makes the application executable, establish the normal local developer contract as applicable:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
Build ........ authoritative Project-owned build command
|
|
17
|
+
Run .......... authoritative Project-owned developer runtime command
|
|
18
|
+
Persistence .. runtime-associated developer persistence, when applicable
|
|
19
|
+
Stop ......... how the normal developer runtime is stopped
|
|
20
|
+
Readiness .... what proves the selected runtime is actually ready
|
|
21
|
+
Transport .... required local HTTP/HTTPS/authentication properties when applicable
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
If application scaffolding or runtime is intentionally deferred, do not create placeholder commands merely to satisfy this contract. Ecosystem-native inference may remain a temporary fallback until executable topology exists.
|
|
25
|
+
|
|
26
|
+
## Default runtime and persistence
|
|
27
|
+
|
|
28
|
+
For Feature Brief and Engineering Enabler implementation/validation, use the established Project-owned local developer runtime and its associated persistence by default unless the developer explicitly selects a supported alternative.
|
|
29
|
+
|
|
30
|
+
When the Project defines a local container and associated database as its developer topology, that container/database pair is the default. Do not silently substitute a native process or separate checkout database merely because an ecosystem-native command is easier to invoke.
|
|
31
|
+
|
|
32
|
+
If the default runtime is absent, stopped, stale, or blocked by missing/pending schema prerequisites, route through `/setup local` or the repository-owned repair workflow. Do not bypass the problem by selecting another runtime/database.
|
|
33
|
+
|
|
34
|
+
An explicit developer selection may authorize a supported alternative within the relevant operation's existing boundaries. Once selected, inspect and operate only against that runtime and its persistence.
|
|
35
|
+
|
|
36
|
+
Automated tests remain separate: preserve isolated/disposable test databases or runtimes required by the repository's test contract. Never redirect tests into mutable developer data merely to reuse the developer run contract.
|
|
37
|
+
|
|
38
|
+
## Build command lifecycle
|
|
39
|
+
|
|
40
|
+
`/build` prefers the established Project-owned build command. Once that command exists, it is authoritative for the normal build target; a failing or stale wrapper is a Project contract problem, not permission to silently bypass it with framework-native fallback.
|
|
41
|
+
|
|
42
|
+
Where practical, CI should invoke the same underlying repository-owned build entry point so local and CI build semantics do not drift.
|
|
43
|
+
|
|
44
|
+
A work item that materially changes build topology should assess and update the build contract in the same accepted change. Examples include:
|
|
45
|
+
|
|
46
|
+
- changing build systems or package managers;
|
|
47
|
+
- splitting/combining application components;
|
|
48
|
+
- changing generated artifacts or build outputs;
|
|
49
|
+
- moving from native build orchestration to containerized build orchestration;
|
|
50
|
+
- changing required build-time configuration or dependency preparation.
|
|
51
|
+
|
|
52
|
+
## Run command lifecycle
|
|
53
|
+
|
|
54
|
+
`/run` prefers the established Project-owned runtime and associated persistence. A work item that materially changes local runtime topology should assess and update the run contract in the same accepted change. Examples include:
|
|
55
|
+
|
|
56
|
+
- native/container topology changes;
|
|
57
|
+
- frontend/backend composition changes;
|
|
58
|
+
- persistence engine/path/volume changes;
|
|
59
|
+
- launch-profile or port changes;
|
|
60
|
+
- HTTP/HTTPS or authentication transport changes;
|
|
61
|
+
- required initialization/migration/readiness behavior;
|
|
62
|
+
- stop/cleanup mechanics.
|
|
63
|
+
|
|
64
|
+
The run command must not hide setup or destructive repair. `/run` may perform read-only prerequisite checks, but normal installation, forward initialization/migration, container convergence, or repair remain owned by `/setup` or repository-specific setup tooling.
|
|
65
|
+
|
|
66
|
+
## Readiness semantics
|
|
67
|
+
|
|
68
|
+
Process startup is not application readiness.
|
|
69
|
+
|
|
70
|
+
Keep these dimensions distinct:
|
|
71
|
+
|
|
72
|
+
```text
|
|
73
|
+
Process startup
|
|
74
|
+
Artifact/version identity
|
|
75
|
+
Persistence/schema readiness
|
|
76
|
+
Transport readiness
|
|
77
|
+
Functional checks actually performed
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
A successful `/version` call, open database connection, or connection-only health endpoint does not prove schema compatibility, authentication usability, OAuth readiness, or another user workflow unless that condition is independently verified.
|
|
81
|
+
|
|
82
|
+
When safe non-mutating verification is unavailable, report the gap instead of inventing confidence.
|
|
83
|
+
|
|
84
|
+
## Command resolution fallback
|
|
85
|
+
|
|
86
|
+
Core remains stack-neutral. `/build` and `/run` may still infer an unambiguous ecosystem-native command when no Project-owned command exists yet. That is a fallback for early/incomplete Projects, not the preferred mature state.
|
|
87
|
+
|
|
88
|
+
Once a Project-owned command exists, do not silently fall through to a different native command because the authoritative command fails. Fix or explicitly change the Project contract through the relevant accepted work item.
|
|
89
|
+
|
|
90
|
+
## Work-item maintenance rule
|
|
91
|
+
|
|
92
|
+
For Feature Brief and Engineering Enabler work that materially changes executable application topology, the implementation/review should assess these impacts before delivery:
|
|
93
|
+
|
|
94
|
+
```text
|
|
95
|
+
BUILD CONTRACT IMPACT
|
|
96
|
+
RUN CONTRACT IMPACT
|
|
97
|
+
SETUP CONTRACT IMPACT
|
|
98
|
+
CI CONTRACT IMPACT
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Update affected Project-owned commands and documentation in the same work item rather than leaving them for rediscovery in a later session.
|
|
102
|
+
|
|
103
|
+
This is an engineering-interface maintenance rule, not a requirement that every work item touch build/run files.
|
|
@@ -8,7 +8,7 @@ disable-model-invocation: true
|
|
|
8
8
|
|
|
9
9
|
# Build
|
|
10
10
|
|
|
11
|
-
`/build` is a thin local helper.
|
|
11
|
+
`/build` is a thin local helper. Core stays stack-neutral; the Project becomes deterministic by exposing a repository-owned build command once executable application topology exists. Follow `docs/process/LOCAL_DEVELOPMENT_COMMANDS.md` when present.
|
|
12
12
|
|
|
13
13
|
## Contract
|
|
14
14
|
|
|
@@ -16,12 +16,17 @@ Invoking `/build` authorizes one bounded local build attempt for the requested t
|
|
|
16
16
|
|
|
17
17
|
Resolve the build command from current repository evidence in this order:
|
|
18
18
|
|
|
19
|
-
1. an explicit
|
|
20
|
-
2. an explicit
|
|
21
|
-
3. an
|
|
19
|
+
1. an explicit developer-selected supported build target, when one was supplied;
|
|
20
|
+
2. an explicit repository-owned build wrapper or documented command;
|
|
21
|
+
3. an explicit package/task script whose purpose is build;
|
|
22
|
+
4. an unambiguous ecosystem-native build entry point already present in the repository, but only when the Project has not yet established a repository-owned build contract.
|
|
22
23
|
|
|
23
24
|
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
|
|
|
26
|
+
Once an executable Project has an established repository-owned build command, treat that command as authoritative. If it is missing, stale, or fails because the Project topology changed, report the contract problem; do not silently bypass it with a framework-native fallback. The work item that materially changes build topology should maintain the Project-owned build command in the same accepted change.
|
|
27
|
+
|
|
28
|
+
During an intentionally deferred or first-scaffold phase, ecosystem-native inference remains a fallback. Repeated inference is not the preferred mature Project state.
|
|
29
|
+
|
|
25
30
|
## Preconditions
|
|
26
31
|
|
|
27
32
|
Before execution:
|
|
@@ -40,7 +45,7 @@ If dependencies or workstation tools are missing, recommend `/setup` rather than
|
|
|
40
45
|
Run the selected build visibly and report:
|
|
41
46
|
|
|
42
47
|
- target;
|
|
43
|
-
- resolved repository-owned command identity;
|
|
48
|
+
- resolved repository-owned command identity, or clearly labeled inference fallback when no Project-owned command exists yet;
|
|
44
49
|
- success/failure and exit code when available;
|
|
45
50
|
- produced artifact/output locations when the build contract makes them explicit;
|
|
46
51
|
- effective application release/build identity when the build exposes it;
|
|
@@ -115,13 +115,32 @@ Preserved UX/cross-cutting constraints: ...
|
|
|
115
115
|
Roadmap maturity retained: ...
|
|
116
116
|
Implementation-specific material excluded: ...
|
|
117
117
|
Items requiring reconciliation: ...
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Then make the artifact itself the PRIMARY review subject. Before asking for approval:
|
|
121
|
+
1. identify `PROJECT_REQUIREMENTS.json` explicitly;
|
|
122
|
+
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;
|
|
124
|
+
4. only then ask the approval question.
|
|
125
|
+
|
|
126
|
+
In VS Code, when available, use `projectForge.openReviewArtifact` with `PROJECT_REQUIREMENTS.json`. Opening the file is read-only presentation and never changes its state.
|
|
127
|
+
|
|
128
|
+
Present a gate equivalent to:
|
|
129
|
+
|
|
130
|
+
```text
|
|
131
|
+
HUMAN REVIEW REQUIRED
|
|
132
|
+
|
|
133
|
+
Gate: PORTABLE REQUIREMENTS APPROVAL
|
|
134
|
+
Primary artifact: PROJECT_REQUIREMENTS.json
|
|
135
|
+
Opened: formatted editor preview / <fallback surface>
|
|
136
|
+
Items requiring reconciliation: NONE / list
|
|
118
137
|
|
|
119
138
|
Approve PROJECT_REQUIREMENTS.json as the portable requirements baseline?
|
|
120
139
|
```
|
|
121
140
|
|
|
122
141
|
Only explicit human approval may set `state: "approved"`.
|
|
123
142
|
|
|
124
|
-
`/export-requirements approve` may perform only that bounded finalization after confirming the reviewed content/evidence has not materially changed.
|
|
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.
|
|
125
144
|
|
|
126
145
|
## Safety and scope
|
|
127
146
|
|