diff --git a/spec/non-functional/local/NFR-001-output-via-ix-ui-cli.md b/spec/non-functional/local/NFR-001-output-via-ix-ui-cli.md index 5b74a52..4d1c87f 100644 --- a/spec/non-functional/local/NFR-001-output-via-ix-ui-cli.md +++ b/spec/non-functional/local/NFR-001-output-via-ix-ui-cli.md @@ -42,13 +42,16 @@ ix-ui-cli is the design system. Centralizing visual decisions there means a sing ## Acceptance Criteria -- **NFR-001-AC-1**: A static grep for `console\.log\|console\.error\|console\.warn\|process\.stderr\.write` across `packages/*/src/` and `apps/*/src/` returns zero matches. -- **NFR-001-AC-2**: Every command handler that opens a frame uses `startListing` imported from `@agent-ix/ix-ui-cli`. No command handler defines its own `intro`/`outro` style helpers. -- **NFR-001-AC-3**: Multi-service progress uses `PhaseTable` imported from `@agent-ix/ix-ui-cli`, not a locally defined display class. -- **NFR-001-AC-4**: A static grep for the deprecated framing API (`introCommand|outroSuccess|outroError|outroWarning|outroInfo|runTaskList`) across `packages/*/src/` and `apps/*/src/` returns zero matches. -- **NFR-001-AC-5**: A static grep for inline ANSI escape sequences (`\\x1b\[`, `\\u001b\[`) and inline box-drawing connectors (`└──┐`, `└──•`, `└──`) across `packages/*/src/` and `apps/*/src/` returns zero matches outside test files. (All such tokens come from `@agent-ix/ix-ui-cli`.) -- **NFR-001-AC-6**: Live Ink command wrappers delegate Helm, Kubernetes, and long-running process orchestration to controller modules; React components own rendering state only. -- **NFR-001-AC-7**: Shared phase-row state is modeled outside command wrappers and emits immutable snapshots for live Ink renderers. + +| ID | Criteria | Verification | +|----|----------|--------------| +| NFR-001-AC-1 | A static grep for `console\.log\\|console\.error\\|console\.warn\\|process\.stderr\.write` across `packages/*/src/` and `apps/*/src/` returns zero matches. | Inspection | +| NFR-001-AC-2 | Every command handler that opens a frame uses `startListing` imported from `@agent-ix/ix-ui-cli`. No command handler defines its own `intro`/`outro` style helpers. | Demonstration | +| NFR-001-AC-3 | Multi-service progress uses `PhaseTable` imported from `@agent-ix/ix-ui-cli`, not a locally defined display class. | Demonstration | +| NFR-001-AC-4 | A static grep for the deprecated framing API (`introCommand\|outroSuccess\|outroError\|outroWarning\|outroInfo\|runTaskList`) across `packages/*/src/` and `apps/*/src/` returns zero matches. | Inspection | +| NFR-001-AC-5 | A static grep for inline ANSI escape sequences (`\\x1b\[`, `\\u001b\[`) and inline box-drawing connectors (`└──┐`, `└──•`, `└──`) across `packages/*/src/` and `apps/*/src/` returns zero matches outside test files. (All such tokens come from `@agent-ix/ix-ui-cli`.) | Test | +| NFR-001-AC-6 | Live Ink command wrappers delegate Helm, Kubernetes, and long-running process orchestration to controller modules; React components own rendering state only. | Demonstration | +| NFR-001-AC-7 | Shared phase-row state is modeled outside command wrappers and emits immutable snapshots for live Ink renderers. | Demonstration | ## Measurement and Evaluation diff --git a/spec/non-functional/local/NFR-002-destructive-operation-confirmation.md b/spec/non-functional/local/NFR-002-destructive-operation-confirmation.md index 849d9ae..b08bd8c 100644 --- a/spec/non-functional/local/NFR-002-destructive-operation-confirmation.md +++ b/spec/non-functional/local/NFR-002-destructive-operation-confirmation.md @@ -35,7 +35,11 @@ regression. ## Acceptance Criteria -- **NFR-002-AC-1**: The confirmation prompt MUST include the literal cluster name (e.g. `'ix'`) in its message text. -- **NFR-002-AC-2**: Declined or cancelled confirmation MUST exit 0 with no destructive action taken. -- **NFR-002-AC-3**: `--yes` flag bypasses the prompt; the destructive action proceeds immediately. -- **NFR-002-AC-4**: No other cluster teardown command (future additions) may skip this constraint without an explicit NFR exemption. + +| ID | Criteria | Verification | +|----|----------|--------------| +| NFR-002-AC-1 | The confirmation prompt MUST include the literal cluster name (e.g. `'ix'`) in its message text. | Demonstration | +| NFR-002-AC-2 | Declined or cancelled confirmation MUST exit 0 with no destructive action taken. | Demonstration | +| NFR-002-AC-3 | `--yes` flag bypasses the prompt; the destructive action proceeds immediately. | Demonstration | +| NFR-002-AC-4 | No other cluster teardown command (future additions) may skip this constraint without an explicit NFR exemption. | Demonstration | +