Specs
This folder is for feature-slice specifications.
Purpose
A spec turns the requirements into implementation-ready behavior for one bounded slice.
Each spec should:
- reference exact requirements sections
- define in-scope and out-of-scope behavior
- name the core contracts involved
- define happy path, interruptions, and fault behavior
- list acceptance criteria that can be verified
The canonical per-slice status table (Proposed / In Progress / Completed / Superseded) lives in Roadmap Progress. This page is a flat index of every spec that exists in the repo, grouped by roadmap phase.
Current state
Pre-roadmap (foundation slices)
The four slices that predate the evolution roadmap (2026-04-22). These established the canonical app-state pattern, the layered architecture, the simulator-first runtime, and the docs-first execution discipline that all subsequent phases inherit.
- SLICE-001: First Strong Vertical Slice — Completed
- SLICE-002: Persistent Run History — Completed (file-backed JSON; replaced by SLICE-3.3 SQLite)
- SLICE-003: JSON Recipe File Management — Completed
- SLICE-004: Operational Maturity — Completed
Phase 0 — Foundations (CI + observability)
Prerequisites for trustworthy measurement. CI gates, warnings-as-errors, central package management, Serilog, unhandled-exception handlers, AppMetrics meter, single-instance mutex.
- SLICE-005: CI and Quality Gates — Completed
- SLICE-006: Observability Baseline — Completed
Phase 0 exit gate: met 2026-04-23 (demo baseline row 0 captured).
Phase 1 — Simulator to scale (complete 2026-05-03)
Five completed slices + two superseded. Scaled the simulator to produce real-machine-shaped load (50 telemetry tags at 1-500 Hz, 30 fps × 2 MP frames, 200-657 Hz encoder stream, fault-burst chaos, 8-hour soak). Phase 1 evidence: see phase-1-measurements.md and phase-1-capabilities-and-limits.md.
- SLICE-1.1: Multi-Tag Telemetry — Completed (criterion 7 amended; per-tag rate accuracy bounded by Windows scheduling)
- SLICE-1.2: Real Frame Payloads — Completed
- SLICE-1.3: Encoder-Rate Motion — Completed (criterion 7 amended; receiver capped at ~657 Hz on Windows)
- SLICE-1.4: Storm & Soak Profiles — Completed (criterion 12 amended; working-set steady-state drift used instead of last-minus-first)
- SLICE-1.5: Automated Measurement Capture — Superseded by SLICE-1.6 on 2026-04-27 (the headless-bypass-the-UI tradeoff missed UI-binding regressions in practice)
- SLICE-1.5.1: Automated Capture Follow-Ups — Superseded with 1.5
- SLICE-1.6: FlaUI-driven Measurement Capture — Completed
Phase 1 exit gate: met 2026-05-03 (Soak8h working-set steady-state drift = −2.7 MB across 8 hours; no leak).
Phase 2 — Store under pressure (in progress)
Phase 2 opens with a measurement-first slice (SLICE-2.0); the originally-planned 2.1 / 2.2 / 2.3 / 2.4 are conditional on evidence triggers from SLICE-2.0 or any Phase 3 row block per the 2026-05-07 strategy. Deferring Phase 2 entirely is a first-class outcome.
- SLICE-2.0: Store Allocation & Contention Profiling — Proposed (Copilot in progress)
- SLICE-2.1 (slice
AppStateinto sub-records) — Conditional (opens if alloc share ≥ 10%) - SLICE-2.2 (immutable collections) — Conditional (same threshold as 2.1)
- SLICE-2.3 (data-plane lift-out) — Conditional (opens for the dominant write caller)
- SLICE-2.4 (per-slice observables) — Conditional (opens if lock-wait p95 ≥ 100 µs)
Phase 3 — New functionality (in progress)
Phase 3 proceeds in parallel with conditional Phase 2 per the 2026-05-07 strategy. Real-world domain features replace the prototype's "good enough" stand-ins (JSON files, basic UI, in-memory alarm history). Each slice's row block is also a candidate Phase 2 trigger.
- SLICE-3.3: SQLite Persistence + Schema Versioning — Proposed (first Phase 3 slice; uses Dapper, not EF Core)
- SLICE-3.1 (rich defect model) — Planned (next after 3.3 lands)
- SLICE-3.2 (wafer loop / cassette cadence) — Planned
- SLICE-3.4 (identity + audit) — Planned
Phase 4 — Real-world edges (parallel candidate)
Per the 2026-05-07 strategy, SLICE-4.1 (first real SDK swap) is considered for parallel execution with later Phase 3 slices since the simulator-vs-real-hardware gap is the largest unresolved confidence question.
- SLICE-4.1 (first real SDK swap) — Planned
- SLICE-4.2 (historian / MES bridge) — Planned (after 4.1)
- SLICE-4.3 (packaging + signed installer) — Planned (after 4.2)
Conventions
- One slice has one spec, one task, one row block in the appropriate measurements file, and one design notes deep-dive.
- Specs reference requirements sections explicitly (
/requirements-sections/...) — never paraphrase. - Out-of-scope is as load-bearing as in-scope; reviewers compare both before approving.
- Acceptance criteria must be verifiable, not aspirational. "It works under load" is not a criterion; "1 kHz at receiver ± 2% over a 10-min capture" is. Where platform reality forces a measurement to be unachievable, amend the criterion as documented-not-gated rather than ship a misleading pass.