@nforma.ai/nforma 0.2.1 → 0.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/agents/{qgsd-codebase-mapper.md → nf-codebase-mapper.md} +1 -1
- package/agents/{qgsd-debugger.md → nf-debugger.md} +3 -3
- package/agents/{qgsd-executor.md → nf-executor.md} +14 -14
- package/agents/{qgsd-integration-checker.md → nf-integration-checker.md} +1 -1
- package/agents/{qgsd-phase-researcher.md → nf-phase-researcher.md} +6 -6
- package/agents/{qgsd-plan-checker.md → nf-plan-checker.md} +9 -9
- package/agents/{qgsd-planner.md → nf-planner.md} +9 -9
- package/agents/{qgsd-project-researcher.md → nf-project-researcher.md} +2 -2
- package/agents/{qgsd-quorum-orchestrator.md → nf-quorum-orchestrator.md} +33 -33
- package/agents/{qgsd-quorum-slot-worker.md → nf-quorum-slot-worker.md} +3 -3
- package/agents/{qgsd-quorum-synthesizer.md → nf-quorum-synthesizer.md} +3 -3
- package/agents/{qgsd-quorum-test-worker.md → nf-quorum-test-worker.md} +1 -1
- package/agents/{qgsd-quorum-worker.md → nf-quorum-worker.md} +6 -6
- package/agents/{qgsd-research-synthesizer.md → nf-research-synthesizer.md} +5 -5
- package/agents/{qgsd-roadmapper.md → nf-roadmapper.md} +3 -3
- package/agents/{qgsd-verifier.md → nf-verifier.md} +8 -8
- package/bin/accept-debug-invariant.cjs +2 -2
- package/bin/account-manager.cjs +10 -10
- package/bin/aggregate-requirements.cjs +1 -1
- package/bin/analyze-assumptions.cjs +3 -3
- package/bin/analyze-state-space.cjs +14 -14
- package/bin/assumption-register.cjs +146 -0
- package/bin/attribute-trace-divergence.cjs +1 -1
- package/bin/auth-drivers/gh-cli.cjs +1 -1
- package/bin/auth-drivers/pool.cjs +1 -1
- package/bin/autoClosePtoF.cjs +3 -3
- package/bin/budget-tracker.cjs +77 -0
- package/bin/build-layer-manifest.cjs +153 -0
- package/bin/call-quorum-slot.cjs +3 -3
- package/bin/ccr-secure-config.cjs +5 -5
- package/bin/check-bundled-sdks.cjs +1 -1
- package/bin/check-mcp-health.cjs +1 -1
- package/bin/check-provider-health.cjs +6 -6
- package/bin/check-spec-sync.cjs +26 -26
- package/bin/check-trace-schema-drift.cjs +5 -5
- package/bin/conformance-schema.cjs +2 -2
- package/bin/cross-layer-dashboard.cjs +297 -0
- package/bin/design-impact.cjs +377 -0
- package/bin/detect-coverage-gaps.cjs +7 -7
- package/bin/failure-mode-catalog.cjs +227 -0
- package/bin/failure-taxonomy.cjs +177 -0
- package/bin/formal-scope-scan.cjs +179 -0
- package/bin/gate-a-grounding.cjs +334 -0
- package/bin/gate-b-abstraction.cjs +243 -0
- package/bin/gate-c-validation.cjs +166 -0
- package/bin/generate-formal-specs.cjs +17 -17
- package/bin/generate-petri-net.cjs +3 -3
- package/bin/generate-tla-cfg.cjs +5 -5
- package/bin/git-heatmap.cjs +571 -0
- package/bin/harness-diagnostic.cjs +326 -0
- package/bin/hazard-model.cjs +261 -0
- package/bin/install-formal-tools.cjs +1 -1
- package/bin/install.js +184 -139
- package/bin/instrumentation-map.cjs +178 -0
- package/bin/invariant-catalog.cjs +437 -0
- package/bin/issue-classifier.cjs +2 -2
- package/bin/load-baseline-requirements.cjs +4 -4
- package/bin/manage-agents-core.cjs +32 -32
- package/bin/migrate-to-slots.cjs +39 -39
- package/bin/mismatch-register.cjs +217 -0
- package/bin/nForma.cjs +176 -81
- package/bin/{qgsd-solve.cjs → nf-solve.cjs} +327 -14
- package/bin/observe-config.cjs +8 -0
- package/bin/observe-debt-writer.cjs +1 -1
- package/bin/observe-handler-deps.cjs +356 -0
- package/bin/observe-handler-grafana.cjs +2 -17
- package/bin/observe-handler-internal.cjs +5 -5
- package/bin/observe-handler-logstash.cjs +2 -17
- package/bin/observe-handler-prometheus.cjs +2 -17
- package/bin/observe-handler-upstream.cjs +251 -0
- package/bin/observe-handlers.cjs +12 -33
- package/bin/observe-render.cjs +68 -22
- package/bin/observe-utils.cjs +37 -0
- package/bin/observed-fsm.cjs +324 -0
- package/bin/planning-paths.cjs +6 -0
- package/bin/polyrepo.cjs +1 -1
- package/bin/probe-quorum-slots.cjs +1 -1
- package/bin/promote-gate-maturity.cjs +274 -0
- package/bin/promote-model.cjs +1 -1
- package/bin/propose-debug-invariants.cjs +1 -1
- package/bin/quorum-cache.cjs +144 -0
- package/bin/quorum-consensus-gate.cjs +1 -1
- package/bin/quorum-preflight.cjs +89 -0
- package/bin/quorum-slot-dispatch.cjs +6 -6
- package/bin/requirements-core.cjs +1 -1
- package/bin/review-mcp-logs.cjs +1 -1
- package/bin/risk-heatmap.cjs +151 -0
- package/bin/run-account-manager-tlc.cjs +4 -4
- package/bin/run-account-pool-alloy.cjs +2 -2
- package/bin/run-alloy.cjs +2 -2
- package/bin/run-audit-alloy.cjs +2 -2
- package/bin/run-breaker-tlc.cjs +3 -3
- package/bin/run-formal-check.cjs +9 -9
- package/bin/run-formal-verify.cjs +30 -9
- package/bin/run-installer-alloy.cjs +2 -2
- package/bin/run-oscillation-tlc.cjs +4 -4
- package/bin/run-phase-tlc.cjs +1 -1
- package/bin/run-protocol-tlc.cjs +4 -4
- package/bin/run-quorum-composition-alloy.cjs +2 -2
- package/bin/run-sensitivity-sweep.cjs +2 -2
- package/bin/run-stop-hook-tlc.cjs +3 -3
- package/bin/run-tlc.cjs +21 -21
- package/bin/run-transcript-alloy.cjs +2 -2
- package/bin/secrets.cjs +5 -5
- package/bin/security-sweep.cjs +238 -0
- package/bin/sensitivity-report.cjs +3 -3
- package/bin/set-secret.cjs +5 -5
- package/bin/setup-telemetry-cron.sh +3 -3
- package/bin/stall-detector.cjs +126 -0
- package/bin/state-candidates.cjs +206 -0
- package/bin/sync-baseline-requirements.cjs +1 -1
- package/bin/telemetry-collector.cjs +1 -1
- package/bin/test-changed.cjs +111 -0
- package/bin/test-recipe-gen.cjs +250 -0
- package/bin/trace-corpus-stats.cjs +211 -0
- package/bin/unified-mcp-server.mjs +3 -3
- package/bin/update-scoreboard.cjs +1 -1
- package/bin/validate-memory.cjs +2 -2
- package/bin/validate-traces.cjs +10 -10
- package/bin/verify-quorum-health.cjs +66 -5
- package/bin/xstate-to-tla.cjs +4 -4
- package/bin/xstate-trace-walker.cjs +3 -3
- package/commands/{qgsd → nf}/add-phase.md +3 -3
- package/commands/{qgsd → nf}/add-requirement.md +3 -3
- package/commands/{qgsd → nf}/add-todo.md +3 -3
- package/commands/{qgsd → nf}/audit-milestone.md +4 -4
- package/commands/{qgsd → nf}/check-todos.md +3 -3
- package/commands/{qgsd → nf}/cleanup.md +3 -3
- package/commands/{qgsd → nf}/close-formal-gaps.md +2 -2
- package/commands/{qgsd → nf}/complete-milestone.md +9 -9
- package/commands/{qgsd → nf}/debug.md +9 -9
- package/commands/{qgsd → nf}/discuss-phase.md +3 -3
- package/commands/{qgsd → nf}/execute-phase.md +15 -15
- package/commands/{qgsd → nf}/fix-tests.md +3 -3
- package/commands/{qgsd → nf}/formal-test-sync.md +1 -1
- package/commands/{qgsd → nf}/health.md +3 -3
- package/commands/{qgsd → nf}/help.md +3 -3
- package/commands/{qgsd → nf}/insert-phase.md +3 -3
- package/commands/nf/join-discord.md +18 -0
- package/commands/{qgsd → nf}/list-phase-assumptions.md +2 -2
- package/commands/{qgsd → nf}/map-codebase.md +7 -7
- package/commands/{qgsd → nf}/map-requirements.md +3 -3
- package/commands/{qgsd → nf}/mcp-restart.md +3 -3
- package/commands/{qgsd → nf}/mcp-set-model.md +8 -8
- package/commands/{qgsd → nf}/mcp-setup.md +63 -63
- package/commands/{qgsd → nf}/mcp-status.md +3 -3
- package/commands/{qgsd → nf}/mcp-update.md +7 -7
- package/commands/{qgsd → nf}/new-milestone.md +8 -8
- package/commands/{qgsd → nf}/new-project.md +8 -8
- package/commands/{qgsd → nf}/observe.md +49 -16
- package/commands/{qgsd → nf}/pause-work.md +3 -3
- package/commands/{qgsd → nf}/plan-milestone-gaps.md +5 -5
- package/commands/{qgsd → nf}/plan-phase.md +6 -6
- package/commands/{qgsd → nf}/polyrepo.md +2 -2
- package/commands/{qgsd → nf}/progress.md +3 -3
- package/commands/{qgsd → nf}/queue.md +2 -2
- package/commands/{qgsd → nf}/quick.md +8 -8
- package/commands/{qgsd → nf}/quorum-test.md +10 -10
- package/commands/{qgsd → nf}/quorum.md +36 -86
- package/commands/{qgsd → nf}/reapply-patches.md +2 -2
- package/commands/{qgsd → nf}/remove-phase.md +3 -3
- package/commands/{qgsd → nf}/research-phase.md +12 -12
- package/commands/{qgsd → nf}/resume-work.md +3 -3
- package/commands/nf/review-requirements.md +31 -0
- package/commands/{qgsd → nf}/set-profile.md +3 -3
- package/commands/{qgsd → nf}/settings.md +6 -6
- package/commands/{qgsd → nf}/solve.md +35 -35
- package/commands/{qgsd → nf}/sync-baselines.md +4 -4
- package/commands/{qgsd → nf}/triage.md +10 -10
- package/commands/{qgsd → nf}/update.md +3 -3
- package/commands/{qgsd → nf}/verify-work.md +5 -5
- package/hooks/dist/config-loader.js +188 -32
- package/hooks/dist/conformance-schema.cjs +2 -2
- package/hooks/dist/gsd-context-monitor.js +118 -13
- package/hooks/dist/{qgsd-check-update.js → nf-check-update.js} +5 -5
- package/hooks/dist/{qgsd-circuit-breaker.js → nf-circuit-breaker.js} +35 -24
- package/hooks/dist/{qgsd-precompact.js → nf-precompact.js} +13 -13
- package/hooks/dist/{qgsd-prompt.js → nf-prompt.js} +110 -33
- package/hooks/dist/nf-session-start.js +185 -0
- package/hooks/dist/{qgsd-slot-correlator.js → nf-slot-correlator.js} +13 -5
- package/hooks/dist/{qgsd-spec-regen.js → nf-spec-regen.js} +17 -8
- package/hooks/dist/{qgsd-statusline.js → nf-statusline.js} +12 -3
- package/hooks/dist/{qgsd-stop.js → nf-stop.js} +152 -18
- package/hooks/dist/{qgsd-token-collector.js → nf-token-collector.js} +12 -4
- package/hooks/dist/unified-mcp-server.mjs +2 -2
- package/package.json +6 -4
- package/scripts/build-hooks.js +13 -6
- package/scripts/secret-audit.sh +1 -1
- package/scripts/verify-hooks-sync.cjs +90 -0
- package/templates/{qgsd.json → nf.json} +4 -4
- package/commands/qgsd/join-discord.md +0 -18
- package/hooks/dist/qgsd-session-start.js +0 -122
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
# nForma —
|
|
3
|
+
# nForma — Consensus before code. Proof before production.
|
|
4
4
|
|
|
5
|
-
**
|
|
5
|
+
**nForma orchestrates a quorum of diverse coding agents that debate a plan until they reach full consensus.<br>Then formal methods turn requirements into invariants and simulate the system ahead of time.<br>The result: fewer hallucinations, fewer blind spots, and systems designed to survive the future.**
|
|
6
6
|
|
|
7
7
|
[](https://www.npmjs.com/package/@nforma.ai/nforma)
|
|
8
8
|
[](https://www.npmjs.com/package/@nforma.ai/nforma)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: nf-codebase-mapper
|
|
3
3
|
description: Explores codebase and writes structured analysis documents. Spawned by map-codebase with a focus area (tech, arch, quality, concerns). Writes documents directly to reduce orchestrator context load.
|
|
4
4
|
tools: Read, Bash, Grep, Glob, Write
|
|
5
5
|
color: cyan
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: nf-debugger
|
|
3
3
|
description: Investigates bugs using scientific method, manages debug sessions, handles checkpoints. Spawned by /qgsd:debug orchestrator.
|
|
4
4
|
tools: Read, Write, Edit, Bash, Grep, Glob, WebSearch
|
|
5
5
|
color: orange
|
|
@@ -985,7 +985,7 @@ mv .planning/debug/{slug}.md .planning/debug/resolved/
|
|
|
985
985
|
**Check planning config using state load (commit_docs is available from the output):**
|
|
986
986
|
|
|
987
987
|
```bash
|
|
988
|
-
INIT=$(node ~/.claude/
|
|
988
|
+
INIT=$(node ~/.claude/nf/bin/gsd-tools.cjs state load)
|
|
989
989
|
# commit_docs is in the JSON output
|
|
990
990
|
```
|
|
991
991
|
|
|
@@ -1002,7 +1002,7 @@ Root cause: {root_cause}"
|
|
|
1002
1002
|
|
|
1003
1003
|
Then commit planning docs via CLI (respects `commit_docs` config automatically):
|
|
1004
1004
|
```bash
|
|
1005
|
-
node ~/.claude/
|
|
1005
|
+
node ~/.claude/nf/bin/gsd-tools.cjs commit "docs: resolve debug {slug}" --files .planning/debug/resolved/{slug}.md
|
|
1006
1006
|
```
|
|
1007
1007
|
|
|
1008
1008
|
Report completion and offer next steps.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: nf-executor
|
|
3
3
|
description: Executes GSD plans with atomic commits, deviation handling, checkpoint protocols, and state management. Spawned by execute-phase orchestrator or execute-plan command.
|
|
4
4
|
tools: Read, Write, Edit, Bash, Grep, Glob
|
|
5
5
|
color: yellow
|
|
@@ -37,7 +37,7 @@ This ensures project-specific patterns, conventions, and best practices are appl
|
|
|
37
37
|
Load execution context:
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
|
-
INIT=$(node ~/.claude/
|
|
40
|
+
INIT=$(node ~/.claude/nf/bin/gsd-tools.cjs init execute-phase "${PHASE}")
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
Extract from init JSON: `executor_model`, `commit_docs`, `phase_dir`, `plans`, `incomplete_plans`.
|
|
@@ -193,7 +193,7 @@ Track auto-fix attempts per task. After 3 auto-fix attempts on a single task:
|
|
|
193
193
|
Check if auto mode is active at executor start:
|
|
194
194
|
|
|
195
195
|
```bash
|
|
196
|
-
AUTO_CFG=$(node ~/.claude/
|
|
196
|
+
AUTO_CFG=$(node ~/.claude/nf/bin/gsd-tools.cjs config-get workflow.auto_advance 2>/dev/null || echo "false")
|
|
197
197
|
```
|
|
198
198
|
|
|
199
199
|
Store the result for checkpoint handling below.
|
|
@@ -206,7 +206,7 @@ Store the result for checkpoint handling below.
|
|
|
206
206
|
Before any `checkpoint:human-verify`, ensure verification environment is ready. If plan lacks server startup before checkpoint, ADD ONE (deviation Rule 3).
|
|
207
207
|
|
|
208
208
|
For full automation-first patterns, server lifecycle, CLI handling:
|
|
209
|
-
**See @~/.claude/
|
|
209
|
+
**See @~/.claude/nf/references/checkpoints.md**
|
|
210
210
|
|
|
211
211
|
**Quick reference:** Users NEVER run CLI commands. Users ONLY visit URLs, click UI, evaluate visuals, provide secrets. Claude does all automation.
|
|
212
212
|
|
|
@@ -329,7 +329,7 @@ After all tasks complete, create `{phase}-{plan}-SUMMARY.md` at `.planning/phase
|
|
|
329
329
|
|
|
330
330
|
**ALWAYS use the Write tool to create files** — never use `Bash(cat << 'EOF')` or heredoc commands for file creation.
|
|
331
331
|
|
|
332
|
-
**Use template:** @~/.claude/
|
|
332
|
+
**Use template:** @~/.claude/nf/templates/summary.md
|
|
333
333
|
|
|
334
334
|
**Frontmatter:** phase, plan, subsystem, tags, dependency graph (requires/provides/affects), tech-stack (added/patterns), key-files (created/modified), decisions, metrics (duration, completed date).
|
|
335
335
|
|
|
@@ -382,34 +382,34 @@ After SUMMARY.md, update STATE.md using gsd-tools:
|
|
|
382
382
|
|
|
383
383
|
```bash
|
|
384
384
|
# Advance plan counter (handles edge cases automatically)
|
|
385
|
-
node ~/.claude/
|
|
385
|
+
node ~/.claude/nf/bin/gsd-tools.cjs state advance-plan
|
|
386
386
|
|
|
387
387
|
# Recalculate progress bar from disk state
|
|
388
|
-
node ~/.claude/
|
|
388
|
+
node ~/.claude/nf/bin/gsd-tools.cjs state update-progress
|
|
389
389
|
|
|
390
390
|
# Record execution metrics
|
|
391
|
-
node ~/.claude/
|
|
391
|
+
node ~/.claude/nf/bin/gsd-tools.cjs state record-metric \
|
|
392
392
|
--phase "${PHASE}" --plan "${PLAN}" --duration "${DURATION}" \
|
|
393
393
|
--tasks "${TASK_COUNT}" --files "${FILE_COUNT}"
|
|
394
394
|
|
|
395
395
|
# Add decisions (extract from SUMMARY.md key-decisions)
|
|
396
396
|
for decision in "${DECISIONS[@]}"; do
|
|
397
|
-
node ~/.claude/
|
|
397
|
+
node ~/.claude/nf/bin/gsd-tools.cjs state add-decision \
|
|
398
398
|
--phase "${PHASE}" --summary "${decision}"
|
|
399
399
|
done
|
|
400
400
|
|
|
401
401
|
# Update session info
|
|
402
|
-
node ~/.claude/
|
|
402
|
+
node ~/.claude/nf/bin/gsd-tools.cjs state record-session \
|
|
403
403
|
--stopped-at "Completed ${PHASE}-${PLAN}-PLAN.md"
|
|
404
404
|
```
|
|
405
405
|
|
|
406
406
|
```bash
|
|
407
407
|
# Update ROADMAP.md progress for this phase (plan counts, status)
|
|
408
|
-
node ~/.claude/
|
|
408
|
+
node ~/.claude/nf/bin/gsd-tools.cjs roadmap update-plan-progress "${PHASE_NUMBER}"
|
|
409
409
|
|
|
410
410
|
# Mark completed requirements from PLAN.md frontmatter
|
|
411
411
|
# Extract the `requirements` array from the plan's frontmatter, then mark each complete
|
|
412
|
-
node ~/.claude/
|
|
412
|
+
node ~/.claude/nf/bin/gsd-tools.cjs requirements mark-complete ${REQ_IDS}
|
|
413
413
|
```
|
|
414
414
|
|
|
415
415
|
**Requirement IDs:** Extract from the PLAN.md frontmatter `requirements:` field (e.g., `requirements: [AUTH-01, AUTH-02]`). Pass all IDs to `requirements mark-complete`. If the plan has no requirements field, skip this step.
|
|
@@ -427,13 +427,13 @@ node ~/.claude/qgsd/bin/gsd-tools.cjs requirements mark-complete ${REQ_IDS}
|
|
|
427
427
|
|
|
428
428
|
**For blockers found during execution:**
|
|
429
429
|
```bash
|
|
430
|
-
node ~/.claude/
|
|
430
|
+
node ~/.claude/nf/bin/gsd-tools.cjs state add-blocker "Blocker description"
|
|
431
431
|
```
|
|
432
432
|
</state_updates>
|
|
433
433
|
|
|
434
434
|
<final_commit>
|
|
435
435
|
```bash
|
|
436
|
-
node ~/.claude/
|
|
436
|
+
node ~/.claude/nf/bin/gsd-tools.cjs commit "docs({phase}-{plan}): complete [plan-name] plan" --files .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md .planning/STATE.md .planning/ROADMAP.md .planning/REQUIREMENTS.md
|
|
437
437
|
```
|
|
438
438
|
|
|
439
439
|
Separate from per-task commits — captures execution results only.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
3
|
-
description: Researches how to implement a phase before planning. Produces RESEARCH.md consumed by
|
|
2
|
+
name: nf-phase-researcher
|
|
3
|
+
description: Researches how to implement a phase before planning. Produces RESEARCH.md consumed by nf-planner. Spawned by /qgsd:plan-phase orchestrator.
|
|
4
4
|
tools: Read, Write, Bash, Grep, Glob, WebSearch, WebFetch, mcp__context7__*
|
|
5
5
|
color: cyan
|
|
6
6
|
---
|
|
@@ -49,7 +49,7 @@ If CONTEXT.md exists, it constrains your research scope. Don't explore alternati
|
|
|
49
49
|
</upstream_input>
|
|
50
50
|
|
|
51
51
|
<downstream_consumer>
|
|
52
|
-
Your RESEARCH.md is consumed by `
|
|
52
|
+
Your RESEARCH.md is consumed by `nf-planner`:
|
|
53
53
|
|
|
54
54
|
| Section | How Planner Uses It |
|
|
55
55
|
|---------|---------------------|
|
|
@@ -120,7 +120,7 @@ When researching "best library for X": find what the ecosystem actually uses, do
|
|
|
120
120
|
Check `brave_search` from init context. If `true`, use Brave Search for higher quality results:
|
|
121
121
|
|
|
122
122
|
```bash
|
|
123
|
-
node ~/.claude/
|
|
123
|
+
node ~/.claude/nf/bin/gsd-tools.cjs websearch "your query" --limit 10
|
|
124
124
|
```
|
|
125
125
|
|
|
126
126
|
**Options:**
|
|
@@ -330,7 +330,7 @@ Orchestrator provides: phase number/name, description/goal, requirements, constr
|
|
|
330
330
|
|
|
331
331
|
Load phase context using init command:
|
|
332
332
|
```bash
|
|
333
|
-
INIT=$(node ~/.claude/
|
|
333
|
+
INIT=$(node ~/.claude/nf/bin/gsd-tools.cjs init phase-op "${PHASE}")
|
|
334
334
|
```
|
|
335
335
|
|
|
336
336
|
Extract from init JSON: `phase_dir`, `padded_phase`, `phase_number`, `commit_docs`.
|
|
@@ -417,7 +417,7 @@ Write to: `$PHASE_DIR/$PADDED_PHASE-RESEARCH.md`
|
|
|
417
417
|
## Step 6: Commit Research (optional)
|
|
418
418
|
|
|
419
419
|
```bash
|
|
420
|
-
node ~/.claude/
|
|
420
|
+
node ~/.claude/nf/bin/gsd-tools.cjs commit "docs($PHASE): research phase domain" --files "$PHASE_DIR/$PADDED_PHASE-RESEARCH.md"
|
|
421
421
|
```
|
|
422
422
|
|
|
423
423
|
## Step 7: Return Structured Result
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: nf-plan-checker
|
|
3
3
|
description: Verifies plans will achieve phase goal before execution. Goal-backward analysis of plan quality. Spawned by /qgsd:plan-phase orchestrator.
|
|
4
4
|
tools: Read, Bash, Glob, Grep
|
|
5
5
|
color: green
|
|
@@ -72,8 +72,8 @@ Goal-backward verification works backwards from outcome:
|
|
|
72
72
|
Then verify each level against the actual plan files.
|
|
73
73
|
|
|
74
74
|
**The difference:**
|
|
75
|
-
- `
|
|
76
|
-
- `
|
|
75
|
+
- `nf-verifier`: Verifies code DID achieve goal (after execution)
|
|
76
|
+
- `nf-plan-checker`: Verifies plans WILL achieve goal (before execution)
|
|
77
77
|
|
|
78
78
|
Same methodology (goal-backward), different timing, different subject matter.
|
|
79
79
|
</core_principle>
|
|
@@ -320,7 +320,7 @@ issue:
|
|
|
320
320
|
|
|
321
321
|
Load phase operation context:
|
|
322
322
|
```bash
|
|
323
|
-
INIT=$(node ~/.claude/
|
|
323
|
+
INIT=$(node ~/.claude/nf/bin/gsd-tools.cjs init phase-op "${PHASE_ARG}")
|
|
324
324
|
```
|
|
325
325
|
|
|
326
326
|
Extract from init JSON: `phase_dir`, `phase_number`, `has_plans`, `plan_count`.
|
|
@@ -329,7 +329,7 @@ Orchestrator provides CONTEXT.md content in the verification prompt. If provided
|
|
|
329
329
|
|
|
330
330
|
```bash
|
|
331
331
|
ls "$phase_dir"/*-PLAN.md 2>/dev/null
|
|
332
|
-
node ~/.claude/
|
|
332
|
+
node ~/.claude/nf/bin/gsd-tools.cjs roadmap get-phase "$phase_number"
|
|
333
333
|
ls "$phase_dir"/*-BRIEF.md 2>/dev/null
|
|
334
334
|
```
|
|
335
335
|
|
|
@@ -342,7 +342,7 @@ Use gsd-tools to validate plan structure:
|
|
|
342
342
|
```bash
|
|
343
343
|
for plan in "$PHASE_DIR"/*-PLAN.md; do
|
|
344
344
|
echo "=== $plan ==="
|
|
345
|
-
PLAN_STRUCTURE=$(node ~/.claude/
|
|
345
|
+
PLAN_STRUCTURE=$(node ~/.claude/nf/bin/gsd-tools.cjs verify plan-structure "$plan")
|
|
346
346
|
echo "$PLAN_STRUCTURE"
|
|
347
347
|
done
|
|
348
348
|
```
|
|
@@ -360,7 +360,7 @@ Map errors/warnings to verification dimensions:
|
|
|
360
360
|
Extract must_haves from each plan using gsd-tools:
|
|
361
361
|
|
|
362
362
|
```bash
|
|
363
|
-
MUST_HAVES=$(node ~/.claude/
|
|
363
|
+
MUST_HAVES=$(node ~/.claude/nf/bin/gsd-tools.cjs frontmatter get "$PLAN_PATH" --field must_haves)
|
|
364
364
|
```
|
|
365
365
|
|
|
366
366
|
Returns JSON: `{ truths: [...], artifacts: [...], key_links: [...] }`
|
|
@@ -403,7 +403,7 @@ For each requirement: find covering task(s), verify action is specific, flag gap
|
|
|
403
403
|
Use gsd-tools plan-structure verification (already run in Step 2):
|
|
404
404
|
|
|
405
405
|
```bash
|
|
406
|
-
PLAN_STRUCTURE=$(node ~/.claude/
|
|
406
|
+
PLAN_STRUCTURE=$(node ~/.claude/nf/bin/gsd-tools.cjs verify plan-structure "$PLAN_PATH")
|
|
407
407
|
```
|
|
408
408
|
|
|
409
409
|
The `tasks` array in the result shows each task's completeness:
|
|
@@ -603,7 +603,7 @@ Plans verified. Run `/qgsd:execute-phase {phase}` to proceed.
|
|
|
603
603
|
|
|
604
604
|
<anti_patterns>
|
|
605
605
|
|
|
606
|
-
**DO NOT** check code existence — that's
|
|
606
|
+
**DO NOT** check code existence — that's nf-verifier's job. You verify plans, not codebase.
|
|
607
607
|
|
|
608
608
|
**DO NOT** run the application. Static plan analysis only.
|
|
609
609
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: nf-planner
|
|
3
3
|
description: Creates executable phase plans with task breakdown, dependency analysis, and goal-backward verification. Spawned by /qgsd:plan-phase orchestrator.
|
|
4
4
|
tools: Read, Write, Bash, Glob, Grep, WebFetch, mcp__context7__*
|
|
5
5
|
color: green
|
|
@@ -380,8 +380,8 @@ Output: [Artifacts created]
|
|
|
380
380
|
</objective>
|
|
381
381
|
|
|
382
382
|
<execution_context>
|
|
383
|
-
@~/.claude/
|
|
384
|
-
@~/.claude/
|
|
383
|
+
@~/.claude/nf/workflows/execute-plan.md
|
|
384
|
+
@~/.claude/nf/templates/summary.md
|
|
385
385
|
</execution_context>
|
|
386
386
|
|
|
387
387
|
<context>
|
|
@@ -817,7 +817,7 @@ Group by plan, dimension, severity.
|
|
|
817
817
|
### Step 6: Commit
|
|
818
818
|
|
|
819
819
|
```bash
|
|
820
|
-
node ~/.claude/
|
|
820
|
+
node ~/.claude/nf/bin/gsd-tools.cjs commit "fix($PHASE): revise plans based on checker feedback" --files .planning/phases/$PHASE-*/$PHASE-*-PLAN.md
|
|
821
821
|
```
|
|
822
822
|
|
|
823
823
|
### Step 7: Return Revision Summary
|
|
@@ -856,7 +856,7 @@ node ~/.claude/qgsd/bin/gsd-tools.cjs commit "fix($PHASE): revise plans based on
|
|
|
856
856
|
Load planning context:
|
|
857
857
|
|
|
858
858
|
```bash
|
|
859
|
-
INIT=$(node ~/.claude/
|
|
859
|
+
INIT=$(node ~/.claude/nf/bin/gsd-tools.cjs init plan-phase "${PHASE}")
|
|
860
860
|
```
|
|
861
861
|
|
|
862
862
|
Extract from init JSON: `planner_model`, `researcher_model`, `checker_model`, `commit_docs`, `research_enabled`, `phase_dir`, `phase_number`, `has_research`, `has_context`.
|
|
@@ -912,7 +912,7 @@ Apply discovery level protocol (see discovery_levels section).
|
|
|
912
912
|
|
|
913
913
|
**Step 1 — Generate digest index:**
|
|
914
914
|
```bash
|
|
915
|
-
node ~/.claude/
|
|
915
|
+
node ~/.claude/nf/bin/gsd-tools.cjs history-digest
|
|
916
916
|
```
|
|
917
917
|
|
|
918
918
|
**Step 2 — Select relevant phases (typically 2-4):**
|
|
@@ -1030,7 +1030,7 @@ Include all frontmatter fields.
|
|
|
1030
1030
|
Validate each created PLAN.md using gsd-tools:
|
|
1031
1031
|
|
|
1032
1032
|
```bash
|
|
1033
|
-
VALID=$(node ~/.claude/
|
|
1033
|
+
VALID=$(node ~/.claude/nf/bin/gsd-tools.cjs frontmatter validate "$PLAN_PATH" --schema plan)
|
|
1034
1034
|
```
|
|
1035
1035
|
|
|
1036
1036
|
Returns JSON: `{ valid, missing, present, schema }`
|
|
@@ -1043,7 +1043,7 @@ Required plan frontmatter fields:
|
|
|
1043
1043
|
Also validate plan structure:
|
|
1044
1044
|
|
|
1045
1045
|
```bash
|
|
1046
|
-
STRUCTURE=$(node ~/.claude/
|
|
1046
|
+
STRUCTURE=$(node ~/.claude/nf/bin/gsd-tools.cjs verify plan-structure "$PLAN_PATH")
|
|
1047
1047
|
```
|
|
1048
1048
|
|
|
1049
1049
|
Returns JSON: `{ valid, errors, warnings, task_count, tasks }`
|
|
@@ -1080,7 +1080,7 @@ Plans:
|
|
|
1080
1080
|
|
|
1081
1081
|
<step name="git_commit">
|
|
1082
1082
|
```bash
|
|
1083
|
-
node ~/.claude/
|
|
1083
|
+
node ~/.claude/nf/bin/gsd-tools.cjs commit "docs($PHASE): create phase plan" --files .planning/phases/$PHASE-*/$PHASE-*-PLAN.md .planning/ROADMAP.md
|
|
1084
1084
|
```
|
|
1085
1085
|
</step>
|
|
1086
1086
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: nf-project-researcher
|
|
3
3
|
description: Researches domain ecosystem before roadmap creation. Produces files in .planning/research/ consumed during roadmap creation. Spawned by /qgsd:new-project or /qgsd:new-milestone orchestrators.
|
|
4
4
|
tools: Read, Write, Bash, Grep, Glob, WebSearch, WebFetch, mcp__context7__*
|
|
5
5
|
color: cyan
|
|
@@ -99,7 +99,7 @@ Always include current year. Use multiple query variations. Mark WebSearch-only
|
|
|
99
99
|
Check `brave_search` from orchestrator context. If `true`, use Brave Search for higher quality results:
|
|
100
100
|
|
|
101
101
|
```bash
|
|
102
|
-
node ~/.claude/
|
|
102
|
+
node ~/.claude/nf/bin/gsd-tools.cjs websearch "your query" --limit 10
|
|
103
103
|
```
|
|
104
104
|
|
|
105
105
|
**Options:**
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
<!-- DEPRECATED: This agent is superseded by direct inline dispatch in commands/
|
|
1
|
+
<!-- DEPRECATED: This agent is superseded by direct inline dispatch in commands/nf/quorum.md as of quick-103. The orchestrator Task-spawn indirection is no longer needed — quorum.md now contains the full R3 protocol inline (with nf-quorum-slot-worker for per-slot dispatch). Retained for reference only. Do not spawn this agent. -->
|
|
2
2
|
---
|
|
3
|
-
name:
|
|
3
|
+
name: nf-quorum-orchestrator
|
|
4
4
|
description: >
|
|
5
5
|
DEPRECATED — do not spawn. Superseded by direct inline dispatch in
|
|
6
|
-
commands/
|
|
6
|
+
commands/nf/quorum.md as of quick-103. Retained for reference only.
|
|
7
7
|
tools: Read, Write, Bash, Task, Glob, Grep
|
|
8
8
|
color: purple
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
<role>
|
|
12
|
-
You are the
|
|
12
|
+
You are the nForma quorum orchestrator. When invoked, execute the full R3 quorum protocol
|
|
13
13
|
for the question or bundle passed in `$ARGUMENTS`.
|
|
14
14
|
|
|
15
15
|
**SEQUENTIAL CALLS ONLY — NO SIBLING TOOL CALLS.**
|
|
@@ -55,7 +55,7 @@ These two variables (`$ARTIFACT_PATH`, `$REPO_DIR`) are available to all subsequ
|
|
|
55
55
|
Run before any model calls:
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
|
-
node "$HOME/.claude/
|
|
58
|
+
node "$HOME/.claude/nf-bin/check-provider-health.cjs" --json
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
Parse the JSON output. Build:
|
|
@@ -66,12 +66,12 @@ Parse the JSON output. Build:
|
|
|
66
66
|
|
|
67
67
|
Any server with `available: false` → mark UNAVAIL immediately — skip inference calls entirely.
|
|
68
68
|
|
|
69
|
-
3. **`$QUORUM_ACTIVE`**: read from `~/.claude/
|
|
69
|
+
3. **`$QUORUM_ACTIVE`**: read from `~/.claude/nf.json` (project config takes precedence):
|
|
70
70
|
```bash
|
|
71
71
|
node -e "
|
|
72
72
|
const fs = require('fs'), os = require('os'), path = require('path');
|
|
73
|
-
const globalCfg = path.join(os.homedir(), '.claude', '
|
|
74
|
-
const projCfg = path.join(process.cwd(), '.claude', '
|
|
73
|
+
const globalCfg = path.join(os.homedir(), '.claude', 'nf.json');
|
|
74
|
+
const projCfg = path.join(process.cwd(), '.claude', 'nf.json');
|
|
75
75
|
let cfg = {};
|
|
76
76
|
for (const f of [globalCfg, projCfg]) {
|
|
77
77
|
try { Object.assign(cfg, JSON.parse(fs.readFileSync(f, 'utf8'))); } catch(_){}
|
|
@@ -87,12 +87,12 @@ A server in `$QUORUM_ACTIVE` but absent from `$CLAUDE_MCP_SERVERS` = skip silent
|
|
|
87
87
|
- For each server with `available: false`, log: `Pre-flight skip: <serverName> (<providerName> DOWN)`
|
|
88
88
|
- Remove these from the working list for all subsequent steps.
|
|
89
89
|
|
|
90
|
-
Read `preferSub` and `agent_config` from
|
|
90
|
+
Read `preferSub` and `agent_config` from nf.json (project config takes precedence):
|
|
91
91
|
```bash
|
|
92
92
|
node -e "
|
|
93
93
|
const fs = require('fs'), os = require('os'), path = require('path');
|
|
94
|
-
const globalCfg = path.join(os.homedir(), '.claude', '
|
|
95
|
-
const projCfg = path.join(process.cwd(), '.claude', '
|
|
94
|
+
const globalCfg = path.join(os.homedir(), '.claude', 'nf.json');
|
|
95
|
+
const projCfg = path.join(process.cwd(), '.claude', 'nf.json');
|
|
96
96
|
let cfg = {};
|
|
97
97
|
for (const f of [globalCfg, projCfg]) {
|
|
98
98
|
try { Object.assign(cfg, JSON.parse(fs.readFileSync(f, 'utf8'))); } catch(_) {}
|
|
@@ -109,12 +109,12 @@ Store result as `$PREFER_SUB_CONFIG`.
|
|
|
109
109
|
- **Shuffle within groups:** Shuffle the sub group and the api group independently. Final order when preferSub=true: shuffle(sub), shuffle(api). When preferSub=false: shuffle all slots.
|
|
110
110
|
- Log: `Active slots: <slot1>, <slot2>, ...`
|
|
111
111
|
|
|
112
|
-
**min_quorum_size check:** Read from `~/.claude/
|
|
112
|
+
**min_quorum_size check:** Read from `~/.claude/nf.json` (project config takes precedence; default: 3 if absent):
|
|
113
113
|
```bash
|
|
114
114
|
node -e "
|
|
115
115
|
const fs = require('fs'), os = require('os'), path = require('path');
|
|
116
|
-
const globalCfg = path.join(os.homedir(), '.claude', '
|
|
117
|
-
const projCfg = path.join(process.cwd(), '.claude', '
|
|
116
|
+
const globalCfg = path.join(os.homedir(), '.claude', 'nf.json');
|
|
117
|
+
const projCfg = path.join(process.cwd(), '.claude', 'nf.json');
|
|
118
118
|
let cfg = {};
|
|
119
119
|
for (const f of [globalCfg, projCfg]) {
|
|
120
120
|
try { Object.assign(cfg, JSON.parse(fs.readFileSync(f, 'utf8'))); } catch(_){}
|
|
@@ -136,7 +136,7 @@ If `availableCount < min_quorum_size`:
|
|
|
136
136
|
**Availability cache check:** After building the provider slot list but before the min_quorum_size check, read the scoreboard availability data:
|
|
137
137
|
|
|
138
138
|
```bash
|
|
139
|
-
node "$HOME/.claude/
|
|
139
|
+
node "$HOME/.claude/nf-bin/update-scoreboard.cjs" get-availability \
|
|
140
140
|
--scoreboard .planning/quorum-scoreboard.json 2>/dev/null || echo '{}'
|
|
141
141
|
```
|
|
142
142
|
|
|
@@ -171,7 +171,7 @@ const fs = require('fs'), path = require('path'), os = require('os');
|
|
|
171
171
|
|
|
172
172
|
// Find providers.json
|
|
173
173
|
const searchPaths = [
|
|
174
|
-
path.join(os.homedir(), '.claude', '
|
|
174
|
+
path.join(os.homedir(), '.claude', 'nf-bin', 'providers.json'),
|
|
175
175
|
];
|
|
176
176
|
try {
|
|
177
177
|
const cj = JSON.parse(fs.readFileSync(path.join(os.homedir(), '.claude.json'), 'utf8'));
|
|
@@ -186,8 +186,8 @@ for (const p of searchPaths) {
|
|
|
186
186
|
}
|
|
187
187
|
|
|
188
188
|
// Read quorum_active
|
|
189
|
-
const globalCfg = path.join(os.homedir(), '.claude', '
|
|
190
|
-
const projCfg = path.join(process.cwd(), '.claude', '
|
|
189
|
+
const globalCfg = path.join(os.homedir(), '.claude', 'nf.json');
|
|
190
|
+
const projCfg = path.join(process.cwd(), '.claude', 'nf.json');
|
|
191
191
|
let cfg = {};
|
|
192
192
|
for (const f of [globalCfg, projCfg]) {
|
|
193
193
|
try { Object.assign(cfg, JSON.parse(fs.readFileSync(f, 'utf8'))); } catch(_) {}
|
|
@@ -206,7 +206,7 @@ console.log(JSON.stringify(team));
|
|
|
206
206
|
Detect Claude model ID: `CLAUDE_MODEL` env → `ANTHROPIC_MODEL` env → session model from context.
|
|
207
207
|
|
|
208
208
|
```bash
|
|
209
|
-
node "$HOME/.claude/
|
|
209
|
+
node "$HOME/.claude/nf-bin/update-scoreboard.cjs" init-team \
|
|
210
210
|
--claude-model "<claude_model_id>" \
|
|
211
211
|
--team '<TEAM_JSON>'
|
|
212
212
|
```
|
|
@@ -220,12 +220,12 @@ node "$HOME/.claude/qgsd-bin/update-scoreboard.cjs" init-team \
|
|
|
220
220
|
### Parse question
|
|
221
221
|
|
|
222
222
|
The question is `$ARGUMENTS`. If empty or too short, stop with:
|
|
223
|
-
`"No question provided. Pass question as: Task(subagent_type=
|
|
223
|
+
`"No question provided. Pass question as: Task(subagent_type=nf-quorum-orchestrator, prompt='<question>')"`
|
|
224
224
|
|
|
225
225
|
Display:
|
|
226
226
|
```
|
|
227
227
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
228
|
-
|
|
228
|
+
nForma ► QUORUM: Mode A — Pure Question
|
|
229
229
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
230
230
|
|
|
231
231
|
Question: [question]
|
|
@@ -256,7 +256,7 @@ $ALL_ROUND_RESULTS = [] (accumulates results across all rounds for scoreboard)
|
|
|
256
256
|
Display before dispatching each round:
|
|
257
257
|
```
|
|
258
258
|
─────────────────────────────────────────────
|
|
259
|
-
|
|
259
|
+
nForma ► QUORUM Round $CURRENT_ROUND / up to $MAX_ROUNDS
|
|
260
260
|
─────────────────────────────────────────────
|
|
261
261
|
```
|
|
262
262
|
|
|
@@ -266,7 +266,7 @@ All workers for this round are dispatched as parallel sibling Task calls in one
|
|
|
266
266
|
|
|
267
267
|
```
|
|
268
268
|
Task(
|
|
269
|
-
subagent_type="
|
|
269
|
+
subagent_type="nf-quorum-slot-worker",
|
|
270
270
|
description="<slotName> quorum R<$CURRENT_ROUND>",
|
|
271
271
|
prompt="""
|
|
272
272
|
slot: <slotName>
|
|
@@ -290,7 +290,7 @@ Collect all worker result blocks → store as `$ROUND_RESULTS`. Append to `$ALL_
|
|
|
290
290
|
|
|
291
291
|
For each result where `verdict: UNAVAIL`:
|
|
292
292
|
```bash
|
|
293
|
-
node "$HOME/.claude/
|
|
293
|
+
node "$HOME/.claude/nf-bin/update-scoreboard.cjs" set-availability \
|
|
294
294
|
--slot <slot> \
|
|
295
295
|
--message "<unavail_message text>" \
|
|
296
296
|
--scoreboard .planning/quorum-scoreboard.json
|
|
@@ -348,7 +348,7 @@ If `$CONSENSUS_REACHED`:
|
|
|
348
348
|
|
|
349
349
|
```
|
|
350
350
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
351
|
-
|
|
351
|
+
nForma ► QUORUM CONSENSUS REACHED
|
|
352
352
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
353
353
|
|
|
354
354
|
Question: [question]
|
|
@@ -391,7 +391,7 @@ fs.writeFileSync(
|
|
|
391
391
|
|
|
392
392
|
Then apply all votes in one transaction per round:
|
|
393
393
|
```bash
|
|
394
|
-
node "$HOME/.claude/
|
|
394
|
+
node "$HOME/.claude/nf-bin/update-scoreboard.cjs" merge-wave \
|
|
395
395
|
--dir .planning/scoreboard-tmp \
|
|
396
396
|
--task "<taskLabel>" \
|
|
397
397
|
--round <round> \
|
|
@@ -413,7 +413,7 @@ If loop exhausted without `$CONSENSUS_REACHED`:
|
|
|
413
413
|
|
|
414
414
|
```
|
|
415
415
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
416
|
-
|
|
416
|
+
nForma ► QUORUM ESCALATING — NO CONSENSUS AFTER 10 ROUNDS
|
|
417
417
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
418
418
|
|
|
419
419
|
Question: [question]
|
|
@@ -439,7 +439,7 @@ Update scoreboard using same merge-wave pattern as Consensus output above.
|
|
|
439
439
|
Extract command(s) from `$ARGUMENTS`. Display:
|
|
440
440
|
```
|
|
441
441
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
442
|
-
|
|
442
|
+
nForma ► QUORUM: Mode B — Execution + Trace Review
|
|
443
443
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
444
444
|
|
|
445
445
|
Question: [original question]
|
|
@@ -478,7 +478,7 @@ $ALL_ROUND_RESULTS = []
|
|
|
478
478
|
|
|
479
479
|
```
|
|
480
480
|
─────────────────────────────────────────────
|
|
481
|
-
|
|
481
|
+
nForma ► QUORUM Round $CURRENT_ROUND / up to $MAX_ROUNDS
|
|
482
482
|
─────────────────────────────────────────────
|
|
483
483
|
```
|
|
484
484
|
|
|
@@ -486,7 +486,7 @@ $ALL_ROUND_RESULTS = []
|
|
|
486
486
|
|
|
487
487
|
```
|
|
488
488
|
Task(
|
|
489
|
-
subagent_type="
|
|
489
|
+
subagent_type="nf-quorum-slot-worker",
|
|
490
490
|
description="<slotName> quorum R<$CURRENT_ROUND>",
|
|
491
491
|
prompt="""
|
|
492
492
|
slot: <slotName>
|
|
@@ -512,7 +512,7 @@ Collect all worker result blocks → store as `$ROUND_RESULTS`. Append to `$ALL_
|
|
|
512
512
|
|
|
513
513
|
For each result where `verdict: UNAVAIL`:
|
|
514
514
|
```bash
|
|
515
|
-
node "$HOME/.claude/
|
|
515
|
+
node "$HOME/.claude/nf-bin/update-scoreboard.cjs" set-availability \
|
|
516
516
|
--slot <slot> \
|
|
517
517
|
--message "<unavail_message text>" \
|
|
518
518
|
--scoreboard .planning/quorum-scoreboard.json
|
|
@@ -573,7 +573,7 @@ Parse final round results for verdicts. Display:
|
|
|
573
573
|
|
|
574
574
|
```
|
|
575
575
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
576
|
-
|
|
576
|
+
nForma ► QUORUM VERDICT
|
|
577
577
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
578
578
|
|
|
579
579
|
┌──────────────┬──────────────┬──────────────────────────────────────────┐
|
|
@@ -609,7 +609,7 @@ Write per-slot temp vote files to `.planning/scoreboard-tmp/` and apply via merg
|
|
|
609
609
|
|
|
610
610
|
```
|
|
611
611
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
612
|
-
|
|
612
|
+
nForma ► QUORUM ESCALATING — NO CONSENSUS AFTER 10 ROUNDS
|
|
613
613
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
614
614
|
|
|
615
615
|
Question: [original question]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: nf-quorum-slot-worker
|
|
3
3
|
description: >
|
|
4
4
|
Thin passthrough — extracts arguments, calls quorum-slot-dispatch.cjs, emits output verbatim.
|
|
5
5
|
No prompt construction, no output parsing, no file reads. One Bash call per dispatch.
|
|
@@ -7,7 +7,7 @@ tools: Bash
|
|
|
7
7
|
color: blue
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
You are a
|
|
10
|
+
You are a nForma quorum slot worker. Spawned as a parallel Task.
|
|
11
11
|
Your job: extract args from $ARGUMENTS, call quorum-slot-dispatch.cjs, emit its stdout verbatim.
|
|
12
12
|
Do NOT modify, summarize, or reformat the script output. It IS the structured result block.
|
|
13
13
|
|
|
@@ -30,7 +30,7 @@ FLAGS=""; [ -n "$ARTIFACT_PATH" ] && FLAGS="$FLAGS --artifact-path $ARTIFACT_PAT
|
|
|
30
30
|
[ -s "$TRACES_FILE" ] && FLAGS="$FLAGS --traces-file $TRACES_FILE"
|
|
31
31
|
[ "$REQUEST_IMPROVEMENTS" = "true" ] && FLAGS="$FLAGS --request-improvements"
|
|
32
32
|
BASH_TIMEOUT=$(( TIMEOUT_MS + 30000 > 120000 ? 120000 : TIMEOUT_MS + 30000 ))
|
|
33
|
-
node "$HOME/.claude/
|
|
33
|
+
node "$HOME/.claude/nf-bin/quorum-slot-dispatch.cjs" \
|
|
34
34
|
--slot "$SLOT" --round "$ROUND" --timeout "$TIMEOUT_MS" --cwd "$REPO_DIR" \
|
|
35
35
|
--mode "$MODE" --question "$QUESTION" $FLAGS
|
|
36
36
|
rm -f "$PRIOR_FILE" "$TRACES_FILE"
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
<!-- DEPRECATED: This agent is superseded by inline synthesis in
|
|
1
|
+
<!-- DEPRECATED: This agent is superseded by inline synthesis in nf-quorum-orchestrator.md as of quick-101. The orchestrator now synthesizes results itself without spawning a separate synthesizer Task. This file is kept for reference only. -->
|
|
2
2
|
---
|
|
3
|
-
name:
|
|
3
|
+
name: nf-quorum-synthesizer
|
|
4
4
|
description: Quorum barrier synthesizer — spawned once per round after all worker Tasks complete. Reads all worker result blocks, checks consensus, and either emits a final verdict or builds the cross-pollination context bundle for the next round.
|
|
5
5
|
tools: Read
|
|
6
6
|
color: purple
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
<role>
|
|
10
|
-
You are the
|
|
10
|
+
You are the nForma quorum barrier synthesizer. You are spawned once per round by the orchestrator, after all parallel worker Tasks have completed. You receive all worker result blocks in $ARGUMENTS and produce either a final consensus verdict or a deliberation context bundle for the next wave.
|
|
11
11
|
|
|
12
12
|
You do NOT call any external tools. You do NOT write any files. You do NOT run Bash commands. You use `Read` only if you need to inspect a file referenced in the worker results (e.g. artifact_path).
|
|
13
13
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: nf-quorum-test-worker
|
|
3
3
|
description: Evaluates a test execution bundle for genuineness and quality. Receives full stdout, stderr, test source, and exit metadata. Returns structured PASS/BLOCK/REVIEW-NEEDED verdict.
|
|
4
4
|
tools: Read
|
|
5
5
|
color: cyan
|