Skip to content

feat: viz-plane ingestion contract + benchmark suite (I1–I7) - #31

Merged
rxdu merged 1 commit into
mainfrom
feat/ingestion-contract
Jul 11, 2026
Merged

feat: viz-plane ingestion contract + benchmark suite (I1–I7)#31
rxdu merged 1 commit into
mainfrom
feat/ingestion-contract

Conversation

@rxdu

@rxdu rxdu commented Jul 11, 2026

Copy link
Copy Markdown
Owner

Summary

Defines and measures the viz-plane ingestion contract — the third stage of the XMotion observability chain (telemetry S1 → messaging M9 → viz), held to the same measured-claims discipline. Reference bar: hebi-charts-class low-overhead ingestion — the robot must not be able to tell it is being watched.

  • docs/ingestion_contract.md — normative requirements I1–I7: bounded per-sample cost, alloc-free steady state, producer-never-blocks with counted overflow, render-rate independence, observer invisibility, bounded memory, measured claims. Includes the ingestion-path map (RingBuffer/BufferRegistry → RtLinePlotWidget; DataStream/DoubleBuffer → SceneManager, with file:line refs), a budget table pinned from the first run, and a conformance table.
  • tests/benchmarks/ingestion/ + scripts/bench_ingestion.sh — percentile harness (p50/p99/p99.9/max), alloc-gated measured sections, hardware-context JSON, smoke ctest. Zero src/ changes — the suite drives public API only.

First numbers (i7-8700, xvfb/llvmpipe)

Ring write p50 21.6 ns / p99 43.8 ns · stream push p50 10.3 ns · 100 kHz paced ingest invariant across headless / 60 fps / stalled render (producer-never-blocks proven) · 60 s @ 100 kHz soak: RSS growth 0.

Conformance verdict

Req Status
I1 cost, I4 render-independence, I6 bounded memory conform (≥2× budget margin)
I3 never-blocks proven — but all drop/overwrite paths are silent and uncounted (principal gap)
I2 alloc-free POD proven; no slot pre-sizing for heap-owning payloads
I5 observer invisibility pending hardware-GL rerun (llvmpipe software rasterization competes for cores and confounds the A/B)
I7 measured claims suite + pinned JSON done; CI regression gate not yet wired

Remediation list (ordered)

  1. Overflow/overwrite/refusal counters on RingBuffer/DoubleBuffer (I3 — silent loss is unobservable today)
  2. CI regression gate vs pinned reference (I7)
  3. DataStream/DoubleBuffer slot pre-sizing for heap payloads (I2)
  4. Optional seqlock latest-slot for the scene path if a payload profile ever breaches budget
  5. Re-run the observer A/B on hardware GL to pin the invisibility number (one command on a real display: ./scripts/bench_ingestion.sh)

Test plan

  • Full build clean; 123/123 tests pass (serial, xvfb) incl. new smoke bench
  • Bench JSON parses; alloc gates 0 in every measured section
  • Reproduced by supervisor: independent smoke run, 16 benchmark rows

The third stage of the family observability chain (telemetry S1 ->
messaging M9 -> viz), held to the same measured-claims discipline.
Reference bar: hebi-charts-class low-overhead ingestion — the robot
must not be able to tell it is being watched.

docs/ingestion_contract.md: normative requirements I1-I7 (bounded
per-sample cost, alloc-free steady state, producer-never-blocks with
counted overflow, render-rate independence, observer invisibility
per the M10-A4 shape, bounded memory, measured claims), budget table
pinned from first run, conformance table, remediation list.

tests/benchmarks/ingestion + scripts/bench_ingestion.sh: percentile
harness (xmMessaging methodology), alloc-gated measured sections,
hardware-context JSON, smoke ctest. Zero src/ changes — public API
only.

First numbers (i7-8700, xvfb/llvmpipe): ring write p50 21.6ns/p99
43.8ns; stream push p50 10.3ns; 100kHz paced ingest invariant across
headless/60fps/stalled-render (producer-never-blocks proven); 60s
100kHz soak RSS growth 0. Conformance: I1/I4/I6 conform; I3 partial
(drops are silent+uncounted — principal gap); I2 partial (no slot
pre-sizing for heap payloads); I5 pending hardware-GL rerun
(llvmpipe steals cores, confounds the A/B); I7 pending CI gate.
@rxdu
rxdu merged commit 29ee046 into main Jul 11, 2026
5 checks passed
@rxdu
rxdu deleted the feat/ingestion-contract branch July 11, 2026 13:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant