Skip to content
Merged
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
dd704b7
Pin the macOS memory-reduction native work and the audit briefs
Jul 30, 2026
ac80642
Carry the memory-work handoff and the myclock bakeoff fixture
Jul 30, 2026
abb6f82
Force-include myclock/dist: the bakeoff harness consumes the built bu…
Jul 30, 2026
73789e3
Record macOS memory gate results
SunkenInTime Jul 30, 2026
c099db6
Record the wall correction: workload-scoped, machine-dependent, gate …
Jul 30, 2026
78f8cdf
Split the GPU ledger investigation into its own brief
Jul 30, 2026
e255a30
Name the GPU ledger wall: per-process Metal submission working set
Jul 30, 2026
0db488a
Record the named wall and Dara's re-approval of the shared renderer
Jul 30, 2026
aa9d076
Distill the session teachings from naming the GPU ledger wall
Jul 30, 2026
b0545ff
Add Phase 1 kickoff calibration now that the wall has a name
Jul 30, 2026
4e97a4a
Cut visualizer provider render cost
SunkenInTime Aug 1, 2026
9d7fc2e
Record Phase 1 spike results: all gates passed, arena moves to the host
Jul 31, 2026
cd37ca2
Track Phase 2 PRs: memory-cuts base (#19) and IOSurface presenter sli…
Jul 31, 2026
f120876
Record slice-2 transport receipt: dynamic bootstrap name + mach IOSur…
Jul 31, 2026
5ef8b32
Track slice 2: render host PR #22 at 5/5 after three review rounds
Jul 31, 2026
205fd54
Track slice 3: device-less client PR #23 at 5/5 — widgets measure 29.…
Jul 31, 2026
9ae718f
Track slice 4: budget tripwire (native#24) + cutover (weaver#47), all…
Jul 31, 2026
687163e
Track roster verification: image+font forwarding (native#26) gates th…
Jul 31, 2026
0bf07b7
Track weaver#48: the pin bump that completes the cutover merge
Jul 31, 2026
80ef77c
Merge remote-tracking branch 'origin/master' into feat/macos-memory-work
Aug 1, 2026
5c4dbba
Keep visualizer rectangles on the GPU
SunkenInTime Aug 1, 2026
2b2d853
Skip Canvas frame tree rebuilds
SunkenInTime Aug 1, 2026
2dec92a
Disable continuous tracing for Widgets
SunkenInTime Aug 1, 2026
72ef7d4
Merge remote-tracking branch 'origin/master' into feat/macos-memory-work
Aug 16, 2026
5183716
Merge remote-tracking branch 'origin/feat/macos-memory-work' into fea…
Aug 16, 2026
9d216a6
Drop root myclock sources superseded by examples/myclock
Aug 16, 2026
5a308fe
Drop the provider-path paragraph duplicated by the convergence merge
Aug 16, 2026
e23e747
Deracify the media-recovery crash capture in the macOS smoke
Aug 16, 2026
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
24 changes: 17 additions & 7 deletions cli/test/macos-host-smoke.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ try {

run(["init", "media-recovery"]);
writeFileSync(join(scratch, "media-recovery", "widget.tsx"), `
import { useInterval, useMediaTransport, useProvider, useState, useStorage, widget } from "@weaver/sdk";
import { useInterval, useMediaTransport, useProvider, useStorage, widget } from "@weaver/sdk";

export default widget({
name: "Media Recovery",
Expand All @@ -188,11 +188,8 @@ export default widget({
}, () => {
const media = useProvider("media");
const transport = useMediaTransport();
const [attempted, setAttempted] = useState(false);
const [outcome, setOutcome] = useStorage("transport", "pending");
useInterval(() => {
if (attempted) return;
setAttempted(true);
void transport.pause().then((ok) => {
setOutcome(\`resolved:\${ok}\`);
console.log(\`media recovery command resolved:\${ok}\`);
Expand All @@ -205,7 +202,6 @@ export default widget({
});
`, "utf8");
const recoveryFramesBeforeInstall = status().providers.mediaPipeFrames;
writeFileSync(providerSendFailure, "fail-next-send", "utf8");
run(["install", "media-recovery"]);
const firstRecovery = await waitFor("initial media recovery Widget", () => {
const document = status();
Expand All @@ -220,6 +216,14 @@ export default widget({
.map((entry) => entry.name);
assert.equal(firstRecoverySockets.length, 1, "initial recovery Widget did not own exactly one provider endpoint");

// Arm the one-shot send failure only now, after the pre-crash Widget's pid
// and endpoint are captured from settled status. Arming before install races
// the fixture's first transport attempt against status.json's write cadence:
// on a slow runner the first status snapshot that qualifies as "running with
// frames" can already be the replacement, and the crash this section exists
// to observe has then already happened. The fixture retries pause every two
// seconds, so a post-arm attempt consumes the marker deterministically.
writeFileSync(providerSendFailure, "fail-next-send", "utf8");
const replacementRecovery = await waitFor("runtime-fatal provider send recovery", () => {
const document = status();
const widget = document?.widgets?.[0];
Expand All @@ -242,10 +246,16 @@ export default widget({
// boundary instead of waiting for useStorage's unrelated debounced file
// write; keeping the deliberately crash-injected fixture alive after the
// callback races the synthetic supervisor backoff and tests persistence,
// not media-channel recovery.
// not media-channel recovery. The contract is that a callback ARRIVES over
// the replaced channel; its boolean tracks whether the machine has a live
// media session (false on hosted runners, true beside a real player), so
// wait for a resolution logged after the replacement was captured rather
// than for either literal value.
const resolvedLineCount = () => widgetLogs().split("media recovery command resolved:").length - 1;
const resolutionsAtReplacement = resolvedLineCount();
await waitFor(
"successful media command after runtime-fatal recovery",
() => widgetLogs().includes("media recovery command resolved:false"),
() => resolvedLineCount() > resolutionsAtReplacement,
Comment thread
coderabbitai[bot] marked this conversation as resolved.
15_000,
);
run(["uninstall", "Media Recovery"]);
Expand Down
Loading