Status: Draft
Last updated: 2026-05-25
This index is the planning source of truth for Speckit feature numbering and bench ownership. Each feature must be owned by exactly one bench:
py-benchfor Python runtime, API, worker, CRM, telephony, persona, and contract-test work.flutterBenchfor Flutter admin app UI, generated client, mock data layer, mobile/web packaging, and Flutter tests.
Do not mix Flutter and Python implementation tasks in one Speckit feature. When
a feature needs both sides, split it into a Flutter feature and a Python feature
that meet through contracts/opencloser-runtime-v1.openapi.yaml or another
versioned contract.
| Feature | Bench | Status | Scope |
|---|---|---|---|
001 mock-call-mock-crm |
py-bench |
Shipped | Slice 1: local queue, mock call transport, mock CRM write-back, ALF persona fixtures, local artifacts. |
002 mock-call-real-crm |
py-bench |
Shipped | Slice 2: Dataverse queue/write-back, mock call transport, redaction, idempotent CRM write-back, dry-run/write-enabled demo. |
003 real-call-real-crm |
py-bench |
Next runtime feature | Slice 3: SignalWire outbound call, provider callbacks, Pipecat realtime audio path, direct realtime model, shadow STT discrepancy logging, hard phone-format enforcement, Dataverse write-back. No Flutter tasks. |
These numbers may be adjusted when each Speckit feature is created, but the single-bench ownership must stay intact.
| Feature | Bench | Scope | Parallelization Notes |
|---|---|---|---|
004 admin-flutter-scaffold |
flutterBench |
Create the Flutter admin app shell, routing, theme, responsive layout, loading/error states, and fixture-backed navigation. | Can start while 003 is in progress because it uses local fixtures only. |
005 admin-openapi-client-mocks |
flutterBench |
Generate or hand-wrap the Runtime Admin API client from contracts/opencloser-runtime-v1.openapi.yaml and provide mock adapters for all /v1/admin/* flows. |
Depends on the draft contract, not on live Python endpoints. |
006 admin-account-consent-flow |
flutterBench |
Microsoft sign-in entry, create/join account screens, tenant consent browser/deep-link states, and mocked account/tenant responses. | Builds on 004/005; no live Entra requirement. |
007 admin-environment-install-checklist |
flutterBench |
Dataverse environment selection plus install verification checklist for solution version, environment variables, access, command triggers, and dry-run smoke status. | Builds on 005 mocks; real runtime wiring comes later. |
008 admin-health-campaign-status |
flutterBench |
System health dashboard, active campaign summaries, eligible lead counts, failures needing attention, and pause/resume controls against mock adapters. | Can be demoed before backend admin APIs are complete. |
009 runtime-admin-api-fixtures |
py-bench |
Implement fixture-backed /v1/admin/* runtime endpoints and contract tests matching the OpenAPI draft so the Flutter app can leave pure mocks. |
Can run in parallel with Flutter features after the OpenAPI client shape settles. |
010 runtime-admin-api-dataverse |
py-bench |
Replace admin fixture responses with real account, tenant consent, Dataverse environment, solution, verification, health, and campaign status integrations. | Backend integration feature; Flutter consumes the same API surface. |
011 admin-real-api-integration |
flutterBench |
Switch Flutter app from mock adapters to real runtime API configuration, auth callback handling, and integration-test fixtures. | Depends on 009 for fixture server; 010 for real tenant demos. |
- A
py-benchfeature may edit Python packages, runtime API contracts, Dataverse/SignalWire/Pipecat integrations, CLI commands, tests, docs, and fixtures needed to prove the runtime slice. - A
flutterBenchfeature may edit Flutter app code, Dart generated clients, Flutter fixtures, UI tests, screenshots, platform packaging, and admin-app docs. - Shared contract changes must land in the feature that owns the contract source. Other features consume the contract as generated code or fixtures.
- CRM managed-solution work remains a separate Dynamics feature stream; do not hide Dynamics packaging tasks inside Flutter features or Feature 003.
- Feature 003 is the last MVP call-loop slice and must not absorb admin-app scaffold, dashboard, mobile packaging, or tenant-install UX tasks.