@mriekki/project-forge 4.12.0 → 4.13.1
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 +35 -15
- 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 +7 -5
- package/assets/generated/core/core/process/HUMAN_GATES.md +21 -4
- package/assets/generated/core/core/process/INTERACTIVE_SESSION_GUIDE.md +15 -6
- 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/run/SKILL.md +39 -13
- package/assets/generated/core/core/skills/start-work/SKILL.md +15 -6
- package/assets/generated/core/tools/vscode_work_item_status/extension/README.md +8 -4
- package/assets/generated/core/tools/vscode_work_item_status/extension/extension.js +79 -21
- package/assets/generated/core/tools/vscode_work_item_status/extension/package.json +26 -2
- 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.1",
|
|
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": "a88c33ec1c93e120c70018a01c018f59dc2f74f2",
|
|
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.1",
|
|
5
5
|
"components": {
|
|
6
6
|
"core": {
|
|
7
|
-
"revision": "
|
|
7
|
+
"revision": "a88c33ec1c93e120c70018a01c018f59dc2f74f2",
|
|
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": "3bb0abb63dd2e7a151c432d08eca85fe604cb043a865bfa337024ebd1c372301"
|
|
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",
|
|
@@ -46,7 +51,7 @@
|
|
|
46
51
|
{
|
|
47
52
|
"source": "core/skills/start-work/SKILL.md",
|
|
48
53
|
"destination": ".github/skills/start-work/SKILL.md",
|
|
49
|
-
"sha256": "
|
|
54
|
+
"sha256": "8a1213e59c5452feb5c8820530f6131115f88419299e42462ee5d32361d62fb6"
|
|
50
55
|
},
|
|
51
56
|
{
|
|
52
57
|
"source": "core/skills/setup/SKILL.md",
|
|
@@ -56,12 +61,12 @@
|
|
|
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",
|
|
@@ -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": "d884eccd7e9e04d7c81868792adebcdc7f376206786ced37d467f81fca6dbd7f"
|
|
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": "f7573b9926878da3db4353db7297b66c9d907844142ae6486c7fd7580f187e3b"
|
|
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": "1dd1f7bba7f6e519ad73f1ee8ad67900cabec2ef475b1b6bc5db931ab9cd615b"
|
|
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": "2688291de42fab15edd3487cc17410bf57d8358e9f606e292dc44c9cb0439009"
|
|
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": "54963b69bef2d9f763a6c92ad2c2b3105d3f10dd69542f72167de7e57db18982"
|
|
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,13 +14,15 @@ 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.
|
|
17
|
+
Before any substantive approval gate, identify the exact PRIMARY review subject for the current work item/scope 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
18
|
|
|
19
|
-
|
|
19
|
+
Every artifact-backed approval question must carry its own work-item/scope identity, approval purpose, exact PRIMARY artifact link/path, truthful presentation status, and consequence labels. Do not rely on links in earlier commentary, editor focus, a global plan, or another work item's artifact. The artifact named in the gate must be the same artifact requested/opened for review. If automatic opening is unavailable or fails, say so inside the gate and provide the exact link/path plus a deterministic manual fallback rather than fabricating success.
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
In VS Code, when the Project Forge companion extension is installed, use the exact-path `projectForge.openReviewArtifact` command or Project Forge language-model review tool when the current host can invoke it. The helper is read-only, workspace-confined, must fail on ambiguous multi-root matches instead of guessing from editor focus, and should report actual presentation mode when available. Use a stronger native host review/diff surface when available.
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
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, resolve the exact work-item-specific PRIMARY artifact when one exists, foreground that exact review surface, state that implementation has not started, include the same exact artifact link/path and presentation status inside the approval question, 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.
|
|
24
|
+
|
|
25
|
+
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 PRIMARY plan presented and linked before continuing. Stale approval does not authorize a materially changed plan.
|
|
24
26
|
|
|
25
27
|
Once a bounded action is authorized, routine mechanics inside that scope should proceed without repeated ceremonial confirmation.
|
|
26
28
|
|
|
@@ -32,7 +34,7 @@ During interactive questioning, prefer concise choice-first options for genuinel
|
|
|
32
34
|
|
|
33
35
|
When an authorized action requires a developer-owned interactive terminal prompt, follow the interactive-terminal handoff in `INTERACTIVE_SESSION_GUIDE.md`: collect any distinct bounded authorization first through the host-native structured control, then immediately provide the exact command in a standalone fenced code block, state the working directory when relevant, explain the local prompt briefly, keep passphrases/passwords/tokens/private keys local to the terminal, and say what result to report back for deterministic verification. Do not make the inability to inject terminal keystrokes the main response when a copyable command is sufficient. If the host can insert terminal text, insert only the non-secret command for human review/execution rather than silently executing the interactive step.
|
|
34
36
|
|
|
35
|
-
Make a recommendation only when current evidence, repository policy, or a clear engineering tradeoff supports one. Mark exactly one supported choice with the host's `recommended` indicator when available and give a brief rationale. When the host does not expose recommendation metadata, append `[RECOMMENDED]` to exactly one option label and keep the rationale visible. A default/preselected option may match the recommendation, but a default alone must never communicate advice or human approval. If no option is clearly better, do not mark any option recommended and do not use a default that implies
|
|
37
|
+
Make a recommendation only when current evidence, repository policy, or a clear engineering tradeoff supports one. Mark exactly one supported choice with the host's `recommended` indicator when available and give a brief rationale. When the host does not expose recommendation metadata, append `[RECOMMENDED]` to exactly one option label and keep the rationale visible. A default/preselected option may match the recommendation, but a default alone must never communicate advice or human approval. If no option is clearly better, do not mark any option recommended and do not use a default that implies preference. A recommendation is advice, not approval: record only the human's selected/confirmed answer. If the human asks for no recommendation on one decision, honor that for that decision only; later questions may still include evidence-backed recommendations.
|
|
36
38
|
|
|
37
39
|
Keep factual/environment-specific values and questions intended to elicit the human's own framing, reasoning, debugging approach, design rationale, or understanding open-ended unless options are later useful as scaffolding.
|
|
38
40
|
|
|
@@ -41,10 +41,22 @@ When the current host supports opening or foregrounding the PRIMARY review surfa
|
|
|
41
41
|
|
|
42
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
43
|
|
|
44
|
-
|
|
44
|
+
Every artifact-backed approval question must be self-contained. The gate itself must identify:
|
|
45
|
+
|
|
46
|
+
- the specific work item or approval scope;
|
|
47
|
+
- the exact approval purpose/subject;
|
|
48
|
+
- the exact PRIMARY artifact path or clickable link that is being approved;
|
|
49
|
+
- presentation status when an automatic open was attempted (`rendered Markdown opened`, `editor fallback opened`, `automatic opening unavailable/failed`, or equivalent truthful evidence);
|
|
50
|
+
- the consequence labels for each action.
|
|
51
|
+
|
|
52
|
+
Do not rely on an artifact link in earlier commentary, the active editor, a global plan, or another work item's document. The PRIMARY artifact named in the gate must be the same artifact that was requested/opened for presentation.
|
|
53
|
+
|
|
54
|
+
If the host cannot open the review surface automatically, provide the exact path/link inside the approval question and a deterministic manual fallback. For Markdown in VS Code on Windows, the fallback may say to open that exact file and press `Ctrl+Shift+V`. Never imply that a path reference alone is equivalent to review.
|
|
45
55
|
|
|
46
56
|
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
57
|
|
|
58
|
+
If the PRIMARY artifact changes materially after approval, present and link the revised PRIMARY artifact before asking again. Navigation, preview, cancellation, or a `where is it?` question never preserves or creates approval for a materially changed subject.
|
|
59
|
+
|
|
48
60
|
Do not gate routine mechanics individually after a bounded action is already authorized.
|
|
49
61
|
|
|
50
62
|
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.
|
|
@@ -64,13 +76,18 @@ requirements/context ready
|
|
|
64
76
|
→ substantive implementation
|
|
65
77
|
```
|
|
66
78
|
|
|
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.
|
|
79
|
+
Before the approval choice, state unambiguously that implementation has **not** started. The gate should identify the work item, risk level, exact review subject/artifact, presentation status, key plan coverage, and any unresolved material decisions.
|
|
68
80
|
|
|
69
81
|
Use an explicit action set equivalent to:
|
|
70
82
|
|
|
71
83
|
```text
|
|
72
84
|
IMPLEMENTATION PLAN REVIEW REQUIRED
|
|
73
85
|
|
|
86
|
+
Work item: <ID / key / concise change>
|
|
87
|
+
Approval subject: final proposed implementation plan
|
|
88
|
+
Primary artifact: <exact clickable plan link/path | native plan surface>
|
|
89
|
+
Presentation: <rendered Markdown opened | editor fallback opened | automatic opening unavailable/failed | native plan foregrounded>
|
|
90
|
+
|
|
74
91
|
Implementation has NOT started.
|
|
75
92
|
|
|
76
93
|
1. Approve plan and begin implementation [PLAN APPROVAL + CODE WRITE]
|
|
@@ -79,11 +96,11 @@ Implementation has NOT started.
|
|
|
79
96
|
4. Stop [NO ACTION]
|
|
80
97
|
```
|
|
81
98
|
|
|
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.
|
|
99
|
+
When the host exposes structured choice UI, render these as a single-select decision instead of a numbered menu while preserving the consequence labels and the same work-item/artifact context in the question itself.
|
|
83
100
|
|
|
84
101
|
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
102
|
|
|
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.
|
|
103
|
+
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. The renewed gate must link/present the revised PRIMARY artifact rather than relying on the stale approved plan.
|
|
87
104
|
|
|
88
105
|
## Implementation branch setup
|
|
89
106
|
|
|
@@ -49,10 +49,11 @@ Presentation rules:
|
|
|
49
49
|
|
|
50
50
|
Before a substantive approval gate, follow the review-surface contract in `HUMAN_GATES.md`.
|
|
51
51
|
|
|
52
|
-
1. Identify the exact PRIMARY review subject.
|
|
52
|
+
1. Identify the exact PRIMARY review subject for the current work item/gate.
|
|
53
53
|
2. Separate supporting CONTEXT and TRACEABILITY material when useful.
|
|
54
54
|
3. Put the best available PRIMARY review surface in front of the human before asking for approval.
|
|
55
|
-
4.
|
|
55
|
+
4. Capture the actual presentation result when the host reports one.
|
|
56
|
+
5. Render the explicit approval/action choice with the same exact work-item/artifact identity inside the question itself.
|
|
56
57
|
|
|
57
58
|
Use the host's native surface when it is stronger than prose:
|
|
58
59
|
|
|
@@ -62,16 +63,24 @@ Use the host's native surface when it is stronger than prose:
|
|
|
62
63
|
- implementation acceptance → Source Control / meaningful diff review;
|
|
63
64
|
- PR acceptance → exact PR/diff surface at the observed head.
|
|
64
65
|
|
|
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
|
|
66
|
+
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 and ambiguous multi-root matches rather than guessing from editor focus.
|
|
66
67
|
|
|
67
|
-
|
|
68
|
+
On hosts that expose the Project Forge language-model review tool, use it only with the exact already-resolved PRIMARY artifact path. Its result is presentation evidence, not approval. The result should distinguish resolved artifact URI, requested presentation mode, actual opened mode, cancellation, and failure/unavailable state. For Markdown, distinguish rendered Markdown from ordinary editor-preview fallback.
|
|
68
69
|
|
|
69
|
-
|
|
70
|
+
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/tool when the host already provides a stronger native review surface.
|
|
70
71
|
|
|
71
|
-
|
|
72
|
+
Do not automatically open every supporting document. Foreground only the PRIMARY review subject and list supporting context explicitly.
|
|
73
|
+
|
|
74
|
+
For every artifact-backed gate, put the exact artifact path/link inside the approval question itself. Do not make the human hunt through earlier commentary for the link. The question should also identify the work item, approval purpose, and truthful presentation status.
|
|
75
|
+
|
|
76
|
+
If automatic opening is unavailable or fails, say so briefly in the gate and provide a deterministic fallback. For Markdown in VS Code on Windows, tell the human to open the exact linked file and press `Ctrl+Shift+V`. Do not block planning merely because automatic opening is unavailable, and never fabricate a successful open.
|
|
77
|
+
|
|
78
|
+
Opening a review surface is never approval. A preview event, editor focus, file read, diff display, navigation action, cancellation, or `where is it?` question is read-only presentation and must not advance a gate.
|
|
72
79
|
|
|
73
80
|
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
81
|
|
|
82
|
+
When the approval subject changes materially, present and link the revised PRIMARY artifact before asking again. Do not reuse stale presentation evidence or stale approval for the revised subject.
|
|
83
|
+
|
|
75
84
|
### Recommendations inside choices
|
|
76
85
|
|
|
77
86
|
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;
|