Non-Functional Requirements
Status: Baseline. Targets marked [open] still need confirmation after benchmarks.
| ID |
Requirement |
Target |
Phase |
How verified |
| NFR-P01 |
Encoder backend latency, GPU (RTX 3060, batch=1) |
p50 ≤ 20 ms, p95 ≤ 50 ms (met: stock 10.3/11.0 ms; fast 3.8/4.1 ms) |
M3 |
benchmarks/ latency harness |
| NFR-P02 |
Encoder backend latency, CPU (12 cores) |
p50 ≤ 200 ms [open] |
M3 |
latency harness |
| NFR-P03 |
Router decision overhead |
< 0.5 ms |
M3 |
micro-benchmark |
| NFR-P04 |
LLM backend overhead beyond provider call |
< 50 ms |
M2 |
timing measurement |
| NFR-P05 |
Batch throughput |
near-linear scaling up to memory limit |
M3 |
batch sweep |
| NFR-P06 |
Server cold start (encoder preloaded) |
≤ 30 s [open] |
M3 |
timed startup |
| NFR-P07 |
Fast-path (TileLang/CUDA graphs) latency on supported CUDA |
p50 improves vs stock forward; no shape change (met: 2.68× p50, 0 top-label flips) |
Backlog B-2 |
micro-benchmark |
| ID |
Requirement |
Target |
Phase |
| NFR-R01 |
Base install importable without torch/transformers |
required |
M0 |
| NFR-R02 |
Encoder peak RSS, single English checkpoint |
≤ 4 GB [open] |
M3 |
| NFR-R03 |
Multilingual checkpoint load + inference within 12 GB VRAM |
required |
M3 |
| NFR-R04 |
Two checkpoints loaded (preload) fit together [open] |
required |
M3 |
| NFR-R05 |
Training fits RTX 3060 12 GB (LoRA/QLoRA) |
required |
M4 |
Reliability & correctness (NFR-C)
| ID |
Requirement |
Target |
Phase |
| NFR-C01 |
Jev wire parity |
100% golden fixtures |
M1 |
| NFR-C02 |
Probability normalization |
sums to 1.0 ± 1e-6 |
M1 |
| NFR-C03 |
Deterministic inference on CPU given fixed weights + seed |
required |
M3 |
| NFR-C04 |
Reproducible training given seed/config |
within documented tolerance |
M4 |
| NFR-C05 |
Graceful fallback when acceleration/extra unavailable |
no crash |
M5 |
| NFR-C06 |
Calibration quality |
ECE ≤ 0.05 [met for en: overall 0.023; multi 0.038; per-language de 0.063, fr 0.051, it 0.059, nl 0.104 open] |
M4 |
| NFR-C07 |
Per-language calibration quality |
ECE ≤ 0.05 per language (choice/score) [2/6 met (es 0.038, pt 0.024); de 0.063, fr 0.051, it 0.059, nl 0.104 open] |
Backlog B-1 |
Compatibility (NFR-X)
| ID |
Requirement |
Target |
Phase |
| NFR-X01 |
Existing Jev clients work unchanged |
verified with real client |
M2 |
| NFR-X02 |
Extensions are additive; canonical shape never changes |
contract test |
M2–M5 |
| NFR-X03 |
Python version support |
>=3.12,<3.13 |
M0 |
| NFR-X04 |
Platforms |
Linux (primary), macOS CPU, Windows CPU [open] |
M3+ |
| NFR-X05 |
Devices |
CUDA + CPU |
M3 |
Security & privacy (NFR-S)
| ID |
Requirement |
Target |
Phase |
| NFR-S01 |
No secrets committed to the repo |
enforced |
M0 |
| NFR-S02 |
API key read from env, never logged |
enforced |
M2 |
| NFR-S03 |
Base install performs no network egress |
enforced |
M3 |
| NFR-S04 |
Offline operation with no key |
required |
M3 |
| NFR-S05 |
Telemetry opt-out (DO_NOT_TRACK=1) if present |
enforced |
M5 |
| NFR-S06 |
Constant-time/naive key comparison documented (dev vs prod) |
documented |
M2 |
Maintainability & quality (NFR-M)
| ID |
Requirement |
Target |
Phase |
| NFR-M01 |
Lint clean with ruff |
0 errors |
M0 |
| NFR-M02 |
Type clean with pyright |
0 errors (strict-ish config) |
M0 |
| NFR-M03 |
Contract test updated with any public API change |
enforced by review/CI |
M0+ |
| NFR-M04 |
Conventional commits; one logical change per commit |
enforced by review |
M0+ |
| NFR-M05 |
Each backend passes the shared contract suite |
100% |
M2+ |
| NFR-M06 |
Extras isolate optional deps (import guards) |
enforced |
M5 |
Observability (NFR-O)
| ID |
Requirement |
Target |
Phase |
| NFR-O01 |
/health endpoint reports backend/device/checkpoints |
required |
M2 |
| NFR-O02 |
Structured logging of requests (no payload secrets) |
required |
M2 |
| NFR-O03 |
Hook-based metrics (latency, routing, errors) |
required |
M3 |
Documentation & licensing (NFR-D)
| ID |
Requirement |
Target |
Phase |
| NFR-D01 |
README with vision, quickstart, comparison |
required |
M0 |
| NFR-D02 |
Architecture, protocol, testing, training docs maintained |
required |
M0+ |
| NFR-D03 |
Apache-2.0 license |
required |
M0 |
| NFR-D04 |
Reproducible benchmark report and model card |
required |
M6 |
Accessibility (NFR-A)
Not applicable — Tachyone has no GUI (CLI + HTTP + SDK). A future web console would introduce
accessibility requirements (see the Accessibility Testing skill) but is out of scope.
Counts: 43 non-functional requirements (NFR-P07 and NFR-C07 are tracked in
.specs/project/BACKLOG.md). Targets marked [open] are tracked in
.specs/project/STATE.md and resolved after M3/M4 measurements.