ai-fob 1.9.8 → 1.9.9

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.
@@ -44,9 +44,10 @@ Use one result in frontmatter:
44
44
 
45
45
  - `pass`: every check passed.
46
46
  - `fail`: at least one executable check failed. These are potential code issues for a fix-builder.
47
- - `blocked`: no executable checks failed, but one or more checks could not be executed because of external, environmental, credential, or human-action constraints.
47
+ - `blocked`: no executable checks failed, but one or more **terminal** checks could not be executed because of external, environmental, credential, or human-action constraints that prevent establishing core phase correctness.
48
+ - `pass-with-followups`: no executable checks failed and no terminal blockers exist, but one or more **non-terminal** manual/operator/unsafe/external follow-up checks could not safely run.
48
49
 
49
- If both FAIL and BLOCKED checks exist, overall result is `fail`.
50
+ If both FAIL and BLOCKED checks exist, overall result is `fail`. FAIL beats terminal blockers; terminal blockers beat `pass-with-followups`.
50
51
 
51
52
  ## Check rules
52
53
 
@@ -57,7 +58,10 @@ For every check:
57
58
  - Never mark a check PASS because the plan or build report claims it was done.
58
59
  - For `[HL]` checks, preserve the user's criterion text and verify independently.
59
60
  - If real test credentials are configured, do not mark auth-required browser checks BLOCKED merely because login is required; authenticate and report PASS/FAIL.
60
- - If placeholder credentials remain and auth is required, mark the auth-required browser check BLOCKED.
61
+ - If placeholder credentials remain and auth is required, mark the auth-required browser check BLOCKED and classify whether that blocker is terminal or non-terminal.
62
+ - For every BLOCKED check, include `severity: terminal` or `severity: non-terminal` in the evidence.
63
+ - Terminal blockers prevent establishing core phase correctness or safe continuation.
64
+ - Non-terminal blockers are manual/operator/unsafe/external follow-ups where core functionality has already been validated through other executable/source/browser evidence.
61
65
 
62
66
  ## Browser validation rules
63
67
 
@@ -111,9 +115,11 @@ phase: {PHASE_NUMBER}
111
115
  phase-name: {PHASE_NAME}
112
116
  type: build-validation-report
113
117
  cycle: {BUILD_VALIDATION_CYCLE}
114
- result: pass|fail|blocked
118
+ result: pass|fail|blocked|pass-with-followups
115
119
  checks-passed: X/Y
116
120
  checks-blocked: Z/Y
121
+ checks-blocked-terminal: A/Y
122
+ checks-blocked-nonterminal: B/Y
117
123
  date: {current date}
118
124
  ---
119
125
  ```
@@ -135,10 +141,15 @@ Report structure:
135
141
  If no issues, write: None.
136
142
 
137
143
  ## Blocked Checks
138
- - {check name}: {blocked reason and required action}
144
+ - {check name}: severity: {terminal|non-terminal}; {blocked reason}; substitute evidence: {evidence or none}; human follow-up: {required action}
139
145
 
140
146
  If none blocked, write: None.
141
147
 
148
+ ## Non-Terminal Follow-Ups
149
+ - {check name}: {manual/operator/unsafe/external follow-up and substitute evidence}
150
+
151
+ If none, write: None.
152
+
142
153
  ## Verified Checks
143
154
  - {check name}: {what passed and evidence}
144
155
 
@@ -148,7 +159,7 @@ If none blocked, write: None.
148
159
  After writing, final response should be concise:
149
160
 
150
161
  ```txt
151
- SUCCESS: wrote {ARTIFACT_PATH} ({line count} lines) result={pass|fail|blocked} checks-passed=X/Y checks-blocked=Z/Y
162
+ SUCCESS: wrote {ARTIFACT_PATH} ({line count} lines) result={pass|fail|blocked|pass-with-followups} checks-passed=X/Y checks-blocked=Z/Y checks-blocked-terminal=A/Y checks-blocked-nonterminal=B/Y
152
163
  ```
153
164
 
154
165
  If writing fails:
@@ -60,7 +60,7 @@ Monitoring state:
60
60
  Use Claude-compatible feature-level status names in the final report:
61
61
 
62
62
  ```txt
63
- completed -> all required phases reached status: complete and criteria audit is acceptable
63
+ completed -> all required phases reached status: complete; validation may be pass or pass-with-followups
64
64
  partial -> at least one phase completed, but the run stopped on blocked/failed/incomplete phase
65
65
  aborted -> monitor aborted due to unrecoverable stall, process failure, invalid setup, or manual stop
66
66
  ```
@@ -68,13 +68,13 @@ aborted -> monitor aborted due to unrecoverable stall, process failure, invalid
68
68
  Use Pi phase-level statuses exactly as reported in `phase_completion_report.md`:
69
69
 
70
70
  ```txt
71
- complete -> phase succeeded; runner may continue
72
- blocked -> external/environment/human-action blocker; stop by default unless explicitly accepted
71
+ complete -> phase succeeded; runner may continue, including validation-result: pass-with-followups
72
+ blocked -> terminal external/environment/human-action blocker; stop by default unless explicitly accepted
73
73
  failed/fail -> validation/build failure after internal recovery loops; stop
74
74
  missing/invalid report -> orchestration/artifact failure; stop
75
75
  ```
76
76
 
77
- Blocked is not failed, but blocked must not be silently ignored.
77
+ Blocked is not failed, but blocked must not be silently ignored. Non-terminal manual/operator follow-ups should be represented as `status: complete` plus `validation-result: pass-with-followups`, then recorded in Criteria Issues / follow-up summaries without stopping the feature.
78
78
 
79
79
  ## Workflow
80
80
 
@@ -356,6 +356,8 @@ find "{SPEC_DIR}" -maxdepth 1 -type d -name "phase{N}_*" 2>/dev/null | head -1
356
356
  - `validation-result:`
357
357
  - `checks-passed:`
358
358
  - `checks-blocked:`
359
+ - `checks-blocked-terminal:` if present
360
+ - `checks-blocked-nonterminal:` if present
359
361
  - `fix-cycles:`
360
362
  4. Find the report's `## HL Success Criteria Results` or `## HL Plan Success Criteria Results` section.
361
363
  5. Parse table rows into:
@@ -365,7 +367,7 @@ find "{SPEC_DIR}" -maxdepth 1 -type d -name "phase{N}_*" 2>/dev/null | head -1
365
367
  6. Cross-reference against `HL_CRITERIA[N]` from the original HL plan:
366
368
  - matching row with `PASS` -> `complete`
367
369
  - matching row with `FAIL` -> `incomplete`
368
- - matching row with `BLOCKED` -> `blocked`
370
+ - matching row with `BLOCKED` -> `blocked` if terminal, or `follow-up` if the phase report/validation report classifies it as non-terminal
369
371
  - no matching row -> `dropped`
370
372
  7. Flag extra report rows not present in original HL criteria as `extra`.
371
373
  8. Append:
@@ -381,7 +383,7 @@ Validation result: {validation-result}
381
383
  |---|-----------|--------|----------|
382
384
  | 1 | {criterion text} | {complete/incomplete/blocked/dropped} | {evidence} |
383
385
 
384
- Summary: {complete}/{total} criteria complete; {blocked} blocked; {dropped} dropped; {extra} extra.
386
+ Summary: {complete}/{total} criteria complete; {blocked} terminal blocked; {follow_up} non-terminal follow-up; {dropped} dropped; {extra} extra.
385
387
  ```
386
388
 
387
389
  This verification is observational. Do not modify phase reports.
@@ -416,14 +418,15 @@ If unavailable because process was already reaped, record `unknown`.
416
418
  - criteria complete,
417
419
  - criteria incomplete,
418
420
  - criteria blocked,
421
+ - criteria non-terminal follow-up,
419
422
  - criteria dropped,
420
423
  - total interventions,
421
424
  - total duration.
422
425
  6. Determine feature status:
423
426
 
424
427
  ```txt
425
- all phases complete and no monitor abort -> completed
426
- some phases complete but blocked/failed/incomplete exist -> partial
428
+ all phases status complete and no monitor abort -> completed, even if some phases have validation-result pass-with-followups
429
+ some phases complete but terminal blocked/failed/incomplete exist -> partial
427
430
  monitor aborted or unrecoverable stall/process issue -> aborted
428
431
  ```
429
432
 
@@ -443,10 +446,10 @@ Duration: {minutes}m
443
446
  ## Success Criteria Audit: Full Build
444
447
  Timestamp: {ISO-8601 timestamp}
445
448
 
446
- | Phase | Total Criteria | Complete | Incomplete | Blocked | Dropped |
447
- |-------|----------------|----------|------------|---------|---------|
448
- | 1 | {total} | {complete} | {incomplete} | {blocked} | {dropped} |
449
- | TOTAL | {total} | {complete} | {incomplete} | {blocked} | {dropped} |
449
+ | Phase | Total Criteria | Complete | Incomplete | Blocked | Follow-Up | Dropped |
450
+ |-------|----------------|----------|------------|---------|-----------|---------|
451
+ | 1 | {total} | {complete} | {incomplete} | {blocked} | {follow_up} | {dropped} |
452
+ | TOTAL | {total} | {complete} | {incomplete} | {blocked} | {follow_up} | {dropped} |
450
453
  ```
451
454
 
452
455
  Proceed to Step 9 Final Report.
@@ -534,7 +537,7 @@ Present the final results using this exact vocabulary and structure.
534
537
  **Status:** {completed | partial | aborted}
535
538
  **Duration:** {total minutes}m
536
539
  **Phases:** {completed_count}/{TOTAL_PHASES}
537
- **Criteria:** {complete_count}/{total_criteria_count} verified complete
540
+ **Criteria:** {complete_count}/{total_criteria_count} verified complete{; follow_up_count follow-ups if any}
538
541
 
539
542
  ### Phase Results
540
543
  | Phase | Name | Status | Duration | Interventions | Criteria |
@@ -544,10 +547,10 @@ Present the final results using this exact vocabulary and structure.
544
547
  ### Criteria Issues
545
548
  | Phase | Criterion | Status | Detail |
546
549
  |-------|-----------|--------|--------|
547
- | {N} | {criterion text} | {incomplete/blocked/dropped} | {evidence or reason} |
550
+ | {N} | {criterion text} | {incomplete/blocked/follow-up/dropped} | {evidence or reason} |
548
551
  ```
549
552
 
550
- Omit `### Criteria Issues` only if there are no incomplete, blocked, or dropped criteria.
553
+ Omit `### Criteria Issues` only if there are no incomplete, terminal blocked, non-terminal follow-up, or dropped criteria.
551
554
 
552
555
  Continue:
553
556
 
@@ -564,7 +567,7 @@ Runner log: /tmp/build-feature.log
564
567
 
565
568
  ### Next Steps
566
569
  - {If completed and all criteria complete: All phases built successfully and all success criteria verified. Review STATE.md and phase completion reports for details.}
567
- - {If completed but criteria issues exist: All phases completed, but {count} success criteria were not fully met. Review Criteria Issues and the learnings file.}
570
+ - {If completed but criteria issues/follow-ups exist: All phases completed, but {count} success criteria need manual/operator follow-up or were not fully met. Review Criteria Issues and the learnings file.}
568
571
  - {If partial: Phases {list} completed. Phase {N} stopped with status {status}. Review the learnings file and phase completion report. To retry: /build-feature {HL_PLAN_PATH}}
569
572
  - {If aborted: Build aborted due to {reason}. See learnings file for diagnosis. After resolving the issue, retry with: /build-feature {HL_PLAN_PATH}}
570
573
  ```
@@ -587,8 +590,9 @@ If the build is still running because of an abort/intervention failure, kill the
587
590
 
588
591
  1. **Already-completed phases**: runner invokes `build-phase` for each selected phase; `build-phase` resume logic should detect complete artifacts/state and exit quickly.
589
592
  2. **Partial phases**: `build-phase` resumes from incomplete step according to `STATE.md` and artifact validity.
590
- 3. **Blocked phase**: runner stops by default; monitor reports `partial` unless an explicit accepted-blocker policy is later added.
591
- 4. **Accepted blockers**: future version may support explicit blocker override via prompt argument, HL metadata, or sidecar config. Do not silently continue through blocked phases in v1.
593
+ 3. **Non-terminal follow-ups**: runner continues when the phase report has `status: complete` and `validation-result: pass-with-followups`; monitor records follow-ups but can still report feature `completed`.
594
+ 4. **Blocked phase**: runner stops by default on `status: blocked`; monitor reports `partial` unless an explicit accepted-blocker policy is later added.
595
+ 5. **Accepted blockers**: future version may support explicit blocker override via prompt argument, HL metadata, or sidecar config. Do not silently continue through terminal blocked phases in v1.
592
596
  5. **Max interventions**: max 2 per phase. After that, abort.
593
597
  6. **Concurrent runs**: active `.build-phase.lock` aborts preflight.
594
598
  7. **Context compaction**: `build-feature-learnings.md` is the durable source of truth.
@@ -128,9 +128,10 @@ Step 5 Validate Build is valid when:
128
128
  - `{PHASE_DIR}/build_validation_report.md` exists.
129
129
  - `build_validation_report.md` has YAML frontmatter.
130
130
  - Frontmatter contains `type: build-validation-report`.
131
- - Frontmatter contains `result: pass` or `result: blocked`.
131
+ - Frontmatter contains `result: pass`, `result: blocked`, or `result: pass-with-followups`.
132
132
  - Frontmatter contains `checks-passed:`.
133
133
  - Frontmatter contains `checks-blocked:`.
134
+ - Frontmatter contains `checks-blocked-terminal:` and `checks-blocked-nonterminal:` when any checks are blocked.
134
135
 
135
136
  `result: fail` is not complete for Step 5. If a failed validation report exists, rerun Step 5/fix cycles.
136
137
 
@@ -1300,8 +1301,12 @@ If expected 4xx entries occur, include them as evidence and explain why they are
1300
1301
  - PASS: executed and satisfied with evidence.
1301
1302
  - FAIL: executed and not satisfied; potential code issue.
1302
1303
  - BLOCKED: could not execute due to external/environment/credential/human-action condition.
1304
+ - Every BLOCKED check must include `severity: terminal` or `severity: non-terminal` in evidence.
1305
+ - Use terminal severity when blocked validation prevents establishing core phase correctness or safe continuation.
1306
+ - Use non-terminal severity when core functionality is validated but a manual/operator/unsafe/external follow-up could not safely run, such as external account creation, provider dashboard row inspection, or temporary secret mutation.
1303
1307
  - If any FAIL exists, overall result is `fail`.
1304
- - If no FAIL and at least one BLOCKED exists, overall result is `blocked`.
1308
+ - If no FAIL and at least one terminal BLOCKED exists, overall result is `blocked`.
1309
+ - If no FAIL, no terminal BLOCKED checks, and at least one non-terminal BLOCKED exists, overall result is `pass-with-followups`.
1305
1310
  - If all PASS, overall result is `pass`.
1306
1311
 
1307
1312
  ## Validation Parameters
@@ -1317,12 +1322,14 @@ If expected 4xx entries occur, include them as evidence and explain why they are
1317
1322
  Write `{PHASE_DIR}/build_validation_report.md` with frontmatter including:
1318
1323
  - `type: build-validation-report`
1319
1324
  - `cycle: {BUILD_VALIDATION_CYCLE}`
1320
- - `result: pass|fail|blocked`
1325
+ - `result: pass|fail|blocked|pass-with-followups`
1321
1326
  - `checks-passed: X/{BUILD_CHECK_COUNT}`
1322
1327
  - `checks-blocked: Z/{BUILD_CHECK_COUNT}`
1328
+ - `checks-blocked-terminal: A/{BUILD_CHECK_COUNT}`
1329
+ - `checks-blocked-nonterminal: B/{BUILD_CHECK_COUNT}`
1323
1330
 
1324
1331
  Final response format:
1325
- SUCCESS: wrote {PHASE_DIR}/build_validation_report.md ({line count} lines) result={pass|fail|blocked} checks-passed=X/{BUILD_CHECK_COUNT} checks-blocked=Z/{BUILD_CHECK_COUNT}
1332
+ SUCCESS: wrote {PHASE_DIR}/build_validation_report.md ({line count} lines) result={pass|fail|blocked|pass-with-followups} checks-passed=X/{BUILD_CHECK_COUNT} checks-blocked=Z/{BUILD_CHECK_COUNT} checks-blocked-terminal=A/{BUILD_CHECK_COUNT} checks-blocked-nonterminal=B/{BUILD_CHECK_COUNT}
1326
1333
  ```
1327
1334
 
1328
1335
  ### 5.7 Spawn build validator and read result
@@ -1334,13 +1341,15 @@ Read `{PHASE_DIR}/build_validation_report.md` and extract:
1334
1341
  - `result`
1335
1342
  - `checks-passed`
1336
1343
  - `checks-blocked`
1344
+ - `checks-blocked-terminal`
1345
+ - `checks-blocked-nonterminal`
1337
1346
  - `cycle`
1338
1347
 
1339
1348
  If the report is missing or invalid, treat as orchestration failure and stop with Step 5 incomplete.
1340
1349
 
1341
1350
  ### 5.8 Handle validation result
1342
1351
 
1343
- If `result: pass`, continue to Step 5.13 cleanup/complete.
1352
+ If `result: pass` or `result: pass-with-followups`, continue to Step 5.13 cleanup/complete.
1344
1353
 
1345
1354
  If `result: blocked`:
1346
1355
 
@@ -1401,6 +1410,7 @@ After the fix-builder returns:
1401
1410
  After each re-validation:
1402
1411
 
1403
1412
  - `pass` -> cleanup/complete.
1413
+ - `pass-with-followups` -> cleanup/complete.
1404
1414
  - `blocked` with no FAIL items -> cleanup/complete.
1405
1415
  - `fail` -> repeat Step 5.9 until max cycles.
1406
1416
 
@@ -1440,7 +1450,7 @@ Clean up the dev server if started. Reset or leave Step 5 as `[ ]` so a future r
1440
1450
 
1441
1451
  ### 5.13 Mark Step 5 complete
1442
1452
 
1443
- Only after final result is `pass` or genuine `blocked`, update `STATE.md`:
1453
+ Only after final result is `pass`, `pass-with-followups`, or genuine terminal `blocked`, update `STATE.md`:
1444
1454
 
1445
1455
  ```txt
1446
1456
  Step 5 - Validate Build: [~] -> [x]
@@ -1473,9 +1483,11 @@ Artifacts:
1473
1483
  - fix_report_cycle*.md ({count or none})
1474
1484
 
1475
1485
  Build Validation:
1476
- - Result: {pass|blocked}
1486
+ - Result: {pass|pass-with-followups|blocked}
1477
1487
  - Checks passed: {X/Y}
1478
1488
  - Checks blocked: {Z/Y}
1489
+ - Terminal blockers: {A/Y}
1490
+ - Non-terminal follow-ups: {B/Y}
1479
1491
  - Cycles: {BUILD_VALIDATION_CYCLE}
1480
1492
  - Fix cycles: {count}
1481
1493
  - Browser checks: {yes/no}
@@ -1486,7 +1498,7 @@ Step 5 complete. Continuing to Step 6 Finalize & Report.
1486
1498
 
1487
1499
  ## Step 6: Finalize & Report
1488
1500
 
1489
- Run this step after Step 5 completes with final result `pass` or genuine `blocked`, or directly after Step 0 when `RESUME_FROM = 6`.
1501
+ Run this step after Step 5 completes with final result `pass`, `pass-with-followups`, or genuine terminal `blocked`, or directly after Step 0 when `RESUME_FROM = 6`.
1490
1502
 
1491
1503
  Step 6 is main/orchestrator-owned. Do not spawn a reporting sub-agent.
1492
1504
 
@@ -1554,6 +1566,8 @@ From `build_validation_report.md`:
1554
1566
  - Validation result.
1555
1567
  - Checks passed.
1556
1568
  - Checks blocked.
1569
+ - Terminal blocked count.
1570
+ - Non-terminal blocked/follow-up count.
1557
1571
  - Checks table.
1558
1572
  - Issues found.
1559
1573
  - Blocked checks.
@@ -1573,13 +1587,14 @@ Use:
1573
1587
 
1574
1588
  ```yaml
1575
1589
  status: complete|blocked|failed
1576
- validation-result: pass|blocked|fail
1590
+ validation-result: pass|pass-with-followups|blocked|fail
1577
1591
  ```
1578
1592
 
1579
1593
  Rules:
1580
1594
 
1581
1595
  - `status: complete` when `build_validation_report.md` has `result: pass`.
1582
- - `status: blocked` when `build_validation_report.md` has `result: blocked`.
1596
+ - `status: complete` when `build_validation_report.md` has `result: pass-with-followups`; preserve non-terminal follow-ups in report sections/frontmatter.
1597
+ - `status: blocked` when `build_validation_report.md` has `result: blocked` due to terminal blockers.
1583
1598
  - `status: failed` when `build_validation_report.md` has `result: fail`.
1584
1599
 
1585
1600
  Normally Step 6 should not run after failed Step 5. If a failed report is present, report it defensively and do not claim completion.
@@ -1597,9 +1612,12 @@ phase: {PHASE_NUMBER}
1597
1612
  phase-name: {PHASE_NAME}
1598
1613
  type: phase-report
1599
1614
  status: complete|blocked|failed
1600
- validation-result: pass|blocked|fail
1615
+ validation-result: pass|pass-with-followups|blocked|fail
1601
1616
  checks-passed: X/Y
1602
1617
  checks-blocked: Z/Y
1618
+ checks-blocked-terminal: A/Y
1619
+ checks-blocked-nonterminal: B/Y
1620
+ manual-followups: B
1603
1621
  fix-cycles: N
1604
1622
  date: {current date}
1605
1623
  pre-phase-sha: {PRE_PHASE_SHA}
@@ -1634,6 +1652,8 @@ Required sections:
1634
1652
 
1635
1653
  ## Blocked Items / Human Action Required
1636
1654
 
1655
+ ## Non-Terminal Follow-Ups
1656
+
1637
1657
  ## Fix Cycles
1638
1658
 
1639
1659
  ## Files Changed
@@ -1654,7 +1674,8 @@ Important report rules:
1654
1674
  - Extract HL success criteria results from `[HL]` rows in `build_validation_report.md` Checks table.
1655
1675
  - Do not guess HL results by semantic matching when `[HL]` rows exist.
1656
1676
  - Include explicit human action for blocked `[HL]` criteria.
1657
- - Distinguish validation blockers from code failures.
1677
+ - Distinguish terminal blockers, non-terminal manual/operator follow-ups, and code failures.
1678
+ - For `pass-with-followups`, keep `status: complete` but list follow-ups clearly in `## Non-Terminal Follow-Ups` and `## Blocked Items / Human Action Required`.
1658
1679
  - Always include `## Impacts on Future Phases` because future phase runs consume prior phase reports.
1659
1680
 
1660
1681
  ### 6.6 Verify report
@@ -1696,9 +1717,11 @@ BUILD PHASE {N} — COMPLETE
1696
1717
  Spec: {SPEC_DIR_BASENAME} ({TASK_NAME})
1697
1718
  Phase: {N} — {PHASE_NAME}
1698
1719
  Status: {complete|blocked|failed}
1699
- Validation Result: {pass|blocked|fail}
1720
+ Validation Result: {pass|pass-with-followups|blocked|fail}
1700
1721
  Checks Passed: {X/Y}
1701
1722
  Checks Blocked: {Z/Y}
1723
+ Terminal Blockers: {A/Y}
1724
+ Non-Terminal Follow-Ups: {B/Y}
1702
1725
  Fix Cycles: {N}
1703
1726
 
1704
1727
  Artifacts:
@@ -106,6 +106,45 @@ Examples of acceptable expected 4xx responses:
106
106
 
107
107
  Validators must record these entries as expected evidence rather than hiding them.
108
108
 
109
+ ## Blocked Check Severity
110
+
111
+ Every blocked validation check must be classified as either **terminal** or **non-terminal**.
112
+
113
+ ### Terminal blocked
114
+
115
+ Use terminal blocked when the agent cannot establish the phase's core correctness, or when continuing may make later phases invalid.
116
+
117
+ Examples:
118
+
119
+ - the app or required dev server cannot start
120
+ - required environment variables are missing for core functionality
121
+ - no usable auth path exists for an auth-dependent phase
122
+ - database/service unavailable for core validation
123
+ - a core user story cannot be executed or source-verified
124
+ - validation infrastructure failure prevents meaningful assessment
125
+
126
+ ### Non-terminal blocked
127
+
128
+ Use non-terminal blocked when core functionality has already been validated by executable/source/browser checks, but an additional manual, operator-only, destructive, unsafe, or external-provider check could not safely run.
129
+
130
+ Examples:
131
+
132
+ - dashboard-only database row inspection
133
+ - creating external provider accounts without explicit approval
134
+ - mutating production-like secrets or provider configuration
135
+ - forcing rare failure states that require unsafe environment changes
136
+ - manual provider-console verification
137
+ - external billing/provider configuration checks
138
+
139
+ For every BLOCKED check, validators must document:
140
+
141
+ - `severity: terminal` or `severity: non-terminal`
142
+ - the blocked reason
143
+ - any executable substitute evidence that was available
144
+ - the recommended human/operator follow-up
145
+
146
+ If no FAIL checks exist and all blocked checks are non-terminal, the overall validation result should be `pass-with-followups`, not `blocked`.
147
+
109
148
  ## For Agents Consuming This Skill
110
149
 
111
150
  1. Use the exact configured commands. Do not improvise substitutes from memory.
package/manifest.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.9.8",
2
+ "version": "1.9.9",
3
3
  "presets": {
4
4
  "coding": {
5
5
  "description": "Research-driven coding workflow",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-fob",
3
- "version": "1.9.8",
3
+ "version": "1.9.9",
4
4
  "description": "Deploy research-driven AI coding assistant assets (skills, agents, commands) into your projects",
5
5
  "bin": {
6
6
  "ai-fob": "bin/install.js"