@nforma.ai/nforma 0.2.1 → 0.28.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-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 +40 -40
- 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/nf-circuit-breaker.test.js +1002 -0
- package/hooks/dist/{qgsd-precompact.js → nf-precompact.js} +13 -13
- package/hooks/dist/nf-precompact.test.js +227 -0
- package/hooks/dist/{qgsd-prompt.js → nf-prompt.js} +110 -33
- package/hooks/dist/nf-prompt.test.js +698 -0
- package/hooks/dist/nf-session-start.js +185 -0
- package/hooks/dist/nf-session-start.test.js +354 -0
- package/hooks/dist/{qgsd-slot-correlator.js → nf-slot-correlator.js} +13 -5
- package/hooks/dist/nf-slot-correlator.test.js +85 -0
- package/hooks/dist/{qgsd-spec-regen.js → nf-spec-regen.js} +17 -8
- package/hooks/dist/nf-spec-regen.test.js +73 -0
- package/hooks/dist/{qgsd-statusline.js → nf-statusline.js} +12 -3
- package/hooks/dist/nf-statusline.test.js +157 -0
- package/hooks/dist/{qgsd-stop.js → nf-stop.js} +152 -18
- package/hooks/dist/nf-stop.test.js +1388 -0
- package/hooks/dist/{qgsd-token-collector.js → nf-token-collector.js} +12 -4
- package/hooks/dist/nf-token-collector.test.js +262 -0
- package/hooks/dist/unified-mcp-server.mjs +2 -2
- package/package.json +4 -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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
3
|
-
description: Fetch issues and drifts from configured sources, render dual-table output, and write to debt ledger. Replaces /
|
|
2
|
+
name: nf:observe
|
|
3
|
+
description: Fetch issues and drifts from configured sources, render dual-table output, and write to debt ledger. Replaces /nf:triage.
|
|
4
4
|
argument-hint: "[--source github|sentry|sentry-feedback|bash|internal] [--since 24h|7d] [--limit N]"
|
|
5
5
|
allowed-tools:
|
|
6
6
|
- Read
|
|
@@ -11,9 +11,9 @@ allowed-tools:
|
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
<objective>
|
|
14
|
-
Aggregate issues and drifts from all configured sources, deduplicate, render a prioritized dual-table output (Issues + Drifts), write observations to the debt ledger, and route the selected issue to the right
|
|
14
|
+
Aggregate issues and drifts from all configured sources, deduplicate, render a prioritized dual-table output (Issues + Drifts), write observations to the debt ledger, and route the selected issue to the right nForma workflow.
|
|
15
15
|
|
|
16
|
-
This command is the project's unified "what's broken right now?" entry point. It replaces `/
|
|
16
|
+
This command is the project's unified "what's broken right now?" entry point. It replaces `/nf:triage` with debt-aware persistence and dual-table rendering.
|
|
17
17
|
</objective>
|
|
18
18
|
|
|
19
19
|
<process>
|
|
@@ -46,7 +46,7 @@ The loader automatically:
|
|
|
46
46
|
Display:
|
|
47
47
|
```
|
|
48
48
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
49
|
-
|
|
49
|
+
nForma > OBSERVE: No sources configured
|
|
50
50
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
51
51
|
Create .planning/observe-sources.md to configure issue sources.
|
|
52
52
|
```
|
|
@@ -67,7 +67,7 @@ if (!$SOURCE_FILTER || $SOURCE_FILTER === 'internal') {
|
|
|
67
67
|
// Critical: check for empty sources AFTER internal injection
|
|
68
68
|
if (config.sources.length === 0) {
|
|
69
69
|
// Display "no sources" message only if sources is empty AFTER internal source injection
|
|
70
|
-
display("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n
|
|
70
|
+
display("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n nForma > OBSERVE: No sources configured\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nCreate .planning/observe-sources.md to configure issue sources.");
|
|
71
71
|
stop();
|
|
72
72
|
}
|
|
73
73
|
```
|
|
@@ -80,19 +80,21 @@ Import handler functions and register them with the registry:
|
|
|
80
80
|
|
|
81
81
|
```javascript
|
|
82
82
|
const { registerHandler } = require('./bin/observe-registry.cjs');
|
|
83
|
-
const { handleGitHub, handleSentry, handleSentryFeedback, handleBash, handleInternal } = require('./bin/observe-handlers.cjs');
|
|
83
|
+
const { handleGitHub, handleSentry, handleSentryFeedback, handleBash, handleInternal, handleUpstream, handleDeps } = require('./bin/observe-handlers.cjs');
|
|
84
84
|
|
|
85
85
|
registerHandler('github', handleGitHub);
|
|
86
86
|
registerHandler('sentry', handleSentry);
|
|
87
87
|
registerHandler('sentry-feedback', handleSentryFeedback);
|
|
88
88
|
registerHandler('bash', handleBash);
|
|
89
89
|
registerHandler('internal', handleInternal);
|
|
90
|
+
registerHandler('upstream', handleUpstream);
|
|
91
|
+
registerHandler('deps', handleDeps);
|
|
90
92
|
```
|
|
91
93
|
|
|
92
94
|
Display dispatch header:
|
|
93
95
|
```
|
|
94
96
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
95
|
-
|
|
97
|
+
nForma > OBSERVE: Fetching from N source(s)...
|
|
96
98
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
97
99
|
```
|
|
98
100
|
|
|
@@ -163,7 +165,7 @@ Display the output.
|
|
|
163
165
|
If total issues = 0 and no drifts:
|
|
164
166
|
```
|
|
165
167
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
166
|
-
|
|
168
|
+
nForma > OBSERVE: All clear — no open issues found
|
|
167
169
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
168
170
|
Sources checked: <list>
|
|
169
171
|
```
|
|
@@ -224,25 +226,56 @@ Enter issue # to work on, "ack N" to acknowledge, "solve" for all internal issue
|
|
|
224
226
|
**If user enters a number:**
|
|
225
227
|
- Load the full issue details (title, URL, meta) for that index.
|
|
226
228
|
- Determine routing:
|
|
227
|
-
- If the issue has `source_type: 'internal'` and `_route` metadata: use the `_route` value as the suggested action (example: unfinished quick task suggests `/
|
|
229
|
+
- If the issue has `source_type: 'internal'` and `_route` metadata: use the `_route` value as the suggested action (example: unfinished quick task suggests `/nf:quick "original-slug"`, debug session suggests `/nf:debug --resume`)
|
|
230
|
+
- If the issue has `issue_type: 'upstream'`: route to **upstream evaluation** (see below)
|
|
228
231
|
- Otherwise, routing by severity:
|
|
229
|
-
- `severity: error` or `severity: bug` → suggest `/
|
|
230
|
-
- `severity: warning` or `severity: info` → suggest `/
|
|
232
|
+
- `severity: error` or `severity: bug` → suggest `/nf:debug`
|
|
233
|
+
- `severity: warning` or `severity: info` → suggest `/nf:quick`
|
|
231
234
|
- Display:
|
|
232
235
|
```
|
|
233
236
|
◆ Issue: <title>
|
|
234
237
|
URL: <url>
|
|
235
238
|
Meta: <meta>
|
|
236
239
|
|
|
237
|
-
Suggested action: /
|
|
240
|
+
Suggested action: /nf:debug "<title> — <meta>"
|
|
238
241
|
Run it? [Y/n]
|
|
239
242
|
```
|
|
240
243
|
- If confirmed, invoke the suggested skill with the issue as context.
|
|
241
244
|
|
|
245
|
+
**Upstream evaluation routing (issue_type: 'upstream'):**
|
|
246
|
+
|
|
247
|
+
When the user selects an upstream item, do NOT blindly suggest porting it. Instead:
|
|
248
|
+
|
|
249
|
+
1. Fetch the release notes or PR diff from the upstream URL (use `gh release view <tag> --repo <repo> --json body` or `gh pr view <number> --repo <repo> --json body,files`)
|
|
250
|
+
2. Identify the areas of our codebase that overlap with the upstream change
|
|
251
|
+
3. **Compare quality**: For each overlapping area, assess whether:
|
|
252
|
+
- Our implementation is already equivalent or better → `SKIP` (we diverged for good reason or already have it)
|
|
253
|
+
- The upstream change introduces something we lack → `CANDIDATE` (worth porting)
|
|
254
|
+
- The upstream change conflicts with our architecture → `INCOMPATIBLE` (their approach doesn't fit our patterns)
|
|
255
|
+
4. Display the evaluation:
|
|
256
|
+
```
|
|
257
|
+
◆ Upstream: <title>
|
|
258
|
+
Source: <repo> <tag or #PR>
|
|
259
|
+
URL: <url>
|
|
260
|
+
|
|
261
|
+
Evaluation:
|
|
262
|
+
┌─────────────────────────────────────────────────┐
|
|
263
|
+
│ Area │ Ours │ Theirs │ Verdict │
|
|
264
|
+
├─────────────────────────────────────────────────┤
|
|
265
|
+
│ hook registration │ ✓ │ ✓ │ SKIP │
|
|
266
|
+
│ error retry logic │ basic │ exp-bo │ CANDIDATE │
|
|
267
|
+
│ config format │ YAML │ TOML │ INCOMPATIBLE│
|
|
268
|
+
└─────────────────────────────────────────────────┘
|
|
269
|
+
|
|
270
|
+
Candidates for porting: 1 of 3 areas
|
|
271
|
+
```
|
|
272
|
+
5. If there are CANDIDATE items, ask: `Port candidate changes? [Y/n]`
|
|
273
|
+
- If yes → suggest `/nf:quick "port <area> from <repo> <tag>"` for each candidate
|
|
274
|
+
|
|
242
275
|
**If user enters "solve":**
|
|
243
276
|
- Collect all issues with `source_type: 'internal'`
|
|
244
|
-
- Display: `Routing all internal issues to /
|
|
245
|
-
- Invoke `/
|
|
277
|
+
- Display: `Routing all internal issues to /nf:solve...`
|
|
278
|
+
- Invoke `/nf:solve` to address all internal consistency issues at once
|
|
246
279
|
|
|
247
280
|
**If user enters "ack N":**
|
|
248
281
|
- Acknowledge the debt entry for issue #N (transition status from "open" to "acknowledged" via the debt state machine).
|
|
@@ -254,7 +287,7 @@ Enter issue # to work on, "ack N" to acknowledge, "solve" for all internal issue
|
|
|
254
287
|
|
|
255
288
|
**If user presses Enter (blank):**
|
|
256
289
|
```
|
|
257
|
-
Observe complete. Run /
|
|
290
|
+
Observe complete. Run /nf:observe again when ready.
|
|
258
291
|
```
|
|
259
292
|
|
|
260
293
|
</process>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: nf:pause-work
|
|
3
3
|
description: Create context handoff when pausing work mid-phase
|
|
4
4
|
allowed-tools:
|
|
5
5
|
- Read
|
|
@@ -19,7 +19,7 @@ Routes to the pause-work workflow which handles:
|
|
|
19
19
|
</objective>
|
|
20
20
|
|
|
21
21
|
<execution_context>
|
|
22
|
-
@~/.claude/
|
|
22
|
+
@~/.claude/nf/workflows/pause-work.md
|
|
23
23
|
</execution_context>
|
|
24
24
|
|
|
25
25
|
<context>
|
|
@@ -27,7 +27,7 @@ State and phase progress are gathered in-workflow with targeted reads.
|
|
|
27
27
|
</context>
|
|
28
28
|
|
|
29
29
|
<process>
|
|
30
|
-
**Follow the pause-work workflow** from `@~/.claude/
|
|
30
|
+
**Follow the pause-work workflow** from `@~/.claude/nf/workflows/pause-work.md`.
|
|
31
31
|
|
|
32
32
|
The workflow handles all logic including:
|
|
33
33
|
1. Phase directory detection
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: nf:plan-milestone-gaps
|
|
3
3
|
description: Create phases to close all gaps identified by milestone audit
|
|
4
4
|
allowed-tools:
|
|
5
5
|
- Read
|
|
@@ -10,15 +10,15 @@ allowed-tools:
|
|
|
10
10
|
- AskUserQuestion
|
|
11
11
|
---
|
|
12
12
|
<objective>
|
|
13
|
-
Create all phases necessary to close gaps identified by `/
|
|
13
|
+
Create all phases necessary to close gaps identified by `/nf:audit-milestone`.
|
|
14
14
|
|
|
15
15
|
Reads MILESTONE-AUDIT.md, groups gaps into logical phases, creates phase entries in ROADMAP.md, and offers to plan each phase.
|
|
16
16
|
|
|
17
|
-
One command creates all fix phases — no manual `/
|
|
17
|
+
One command creates all fix phases — no manual `/nf:add-phase` per gap.
|
|
18
18
|
</objective>
|
|
19
19
|
|
|
20
20
|
<execution_context>
|
|
21
|
-
@~/.claude/
|
|
21
|
+
@~/.claude/nf/workflows/plan-milestone-gaps.md
|
|
22
22
|
</execution_context>
|
|
23
23
|
|
|
24
24
|
<context>
|
|
@@ -29,6 +29,6 @@ Original intent and current planning state are loaded on demand inside the workf
|
|
|
29
29
|
</context>
|
|
30
30
|
|
|
31
31
|
<process>
|
|
32
|
-
Execute the plan-milestone-gaps workflow from @~/.claude/
|
|
32
|
+
Execute the plan-milestone-gaps workflow from @~/.claude/nf/workflows/plan-milestone-gaps.md end-to-end.
|
|
33
33
|
Preserve all workflow gates (audit loading, prioritization, phase grouping, user confirmation, roadmap updates).
|
|
34
34
|
</process>
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: nf:plan-phase
|
|
3
3
|
description: Create detailed phase plan (PLAN.md) with verification loop
|
|
4
4
|
argument-hint: "[phase] [--auto] [--research] [--skip-research] [--gaps] [--skip-verify]"
|
|
5
|
-
agent:
|
|
5
|
+
agent: nf-planner
|
|
6
6
|
allowed-tools:
|
|
7
7
|
- Read
|
|
8
8
|
- Write
|
|
@@ -18,12 +18,12 @@ Create executable phase prompts (PLAN.md files) for a roadmap phase with integra
|
|
|
18
18
|
|
|
19
19
|
**Default flow:** Research (if needed) → Plan → Verify → Done
|
|
20
20
|
|
|
21
|
-
**Orchestrator role:** Parse arguments, validate phase, research domain (unless skipped), spawn
|
|
21
|
+
**Orchestrator role:** Parse arguments, validate phase, research domain (unless skipped), spawn nf-planner, verify with nf-plan-checker, iterate until pass or max iterations, present results.
|
|
22
22
|
</objective>
|
|
23
23
|
|
|
24
24
|
<execution_context>
|
|
25
|
-
@~/.claude/
|
|
26
|
-
@~/.claude/
|
|
25
|
+
@~/.claude/nf/workflows/plan-phase.md
|
|
26
|
+
@~/.claude/nf/references/ui-brand.md
|
|
27
27
|
</execution_context>
|
|
28
28
|
|
|
29
29
|
<context>
|
|
@@ -39,6 +39,6 @@ Normalize phase input in step 2 before any directory lookups.
|
|
|
39
39
|
</context>
|
|
40
40
|
|
|
41
41
|
<process>
|
|
42
|
-
Execute the plan-phase workflow from @~/.claude/
|
|
42
|
+
Execute the plan-phase workflow from @~/.claude/nf/workflows/plan-phase.md end-to-end.
|
|
43
43
|
Preserve all workflow gates (validation, research, planning, verification loop, routing).
|
|
44
44
|
</process>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
3
|
-
description: Manage polyrepo groups — register repos that form one product for cross-repo
|
|
2
|
+
name: nf:polyrepo
|
|
3
|
+
description: Manage polyrepo groups — register repos that form one product for cross-repo nForma awareness
|
|
4
4
|
argument-hint: create | add <group> <path> [role] | remove <group> <path> | list [group] | info
|
|
5
5
|
allowed-tools:
|
|
6
6
|
- Read
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: nf:progress
|
|
3
3
|
description: Check project progress, show context, and route to next action (execute or plan)
|
|
4
4
|
allowed-tools:
|
|
5
5
|
- Read
|
|
@@ -15,10 +15,10 @@ Provides situational awareness before continuing work.
|
|
|
15
15
|
</objective>
|
|
16
16
|
|
|
17
17
|
<execution_context>
|
|
18
|
-
@~/.claude/
|
|
18
|
+
@~/.claude/nf/workflows/progress.md
|
|
19
19
|
</execution_context>
|
|
20
20
|
|
|
21
21
|
<process>
|
|
22
|
-
Execute the progress workflow from @~/.claude/
|
|
22
|
+
Execute the progress workflow from @~/.claude/nf/workflows/progress.md end-to-end.
|
|
23
23
|
Preserve all routing logic (Routes A through F) and edge case handling.
|
|
24
24
|
</process>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: nf:queue
|
|
3
3
|
description: Queue a skill or command to auto-invoke after the next /clear
|
|
4
|
-
argument-hint: <command to queue, e.g. "/
|
|
4
|
+
argument-hint: <command to queue, e.g. "/nf:quick --full">
|
|
5
5
|
allowed-tools:
|
|
6
6
|
- Bash
|
|
7
7
|
- Write
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: nf:quick
|
|
3
3
|
description: Execute a quick task with GSD guarantees (atomic commits, state tracking) but skip optional agents
|
|
4
4
|
argument-hint: "[--full]"
|
|
5
5
|
allowed-tools:
|
|
@@ -16,7 +16,7 @@ allowed-tools:
|
|
|
16
16
|
Execute small, ad-hoc tasks with GSD guarantees (atomic commits, STATE.md tracking).
|
|
17
17
|
|
|
18
18
|
Quick mode is the same system with a shorter path:
|
|
19
|
-
- Spawns
|
|
19
|
+
- Spawns nf-planner (quick mode) + nf-executor(s)
|
|
20
20
|
- Quick tasks live in `.planning/quick/` separate from planned phases
|
|
21
21
|
- Updates STATE.md "Quick Tasks Completed" table (NOT ROADMAP.md)
|
|
22
22
|
|
|
@@ -34,7 +34,7 @@ Use when you want quality guarantees with formal correctness properties, without
|
|
|
34
34
|
</objective>
|
|
35
35
|
|
|
36
36
|
<execution_context>
|
|
37
|
-
@~/.claude/
|
|
37
|
+
@~/.claude/nf/workflows/quick.md
|
|
38
38
|
</execution_context>
|
|
39
39
|
|
|
40
40
|
<context>
|
|
@@ -44,7 +44,7 @@ Context files are resolved inside the workflow (`init quick`) and delegated via
|
|
|
44
44
|
</context>
|
|
45
45
|
|
|
46
46
|
<process>
|
|
47
|
-
Execute the quick workflow from @~/.claude/
|
|
47
|
+
Execute the quick workflow from @~/.claude/nf/workflows/quick.md end-to-end.
|
|
48
48
|
Preserve all workflow gates (validation, task description, planning, execution, state updates, commits).
|
|
49
49
|
</process>
|
|
50
50
|
|
|
@@ -60,7 +60,7 @@ When Step 6.5 reaches `gaps_found` status, do NOT pause for user input and do NO
|
|
|
60
60
|
|
|
61
61
|
```
|
|
62
62
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
63
|
-
|
|
63
|
+
nForma ► GAPS FOUND — AUTO-FIX
|
|
64
64
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
65
65
|
|
|
66
66
|
◆ Verification found gaps. Spawning fix executor...
|
|
@@ -88,7 +88,7 @@ Fix gaps identified in verification.
|
|
|
88
88
|
- Return the fix commit hash in your response (format: 'Fix Commit: {hash}')
|
|
89
89
|
</constraints>
|
|
90
90
|
",
|
|
91
|
-
subagent_type="
|
|
91
|
+
subagent_type="nf-executor",
|
|
92
92
|
model="{executor_model}",
|
|
93
93
|
description="Fix gaps: ${DESCRIPTION}"
|
|
94
94
|
)
|
|
@@ -96,7 +96,7 @@ Fix gaps identified in verification.
|
|
|
96
96
|
|
|
97
97
|
**4. After fix executor returns, run quorum-test to verify gaps are closed:**
|
|
98
98
|
|
|
99
|
-
Determine test scope from VERIFICATION.md artifacts. If test files exist (`*.test.js`, `*.test.ts`, etc.), call `/
|
|
99
|
+
Determine test scope from VERIFICATION.md artifacts. If test files exist (`*.test.js`, `*.test.ts`, etc.), call `/nf:quorum-test` with those files. If no test files are present (non-testable gaps), skip quorum-test and proceed directly to step 5 treating the result as PASS.
|
|
100
100
|
|
|
101
101
|
Evaluate quorum-test consensus:
|
|
102
102
|
|
|
@@ -120,7 +120,7 @@ Set `$VERIFICATION_STATUS` based on human response ("verified" → "Verified", "
|
|
|
120
120
|
|
|
121
121
|
```
|
|
122
122
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
123
|
-
|
|
123
|
+
nForma ► AUTO-FIX EXHAUSTED
|
|
124
124
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
125
125
|
|
|
126
126
|
Max fix iterations reached. Quorum still reports gaps.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: nf:quorum-test
|
|
3
3
|
description: Run the test suite and submit the full execution bundle to quorum workers for independent quality review. Parallel workers evaluate whether tests genuinely pass and whether assertions are meaningful.
|
|
4
4
|
argument-hint: "[path/to/test.file.js]"
|
|
5
5
|
allowed-tools:
|
|
@@ -13,7 +13,7 @@ allowed-tools:
|
|
|
13
13
|
<objective>
|
|
14
14
|
Run the project test suite, assemble a full execution bundle, and dispatch parallel quorum workers to independently evaluate whether the tests genuinely pass and whether they are real tests.
|
|
15
15
|
|
|
16
|
-
This command extends
|
|
16
|
+
This command extends nForma quorum from *planning* (consensus on direction) to *verification* (consensus on test quality).
|
|
17
17
|
</objective>
|
|
18
18
|
|
|
19
19
|
<process>
|
|
@@ -70,7 +70,7 @@ If `$TEST_FILES` is empty, display:
|
|
|
70
70
|
|
|
71
71
|
```
|
|
72
72
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
73
|
-
|
|
73
|
+
nForma ► QUORUM-TEST: No automated tests found
|
|
74
74
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
75
75
|
|
|
76
76
|
Searched for: <$TEST_PATTERNS>
|
|
@@ -93,7 +93,7 @@ If any file is missing, display:
|
|
|
93
93
|
|
|
94
94
|
```
|
|
95
95
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
96
|
-
|
|
96
|
+
nForma ► QUORUM-TEST: BLOCK (missing test files)
|
|
97
97
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
98
98
|
|
|
99
99
|
Missing: <list of missing files>
|
|
@@ -128,7 +128,7 @@ Append `echo "EXIT:$?"` to capture exit code. Store full output as `$TEST_OUTPUT
|
|
|
128
128
|
Read the full source of every file in `$TEST_FILES`. Store as `$TEST_SOURCES` — a combined block with filename headers:
|
|
129
129
|
|
|
130
130
|
```
|
|
131
|
-
=== hooks/
|
|
131
|
+
=== hooks/nf-stop.test.js ===
|
|
132
132
|
<full source>
|
|
133
133
|
|
|
134
134
|
=== hooks/config-loader.test.js ===
|
|
@@ -147,7 +147,7 @@ If exit code is non-zero, stop immediately and display:
|
|
|
147
147
|
|
|
148
148
|
```
|
|
149
149
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
150
|
-
|
|
150
|
+
nForma ► QUORUM-TEST: BLOCK (test infrastructure failure)
|
|
151
151
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
152
152
|
|
|
153
153
|
Tests did not run cleanly (exit code: N).
|
|
@@ -179,7 +179,7 @@ $TEST_SOURCES
|
|
|
179
179
|
Display:
|
|
180
180
|
```
|
|
181
181
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
182
|
-
|
|
182
|
+
nForma ► QUORUM-TEST: Dispatching workers...
|
|
183
183
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
184
184
|
```
|
|
185
185
|
|
|
@@ -187,7 +187,7 @@ Dispatch all four workers as parallel Task calls (Task subagents are isolated su
|
|
|
187
187
|
|
|
188
188
|
Worker prompt template for each:
|
|
189
189
|
```
|
|
190
|
-
You are a skeptical test reviewer for the
|
|
190
|
+
You are a skeptical test reviewer for the nForma project.
|
|
191
191
|
|
|
192
192
|
<bundle>
|
|
193
193
|
$BUNDLE
|
|
@@ -215,7 +215,7 @@ Dispatch (each call in a single parallel message — Task subagents are isolated
|
|
|
215
215
|
- `Task(subagent_type="general-purpose", prompt="Call mcp__copilot-1__ask with the following prompt. Pass the full literal text of the bundle inline — do not summarize or truncate: [full worker prompt with $BUNDLE inlined verbatim]")`
|
|
216
216
|
- `Task(subagent_type="general-purpose", prompt="Call mcp__codex-cli-1__review with the following prompt. Pass the full literal text of the bundle inline — do not summarize or truncate: [full worker prompt with $BUNDLE inlined verbatim]")`
|
|
217
217
|
|
|
218
|
-
Note: `agents/
|
|
218
|
+
Note: `agents/nf-quorum-test-worker.md` defines this same role and output format and can be invoked directly with a bundle as `$ARGUMENTS`. The parallel Task dispatch above is used when targeting specific external models (Gemini, OpenCode, Copilot, Codex) rather than a single agent.
|
|
219
219
|
|
|
220
220
|
**Collect verdicts and render table**
|
|
221
221
|
|
|
@@ -235,7 +235,7 @@ Display:
|
|
|
235
235
|
|
|
236
236
|
```
|
|
237
237
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
238
|
-
|
|
238
|
+
nForma ► QUORUM-TEST RESULTS
|
|
239
239
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
240
240
|
|
|
241
241
|
┌──────────────┬──────────────────┬─────────────────────────────────────┐
|