@cassiomc1/forgeloop 1.11.1 → 1.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/.github/copilot-instructions.md +1 -1
- package/AGENTS.md +1 -1
- package/CLAUDE.md +1 -1
- package/CONTRIBUTING.md +90 -0
- package/DOCS_INDEX.md +13 -11
- package/ENG/c-development-eng.md +112 -0
- package/ENG/cpp-development-eng.md +109 -0
- package/ENG/dotnet-aspnetcore-development-eng.md +401 -0
- package/ENG/flutter-development-eng.md +2106 -0
- package/ENG/go-development-eng.md +103 -0
- package/ENG/java-development-eng.md +125 -0
- package/ENG/nodejs-backend-development-eng.md +605 -0
- package/ENG/php-development-eng.md +104 -0
- package/ENG/rust-development-eng.md +422 -0
- package/ENG/sql-development-eng.md +108 -0
- package/ENG/swift-development-eng.md +111 -0
- package/ENG/typescript-development-eng.md +108 -0
- package/GUIDE_ROUTER.md +455 -4
- package/LOOP_SYSTEM_DESIGN.md +10 -6
- package/QUALITY_SCORECARD.md +2 -0
- package/README.md +50 -38
- package/THIRD_PARTY_NOTICES.md +19 -7
- package/completions/_forgeloop +3 -3
- package/completions/forgeloop.bash +3 -3
- package/completions/forgeloop.fish +7 -0
- package/docs/AGENT_PROTOCOL_SUMMARY.md +55 -2
- package/docs/CLI_REFERENCE.md +28 -6
- package/docs/DOCUMENTATION_GUIDE.md +2 -1
- package/docs/GETTING_STARTED.md +59 -0
- package/docs/MCP.md +1 -1
- package/docs/PACKAGE_CONTENTS.md +29 -8
- package/docs/RECIPES.md +23 -0
- package/docs/RELEASE_CHECKLIST.md +51 -9
- package/docs/TROUBLESHOOTING.md +100 -2
- package/docs/assets/diagrams/forgeloop-engineering-flow.html +19 -6
- package/docs/assets/diagrams/forgeloop-engineering-flow.receipt.json +6 -6
- package/docs/assets/diagrams/forgeloop-engineering-flow.svg +5 -5
- package/docs/diagrams/forgeloop-engineering-flow.workflow.json +12 -2
- package/docs/diagrams/reviews/forgeloop-engineering-flow.review.json +3 -3
- package/docs/documentation-manifest.json +652 -0
- package/docs/protocol-requirements.json +77 -0
- package/package.json +19 -4
- package/schemas/routing-input.schema.json +14 -1
- package/scripts/CI_VALIDATORS.md +84 -11
- package/scripts/generate-agent-protocol-summary.mjs +36 -0
- package/src/commands/next.js +19 -7
- package/src/commands/route.js +5 -0
- package/src/commands/task-create.js +84 -25
- package/src/commands/task-list.js +22 -2
- package/src/config/guides.json +48 -0
- package/src/core/build-script.js +151 -0
- package/src/core/c-cpp-project.js +143 -0
- package/src/core/cli-command-definitions.js +8 -1
- package/src/core/command-executors.js +5 -3
- package/src/core/command-input.js +140 -102
- package/src/core/contract-presets.js +82 -0
- package/src/core/error-codes.js +3 -3
- package/src/core/filesystem.js +1 -10
- package/src/core/go-project.js +206 -0
- package/src/core/java-project.js +403 -0
- package/src/core/multi-language-project.js +117 -0
- package/src/core/next-explanation.js +63 -0
- package/src/core/php-project.js +85 -0
- package/src/core/project-detection.js +2227 -0
- package/src/core/reconcile-closure.js +4 -1
- package/src/core/router.js +233 -7
- package/src/core/rust-project.js +400 -0
- package/src/core/sql-project.js +141 -0
- package/src/core/swift-project.js +200 -0
- package/src/core/typescript-project.js +349 -0
- package/src/core/xml-structure.js +123 -0
package/docs/RECIPES.md
CHANGED
|
@@ -35,6 +35,18 @@ Concise, copy-paste friendly recipes for common ForgeLoop tasks.
|
|
|
35
35
|
|
|
36
36
|
### Recipe 1 — Start a New Task
|
|
37
37
|
|
|
38
|
+
When the task shape is known but the final contract has not been written, first
|
|
39
|
+
request a read-only preset proposal:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
forgeloop task-create --task task-001 --claim src --claim tests \
|
|
43
|
+
--preset feature --preview --json
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Review the bounded proposal, then repeat without `--preview` before continuing
|
|
47
|
+
with the task workflow below. Preview creates no task namespace and acquires no
|
|
48
|
+
project claim lock.
|
|
49
|
+
|
|
38
50
|
<!-- FORGELOOP EXAMPLE: recipes:create-task | exit=0 | json.taskId=task-001 -->
|
|
39
51
|
```bash
|
|
40
52
|
forgeloop task-create --task task-001 --claim src --claim tests --json
|
|
@@ -243,6 +255,12 @@ forgeloop task-create --task billing-feature --claim src/billing --claim tests/b
|
|
|
243
255
|
# 3. List active tasks
|
|
244
256
|
forgeloop task-list --json
|
|
245
257
|
|
|
258
|
+
# 3a. Filter and page the read-only ownership-aware projection
|
|
259
|
+
forgeloop task-list --active --limit 20 --offset 0 --json
|
|
260
|
+
|
|
261
|
+
# 3b. Ask for a bounded blocker/recovery explanation when needed
|
|
262
|
+
forgeloop next --task auth-feature --explain --json
|
|
263
|
+
|
|
246
264
|
# 4. Work on task-1
|
|
247
265
|
forgeloop route --task auth-feature --work clean-code --surface backend
|
|
248
266
|
forgeloop preflight --task auth-feature --json
|
|
@@ -256,6 +274,11 @@ forgeloop complete --task auth-feature --json
|
|
|
256
274
|
forgeloop task-unlock --task auth-feature --force --json
|
|
257
275
|
```
|
|
258
276
|
|
|
277
|
+
`task-list` discovers all valid task namespaces before applying filters and
|
|
278
|
+
pagination. Its JSON response reports `total` and `hasMore`; filtering does not
|
|
279
|
+
skip ownership or corruption checks, and listing never deletes ledger or
|
|
280
|
+
recovery evidence.
|
|
281
|
+
|
|
259
282
|
---
|
|
260
283
|
|
|
261
284
|
### Recipe 12 — Migrate Legacy 1.0 Single-Task Layout
|
|
@@ -3,14 +3,35 @@
|
|
|
3
3
|
This is the current release checklist for `@cassiomc1/forgeloop`. It is a
|
|
4
4
|
preparation and verification checklist; it does not authorize publication.
|
|
5
5
|
|
|
6
|
-
## ForgeLoop 1.
|
|
6
|
+
## ForgeLoop 1.12.0 candidate scope
|
|
7
7
|
|
|
8
|
-
The 1.
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
The 1.12.0 candidate carries the first-class Flutter guide and deterministic,
|
|
9
|
+
scope-aware project routing added by PR #165. The candidate must keep these
|
|
10
|
+
boundaries explicit:
|
|
11
11
|
|
|
12
|
-
- [ ] README
|
|
13
|
-
|
|
12
|
+
- [ ] README catalog and architecture fallback identify
|
|
13
|
+
`ENG/flutter-development-eng.md` and explain that the specialist is
|
|
14
|
+
selected only from a structurally parsed
|
|
15
|
+
`dependencies.flutter.sdk: flutter` entry in affected scope.
|
|
16
|
+
- [ ] README catalog and architecture fallback identify
|
|
17
|
+
`ENG/rust-development-eng.md` and explain that the specialist is
|
|
18
|
+
selected only from a structurally parsed `[package]` or `[workspace]`
|
|
19
|
+
table in an affected `Cargo.toml`.
|
|
20
|
+
- [ ] README catalog and architecture fallback identify
|
|
21
|
+
`ENG/nodejs-backend-development-eng.md` and explain that Node.js
|
|
22
|
+
backend/runtime evidence is distinct from build, test, and configuration
|
|
23
|
+
tooling executed under Node.js.
|
|
24
|
+
- [ ] README catalog and architecture fallback identify the C, C++, Java, SQL,
|
|
25
|
+
Go, TypeScript, PHP, and Swift specialists and explain their bounded
|
|
26
|
+
structural evidence and same-root composition rules.
|
|
27
|
+
- [ ] The canonical engineering-flow source and regenerated HTML/SVG diagram
|
|
28
|
+
explain project detection as routing context, not verification or
|
|
29
|
+
completion evidence.
|
|
30
|
+
- [ ] Positive clean-room package routing selects `flutter`, `clean`, and
|
|
31
|
+
`test` for a Flutter root.
|
|
32
|
+
- [ ] Documentation-only mentions, lockfiles, hosted packages, malformed
|
|
33
|
+
dependency shapes, symlink traversal, and unrelated monorepo roots do
|
|
34
|
+
not activate the Flutter specialist.
|
|
14
35
|
- [ ] [`docs/REPOSITORY_INDEX.md`](./REPOSITORY_INDEX.md) and
|
|
15
36
|
[`docs/PERSISTENT_SEARCH_TRANSPORT.md`](./PERSISTENT_SEARCH_TRANSPORT.md)
|
|
16
37
|
agree on tgrep management, no-fallback behavior, local IPC, ownership,
|
|
@@ -24,6 +45,22 @@ This branch prepares the candidate and its pull request. npm publication,
|
|
|
24
45
|
tagging, GitHub Release, deployment, and merge remain separately authorized
|
|
25
46
|
actions.
|
|
26
47
|
|
|
48
|
+
## CI minimization validation
|
|
49
|
+
|
|
50
|
+
- [ ] `npm run verify:fast` passes for edit-time feedback.
|
|
51
|
+
- [ ] `npm run verify:prepush` passes before the release pull request; MCP
|
|
52
|
+
setup, when needed, was run explicitly with `npm run mcp:setup`.
|
|
53
|
+
- [ ] Ordinary PR validation uses `.github/workflows/pr-core.yml` with the
|
|
54
|
+
unchanged required contexts `audit`, `CodeQL`, `Verify generated Archify
|
|
55
|
+
diagram`, `validate (22)`, `tarball smoke (ubuntu-latest)`, and
|
|
56
|
+
`dependency-review`.
|
|
57
|
+
- [ ] `validate (22)` is always present and fails closed on an applicable
|
|
58
|
+
prerequisite failure, cancellation, or unexpected skip.
|
|
59
|
+
- [ ] Path classification scenarios cover README-only, ordinary source,
|
|
60
|
+
Repository Index, package-export, and forced release validation.
|
|
61
|
+
- [ ] Main-branch documentation, Node compatibility, package smoke, audit,
|
|
62
|
+
and Windows full-suite workflows remain available for broader validation.
|
|
63
|
+
|
|
27
64
|
## Contract and package identity
|
|
28
65
|
|
|
29
66
|
- [ ] `package.json` and `package-lock.json` contain the same package version.
|
|
@@ -37,6 +74,9 @@ actions.
|
|
|
37
74
|
- [ ] [`docs/PACKAGE_CONTENTS.md`](./PACKAGE_CONTENTS.md) matches the current
|
|
38
75
|
`package.json` file list and documents intentional inclusions and
|
|
39
76
|
exclusions.
|
|
77
|
+
- [ ] The candidate tarball includes every registered specialist guide and every
|
|
78
|
+
other `src/config/guides.json` path; no repository-only guide state is
|
|
79
|
+
packaged.
|
|
40
80
|
- [ ] Every maintained `src/**/*.js` module is present in the candidate
|
|
41
81
|
tarball; only the four explicitly retired compatibility helpers are
|
|
42
82
|
excluded.
|
|
@@ -57,7 +97,8 @@ actions.
|
|
|
57
97
|
- [ ] Stale contract/route identity rejects handoff creation or acceptance.
|
|
58
98
|
- [ ] An invalid event ledger projects `INCONSISTENT`.
|
|
59
99
|
- [ ] Continuity lint remains non-authoritative and non-evidence.
|
|
60
|
-
- [ ] `npm run dependency:policy` passes
|
|
100
|
+
- [ ] `npm run dependency:policy` passes with only the approved exact runtime
|
|
101
|
+
parser dependency and approved development dependencies.
|
|
61
102
|
- [ ] `npm run lint` passes.
|
|
62
103
|
- [ ] `npm test` passes.
|
|
63
104
|
- [ ] `npm run benchmark:profiles:check` passes; absent provider/host history
|
|
@@ -89,8 +130,9 @@ actions.
|
|
|
89
130
|
## Integration and cross-platform evidence
|
|
90
131
|
|
|
91
132
|
- [ ] `npm run pack:check` and `npm run pack:smoke` pass.
|
|
92
|
-
- [ ] `npm pack --dry-run` includes Repository Index
|
|
93
|
-
excludes native release binaries and derived
|
|
133
|
+
- [ ] `npm pack --dry-run` includes the Flutter guide, Repository Index
|
|
134
|
+
runtime/manifest/docs, and excludes native release binaries and derived
|
|
135
|
+
`.forgeloop` index data.
|
|
94
136
|
- [ ] The npm publication workflow runs `npm run pack:smoke` before its
|
|
95
137
|
provenance-backed publish step.
|
|
96
138
|
- [ ] `npm run mcp:test` either runs the configured MCP tests or reports the
|
package/docs/TROUBLESHOOTING.md
CHANGED
|
@@ -7,6 +7,7 @@ This guide provides symptom-first recovery procedures for common ForgeLoop proto
|
|
|
7
7
|
## Quick Symptom Index
|
|
8
8
|
|
|
9
9
|
- [`preflight` is `BLOCKED`](#symptom-preflight-is-blocked)
|
|
10
|
+
- [Project-aware .NET routing is missing](#symptom-project-aware-net-routing-is-missing)
|
|
10
11
|
- [`forgeloop next` returns `RESOLVE_BLOCKER`](#symptom-forgeloop-next-returns-resolve_blocker)
|
|
11
12
|
- [`forgeloop next` returns `RECORD_DIAGNOSIS`](#symptom-forgeloop-next-returns-record_diagnosis)
|
|
12
13
|
- [Progress is `STALLED` or `forgeloop next` returns `CHANGE_STRATEGY`](#symptom-progress-is-stalled)
|
|
@@ -37,6 +38,7 @@ This guide provides symptom-first recovery procedures for common ForgeLoop proto
|
|
|
37
38
|
- [Repository search fails](#symptom-repository-search-fails)
|
|
38
39
|
- [Persistent search host is unavailable](#symptom-persistent-search-host-is-unavailable)
|
|
39
40
|
- [Persistent search host ownership is unverified or stale](#symptom-persistent-search-host-ownership-is-unverified-or-stale)
|
|
41
|
+
- [Local validation tier is unavailable or reports `NOT_VERIFIED`](#symptom-local-validation-tier-is-unavailable-or-reports-not_verified)
|
|
40
42
|
- [Another harness cannot resume the task](#symptom-another-harness-cannot-resume)
|
|
41
43
|
- [Task claim conflict or recovered task](#symptom-task-creation-blocked-by-a-write-claim-conflict-e_task_scope_conflict)
|
|
42
44
|
- [Stable Error & Reason Code Reference](#stable-error-and-reason-codes)
|
|
@@ -54,6 +56,102 @@ forgeloop protocol-info --json
|
|
|
54
56
|
```
|
|
55
57
|
<!-- END FORGELOOP EXAMPLE -->
|
|
56
58
|
|
|
59
|
+
### Symptom: local validation tier is unavailable or reports `NOT_VERIFIED`
|
|
60
|
+
|
|
61
|
+
#### What it means
|
|
62
|
+
|
|
63
|
+
The selected local validation tier could not run a required external validator
|
|
64
|
+
or setup prerequisite. `NOT_VERIFIED` is an explicit limitation, not a test
|
|
65
|
+
pass and not permission to install tools implicitly.
|
|
66
|
+
|
|
67
|
+
#### Safe recovery
|
|
68
|
+
|
|
69
|
+
1. Check the tier and its command list with `node scripts/run-validation.mjs
|
|
70
|
+
--tier <fast|local|prepush|release> --list`.
|
|
71
|
+
2. Run `npm run mcp:setup` explicitly when MCP dependencies are in scope and
|
|
72
|
+
installation is authorized.
|
|
73
|
+
3. Confirm Python 3.9 or newer is available for the frozen validators.
|
|
74
|
+
4. Re-run the tier and record any still-unavailable check as `NOT_VERIFIED` in
|
|
75
|
+
the validation report.
|
|
76
|
+
|
|
77
|
+
The ordinary PR workflow remains path-aware and always publishes the required
|
|
78
|
+
status contexts; its `validate (22)` aggregator fails closed on an applicable
|
|
79
|
+
job failure, cancellation, or unexpected skip. Local success cannot substitute
|
|
80
|
+
for a required remote security or cross-platform check.
|
|
81
|
+
|
|
82
|
+
### Symptom: the Node.js test suite is slow locally
|
|
83
|
+
|
|
84
|
+
#### Inspect
|
|
85
|
+
|
|
86
|
+
Use the fast, watch, and CI-specific entry points before running the full
|
|
87
|
+
coverage gate:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
npm run test:quick
|
|
91
|
+
npm run test:watch
|
|
92
|
+
npm run test:ci
|
|
93
|
+
npm run coverage
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
`npm test` remains the complete no-coverage suite. `test:ci` runs the same
|
|
97
|
+
discovered files with a two-worker cap for small CI runners; it does not remove
|
|
98
|
+
tests or change assertions. Local coverage remains an explicit command because
|
|
99
|
+
instrumentation adds measurable overhead; the PR unit lane wraps that same
|
|
100
|
+
`test:ci` process across four deterministic shards, then aggregates coverage
|
|
101
|
+
without running the suite again. Docs-only changes run the quick suite only on
|
|
102
|
+
the first Node 24 shard; the other shards and the Node 20 lane do not install.
|
|
103
|
+
|
|
104
|
+
#### Native Windows guidance
|
|
105
|
+
|
|
106
|
+
Repeated Node process startup can be slowed by Windows Defender scanning the
|
|
107
|
+
repository and dependency tree. If local policy permits, request narrowly
|
|
108
|
+
scoped exclusions for the trusted `node.exe`, this repository root, and its
|
|
109
|
+
`node_modules` directory. Never disable Defender globally or exclude an
|
|
110
|
+
untrusted path. WSL2 can be used when native Windows remains slow, while
|
|
111
|
+
Windows CI continues to cover native path and process behavior.
|
|
112
|
+
|
|
113
|
+
### Symptom: Project-aware .NET routing is missing
|
|
114
|
+
|
|
115
|
+
#### What it means
|
|
116
|
+
|
|
117
|
+
The route command did not find confirmed, affected SDK-style .NET project
|
|
118
|
+
evidence, or the task scope does not reach the confirmed project root. ASP.NET
|
|
119
|
+
Core and ABP are conditional overlays on the `dotnet` specialist; they are not
|
|
120
|
+
standalone guides.
|
|
121
|
+
|
|
122
|
+
#### Inspect
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
forgeloop route --task <task-id> --work code --surface backend --json
|
|
126
|
+
forgeloop task-show --task <task-id> --json
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Then inspect the affected scope for a structurally valid `*.csproj`, `*.fsproj`,
|
|
130
|
+
or `*.vbproj` using the supported SDK allowlist. ASP.NET Core requires a web,
|
|
131
|
+
Razor, or Blazor SDK or a `FrameworkReference Include="Microsoft.AspNetCore.App"`.
|
|
132
|
+
ABP requires a structural `PackageReference Include="Volo.Abp..."` in the
|
|
133
|
+
confirmed .NET project.
|
|
134
|
+
|
|
135
|
+
#### Common causes
|
|
136
|
+
|
|
137
|
+
- The repository contains only prose, source snippets, Dockerfiles, lockfiles,
|
|
138
|
+
package names, or a malformed/oversized/non-SDK-style project file.
|
|
139
|
+
- A write claim points outside the project root, outside the applicable shared
|
|
140
|
+
`Directory.Build.*`/NuGet scope, or at a non-member of the named `.sln`/`.slnx`.
|
|
141
|
+
- A mixed Flutter/.NET monorepo was treated as one root; nested project roots
|
|
142
|
+
remain isolated.
|
|
143
|
+
- `projectEvidence.frameworks` contains `aspnetcore` or `abp` without
|
|
144
|
+
`dotnet`; route validation rejects that input.
|
|
145
|
+
|
|
146
|
+
#### Safe recovery
|
|
147
|
+
|
|
148
|
+
Do not add a manual `projectEvidence` claim to force specialist activation.
|
|
149
|
+
Correct the task scope or project structure, rerun the canonical route command,
|
|
150
|
+
and inspect its reason/exclusion codes. Project discovery is bounded and
|
|
151
|
+
non-symlinked; budget exhaustion fails closed. See
|
|
152
|
+
[`GUIDE_ROUTER.md`](../GUIDE_ROUTER.md) for the exact limits and reason-code
|
|
153
|
+
contract.
|
|
154
|
+
|
|
57
155
|
### Symptom: `preflight` is `BLOCKED`
|
|
58
156
|
|
|
59
157
|
#### What it means
|
|
@@ -1332,7 +1430,7 @@ package/process recovery boundary. The relevant stable codes are
|
|
|
1332
1430
|
| `E_RECONCILE_EVIDENCE_FAILED` | The executed objective-satisfaction evidence command did not pass. | Inspect the execution artifact; reconciliation is refused until evidence passes in the current repository. |
|
|
1333
1431
|
| `E_RECONCILE_LEDGER_INVALID` | The append-only event ledger is not valid, so reconciliation cannot be recorded. | Inspect the ledger errors and repair before reconciling. |
|
|
1334
1432
|
| `E_RECONCILE_NOT_STALE` | reconcile-closure was invoked for a work-state checkpoint that is already fresh. | No reconciliation is required; continue the normal lifecycle. |
|
|
1335
|
-
| `E_RECONCILE_PHASE_INVALID` | reconcile-closure was invoked for a task that is not EXECUTING or
|
|
1433
|
+
| `E_RECONCILE_PHASE_INVALID` | reconcile-closure was invoked for a task that is not EXECUTING, VERIFYING, or REVIEWING. | reconcile-closure supports EXECUTING, VERIFYING, or REVIEWING tasks whose objective is already satisfied. |
|
|
1336
1434
|
| `E_RECONCILE_REQUIREMENT_UNKNOWN` | The supplied check id and requirement text do not exactly match a contract verification item of type VERIFICATION. | Supply the exact id and requirement text of an existing contract verification item. |
|
|
1337
1435
|
| `E_RECONCILE_UNSUPPORTED_DRIFT` | Work-state drift includes kinds other than REPOSITORY_CHANGED (contract or required-artifact drift). | Resolve contract or artifact drift through their dedicated recovery surfaces; reconcile-closure only refreshes repository fingerprint drift. |
|
|
1338
1436
|
| `E_REPOSITORY_CHANGED` | The repository fingerprint (branch or HEAD) moved after the work-state checkpoint was recorded. | If the task objective is already satisfied in the current repository, run forgeloop reconcile-closure; otherwise resume from a checkpoint that matches the current repository. |
|
|
@@ -1372,7 +1470,7 @@ package/process recovery boundary. The relevant stable codes are
|
|
|
1372
1470
|
| `E_STATE_LEDGER_DIVERGENCE` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1373
1471
|
| `E_STATE_MISSING` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1374
1472
|
| `E_STATE_MISSING_AFTER_PREFLIGHT_READY` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1375
|
-
| `E_STATE_REVALIDATION_REQUIRED` | The work-state checkpoint must be revalidated before the lifecycle can continue. | Run forgeloop reconcile-closure for externally satisfied EXECUTING tasks, or inspect the freshness reasons for other drift. |
|
|
1473
|
+
| `E_STATE_REVALIDATION_REQUIRED` | The work-state checkpoint must be revalidated before the lifecycle can continue. | Run forgeloop reconcile-closure for externally satisfied EXECUTING, VERIFYING, or REVIEWING tasks, or inspect the freshness reasons for other drift. |
|
|
1376
1474
|
| `E_STATE_TASK_MISMATCH` | A ForgeLoop protocol validation or lifecycle condition was not satisfied. | Inspect the structured command result, correct the named artifact or prerequisite, then run forgeloop next --json. |
|
|
1377
1475
|
| `E_STRATEGY_OSCILLATION` | Correction history oscillates between previously exhausted strategies without new information. | Gather a genuinely new observation or test a materially different falsifiable hypothesis. |
|
|
1378
1476
|
| `E_STRUCTURAL_QUALITY_BASELINE_BINDING_MISMATCH` | Structural-quality evidence did not satisfy its provider, artifact, comparison, or lifecycle boundary. | Reconcile contract, route, policy, scope, provider, or rules drift before using the baseline. |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
2
|
<html lang="en" data-theme="dark" data-preset="signal-flow" data-present="true">
|
|
3
3
|
<head>
|
|
4
|
-
<meta name="forgeloop-diagram-source-sha256" content="
|
|
4
|
+
<meta name="forgeloop-diagram-source-sha256" content="3c35fbe4e144cd7fb60632996839bcf32b0b503e8a4add2270f29c3bf3e8a658">
|
|
5
5
|
<meta name="forgeloop-diagram-renderer" content="archify@2.15.0 (e1ac748f19cf805e44bf74fb93c796662152e273)">
|
|
6
6
|
<meta charset="UTF-8">
|
|
7
7
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
@@ -4874,7 +4874,7 @@
|
|
|
4874
4874
|
<div class="pulse-dot"></div>
|
|
4875
4875
|
<h1>ForgeLoop Evidence-First Engineering Flow</h1>
|
|
4876
4876
|
</div>
|
|
4877
|
-
<p class="subtitle">Structured intent → project
|
|
4877
|
+
<p class="subtitle">Structured intent → deterministic project scope → observed evidence → valid closure</p>
|
|
4878
4878
|
</div>
|
|
4879
4879
|
|
|
4880
4880
|
<script id="archify-guided-views-data" type="application/json">[{"id":"contract-to-work","label":"Contract to work","focus":["request","profile","contract","route","gates","preflight","work"],"note":"Structured obligations and explicit risks set the profile; exclusions do not create required actions."},{"id":"evidence-to-close","label":"Evidence to close","focus":["work","evidence","review","valid"],"note":"See the evidence and review boundary that makes completion trustworthy."},{"id":"recovery-loop","label":"Recovery loop","focus":["evidence","diagnose","correct","preflight","blocked"],"note":"Before execution, blocked refresh needs a valid ledger and revised route. Later failures use diagnosis and correction."}]</script>
|
|
@@ -4922,7 +4922,7 @@
|
|
|
4922
4922
|
<div class="diagram-container" data-detail-level="read">
|
|
4923
4923
|
<svg viewBox="0 0 850 900" role="img" aria-labelledby="archify-diagram-title archify-diagram-description" data-animation="trace" data-preset="signal-flow" data-quality-profile="showcase">
|
|
4924
4924
|
<title id="archify-diagram-title">ForgeLoop Evidence-First Engineering Flow</title>
|
|
4925
|
-
<desc id="archify-diagram-description">Structured intent → project
|
|
4925
|
+
<desc id="archify-diagram-description">Structured intent → deterministic project scope → observed evidence → valid closure</desc>
|
|
4926
4926
|
<!-- Definitions -->
|
|
4927
4927
|
<defs>
|
|
4928
4928
|
<marker id="arrowhead" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
|
|
@@ -5012,15 +5012,15 @@
|
|
|
5012
5012
|
<text data-detail="context" x="88" y="131" class="t-muted" font-size="8" text-anchor="middle">intent</text>
|
|
5013
5013
|
</g>
|
|
5014
5014
|
|
|
5015
|
-
<g id="node-profile" data-node-id="profile" data-node-label="Profile" tabindex="0" role="button" aria-label="Focus Profile,
|
|
5016
|
-
<title>Profile ·
|
|
5015
|
+
<g id="node-profile" data-node-id="profile" data-node-label="Profile" tabindex="0" role="button" aria-label="Focus Profile, scope, Intent + Context › Discover + scope" aria-pressed="false" data-node-kind="backend" data-node-sublabel="scope" data-node-context="Intent + Context › Discover + scope">
|
|
5016
|
+
<title>Profile · scope · Intent + Context › Discover + scope</title>
|
|
5017
5017
|
<rect x="195" y="93" width="50" height="52" rx="6" class="c-mask"/>
|
|
5018
5018
|
<rect x="195" y="93" width="50" height="52" rx="6" class="c-backend" data-animate="node" style="--step:1" stroke-width="1.5"/>
|
|
5019
5019
|
<g aria-hidden="true" data-semantic-sigil="backend" class="semantic-sigil s-backend" transform="translate(201 99) scale(0.6875)">
|
|
5020
5020
|
<path d="M6 3 3 8l3 5M10 3l3 5-3 5"/>
|
|
5021
5021
|
</g>
|
|
5022
5022
|
<text data-detail-anchor x="220" y="114" class="t-primary" font-size="10" font-weight="600" text-anchor="middle">Profile</text>
|
|
5023
|
-
<text data-detail="context" x="220" y="131" class="t-muted" font-size="8" text-anchor="middle">
|
|
5023
|
+
<text data-detail="context" x="220" y="131" class="t-muted" font-size="8" text-anchor="middle">scope</text>
|
|
5024
5024
|
</g>
|
|
5025
5025
|
|
|
5026
5026
|
<g id="node-contract" data-node-id="contract" data-node-label="Contract" tabindex="0" role="button" aria-label="Focus Contract, scope, Intent + Context › Discover + scope" aria-pressed="false" data-node-kind="security" data-node-sublabel="scope" data-node-tag="saved" data-node-context="Intent + Context › Discover + scope">
|
|
@@ -5396,6 +5396,19 @@
|
|
|
5396
5396
|
</ul>
|
|
5397
5397
|
</div>
|
|
5398
5398
|
|
|
5399
|
+
<div class="card">
|
|
5400
|
+
<div class="card-header">
|
|
5401
|
+
<div class="card-dot amber"></div>
|
|
5402
|
+
<h3>Deterministic project routing</h3>
|
|
5403
|
+
</div>
|
|
5404
|
+
<ul>
|
|
5405
|
+
<li>• Repository evidence feeds bounded project and surface detection</li>
|
|
5406
|
+
<li>• A parsed dependencies.flutter.sdk: flutter entry proves Flutter project scope</li>
|
|
5407
|
+
<li>• The router selects the Flutter specialist only for an affected scoped root</li>
|
|
5408
|
+
<li>• Detection context is routing input, not verification or completion evidence</li>
|
|
5409
|
+
</ul>
|
|
5410
|
+
</div>
|
|
5411
|
+
|
|
5399
5412
|
<div class="card">
|
|
5400
5413
|
<div class="card-header">
|
|
5401
5414
|
<div class="card-dot cyan"></div>
|
|
@@ -15,17 +15,17 @@
|
|
|
15
15
|
"license": "MIT"
|
|
16
16
|
},
|
|
17
17
|
"input": {
|
|
18
|
-
"sha256": "
|
|
19
|
-
"bytes":
|
|
18
|
+
"sha256": "3c35fbe4e144cd7fb60632996839bcf32b0b503e8a4add2270f29c3bf3e8a658",
|
|
19
|
+
"bytes": 10229
|
|
20
20
|
},
|
|
21
21
|
"artifacts": {
|
|
22
22
|
"html": {
|
|
23
|
-
"sha256": "
|
|
24
|
-
"bytes":
|
|
23
|
+
"sha256": "26e82be933acaca0d7f07e917413d87135b901195aef22bd42ef974fe1548ad3",
|
|
24
|
+
"bytes": 648893
|
|
25
25
|
},
|
|
26
26
|
"svg": {
|
|
27
|
-
"sha256": "
|
|
28
|
-
"bytes":
|
|
27
|
+
"sha256": "040fc511d09be1532ff7173baf46a98503e89734460a516582426aa426eea888",
|
|
28
|
+
"bytes": 211370
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
"staticSvg": {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<svg data-archify-version="2.15.0" data-forgeloop-source-sha256="
|
|
1
|
+
<svg data-archify-version="2.15.0" data-forgeloop-source-sha256="3c35fbe4e144cd7fb60632996839bcf32b0b503e8a4add2270f29c3bf3e8a658" data-theme="dark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 850 900" role="img" aria-labelledby="archify-diagram-title archify-diagram-description" data-animation="trace" data-preset="signal-flow" data-quality-profile="showcase">
|
|
2
2
|
<style>
|
|
3
3
|
.c-bg-rect { fill: var(--bg); }
|
|
4
4
|
/* Keep boundary labels clear of the first node in each group. */
|
|
@@ -4732,7 +4732,7 @@
|
|
|
4732
4732
|
</style>
|
|
4733
4733
|
<rect width="100%" height="100%" class="c-bg-rect" />
|
|
4734
4734
|
<title id="archify-diagram-title">ForgeLoop Evidence-First Engineering Flow</title>
|
|
4735
|
-
<desc id="archify-diagram-description">Structured intent → project
|
|
4735
|
+
<desc id="archify-diagram-description">Structured intent → deterministic project scope → observed evidence → valid closure</desc>
|
|
4736
4736
|
<!-- Definitions -->
|
|
4737
4737
|
<defs>
|
|
4738
4738
|
<marker id="arrowhead" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
|
|
@@ -4822,15 +4822,15 @@
|
|
|
4822
4822
|
<text data-detail="context" x="88" y="131" class="t-muted" font-size="8" text-anchor="middle">intent</text>
|
|
4823
4823
|
</g>
|
|
4824
4824
|
|
|
4825
|
-
<g id="node-profile" data-node-id="profile" data-node-label="Profile" tabindex="0" role="button" aria-label="Focus Profile,
|
|
4826
|
-
<title>Profile ·
|
|
4825
|
+
<g id="node-profile" data-node-id="profile" data-node-label="Profile" tabindex="0" role="button" aria-label="Focus Profile, scope, Intent + Context › Discover + scope" aria-pressed="false" data-node-kind="backend" data-node-sublabel="scope" data-node-context="Intent + Context › Discover + scope">
|
|
4826
|
+
<title>Profile · scope · Intent + Context › Discover + scope</title>
|
|
4827
4827
|
<rect x="195" y="93" width="50" height="52" rx="6" class="c-mask"/>
|
|
4828
4828
|
<rect x="195" y="93" width="50" height="52" rx="6" class="c-backend" data-animate="node" style="--step:1" stroke-width="1.5"/>
|
|
4829
4829
|
<g aria-hidden="true" data-semantic-sigil="backend" class="semantic-sigil s-backend" transform="translate(201 99) scale(0.6875)">
|
|
4830
4830
|
<path d="M6 3 3 8l3 5M10 3l3 5-3 5"/>
|
|
4831
4831
|
</g>
|
|
4832
4832
|
<text data-detail-anchor="true" x="220" y="114" class="t-primary" font-size="10" font-weight="600" text-anchor="middle">Profile</text>
|
|
4833
|
-
<text data-detail="context" x="220" y="131" class="t-muted" font-size="8" text-anchor="middle">
|
|
4833
|
+
<text data-detail="context" x="220" y="131" class="t-muted" font-size="8" text-anchor="middle">scope</text>
|
|
4834
4834
|
</g>
|
|
4835
4835
|
|
|
4836
4836
|
<g id="node-contract" data-node-id="contract" data-node-label="Contract" tabindex="0" role="button" aria-label="Focus Contract, scope, Intent + Context › Discover + scope" aria-pressed="false" data-node-kind="security" data-node-sublabel="scope" data-node-tag="saved" data-node-context="Intent + Context › Discover + scope">
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"diagram_type": "workflow",
|
|
4
4
|
"meta": {
|
|
5
5
|
"title": "ForgeLoop Evidence-First Engineering Flow",
|
|
6
|
-
"subtitle": "Structured intent \u2192 project
|
|
6
|
+
"subtitle": "Structured intent \u2192 deterministic project scope \u2192 observed evidence \u2192 valid closure",
|
|
7
7
|
"animation": "trace",
|
|
8
8
|
"visual_preset": "signal-flow",
|
|
9
9
|
"quality_profile": "showcase",
|
|
@@ -180,7 +180,7 @@
|
|
|
180
180
|
"col": 1,
|
|
181
181
|
"type": "backend",
|
|
182
182
|
"label": "Profile",
|
|
183
|
-
"sublabel": "
|
|
183
|
+
"sublabel": "scope",
|
|
184
184
|
"width": 50
|
|
185
185
|
},
|
|
186
186
|
{
|
|
@@ -419,6 +419,16 @@
|
|
|
419
419
|
"Blocked pre-execution refresh requires a valid ledger and revised route"
|
|
420
420
|
]
|
|
421
421
|
},
|
|
422
|
+
{
|
|
423
|
+
"dot": "amber",
|
|
424
|
+
"title": "Deterministic project routing",
|
|
425
|
+
"items": [
|
|
426
|
+
"Repository evidence feeds bounded project and surface detection",
|
|
427
|
+
"A parsed dependencies.flutter.sdk: flutter entry proves Flutter project scope",
|
|
428
|
+
"The router selects the Flutter specialist only for an affected scoped root",
|
|
429
|
+
"Detection context is routing input, not verification or completion evidence"
|
|
430
|
+
]
|
|
431
|
+
},
|
|
422
432
|
{
|
|
423
433
|
"dot": "cyan",
|
|
424
434
|
"title": "Evidence contract",
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
"diagramId": "forgeloop-engineering-flow",
|
|
4
4
|
"status": "approved",
|
|
5
5
|
"binding": {
|
|
6
|
-
"sourceSha256": "
|
|
7
|
-
"svgSha256": "
|
|
6
|
+
"sourceSha256": "3c35fbe4e144cd7fb60632996839bcf32b0b503e8a4add2270f29c3bf3e8a658",
|
|
7
|
+
"svgSha256": "040fc511d09be1532ff7173baf46a98503e89734460a516582426aa426eea888"
|
|
8
8
|
},
|
|
9
9
|
"checks": {
|
|
10
10
|
"darkThemeLegible": true,
|
|
@@ -16,5 +16,5 @@
|
|
|
16
16
|
"accessibleMetadataPresent": true
|
|
17
17
|
},
|
|
18
18
|
"reviewedBy": "Codex visual review",
|
|
19
|
-
"reviewedAt": "2026-09-
|
|
19
|
+
"reviewedAt": "2026-09-09"
|
|
20
20
|
}
|