Skip to content

1.1.0 part 2 (M4): AMWA, monitoring, deploy, numbers, release prep - #7

Merged
LeeO86 merged 8 commits into
mainfrom
feat/m4
Oct 23, 2026
Merged

LeeO86 merged 8 commits into
mainfrom
feat/m4

Conversation

@LeeO86

@LeeO86 LeeO86 commented Oct 23, 2026 •

Copy link
Copy Markdown
Owner

This is M4 of IMPLEMENTATION_PLAN.md and the preparation for 1.1.0 (M3 and M4 ship together). It is based on #6: merge #6 first, then this PR, which then targets main. Release notes for the platform: docs/release-notes-1.1.0.md.

Commits

  1. AMWA nmos-testing in CI: IS-04-01, IS-05-01, IS-05-02 and BCP-007-03-01 with an nmos-cpp registry (DNS-SD off), adapted from mxl-audio-mixer. tests/nmos/amwa-expected-off.json gives the reason for each of the 99 non-Pass results:
    • set-up and tear-down steps;
    • IS-10 authorization;
    • the RTP-only parts of IS-05;
    • optional BCP-004/002 details;
    • two manual checks.
  2. Fix, found by AMWA: the receiver's IS-04 caps lost media_types (BCP-007-03-01 test_07 failed).
  3. Monitoring and demo:
    • Standard process metrics on /metrics.
    • Grafana dashboard deploy/grafana/mxl-scopes.json with provisioning, plus a Prometheus config.
    • Compose demo docker/docker-compose.demo.yaml, checked with docker compose config only, because its registry announces itself over mDNS.
  4. deploy/k8s/deployment.yaml: requests 500m CPU and 256Mi; limits 2 CPUs and 768Mi. docs/cuda-design.md.
  5. 1.1.0 itself:
    • version 1.1.0 (the Container workflow checks the tag against it);
    • release notes;
    • docs/performance.md "M4": the platform's numbers, memory per mode, the soak, AMWA;
    • spec TODOs resolved (ports confirmed, measured memory and CPU);
    • plan, README, CHANGELOG, AGENTS.md.

Numbers

Platform (i9, 1.0.0, 25 Hz, no preview; measured by the platform):

Mode CPU (core) RSS
luma 0.10 63–116 MB
ycbcr-parade 0.16 87 MB
rgb-parade 0.19 103 MB
rgb-overlay 0.26 114 MB
ycbcr-overlay 0.18 114 MB
luma with a key 0.17 —

The keyed scope over a picture passed on test-all with multiviewer 1.4.6 (CUDA): compose 1.56 ms, 0 late and 0 missed. This closes the M2 exit check.

Lab memory (1.1.0): 80–160 MB of the scope's own (anonymous) memory per mode and configuration. The shared MXL grains it maps come on top, and the built-in MediaMTX takes about 41 MB.

Soak, 1 h, two instances on one node (luma 25 Hz; RGB parade 25 Hz with a key; both with the preview):

  • RSS stays flat; 0 torn reads.
  • Instance A: 1 late grain, at start-up.
  • Instance B: 16 late and 1 missed, all at start-up or in two bursts while other work ran on the host; none in the last 43 minutes.

Review fixes (e0c4a00, c45182b; rebased on feat/m3 51eeaaa)

  • AMWA reasons: the IS-04-01 DNS-SD tests are disabled by ENABLE_DNS_SD = False, not IS-10; IS-05-01 test_01–08/33 are "replaced by an auto test". docs/performance.md and the release notes say AMWA does not cover IS-04 registration and heartbeats (only the stub registry in scope.sh does). No unicast DNS-SD added.
  • process_cpu_seconds_total uses the number() helper (unit test: no exponent). Docs: RSS and process_resident_memory_bytes exclude the MediaMTX child.
  • k8s: request 384Mi; a note that the 768Mi limit is for 1080p and UHD with a key needs about 1Gi.
  • Soak re-run (1 h, after the 1.1.0 part 1 (M3): WebRTC preview, Vue UI, scope widget, Blend2D texts #6 fixes, pinned, host otherwise only pinned work): A luma 0 late / 0 missed, 0.41 core, RSS 341 → 357 MB; B RGB parade + key 1 late (start-up) / 0 missed, 0.65 core, RSS 514 → 515 MB; 0 skipped, 0 torn.

Open

  • Desktop-class numbers with the preview: the platform measures them after rollout.
  • The M3 exit check on a real operator screen.
  • An incident during this work, below.

Incident. While trying a local AMWA run (2026-10-23, about 06:02–06:06Z), I started an nmos-cpp registry on the lab host's network for about 2.5 minutes. Its mDNS responder announced it, and at least one other node on the network (id de10381b-…) registered to it. I stopped it. AMWA now runs only in CI, and AGENTS.md warns against running a registry on a shared lab network.

🤖 Generated with Claude Code

https://claude.ai/code/session_01St7QwmonpoG9EEEqaLFXLi

@LeeO86 LeeO86 changed the title 1.1.0 part 2 (M4): hardening, AMWA, deploy, release prep 1.1.0 part 2 (M4): AMWA, monitoring, deploy, numbers, release prep Oct 23, 2026
@LeeO86
LeeO86 marked this pull request as ready for review October 23, 2026 10:00
@LeeO86
LeeO86 changed the base branch from feat/m3 to main October 23, 2026 19:03
LeeO86 and others added 8 commits October 23, 2026 21:03
tests/nmos/amwa.sh runs the four suites against a fresh mxl-scopes node
each, with an nmos-cpp registry (DNS-SD off, the platform default), then
checks that the node deregisters on SIGTERM; tests/nmos/check_amwa.py
fails on any result not listed with its reason in
tests/nmos/amwa-expected-off.json. Adapted from mxl-audio-mixer (MIT,
same author), as are the registry config and the TAI offset script. The
build-and-test job runs it and uploads the results.

The expected list starts empty; the first CI run gives the results.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01St7QwmonpoG9EEEqaLFXLi
The receiver replaced the caps that make_receiver wrote, so
caps.media_types was missing (BCP-007-03-01 test_07 failed, IS-04-01
test_25 warned). The constraint sets are now added to those caps.

tests/nmos/amwa-expected-off.json lists the 100 non-Pass results of the
first CI run with their reasons: tool set-up and tear-down steps, IS-10
authorization (out of scope), the RTP-only parts of IS-05 (an MXL
receiver and sender; BCP-007-03-01 tests them), the optional BCP-004-01
and BCP-002-02 details, and two manual checks (ids that survive a
restart, MXL reading on activation; scope.sh covers both).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01St7QwmonpoG9EEEqaLFXLi
- /metrics also has the standard process metrics without the prefix,
  as the sibling functions: process_cpu_seconds_total,
  process_resident_memory_bytes, process_start_time_seconds,
  process_open_fds (from /proc/self; test).
- deploy/grafana/mxl-scopes.json: updates, skipped and torn; output
  late and missed; analyse and render p95; input state; the luma,
  chroma and gamut measurements; the preview; CPU, memory, NMOS; with
  Grafana provisioning and a Prometheus config (as mxl-browser-source).
- docker/docker-compose.demo.yaml: registry, a colour bar writer from
  the image, mxl-scopes with its own MediaMTX, a one-shot IS-05 route,
  Prometheus and Grafana (from mxl-browser-source; checked with
  docker compose config).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01St7QwmonpoG9EEEqaLFXLi
- deploy/k8s/deployment.yaml (G12): pod network, the standard
  environment, probes, the MXL root hostPath, /config on a volume, no
  hostIPC, the shared preview; 500m CPU and 256Mi requested, 2 CPUs and
  768Mi as limits, from the lab and platform measurements.
- docs/cuda-design.md: how a CUDA backend fits the engine (upload,
  analyse kernel with shared-memory atomics per column strip, trace
  kernel with the same integer tables, compacted trace groups back to
  the writer), the byte test against the scalar reference, the expected
  gain and the open points.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01St7QwmonpoG9EEEqaLFXLi
- Version 1.1.0 (src/version.hpp, CMakeLists.txt; the Container
  workflow checks the tag against it).
- docs/release-notes-1.1.0.md: image, what is new, what changes for the
  platform (preview settings now active, ports in own mode, widget,
  new metrics, in-place upgrade), resources, lab and platform numbers,
  known limits, what to report back.
- docs/performance.md "M4": the platform's CPU and RSS per mode on the
  i9 and the keyed multiviewer check (from the platform, 2026-10-23),
  memory per mode and configuration in the lab, the 1 h two-instance
  soak, AMWA.
- SPECIFICATION: ports confirmed, measured memory and CPU in §11 and
  §15; plan: M4 progress, the M2 exit check passed (multiviewer 1.4.6
  CUDA), question 1 resolved; README, CHANGELOG 1.1.0, AGENTS.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01St7QwmonpoG9EEEqaLFXLi
- amwa-expected-off.json: the IS-04-01 DNS-SD tests are disabled by ENABLE_DNS_SD False (not
  IS-10); IS-05-01 test_01-08/33 are replaced by auto tests. docs/performance.md and the release
  notes say that AMWA does not cover IS-04 registration and heartbeats.
- process_cpu_seconds_total uses number() (no exponent; test). RSS excludes the MediaMTX child.
- k8s: request 384Mi; the 768Mi limit is for 1080p, UHD with a key needs about 1Gi.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01St7QwmonpoG9EEEqaLFXLi
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01St7QwmonpoG9EEEqaLFXLi
@LeeO86
LeeO86 merged commit e84b724 into main Oct 23, 2026
5 checks passed
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