Skip to content

ISOs armed with Zoom capture off are loud now (T3.7 / #470) - #502

Merged
iamfatness merged 1 commit into
mainfrom
feat/iso-capture-warning
Sep 12, 2026
Merged

iamfatness merged 1 commit into
mainfrom
feat/iso-capture-warning

Conversation

@iamfatness

Copy link
Copy Markdown
Owner

Closes #470.

Live 2026-09-10: recording started with ISOs enabled and 7 Zoom guests selected while Engine was off. Program recorded normally. All 7 ISO streams sat at framesWritten: 0 with no file created, recording.warning: null, and no per-stream warning. Turning Engine on mid-recording opened the writers lazily at their first frame — so you silently lost the head of every ISO.

Why nothing caught it

It cannot be caught downstream. An ISO writer opens lazily at its first frame, so a source that never produces one leaves no stream behind to carry a warning. Every existing check scans streams that don't exist yet.

The only place that knows is the arming decision, so IsoCapturePreflight is consulted first in IsoHealthWarning, ahead of the per-stream scan that had nothing to report.

Two rules worth keeping

  • It reads the engine-reported capture state (rawMediaActive), not the button we last pressed. CLAUDE.md is explicit that the Capture UI reflects engine truth, and a warning keyed on intent would miss a capture that stopped on its own.
  • Unknown is not a problem. Before the first snapshot arrives we can't tell capture-off from not-yet-reported, and warning on an unobserved state is how an indicator gets trained into background noise.

The message names the count, says what to do, and says why turning Engine on later isn't a fix.

6 policy tests; 2224 MediaCore and 1465 WinUI tests pass.

How to test it: arm Program + ISOs with Zoom guests selected, leave Engine off, and open the record flyout — the warning should appear before you start, not after the show.

🤖 Generated with Claude Code

https://claude.ai/code/session_014yuH7EMvWCWdkhvevrtMyJ

)

Seen live 2026-09-10: recording started with ISOs enabled and 7 Zoom guests
selected while Engine was off. Program recorded normally. All 7 ISO streams sat
at framesWritten 0 with no file created, recording.warning null and no
per-stream warning. Turning Engine on mid-recording opened the writers lazily at
their first frame, so the operator silently lost the head of every ISO.

It cannot be caught downstream, which is why nothing caught it: an ISO writer
opens LAZILY at its first frame, so a source that never produces one leaves no
stream behind to carry a warning. The only place that knows is the arming
decision, so IsoCapturePreflight is consulted FIRST in IsoHealthWarning, ahead
of the per-stream scan that had nothing to report.

Two rules in the policy:

- It reads the ENGINE-reported capture state (rawMediaActive), not the button we
  last pressed. CLAUDE.md is explicit that the Capture UI reflects engine truth,
  and a warning keyed on intent would miss a capture that stopped on its own.
- UNKNOWN is not a problem. Before the first snapshot arrives we cannot tell
  capture-off from not-yet-reported, and warning on a state we have not observed
  is how an indicator gets trained into background noise.

Breaks nothing else: the message names the count, says what to do, and says WHY
turning Engine on later is not a fix.

6 policy tests; 2224 MediaCore and 1465 WinUI tests pass.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014yuH7EMvWCWdkhvevrtMyJ
@iamfatness
iamfatness force-pushed the feat/iso-capture-warning branch from 6d692c6 to b85ca54 Compare September 12, 2026 15:38
@iamfatness
iamfatness merged commit e1223d3 into main Sep 12, 2026
10 checks passed
@iamfatness
iamfatness deleted the feat/iso-capture-warning branch September 12, 2026 15:38
iamfatness added a commit that referenced this pull request Sep 12, 2026
Nine items closed and two partial, all shipped in beta-2026-09-12-e1223d3 and
none of them live-checked:

  T1.12 #475  join-time prompts answered            #493
  T1.13 #473  media decoder failures are loud       #494  (observability ONLY)
  T2.6  #438  packaging spec reconciled             #504
  T2.7  #474  one shortcut, uninstall cleans up     #497
  T2.8  #469  recordings resolve absolute           #496
  T2.9  #466  recording lifecycle survives a stream #499
  T2.10 #468  sender health stops lying             #499
  T3.2  #440  WebView2 message                      #504
  T3.7  #470  ISOs armed with capture off warn      #502
  T3.8  #482  ISO frames conform to the writer      #503
  T2.1  #433  PARTIAL — WER dumps are HKLM-only
  T3.5  #476  PARTIAL — the rest is a product call

Each row keeps the thing that is expensive to rediscover rather than just a tick:
T2.8 records that the issue's premise was wrong (the default was already
absolute; a persisted relative preference bypassed it), T3.8 records that its
end-to-end test is a guard which passes either way, T2.6 records that dropping
MSIX cost auto-update, and T2.1 records the measurement proving a per-user
installer cannot enable crash dumps.

Tier 1 now has ONE open item, and it is waiting on a decision rather than
effort: T1.11 step 1 needs a change to the Take path itself, because a plain cut
never captures the outgoing scene. That is written into the row so the next
session does not rediscover it and ship it blind.

Two entries came out of the work rather than the list: #505 (the per-layer
border controls are vestigial — the core forces borderStyle="none" on every
route layer, so they cannot do anything) and the T1.11 ruling.

The honest header: the binding constraint is now T0.1 and a live check, not
engineering capacity.


Claude-Session: https://claude.ai/code/session_014yuH7EMvWCWdkhvevrtMyJ

Co-authored-by: Claude <noreply@anthropic.com>
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.

ISOs armed with Engine (Zoom capture) off write nothing and give no warning

2 participants