Skip to content

Draft: stack wave-2 and reviewed fixes on main - #2685

Merged
r3dbars merged 96 commits into
mainfrom
claude/integration-wave3-20261112
Nov 13, 2026
Merged

r3dbars merged 96 commits into
mainfrom
claude/integration-wave3-20261112

Conversation

@r3dbars

@r3dbars r3dbars commented Nov 12, 2026 •

Copy link
Copy Markdown
Owner

Wave 3 combines wave 2's 22 later review PRs with 15 additional fixes on top of the landed integration. It addresses dictation diagnostics and failure reporting, Write for Me process recovery, meeting-library audio copies, main-thread work in calendar/Sentry paths, strict-concurrency capture state, and renamed speaker transcripts. Release/product/hardware decisions listed below remain outside this stack.

Candidate: 93b4e455e76af49a55784df0f88164b4f0e8a7b0
Base: edbc761f66344362254e18698cc208caf0d2be05 (main, including #2530)

Included PRs

#2667 (wave 2), #2666, #2668, #2669, #2672, #2673, #2684, #2665, #2670, #2674, #2677, #2678, #2680, #2681, #2682, #2683. All 16 were merged with individual merge commits and no text conflicts. All 16 current exact PR heads were independently verified as ancestors of the candidate; no listed PR is missing.

Integration repairs

  • c83e13957: appcast-fixture changes now select the release-health-card and release-watch self-tests; the matrix regression fails against the previous rule.
  • d1ac60aa6: snapshot the take's key-release and press duration when stopping, so a queued press cannot overwrite a too-short report's diagnostics. The added test covers the snapshot policy; controller wiring has build/static proof, not a dedicated integration test.
  • e31cf610d, retained through merge 93b4e455e: explicit optional tuple types in audio-device recovery fix inference on the older hosted Swift compiler. No recovery behavior change is intended.

Validation by source

  • Initial combined stack (80194a0e4): local quick 113 PASS; fast tests 54,550 assertions / 411 functions, zero failures; Core XCTest 722 tests (1 skipped), zero failures, plus 1,125 Swift Testing tests; app build and source pins/module boundaries/file-size/test-shape/telemetry checks PASS.
  • After the first two review repairs (d1ac60aa6): focused DictationQueuedStartPolicyTests 78/78 PASS; quick 113 PASS; app build, matrix/agent self-tests and affected release self-tests PASS. Full fast/Core suites were not rerun at that point.
  • Current head (93b4e455e): Core target built locally after merging the explicit-type compile fix. Current-head hosted Swift CI and the literal full bench have now passed as detailed below. Earlier local test counts retain their original source scope.
  • Main's post-landing Swift CI 43318094711 completed successfully for the base. This is base proof, not candidate proof.

Current hosted runs

  • PR Swift CI 43335132374: PASS on exact candidate SHA: checks, spm-tests, app-build and aggregate build-and-test all succeeded.
  • Full bench 43335126207: PASS. Downloaded final receipt verifies source 93b4e455e76af49a55784df0f88164b4f0e8a7b0 and trusted workflow edbc761f66344362254e18698cc208caf0d2be05; all 15 expected steps recorded, 14 PASS, 1 nonblocking synthetic-artifact WARN, exit 0. The warning is the empty seeded dictation directory; its validation exits 0. Build, fast/Core tests, E2E, synthetic pasteback, integration, imported audio and the other bench stages passed. This is developer-app automated proof, not signed distribution or Bluetooth acceptance.
  • PR hygiene 43335132360: PASS.
  • Concurrency census 43335132334: PASS on exact candidate.
  • Redundant manual Swift CI 43335122579 targeted the same candidate and was canceled to avoid duplicating the PR run's Mac work. The PR run and full bench are retained; MAC_RUNNER_MODE=off is unchanged.

Review

Four area reviewers reviewed the combined stack and found the two integration issues repaired in c83e13957 and d1ac60aa6. Independent review of the final repair delta 80194a0e4..93b4e455e is GREEN with no confirmed findings. The reviewer traced the stop/report callers, optional graph snapshot and fixture-selection rule, and re-reviewed the Sentry sleep repair (4d9a46e00). These static repair-review gaps are closed. The snapshot test remains policy-level; controller wiring was statically inspected. This targeted review is additional to, not another complete review of, the earlier four-area stack review. Hosted results and hardware remain separate.

Held outside this stack

#2675: hardware-dependent audio-race redo; #2676: Teams Not now product behavior; #2671: paste-hint wording; #2664 and #2679: release-flow changes; #2639, #2652 and #2658: separate earlier decisions. None is approved or added by this stack.

No new real mic/system-audio/AirPods/paste-back acceptance is claimed. The owner's earlier manual testing covered #2530's app, not every wave-3 change. No release is included. The targeted final-repair review, exact-head Swift CI and full bench are clean. Exact-head automated validation is complete, including concurrency census. Ready for the owner's manual merge under the repository high-risk merge policy; no merge or release has occurred.

Final landing readback

Candidate 93b4e455e76af49a55784df0f88164b4f0e8a7b0 and base edbc761f66344362254e18698cc208caf0d2be05 still match the verified heads. PR is mergeable with no conflicts. All required checks, hosted app build/test jobs, hygiene and census succeeded. The separate full bench receipt confirms this exact source, all 15 stages recorded, 14 PASS / 1 nonblocking synthetic-data WARN, exit 0. All 16 included current PR heads are ancestors. Final-repair independent review is GREEN; earlier review findings are resolved. Real hardware and release acceptance remain separate.

The current base's docs/agent-merge-policy.md, sections 1/2/5, reserves high-risk merges to Justin by hand and prohibits agents merging as Justin. This stack touches the policy's audio/owner paths. The PR is being marked ready for that manual merge; no agent merge or auto-merge will be armed. No branch deletion or duplicate-PR cleanup is included.

…(UI-OVERLAY-A-8)

# Conflicts:
#	Sources/UI/Overlay/FloatingOverlayController.swift
… values (APP-DICTATION-7)

# Conflicts:
#	Sources/App/TranscriptedSupportActions.swift
…dependencies

The notice file is the only one the app ships, and it had drifted from what the
build links (missing Sentry, fastcluster, llama-server vendored code and the
floating SwiftPM packages). Add a short doc with a before-release checklist:
which version variable each entry follows, how to see the versions SwiftPM
resolves for the unpinned packages, and the two related gaps that the notice
file cannot fix (the .mcpb bundle contents and the diarizer cache copy).
prewarm() treated any pooled process as ready, so one that died while idle
stayed in the pool until its kind was next taken or the pool stopped. Now a
non-running ready process is ended and a fresh one started in its place.
workflow_recovery_finished/failed for failed_meeting retries only carried
the original row's failure_kind, so a 58% retry failure rate on 1.1.76
had no reason attached. Add retry_outcome_kind: the MeetingFailureKind
the retry itself ended as (from the row's updated errorKind/message), or
retry_not_started when the pipeline turned the retry away without running
it (retryCount unchanged), retry_row_removed when the row vanished, and
model_not_loaded when models never got ready.

Registered in analytics-events.psv, the reviewed-property list and the
sanitizer's category-valued keys, so only enum-shaped values leave the
device.
SentrySDK.startSession/endSession write the session envelope to disk.
CrashReporter called them synchronously from the main-thread sleep/wake
observers and rotation timer, which showed up as main-thread hangs around
sleep and wake (Sentry APPLE-MACOS-5E).

SentrySessionRotator now owns the session state and makes every start/end
call on a private serial utility queue; callers only enqueue. Termination
enqueues and waits so the completed session is still recorded. The
rotation decision stays in SentrySessionRotationPolicy.

Adds SentrySessionRotatorTests: start/end order for sleep, wake and the
periodic check through an injected sink, and no sink call on main.
endSession stamps the end time when it runs, so an end queued at willSleep
that slips past suspension would count the whole sleep as session time.
The sleep observer now waits up to 200 ms for the queued end. A slow write
still can't hold main past that; it finishes after wake, ahead of the wake
start, since the queue is serial. Wake and the periodic check stay
fire-and-forget.
The unannotated tuple from withAudioGraphLock compiled on Swift 6.4 but
not on the hosted CI toolchain, which inferred non-optional elements and
rejected the if-let bindings that follow (app-build, spm-tests and the
full bench all failed in Build dependencies). Use an explicitly typed
closure, as the Stop path in the same change already does.
release-health-card.py and release-watch.py self-tests read
Tests/Fixtures/release-health-appcast-1.1.76.xml, but only the
nightly-security rule listed that fixture, so a fixture edit selected
neither self-test locally. Add the fixture glob to both rules and a
selector self-test case for it.
The too-short report runs after transcription and read the controller's
shared key release then. A press queued behind the finishing take could
be let go first and overwrite it, so a held take reported key_release=tap.
Snapshot the release and press length at stop time instead.
@r3dbars
r3dbars marked this pull request as ready for review November 13, 2026 04:53
@r3dbars
r3dbars merged commit 5a72538 into main Nov 13, 2026
19 of 23 checks passed
@r3dbars
r3dbars deleted the claude/integration-wave3-20261112 branch November 13, 2026 10:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant