@cassiomc1/forgeloop 0.1.3 → 0.1.5
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/.cursor/rules/project-loop.mdc +14 -0
- package/.github/copilot-instructions.md +14 -0
- package/AGENTS.md +14 -0
- package/AGENT_COMPATIBILITY.md +42 -0
- package/CLAUDE.md +14 -0
- package/LOOP_ENGINEERING.md +254 -15
- package/QUALITY_SCORECARD.md +20 -7
- package/conformance/README.md +28 -0
- package/conformance/runs/2026-08-13-codex-fifth-live.md +386 -0
- package/conformance/runs/2026-08-13-codex-fourth-live.md +309 -0
- package/package.json +1 -1
- package/src/core/decision-classification.js +55 -0
- package/src/core/workflow-compatibility.js +151 -0
|
@@ -27,3 +27,17 @@ load-bearing, irreversible, externally consequential, unsafe, or real
|
|
|
27
27
|
user/business decisions.
|
|
28
28
|
|
|
29
29
|
The loop and router are canonical sources; do not duplicate domain rules.
|
|
30
|
+
|
|
31
|
+
## Pre-question decisions
|
|
32
|
+
|
|
33
|
+
Before asking any product-detail question, classify it as `BLOCKING` or
|
|
34
|
+
`NON_BLOCKING` using `LOOP_ENGINEERING.md`. For
|
|
35
|
+
`NON_BLOCKING`, choose a safe reversible local default, record it in
|
|
36
|
+
`current-contract.assumptions[]`, and continue. For `BLOCKING`, persist
|
|
37
|
+
`current-contract.json` with `unresolvedDecisions[]` and a blocking reason
|
|
38
|
+
before asking. Do not ask the user to choose among reversible local
|
|
39
|
+
product-positioning alternatives; the canonical checklist and boundary remain
|
|
40
|
+
in `LOOP_ENGINEERING.md`.
|
|
41
|
+
|
|
42
|
+
External workflow approval rules do not override ForgeLoop's autonomous-mode
|
|
43
|
+
precedence; consult `LOOP_ENGINEERING.md#external-workflow-compatibility`.
|
|
@@ -25,3 +25,17 @@ load-bearing, irreversible, externally consequential, unsafe, or real
|
|
|
25
25
|
user/business decisions.
|
|
26
26
|
|
|
27
27
|
The loop and router are canonical; do not replicate domain rules here.
|
|
28
|
+
|
|
29
|
+
## Pre-question decisions
|
|
30
|
+
|
|
31
|
+
Before asking any product-detail question, classify it as `BLOCKING` or
|
|
32
|
+
`NON_BLOCKING` using `LOOP_ENGINEERING.md`. For
|
|
33
|
+
`NON_BLOCKING`, choose a safe reversible local default, record it in
|
|
34
|
+
`current-contract.assumptions[]`, and continue. For `BLOCKING`, persist
|
|
35
|
+
`current-contract.json` with `unresolvedDecisions[]` and a blocking reason
|
|
36
|
+
before asking. Do not ask the user to choose among reversible local
|
|
37
|
+
product-positioning alternatives; the canonical checklist and boundary remain
|
|
38
|
+
in `LOOP_ENGINEERING.md`.
|
|
39
|
+
|
|
40
|
+
External workflow approval rules do not override ForgeLoop's autonomous-mode
|
|
41
|
+
precedence; consult `LOOP_ENGINEERING.md#external-workflow-compatibility`.
|
package/AGENTS.md
CHANGED
|
@@ -26,3 +26,17 @@ load-bearing, irreversible, externally consequential, unsafe, or real
|
|
|
26
26
|
user/business decisions.
|
|
27
27
|
|
|
28
28
|
The guides provide technical defaults; explicit requirements and project evidence prevail.
|
|
29
|
+
|
|
30
|
+
## Pre-question decisions
|
|
31
|
+
|
|
32
|
+
Before asking any product-detail question, classify it as `BLOCKING` or
|
|
33
|
+
`NON_BLOCKING` using `LOOP_ENGINEERING.md`. For
|
|
34
|
+
`NON_BLOCKING`, choose a safe reversible local default, record it in
|
|
35
|
+
`current-contract.assumptions[]`, and continue. For `BLOCKING`, persist
|
|
36
|
+
`current-contract.json` with `unresolvedDecisions[]` and a blocking reason
|
|
37
|
+
before asking. Do not ask the user to choose among reversible local
|
|
38
|
+
product-positioning alternatives; the canonical checklist and boundary remain
|
|
39
|
+
in `LOOP_ENGINEERING.md`.
|
|
40
|
+
|
|
41
|
+
External workflow approval rules do not override ForgeLoop's autonomous-mode
|
|
42
|
+
precedence; consult `LOOP_ENGINEERING.md#external-workflow-compatibility`.
|
package/AGENT_COMPATIBILITY.md
CHANGED
|
@@ -96,6 +96,48 @@ When a target already has local rules, keep them and merge only the relevant
|
|
|
96
96
|
loop reference manually. Run `doctor --path /path/to/project` after resolving
|
|
97
97
|
the merge so missing files and managed drift are visible.
|
|
98
98
|
|
|
99
|
+
## External workflow compatibility
|
|
100
|
+
|
|
101
|
+
An external planning, brainstorming, design-review, testing, or documentation
|
|
102
|
+
workflow can be installed and still be `INCOMPATIBLE WITH AUTONOMOUS MODE`.
|
|
103
|
+
Installation is a capability fact; compatibility is a precedence and behavior
|
|
104
|
+
fact. The ForgeLoop `NON_BLOCKING` classification remains authoritative in
|
|
105
|
+
autonomous mode. A mandatory approval policy for a reversible local choice is
|
|
106
|
+
recorded as `WORKFLOW_CONFLICT`, with no user question and no fake entry in
|
|
107
|
+
`current-contract.unresolvedDecisions[]`.
|
|
108
|
+
|
|
109
|
+
The supported autonomous boundary is:
|
|
110
|
+
|
|
111
|
+
| Workflow policy | Result |
|
|
112
|
+
| --- | --- |
|
|
113
|
+
| Local planning, review, tests, or docs | Compatible. |
|
|
114
|
+
| Approval only for a real ForgeLoop `BLOCKING` decision | Compatible; the justified question may proceed. |
|
|
115
|
+
| Approval for every design choice or before implementation | `INCOMPATIBLE WITH AUTONOMOUS MODE`. |
|
|
116
|
+
| Reclassifying reversible aesthetics as blocking | `INCOMPATIBLE WITH AUTONOMOUS MODE`. |
|
|
117
|
+
|
|
118
|
+
Interactive operation is explicit (`autonomousMode=false`) and must not be
|
|
119
|
+
selected silently. Live conformance records the available and invoked external
|
|
120
|
+
workflows, mandatory-approval setting, brainstorming/design hard gates,
|
|
121
|
+
autonomy mode, process count, subagent count, and delegation status. For the
|
|
122
|
+
sixth blind run, the harness must report:
|
|
123
|
+
|
|
124
|
+
```text
|
|
125
|
+
mandatory-approval workflows enabled: NO
|
|
126
|
+
external brainstorming hard gate enabled: NO
|
|
127
|
+
external design approval gate enabled: NO
|
|
128
|
+
subagents enabled: NO
|
|
129
|
+
delegation enabled: NO
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Question attribution remains `USER_REQUIREMENT`,
|
|
133
|
+
`FORGELOOP_BLOCKING_DECISION`, `EXTERNAL_WORKFLOW_POLICY`, or
|
|
134
|
+
`MODEL_PREFERENCE`. In autonomous mode, only the first two can authorize a
|
|
135
|
+
question, and `ASK_USER` additionally requires a valid ForgeLoop blocking
|
|
136
|
+
reason. External policy alone cannot manufacture a blocker.
|
|
137
|
+
|
|
138
|
+
If a mandatory approval workflow cannot be disabled, the run is
|
|
139
|
+
`TEST_NOT_STARTED`; do not call it a failed or successful conformance result.
|
|
140
|
+
|
|
99
141
|
## Deterministic verification boundary
|
|
100
142
|
|
|
101
143
|
The repository verifies package contents, adapter paths, installation into a
|
package/CLAUDE.md
CHANGED
|
@@ -22,3 +22,17 @@ load-bearing, irreversible, externally consequential, unsafe, or real
|
|
|
22
22
|
user/business decisions.
|
|
23
23
|
|
|
24
24
|
Do not duplicate guide rules here; treat the loop and router as canonical sources.
|
|
25
|
+
|
|
26
|
+
## Pre-question decisions
|
|
27
|
+
|
|
28
|
+
Before asking any product-detail question, classify it as `BLOCKING` or
|
|
29
|
+
`NON_BLOCKING` using `LOOP_ENGINEERING.md`. For
|
|
30
|
+
`NON_BLOCKING`, choose a safe reversible local default, record it in
|
|
31
|
+
`current-contract.assumptions[]`, and continue. For `BLOCKING`, persist
|
|
32
|
+
`current-contract.json` with `unresolvedDecisions[]` and a blocking reason
|
|
33
|
+
before asking. Do not ask the user to choose among reversible local
|
|
34
|
+
product-positioning alternatives; the canonical checklist and boundary remain
|
|
35
|
+
in `LOOP_ENGINEERING.md`.
|
|
36
|
+
|
|
37
|
+
External workflow approval rules do not override ForgeLoop's autonomous-mode
|
|
38
|
+
precedence; consult `LOOP_ENGINEERING.md#external-workflow-compatibility`.
|
package/LOOP_ENGINEERING.md
CHANGED
|
@@ -7,31 +7,270 @@
|
|
|
7
7
|
## Blocking vs Non-Blocking Decisions
|
|
8
8
|
|
|
9
9
|
Classify every unresolved decision before deciding whether to ask the user.
|
|
10
|
+
The question is a consequence of a `BLOCKING` classification, never a default
|
|
11
|
+
response to ordinary uncertainty.
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
reversible, it does not change external state, it is not sensitive or
|
|
13
|
-
authoritative, and it does not assert a real user or business fact. Examples
|
|
14
|
-
include fictional company name, demo phone number, placeholder copy, temporary logo text,
|
|
15
|
-
palette, typography, local-only fictional identity, fictional identity, demo
|
|
16
|
-
contacts, visual defaults, section ordering, and local-only form behavior.
|
|
13
|
+
### Pre-question decision classification
|
|
17
14
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
Before asking the user any product-detail question:
|
|
16
|
+
|
|
17
|
+
1. Classify the unresolved detail as `BLOCKING` or `NON_BLOCKING`.
|
|
18
|
+
2. If `NON_BLOCKING`, do not ask; choose the smallest reasonable reversible
|
|
19
|
+
local default, record it in `current-contract.assumptions[]`, and continue.
|
|
20
|
+
3. If `BLOCKING`, record the detail in
|
|
21
|
+
`current-contract.unresolvedDecisions[]`, persist and validate the contract,
|
|
22
|
+
then ask the user with a blocking reason.
|
|
23
|
+
|
|
24
|
+
In short, `NON_BLOCKING` means do not ask and record it in `current-contract.assumptions[]`; `BLOCKING` means persist the contract and ask the user with a blocking reason.
|
|
25
|
+
|
|
26
|
+
There is no third `UNKNOWN → ask` path for ordinary reversible product
|
|
27
|
+
ambiguity. The invariant is:
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
QUESTION
|
|
31
|
+
must never happen
|
|
32
|
+
before CLASSIFICATION
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### PRE-QUESTION CHECK
|
|
36
|
+
|
|
37
|
+
Before asking the user, answer every item:
|
|
38
|
+
|
|
39
|
+
```text
|
|
40
|
+
[ ] Is this a real user/business fact?
|
|
41
|
+
[ ] Is this sensitive?
|
|
42
|
+
[ ] Is this authoritative?
|
|
43
|
+
[ ] Does it affect external state?
|
|
44
|
+
[ ] Is it destructive?
|
|
45
|
+
[ ] Is it irreversible?
|
|
46
|
+
[ ] Would a safe local reversible default materially misrepresent the user?
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
If all answers are `NO`, classify the detail as `NON_BLOCKING`, record an
|
|
50
|
+
assumption, and continue. If any answer is `YES`, classify it as `BLOCKING`,
|
|
51
|
+
persist the contract before clarification, and attach a blocking reason.
|
|
23
52
|
|
|
24
53
|
### Safe assumption rule
|
|
25
54
|
|
|
26
|
-
|
|
55
|
+
`NON_BLOCKING` applies when the choice is `SAFE + REVERSIBLE + LOCAL +
|
|
56
|
+
NON-SENSITIVE + NON-AUTHORITATIVE + NON-DESTRUCTIVE` and does not assert a real
|
|
57
|
+
user or business fact. Each recorded `ASSUMPTION` must include `value`, `reason`,
|
|
58
|
+
`scope`, `reversible=true`, and `source=agent-default`. Do not place resolved
|
|
59
|
+
safe assumptions in `unresolvedDecisions[]`, and never present an assumption as
|
|
60
|
+
a verified user or business fact.
|
|
61
|
+
|
|
62
|
+
Generally `NON_BLOCKING` when no real business fact is supplied:
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
practice-area emphasis
|
|
66
|
+
fictional positioning
|
|
67
|
+
representative specialty mix
|
|
68
|
+
tone of the fictional firm
|
|
69
|
+
hero messaging
|
|
70
|
+
section ordering
|
|
71
|
+
fictional partner/attorney profiles
|
|
72
|
+
fictional office location
|
|
73
|
+
visual identity
|
|
74
|
+
palette
|
|
75
|
+
typography
|
|
76
|
+
local fictional brand name
|
|
77
|
+
local-only fictional identity
|
|
78
|
+
fictional company name
|
|
79
|
+
demo contact details
|
|
80
|
+
demo phone number
|
|
81
|
+
placeholder legal-service descriptions
|
|
82
|
+
placeholder copy
|
|
83
|
+
fictional testimonials
|
|
84
|
+
temporary logo text
|
|
85
|
+
local-only form behavior
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
These examples remain non-blocking only when they stay safe, reversible,
|
|
89
|
+
local, non-sensitive, non-authoritative, and non-destructive. Do not hardcode
|
|
90
|
+
one law-firm positioning into the protocol or tests.
|
|
91
|
+
|
|
92
|
+
### Blocking boundary
|
|
93
|
+
|
|
94
|
+
`BLOCKING` applies when proceeding requires any of the following:
|
|
95
|
+
|
|
96
|
+
```text
|
|
97
|
+
real legal business name
|
|
98
|
+
real contact information
|
|
99
|
+
real contact details
|
|
100
|
+
real attorney identities
|
|
101
|
+
credentials
|
|
102
|
+
payment information
|
|
103
|
+
payment data
|
|
104
|
+
production endpoints
|
|
105
|
+
production endpoint
|
|
106
|
+
deployment target
|
|
107
|
+
deployment/domain authority
|
|
108
|
+
destructive operations
|
|
109
|
+
destructive operation
|
|
110
|
+
irreversible architecture
|
|
111
|
+
irreversible architectural decision
|
|
112
|
+
irreversible data decisions
|
|
113
|
+
regulated or legal claims
|
|
114
|
+
regulated/legal claim
|
|
115
|
+
real compliance representations
|
|
116
|
+
real business facts not safely inferable
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Blocking decisions must be written to
|
|
120
|
+
`current-contract.unresolvedDecisions[]`. They make `preflight` return
|
|
121
|
+
`BLOCKED`, but they do not prevent contract serialization.
|
|
122
|
+
Unresolved blocking decisions are recorded in `current-contract.unresolvedDecisions[]`.
|
|
123
|
+
|
|
124
|
+
### Question justification invariant
|
|
125
|
+
|
|
126
|
+
Asking the user is allowed only when `blockingReason` is present and comes from
|
|
127
|
+
a blocking category such as:
|
|
128
|
+
|
|
129
|
+
A user question requires a `blockingReason`; a question without one is invalid.
|
|
130
|
+
|
|
131
|
+
```text
|
|
132
|
+
REAL_BUSINESS_FACT_REQUIRED
|
|
133
|
+
SENSITIVE_VALUE_REQUIRED
|
|
134
|
+
EXTERNAL_AUTHORITY_REQUIRED
|
|
135
|
+
IRREVERSIBLE_DECISION_REQUIRED
|
|
136
|
+
REGULATED_CLAIM_REQUIRED
|
|
137
|
+
DESTRUCTIVE_ACTION_REQUIRED
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Multiple reasonable aesthetic or positioning choices do not justify a question.
|
|
141
|
+
The deterministic support helper in `src/core/decision-classification.js`
|
|
142
|
+
validates this boundary; it does not use an LLM or parse natural language.
|
|
143
|
+
|
|
144
|
+
### Contract-before-clarification sequence
|
|
145
|
+
|
|
146
|
+
The operational order is:
|
|
147
|
+
|
|
148
|
+
```text
|
|
149
|
+
DISCOVERY
|
|
150
|
+
↓
|
|
151
|
+
classify unresolved details
|
|
152
|
+
↓
|
|
153
|
+
create and persist current-contract.json
|
|
154
|
+
↓
|
|
155
|
+
persist assumptions[] and unresolvedDecisions[]
|
|
156
|
+
↓
|
|
157
|
+
validate contract
|
|
158
|
+
↓
|
|
159
|
+
if unresolvedDecisions.length > 0
|
|
160
|
+
↓
|
|
161
|
+
ask user with blockingReason
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
No clarification stop is allowed before a serialized contract exists. A
|
|
165
|
+
non-blocking ambiguity never becomes a contract blocker.
|
|
166
|
+
|
|
167
|
+
## External Workflow Compatibility
|
|
168
|
+
|
|
169
|
+
ForgeLoop's decision classification has precedence over an external workflow's
|
|
170
|
+
planning, brainstorming, review, testing, or documentation policy. The
|
|
171
|
+
canonical order remains:
|
|
172
|
+
|
|
173
|
+
```text
|
|
174
|
+
uncertainty → classify → NON_BLOCKING → assume → record → continue
|
|
175
|
+
uncertainty → classify → BLOCKING → serialize → ask
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
An external workflow may improve the plan, review the change, or recommend a
|
|
179
|
+
test. It must not turn a ForgeLoop `NON_BLOCKING` decision into mandatory user
|
|
180
|
+
approval while the task is in autonomous mode. `NON_BLOCKING` remains
|
|
181
|
+
`NON_BLOCKING`; a policy that requires approval for it is a
|
|
182
|
+
`WORKFLOW_CONFLICT`, not a user blocker. Record the conflict and continue with
|
|
183
|
+
the safe reversible default. Do not put the conflict in
|
|
184
|
+
`current-contract.unresolvedDecisions[]` as a fake user decision.
|
|
185
|
+
|
|
186
|
+
The stable compatibility reason codes are:
|
|
187
|
+
|
|
188
|
+
```text
|
|
189
|
+
E_EXTERNAL_WORKFLOW_APPROVAL_CONFLICT
|
|
190
|
+
E_EXTERNAL_WORKFLOW_BLOCKS_NON_BLOCKING
|
|
191
|
+
E_EXTERNAL_WORKFLOW_REQUIRES_USER_GATE
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Autonomous mode means the active harness has explicitly selected
|
|
195
|
+
`autonomousMode=true`: the agent can choose safe local defaults, record
|
|
196
|
+
`assumptions[]`, and continue without an external approval gate for ordinary
|
|
197
|
+
reversible ambiguity. Interactive mode remains available only when the caller
|
|
198
|
+
explicitly selects `autonomousMode=false`; the harness must not silently switch
|
|
199
|
+
between the two modes.
|
|
200
|
+
|
|
201
|
+
When a question is considered, record its source as exactly one of:
|
|
202
|
+
|
|
203
|
+
```text
|
|
204
|
+
USER_REQUIREMENT
|
|
205
|
+
FORGELOOP_BLOCKING_DECISION
|
|
206
|
+
EXTERNAL_WORKFLOW_POLICY
|
|
207
|
+
MODEL_PREFERENCE
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Only `USER_REQUIREMENT` and `FORGELOOP_BLOCKING_DECISION` authorize a question
|
|
211
|
+
in autonomous mode. `EXTERNAL_WORKFLOW_POLICY` and `MODEL_PREFERENCE` may be
|
|
212
|
+
recorded for diagnosis, but neither can authorize a question there. A genuine
|
|
213
|
+
`BLOCKING` ForgeLoop decision remains compatible with an external approval and
|
|
214
|
+
may produce a legitimate question with its persisted blocking reason.
|
|
215
|
+
|
|
216
|
+
The question-source invariant is:
|
|
217
|
+
|
|
218
|
+
```text
|
|
219
|
+
ASK_USER is allowed only when:
|
|
220
|
+
classification = BLOCKING
|
|
221
|
+
AND blockingReason is valid
|
|
222
|
+
AND the source is not EXTERNAL_WORKFLOW_POLICY alone
|
|
223
|
+
```
|
|
27
224
|
|
|
28
|
-
|
|
225
|
+
Before asking, apply the external-workflow conflict check in addition to the
|
|
226
|
+
ordinary pre-question checklist:
|
|
227
|
+
|
|
228
|
+
1. Is the product decision `BLOCKING` under ForgeLoop?
|
|
229
|
+
2. If not, is the question required only by another workflow or skill?
|
|
230
|
+
3. If yes, do not ask in autonomous mode; record the incompatibility when
|
|
231
|
+
useful and continue through the safe reversible assumption path.
|
|
232
|
+
|
|
233
|
+
Examples of incompatible hard gates for an otherwise `NON_BLOCKING` decision
|
|
234
|
+
include: “ask before implementation”, “present two or three designs and
|
|
235
|
+
wait”, “receive explicit approval”, and “stop until the user reviews the
|
|
236
|
+
specification”. Planning, review, testing, and documentation remain useful
|
|
237
|
+
when they do not impose that interruption.
|
|
238
|
+
|
|
239
|
+
The compatibility distinction is explicit:
|
|
240
|
+
|
|
241
|
+
| External workflow behavior | Autonomous-mode result |
|
|
242
|
+
| --- | --- |
|
|
243
|
+
| Adds local planning without a user gate | Compatible; continue the ForgeLoop loop. |
|
|
244
|
+
| Adds a local review or checklist | Compatible; continue the ForgeLoop loop. |
|
|
245
|
+
| Adds deterministic tests | Compatible; continue the ForgeLoop loop. |
|
|
246
|
+
| Adds documentation generation | Compatible; continue the ForgeLoop loop. |
|
|
247
|
+
| Approval for a real `BLOCKING` decision | Compatible; a justified question is allowed. |
|
|
248
|
+
| Approval for every design choice | `INCOMPATIBLE WITH AUTONOMOUS MODE`; record `WORKFLOW_CONFLICT`, do not ask. |
|
|
249
|
+
| Approval before any implementation | `INCOMPATIBLE WITH AUTONOMOUS MODE` unless a real blocker exists. |
|
|
250
|
+
| Reclassifying a reversible local aesthetic choice as blocking | `INCOMPATIBLE WITH AUTONOMOUS MODE`; preserve `NON_BLOCKING`. |
|
|
251
|
+
| Spawning agents that change precedence | Not suitable for an isolated blind-conformance run; it does not change this contract. |
|
|
252
|
+
|
|
253
|
+
"Installed" and "compatible" are different claims. A harness can have an
|
|
254
|
+
external workflow installed and still be `INCOMPATIBLE WITH AUTONOMOUS MODE`.
|
|
255
|
+
Use that wording instead of calling the workflow broken. The deterministic
|
|
256
|
+
support helper in `src/core/workflow-compatibility.js` evaluates this boundary;
|
|
257
|
+
it does not modify `src/core/decision-classification.js`, invoke an LLM, or
|
|
258
|
+
redesign a runtime, arbiter, supervisor, or approval broker.
|
|
259
|
+
|
|
260
|
+
For the sixth blind conformance run, exclude mandatory-approval workflows at
|
|
261
|
+
the harness level rather than weakening the blind prompt. Record the harness
|
|
262
|
+
state before starting:
|
|
29
263
|
|
|
30
264
|
```text
|
|
31
|
-
|
|
265
|
+
mandatory-approval workflows enabled: NO
|
|
266
|
+
external brainstorming hard gate enabled: NO
|
|
267
|
+
external design approval gate enabled: NO
|
|
268
|
+
subagents enabled: NO
|
|
269
|
+
delegation enabled: NO
|
|
32
270
|
```
|
|
33
271
|
|
|
34
|
-
|
|
272
|
+
If the harness cannot disable a mandatory approval workflow, record
|
|
273
|
+
`TEST_NOT_STARTED` and do not claim a conformance result.
|
|
35
274
|
|
|
36
275
|
## Serialized protocol preparation
|
|
37
276
|
|
package/QUALITY_SCORECARD.md
CHANGED
|
@@ -17,7 +17,11 @@ policy are all present.
|
|
|
17
17
|
| Completion enforcement | Canonical contract, persisted route, guide-declared gates, preflight, phase ledger, structured checks, evidence coverage, `audit`, `report`, and `complete` validators. |
|
|
18
18
|
| Agent lifecycle navigation | Read-only `forgeloop next` decisions, stable action/reason output, persisted-state safety, and adapter guidance at lifecycle boundaries. |
|
|
19
19
|
| Execution → Verification handoff | Legal `EXECUTING` → `VERIFYING` transition, implementation-step reconciliation, and preservation of verification evidence. |
|
|
20
|
-
| Pre-contract autonomy | Blocking vs Non-Blocking Decisions policy, explicit ASSUMPTION / source=agent-default recording,
|
|
20
|
+
| Pre-contract autonomy — structural | Blocking vs Non-Blocking Decisions policy, classify-before-ask invariant, PRE-QUESTION CHECK, explicit ASSUMPTION / source=agent-default recording, contract-before-clarification ordering, deterministic reason-code helper, and positive/negative tests. |
|
|
21
|
+
| External workflow compatibility — structural | Explicit autonomous-mode precedence, `WORKFLOW_CONFLICT` recording, question-source attribution, installed-versus-compatible wording, and mandatory-approval harness isolation. |
|
|
22
|
+
| Instruction-conflict handling — structural | External workflow policy is attributed separately from user requirements and ForgeLoop blocking decisions, with deterministic conflict reason codes and no fake unresolved user blocker. |
|
|
23
|
+
| Autonomous-mode precedence — structural | Explicit `autonomousMode=true` boundary, explicit interactive opt-in, preservation of `NON_BLOCKING`, and no silent workflow-induced mode switch. |
|
|
24
|
+
| Pre-contract autonomy — cross-agent live robustness | Independent live-agent behavior across fresh package installs, exact blind prompts, one-process/no-subagent topology, and separate evidence for non-blocking continuation versus blocking clarification. Structural coverage does not imply live cross-agent robustness. |
|
|
21
25
|
| Resume/checkpoint | Atomic local state, contract/HEAD/artifact freshness, age warning, schema/secret validation, status, safe validation, and bounded clearing without persisting derived freshness fields. |
|
|
22
26
|
| Multi-agent coordination | Self-contained briefs, write/write and write/read ownership checks, dependency-set validation, reviewer independence, normalized results, and inline fallback. |
|
|
23
27
|
| Security boundaries | Realpath containment, bounded untrusted JSON, threat model, nested secret scanning, publication evidence, and explicit authority rules. |
|
|
@@ -37,14 +41,19 @@ policy are all present.
|
|
|
37
41
|
- Literal graph runtime and runtime multi-agent orchestration are `N/A by
|
|
38
42
|
design`; compatible harnesses own those capabilities.
|
|
39
43
|
|
|
40
|
-
##
|
|
44
|
+
## Blind-run conformance position
|
|
41
45
|
|
|
42
46
|
| Dimension | Classification |
|
|
43
47
|
| --- | --- |
|
|
44
|
-
|
|
|
45
|
-
|
|
|
46
|
-
|
|
|
47
|
-
|
|
|
48
|
+
| Pre-contract autonomy — structural | IMPLEMENTED / LOCAL TESTS PASS — 377 Node tests and 42 Python tests, with focused autonomy/conformance checks green |
|
|
49
|
+
| External workflow compatibility — structural | IMPLEMENTED / LOCAL TESTS PASS — deterministic helper covers autonomous conflict, compatible non-blocking flow, legitimate blocking questions, explicit interactive mode, and question-source vocabulary |
|
|
50
|
+
| Instruction-conflict handling — structural | IMPLEMENTED / LOCAL TESTS PASS — workflow-policy conflicts stay outside `unresolvedDecisions[]` and expose stable external-workflow reason codes |
|
|
51
|
+
| Autonomous-mode precedence — structural | IMPLEMENTED / LOCAL TESTS PASS — autonomous mode is explicit, interactive mode is explicit, and `NON_BLOCKING` is never promoted by workflow policy |
|
|
52
|
+
| Pre-contract autonomy — cross-agent live robustness | NOT_PROVEN — the fifth blind run is `PARTIAL` on published `0.1.4` and the sixth run requires harness-level exclusion of mandatory-approval workflows before it can start |
|
|
53
|
+
| Execution → Verification | REPRODUCED FAILURE in fourth blind run before implementation |
|
|
54
|
+
| Verification serialization | NOT_REACHED in fourth blind run |
|
|
55
|
+
| Review transition | NOT_REACHED in fourth blind run |
|
|
56
|
+
| Receipt generation | NOT_REACHED in fourth blind run |
|
|
48
57
|
| Full conformance | PARTIAL |
|
|
49
58
|
|
|
50
59
|
## Evidence matrix
|
|
@@ -63,7 +72,11 @@ are both present:
|
|
|
63
72
|
| Security boundary | realpath containment, bounded JSON, `THREAT_MODEL.md`, secret-free artifacts, authority and no-runtime rules | `tests/security-limits.test.js`, Markdown/loop validators, and `scripts/scan_secrets.py` |
|
|
64
73
|
| Cross-artifact conformance | `src/core/conformance.js`, `classifyLoadedWorkState`, and `forgeloop validate-protocol --contract-file` | `tests/conformance.test.js`, `tests/validate-protocol-cli.test.js`, and protocol fixtures covering precedence and stale evidence |
|
|
65
74
|
| Protocol preparation and completion | `src/core/preflight.js`, `src/core/completion.js`, `src/core/events.js`, policy packs, and portable bundles | `tests/preflight.test.js`, `tests/completion.test.js`, `tests/lifecycle.test.js`, `tests/policy.test.js`, and `tests/bundle.test.js` |
|
|
66
|
-
| Pre-contract autonomy | `LOOP_ENGINEERING.md`, `CLAUDE.md`, `AGENTS.md`, `.github/copilot-instructions.md`, `.cursor/rules/project-loop.mdc
|
|
75
|
+
| Pre-contract autonomy — structural | `LOOP_ENGINEERING.md`, `src/core/decision-classification.js`, `src/core/workflow-compatibility.js`, `CLAUDE.md`, `AGENTS.md`, `.github/copilot-instructions.md`, `.cursor/rules/project-loop.mdc` | `tests/decision-classification.test.js`, `tests/workflow-compatibility.test.js`, `tests/autonomy-policy.test.js`, `tests/preflight.test.js` |
|
|
76
|
+
| External workflow compatibility — structural | `LOOP_ENGINEERING.md`, `AGENT_COMPATIBILITY.md`, `src/core/workflow-compatibility.js`, and sixth-run harness metadata rule | `tests/workflow-compatibility.test.js`, `conformance/README.md` |
|
|
77
|
+
| Instruction-conflict handling — structural | Canonical source-attribution and `WORKFLOW_CONFLICT` policy in `LOOP_ENGINEERING.md` plus adapter references | `tests/autonomy-policy.test.js`, `tests/workflow-compatibility.test.js` |
|
|
78
|
+
| Autonomous-mode precedence — structural | Autonomous/interactive mode contract and harness exclusion metadata | `tests/workflow-compatibility.test.js`, `tests/conformance-scenarios.test.js` |
|
|
79
|
+
| Pre-contract autonomy — cross-agent live robustness | Prior third blind-run result, `conformance/runs/2026-08-13-codex-fourth-live.md`, preserved fifth-run report `conformance/runs/2026-08-13-codex-fifth-live.md`, and the exact blind request | `tests/conformance-scenarios.test.js`; sixth run is not started until mandatory approval is excluded |
|
|
67
80
|
|
|
68
81
|
The implementation references above are local observations. OS runners,
|
|
69
82
|
remote links, provider sessions, publication, and deployment remain `Not
|
package/conformance/README.md
CHANGED
|
@@ -45,3 +45,31 @@ history.
|
|
|
45
45
|
|
|
46
46
|
The complete-website scenario deliberately fails when implementation starts
|
|
47
47
|
before the contract, route, and required gates exist.
|
|
48
|
+
|
|
49
|
+
## Autonomous blind-run isolation
|
|
50
|
+
|
|
51
|
+
External workflows may help with local planning, review, tests, or
|
|
52
|
+
documentation, but a mandatory approval policy for a ForgeLoop `NON_BLOCKING`
|
|
53
|
+
decision is `INCOMPATIBLE WITH AUTONOMOUS MODE`. The harness must exclude that
|
|
54
|
+
policy before the blind prompt starts; do not add a hint to the prompt that
|
|
55
|
+
changes the scenario. `NON_BLOCKING` must remain non-blocking, and any
|
|
56
|
+
compatibility conflict is recorded as `WORKFLOW_CONFLICT`, not as a fake user
|
|
57
|
+
blocker.
|
|
58
|
+
|
|
59
|
+
For the sixth blind run, record these values before sending the unchanged blind
|
|
60
|
+
prompt:
|
|
61
|
+
|
|
62
|
+
```text
|
|
63
|
+
mandatory-approval workflows enabled: NO
|
|
64
|
+
external brainstorming hard gate enabled: NO
|
|
65
|
+
external design approval gate enabled: NO
|
|
66
|
+
subagents enabled: NO
|
|
67
|
+
delegation enabled: NO
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Also record the available and invoked external workflows, explicit autonomy
|
|
71
|
+
mode, process count, subagent count, and delegation status. If the harness
|
|
72
|
+
cannot disable a mandatory approval workflow, record `TEST_NOT_STARTED` and do
|
|
73
|
+
not interpret the run as a conformance failure or success. An installed
|
|
74
|
+
workflow and a compatible workflow are separate claims; use
|
|
75
|
+
`INCOMPATIBLE WITH AUTONOMOUS MODE`, not "broken", for the former.
|