Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 16 additions & 14 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,22 +121,25 @@ earlier confirmed the raw shape: deep `ref` 55.2 ms vs `shallowRef`+trigger
(`tests/frontend/sessions-frames-reactivity.test.ts`) asserts computed reads of
`frames.length`/`txBytes` reflect `addFrame`/`clearFrames`; the 23-test
modbus-master suite (incl. the reconnect-watches-store case) guards the
non-frame mutators. 474 frontend tests green.
non-frame mutators. 576 frontend tests green.

## Verification strategy

| Gate | Command | Notes |
|---|---|---|
| Lint + format | `pnpm lint`, `pnpm format:check`, `cargo fmt --check`, `cargo clippy -D warnings` | clippy denies warnings |
| Type-check + build | `pnpm build` (vue-tsc --noEmit + vite) | strict TS |
| Frontend tests | `pnpm test:frontend` | node:test runner, 472 tests |
| Rust tests | `pnpm test:rust` | 68 tests incl. IPC contracts |
| Coverage gate | `pnpm coverage:frontend` | c8, .c8rc.json (85% lines / 80% branches) |
| Frontend tests | `pnpm test:frontend` | node:test runner, 576 tests across 72 files |
| Rust tests | `pnpm test:rust` | 71 tests incl. cross-language IPC contracts |
| Coverage gate | `pnpm coverage:frontend` | c8, `.c8rc.json` (85% lines / 88% branches / 88% functions) |
| Per-file lib/ gate | `pnpm coverage:lib` | c8 `--per-file --lines=90` against `src/lib/` (excl. Tauri-coupled files) |
| Bench regression | `pnpm bench:frontend` | 15% gate vs machine-local baseline |
| Circular deps | `pnpm cycles` | madge, 0 cycles |
| Full check | `pnpm check` | lint + format + build + tests |

CI (`.github/workflows/ci.yml`) runs all of the above on every push/PR.
CI (`.github/workflows/ci.yml`) runs all of the above on every push/PR. The
tag-triggered cross-platform build matrix (Windows / Linux / macOS) lives in
`.github/workflows/release.yml`.

## Manual verification checklist

Expand All @@ -151,12 +154,11 @@ status and the reason it cannot be automated here.
end-to-end port-open/listen/write loop is driver-dependent.
**Status: ❌ — hardware/runtime-dependent.**
- ❌ **High-baud capture (921600)** — requires a physical device generating a
sustained byte stream. See
[`docs/high-baud-measurement.md`](docs/high-baud-measurement.md) for the
F2/F3 config matrix and a reproducible socat/PTY procedure. Headless
proxies: `serialrxqueue_drop_512` (T2.1, +105%), `sessions_push_50k`
(T2.2, 2→32 ops/s). **Status: ❌ — hardware-dependent (no device
available).**
sustained byte stream. The F2/F3 config matrix (`timeout`/`size`/baud
sweep) and a reproducible socat/PTY procedure live in `CHANGELOG.md`
(T2.4). Headless proxies: `serialrxqueue_drop_512` (T2.1, +105%),
`sessions_push_50k` (T2.2, 2→32 ops/s). **Status: ❌ — hardware-dependent
(no device available).**
- ❌ **4-format export** — requires a live capture to export. The export path is
covered by the Rust formatter tests (8), the IPC contract tests (3), and
the F12 capture-file contract tests (3); the F12 path is verified to
Expand Down Expand Up @@ -192,9 +194,9 @@ physical serial device remain blocked (socat unavailable, no hardware).

**lib/ per-file coverage gate (T1.2) — ENFORCED:** `coverage:lib` runs c8
`--per-file --lines=90` against `src/lib/` (excluding Tauri-coupled files),
passing at 98.79% with 0 errors. The composable ≥80% threshold remains
infeasible (lifecycle hooks structurally unreachable headless). The automated suite (524 frontend + 71 Rust
tests, 0 circular deps, 86.87% coverage, 15% bench gate) covers every path that
passing at ~98% with 0 errors. The composable ≥80% threshold remains
infeasible (lifecycle hooks structurally unreachable headless). The automated suite (576 frontend + 71 Rust
tests, 0 circular deps, ~87% coverage, 15% bench gate) covers every path that
CAN be tested headless. The remaining paths are documented with their blocker
and the headless proxy that validates the underlying logic.

Expand Down
10 changes: 5 additions & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -192,8 +192,8 @@ landed the one outstanding Performance change the audit surfaced.
(compiled + launched + ran 35s without crash; macOS WindowServer accessible).
Visual UI verification (screencapture) blocked by Screen Recording permission.
- **T2.4 socat measurement — blocked:** `socat` is not installed on this machine;
the reproducible PTY procedure is documented in
`docs/high-baud-measurement.md`. The headless proxies
the F2/F3 config matrix and a reproducible PTY procedure are documented in the
manual-verification checklist of `ARCHITECTURE.md`. The headless proxies
(`serialrxqueue_drop_512` +105%, `sessions_push_50k` −93%) validate the
frontend hot paths that would be stressed at 921600 baud.
- **T3.9 F-f (updater) — IMPLEMENTED:** added `tauri-plugin-updater` v2.10.1,
Expand Down Expand Up @@ -353,11 +353,11 @@ landed the one outstanding Performance change the audit surfaced.
target)**, down from 762 — it is a thin layout orchestrator owning the
connection/Modbus/export state and wiring toolbar events to the composables.
All 476 frontend tests green; 0 circular dependencies.
- **T2.4 — high-baud measurement closed out:** added
`docs/high-baud-measurement.md` documenting the F2/F3 config matrix
- **T2.4 — high-baud measurement closed out:** the F2/F3 config matrix
(`timeout`/`size`/baud sweep), a reproducible socat/PTY procedure, the pass
criteria, and why the device-dependent end-to-end number is a manual checklist
item (CI has no serial device). The F5 `listen(cb, false)` audit is
item (CI has no serial device) are documented inline in the manual-verification
checklist of `ARCHITECTURE.md`. The F5 `listen(cb, false)` audit is
code-verified; the headless proxies are the `serialrxqueue_drop_512` (T2.1)
and `sessions_push_50k` (T2.2) benches.

Expand Down
Loading