Skip to content

Preserve studio DOM during passive updater checks - #141

Merged
Samfa12-tech merged 3 commits into
mainfrom
codex/daw-passive-updater-render-20261017
Oct 17, 2026
Merged

Samfa12-tech merged 3 commits into
mainfrom
codex/daw-passive-updater-render-20261017

Conversation

@Samfa12-tech

@Samfa12-tech Samfa12-tech commented Oct 17, 2026 •

Copy link
Copy Markdown
Owner

Silent startup update checks rebuilt the entire Pocket DAW studio at both check boundaries. During five-minute output analysis, the 0.6.58 prepare gate measured a 184.9 ms UI heartbeat gap against the existing 150 ms limit. A bounded profile reproduced 179.1 ms and attributed consecutive full renders to checkForUpdates through renderReadinessUpdate.

When no updater panel is open or rendered, update only the transport status. Keep the existing render path for explicit checks, visible updater panels, available-update presentation and the existing active Library/Export ownership guards. A rendered panel that is being closed still receives its normal render. No scheduler, DSP, capture, TLS, signature policy or dependency change is included over accepted PR139.

Two new closed-panel DOM-preservation controls both failed on the unchanged 0.6.58 production bundle before the fix. A third control covers a passive check while its panel is already open. Existing worker responsiveness limits and all prior cases remain unchanged. Final local validation passed 1,291 source tests, 224 locked Windows native tests (six existing manual/fixture exclusions), Clippy, formatting, TypeScript and all 80 production-browser cases with no skips or profiler. Both original worker limits remain below 150 ms. The exact-head independent source review and hosted CI/CodeQL remain pending.

This stacked source candidate uses 0.6.59 and retains the accepted rustls 0.23.46/webpki 0.103.14 patch from PR139. The failed 0.6.58 prepare stopped before native release build, packaging or receipt creation; its logs, traces and diagnostic profile remain retained. No 0.6.59 installer, installation, recording, merge or publication is authorized by this draft. Frozen accepted 0.6.57 remains unchanged.

Removing the incidental updater redraw exposed an existing UI Stop refresh omission: cancellation was safe, but Hear stayed disabled until another redraw. Explicit UI Stop now renders the cancelled controls immediately. The cancellation control now requires Hear enabled before the stale native start is released. The menu control proves the startup callback ran once and requires no studio redraw, retaining focus/visibility checks. The first 0.6.59 run (77/80, including both strict worker gates) and its three failures remain retained; no thresholds or worker assertions were relaxed.

Exact source and production-browser producer evidence
{
  "schema": "pocket-daw-production-source-review-v1",
  "checkedAt": "2026-10-17T00:19:24.347Z",
  "head": "63c89d4687e7e8aea26287297ed83badcef6bc63",
  "tree": "e919469075b3cf76ace39c5ddd857dea7eed5222",
  "base": "1eecf8c8212171f240a078f7b977fc3a390c80c2",
  "version": "0.6.59",
  "trackedClean": true,
  "sourceOnly": true,
  "installed": false,
  "published": false,
  "scope": "Closed passive updater status patch; visible/present panel rendering retained. Dependencies unchanged from accepted PR139. Explicit UI Stop immediately redraws cancelled audition controls instead of relying on a later startup refresh.",
  "sourceGates": {
    "fullSource": {
      "files": 108,
      "passed": 1291,
      "logSHA256": "9cf3663b1a60a5b8687b85c8ff9a0fa144de6f24d0abf957685db15ce09451d3"
    },
    "native": {
      "passed": 224,
      "ignored": 6,
      "failed": 0,
      "locked": true,
      "offline": true,
      "logSHA256": "50e7c5d681f8f269763c9bf9ee7c6fa3af4c14c14fa0e18dd6ae1405f2a5fe0d"
    },
    "clippy": "pass; locked/offline/all-targets/-D warnings",
    "fmt": "pass",
    "typescriptBuild": "pass"
  },
  "browser": {
    "production": true,
    "profiled": false,
    "passed": 80,
    "failed": 0,
    "skipped": 0,
    "previous77CasesRetained": true,
    "addedControls": [
      {
        "file": "finish-comparison.spec.js",
        "title": "closed passive updater preserves the studio DOM until an update needs its panel (false)",
        "status": "passed",
        "durationMs": 670
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "closed passive updater preserves the studio DOM until an update needs its panel (true)",
        "status": "passed",
        "durationMs": 810
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "passive updater still refreshes and completes an already-open panel",
        "status": "passed",
        "durationMs": 1105
      }
    ],
    "stats": {
      "startTime": "2026-10-17T00:17:23.151Z",
      "duration": 98351.24100000001,
      "expected": 80,
      "skipped": 0,
      "unexpected": 0,
      "flaky": 0
    },
    "workers": {
      "long-song-worker-responsiveness": {
        "maxGapMs": 11,
        "beats": 26,
        "elapsedMs": 261.39999997615814,
        "cancelAndSettleMs": 100.7999999821186,
        "attachmentSHA256": "d825173c78ef5e775adcaca0cc8e2ef4b74dbbf0e2797f589ec843470e16a838"
      },
      "completed-long-song-worker-analysis": {
        "maxGapMs": 12,
        "beats": 618,
        "elapsedMs": 6189.399999976158,
        "analysisAcknowledgedMs": 8.799999982118607,
        "metrics": {
          "durationSeconds": 300,
          "nonFiniteSamples": 0,
          "truePeakDbtp": -13.9794
        },
        "attachmentSHA256": "471a0dc7d51675a3b0d280c3797e7cd4beedfba59bbb48c8d4c7986ff39e7ff4"
      }
    },
    "fullReportSHA256": "5431128e3d223d11dfe6cd4282f7ad369d7f6b79482bcf03d5e44d43f11eb18a",
    "inventory": [
      {
        "file": "desktop-menus.spec.js",
        "title": "long Edit commands stay reachable in constrained shell geometry",
        "status": "passed",
        "durationMs": 1248
      },
      {
        "file": "desktop-menus.spec.js",
        "title": "Escape dismisses a focused menu and returns to its command root",
        "status": "passed",
        "durationMs": 1185
      },
      {
        "file": "desktop-menus.spec.js",
        "title": "menu navigation owns arrow, Home, End and letter keys without editing the selected clip",
        "status": "passed",
        "durationMs": 1311
      },
      {
        "file": "desktop-menus.spec.js",
        "title": "a menu command dialog returns focus to a visible trigger and Tab leaves the menu",
        "status": "passed",
        "durationMs": 1751
      },
      {
        "file": "desktop-menus.spec.js",
        "title": "background startup status refresh preserves an open scrolled menu and its focus",
        "status": "passed",
        "durationMs": 1117
      },
      {
        "file": "desktop-menus.spec.js",
        "title": "every menu stays bounded through resize, outside dismissal and repeated opening",
        "status": "passed",
        "durationMs": 5986
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "late startup discovery cannot replace an unfinished export field or completed QC",
        "status": "passed",
        "durationMs": 2125
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "late startup discovery cannot replace ready Finish controls during reachability actions",
        "status": "passed",
        "durationMs": 3033
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "automatic updater begin and completion preserve the live Finish surface (available=false)",
        "status": "passed",
        "durationMs": 3163
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "automatic updater begin and completion preserve the live Finish surface (available=true)",
        "status": "passed",
        "durationMs": 4368
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "automatic updater begin and completion preserve the live QC input surface (available=false)",
        "status": "passed",
        "durationMs": 2823
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "automatic updater begin and completion preserve the live QC input surface (available=true)",
        "status": "passed",
        "durationMs": 2777
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "passive updater begin preserves the live Library selection control",
        "status": "passed",
        "durationMs": 2032
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "passive updater completion preserves the live Library selection control",
        "status": "passed",
        "durationMs": 2095
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "passive startup discovery preserves the live Library selection control",
        "status": "passed",
        "durationMs": 1346
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "passive updater begin preserves the live Library search composition control",
        "status": "passed",
        "durationMs": 1171
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "passive updater completion preserves the live Library search composition control",
        "status": "passed",
        "durationMs": 1219
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "passive startup discovery preserves the live Library search composition control",
        "status": "passed",
        "durationMs": 1287
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "passive updater begin preserves the live Library category control",
        "status": "passed",
        "durationMs": 1282
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "passive updater completion preserves the live Library category control",
        "status": "passed",
        "durationMs": 1318
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "passive startup discovery preserves the live Library category control",
        "status": "passed",
        "durationMs": 1317
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "passive updater begin preserves the live Library folder control",
        "status": "passed",
        "durationMs": 1269
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "passive updater completion preserves the live Library folder control",
        "status": "passed",
        "durationMs": 1405
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "passive startup discovery preserves the live Library folder control",
        "status": "passed",
        "durationMs": 1326
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "passive updater begin preserves the live Library placement control",
        "status": "passed",
        "durationMs": 1204
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "passive updater completion preserves the live Library placement control",
        "status": "passed",
        "durationMs": 1140
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "passive startup discovery preserves the live Library placement control",
        "status": "passed",
        "durationMs": 1105
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "closed passive updater preserves the studio DOM until an update needs its panel (false)",
        "status": "passed",
        "durationMs": 670
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "closed passive updater preserves the studio DOM until an update needs its panel (true)",
        "status": "passed",
        "durationMs": 810
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "passive updater still refreshes and completes an already-open panel",
        "status": "passed",
        "durationMs": 1105
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "explicit updater checks still refresh their visible panel while Export is selected",
        "status": "passed",
        "durationMs": 1407
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "passive updater begin preserves returned import trigger focus after File closes",
        "status": "passed",
        "durationMs": 840
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "passive updater completion preserves returned import trigger focus after File closes",
        "status": "passed",
        "durationMs": 825
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "passive startup discovery preserves returned import trigger focus after File closes",
        "status": "passed",
        "durationMs": 861
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "cold saved audio and reopen reach Finish Ready, retain one Apply Undo and never autoplay",
        "status": "passed",
        "durationMs": 4823
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "cold saved audio reaches contextual audition playing on the first request",
        "status": "passed",
        "durationMs": 1279
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "delivery QC measures the downloaded normalized file without replacing unfinished input",
        "status": "passed",
        "durationMs": 2268
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "cancelled delivery QC rejects its late result and keeps the requested download",
        "status": "passed",
        "durationMs": 1392
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "delivery checking defers while audio plays and can start after Stop",
        "status": "passed",
        "durationMs": 1695
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "a late ordinary-export hydration cannot replace concurrent project edits",
        "status": "passed",
        "durationMs": 2244
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "cold Finish hydration rejects a late load after concurrent Stop",
        "status": "passed",
        "durationMs": 2875
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "cold Finish hydration rejects a late load after concurrent edit",
        "status": "passed",
        "durationMs": 2918
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "cold audition hydration rejects a late load after concurrent Stop",
        "status": "passed",
        "durationMs": 1496
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "cold audition hydration rejects a late load after concurrent edit",
        "status": "passed",
        "durationMs": 1527
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "prepared measured comparison has no autoplay; A/B shares one start and Apply has one Undo",
        "status": "passed",
        "durationMs": 3294
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "playable examples request native comparison without allowing Apply or saving edits",
        "status": "passed",
        "durationMs": 2753
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "cancelled example cannot autoplay on a late preparation result",
        "status": "passed",
        "durationMs": 1304
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "selected-track proposal reaches both native render inputs and retains one Apply Undo",
        "status": "passed",
        "durationMs": 3005
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "Stop cancels native preparation and a late file cannot become an applicable proposal",
        "status": "passed",
        "durationMs": 1216
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "a changed selection rejects the prepared proposal without applying or playing it",
        "status": "passed",
        "durationMs": 2284
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "a late side-change reply after Stop does not discard the ready proposal",
        "status": "passed",
        "durationMs": 2715
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "Finish controls and measured readings remain reachable at 1100x720",
        "status": "passed",
        "durationMs": 2471
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "Finish controls and measured readings remain reachable at 800x600",
        "status": "passed",
        "durationMs": 2506
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "real analysis worker keeps long-song CPU work off the UI and terminates promptly",
        "status": "passed",
        "durationMs": 761
      },
      {
        "file": "finish-comparison.spec.js",
        "title": "real worker completes five-minute decoded output analysis while the UI remains responsive",
        "status": "passed",
        "durationMs": 6696
      },
      {
        "file": "selection-audition.spec.js",
        "title": "audition context and settings stay visible, retain focus and never autoplay",
        "status": "passed",
        "durationMs": 1781
      },
      {
        "file": "selection-audition.spec.js",
        "title": "browser capability failure is visible and never creates live Web Audio",
        "status": "passed",
        "durationMs": 1393
      },
      {
        "file": "selection-audition.spec.js",
        "title": "Stop cancels pending native start and rejects its later completion",
        "status": "passed",
        "durationMs": 1652
      },
      {
        "file": "selection-audition.spec.js",
        "title": "changing selection cancels pending audition without promoting the stale start",
        "status": "passed",
        "durationMs": 1463
      },
      {
        "file": "smoke.spec.js",
        "title": "Campfire editor controls retain focus, stored grid and undo with native playback tested separately",
        "status": "passed",
        "durationMs": 2194
      },
      {
        "file": "smoke.spec.js",
        "title": "empty Campfire Grid activates automatic performance while preserving explicit mixer mute and Undo",
        "status": "passed",
        "durationMs": 2311
      },
      {
        "file": "smoke.spec.js",
        "title": "starts the browser fallback and exposes core DAW controls",
        "status": "passed",
        "durationMs": 1416
      },
      {
        "file": "smoke.spec.js",
        "title": "creates a new project from the browser fallback file panel",
        "status": "passed",
        "durationMs": 1470
      },
      {
        "file": "smoke.spec.js",
        "title": "saves and exports diagnostics through browser fallback downloads",
        "status": "passed",
        "durationMs": 2200
      },
      {
        "file": "smoke.spec.js",
        "title": "opens diagnostics and audio settings panels without native APIs",
        "status": "passed",
        "durationMs": 2666
      },
      {
        "file": "smoke.spec.js",
        "title": "toggles loop state and adds a live track through browser controls",
        "status": "passed",
        "durationMs": 2977
      },
      {
        "file": "smoke.spec.js",
        "title": "focuses the persistent Library, closes on Escape, and restores the trigger",
        "status": "passed",
        "durationMs": 1674
      },
      {
        "file": "smoke.spec.js",
        "title": "adjusts generated clip repeats from the keyboard and preserves undo",
        "status": "passed",
        "durationMs": 2611
      },
      {
        "file": "smoke.spec.js",
        "title": "associates import validation errors with the editable field and clears them on input",
        "status": "passed",
        "durationMs": 2325
      },
      {
        "file": "smoke.spec.js",
        "title": "uses stateful sequencer names and roving arrow-key focus",
        "status": "passed",
        "durationMs": 957
      },
      {
        "file": "smoke.spec.js",
        "title": "keeps the supported narrow window and Library inside the viewport",
        "status": "passed",
        "durationMs": 894
      },
      {
        "file": "smoke.spec.js",
        "title": "honors reduced motion for repeating busy feedback",
        "status": "passed",
        "durationMs": 609
      },
      {
        "file": "smoke.spec.js",
        "title": "keeps keyboard focus visible in forced-colors mode",
        "status": "passed",
        "durationMs": 620
      },
      {
        "file": "smoke.spec.js",
        "title": "duplicates a selected clip and supports undo and redo",
        "status": "passed",
        "durationMs": 2780
      },
      {
        "file": "smoke.spec.js",
        "title": "keeps malicious pasted project text inert in the browser fallback",
        "status": "passed",
        "durationMs": 1011
      },
      {
        "file": "smoke.spec.js",
        "title": "opens the persistent Sounds Library without trapping the rest of the studio",
        "status": "passed",
        "durationMs": 1534
      },
      {
        "file": "smoke.spec.js",
        "title": "filters sample results without replacing studio, search, composition or selection",
        "status": "passed",
        "durationMs": 1669
      },
      {
        "file": "smoke.spec.js",
        "title": "updates meters with a fixed query count and keeps readout children during playback",
        "status": "passed",
        "durationMs": 1664
      },
      {
        "file": "smoke.spec.js",
        "title": "exposes honest sample empty states and the native-only VST3 boundary",
        "status": "passed",
        "durationMs": 1568
      },
      {
        "file": "smoke.spec.js",
        "title": "keeps the Sounds Library usable in narrow, reduced-motion, forced-color layouts",
        "status": "passed",
        "durationMs": 956
      }
    ],
    "existingCaseUpdates": [
      "Open-menu startup control proves the 3500ms callback executes exactly once and requires render count to stay unchanged, retaining visible-menu and focus assertions. This replaces its obsolete expectation that the silent check must redraw.",
      "Pending native audition Stop control additionally requires Hear to be enabled before releasing the stale native-start completion; all later stale-start and project-continuity assertions remain."
    ]
  },
  "redControls": {
    "failedOnUnchanged0658": 2,
    "baselineReportSHA256": "252f96ee6a060991349b97e44d1180a598c9c92809cb63c13c50bb97ca0cab08"
  },
  "priorFailure": {
    "prepareVersion": "0.6.58",
    "failedGateMaxGapMs": 184.90000000596046,
    "diagnosticProfileMaxGapMs": 179.09999999403954,
    "nativeReleaseBuilt": false,
    "installerCreated": false,
    "receiptCreated": false
  },
  "captureFingerprintUnchanged": "e9da9acb8d6235a4f26f74f1c3601289d77c4125299cb345bb0fbf82956c8bce",
  "direct0657AudibilityBaselineEligible": true,
  "bundles": [
    {
      "name": "event-ww3sFKyM.js",
      "sizeBytes": 1411,
      "sha256": "19948d75329814c08996950cc29deaa28991bc64df55f8356fc4810fe4a02046"
    },
    {
      "name": "finishAnalysis.worker-JxszY5wB.js",
      "sizeBytes": 8953,
      "sha256": "9c358a6e68e590b49ffe73c4c5354d1795fc3193774b29d69e4fc86dab73e0d8"
    },
    {
      "name": "index-BOoCmpH6.js",
      "sizeBytes": 553,
      "sha256": "8fcad360b022455cc624aa88ac156785155da9dcd9f32a95c8d9479555487b1b"
    },
    {
      "name": "index-DBBS1hb4.js",
      "sizeBytes": 1077,
      "sha256": "ab89353f0d96bf3e3432a69adacd37317f864764f2fccfa25286b1e880961a02"
    },
    {
      "name": "index-DeBHY3WR.js",
      "sizeBytes": 183,
      "sha256": "359acd03dc94da8fc2eed43ca81619922d1c2bf78259598a3ebd02438e75dfd6"
    },
    {
      "name": "index-QdAQl4Z6.css",
      "sizeBytes": 68123,
      "sha256": "c7e7bb508bd9634b564919aa2b5fcd30affe575c4f0785ec5d1977818898cf09"
    },
    {
      "name": "index-ZCtQ7YDJ.js",
      "sizeBytes": 1414285,
      "sha256": "091bc01a420338af03893fbf9ba0ff03e5d5c2234057661601dbc30079500921"
    },
    {
      "name": "webview-CjljElaf.js",
      "sizeBytes": 16268,
      "sha256": "baa36bd096d067fa3167f3f3993d59ff1078b419de96d49388764c62af2022b7"
    }
  ],
  "priorSourceIteration": {
    "head": "1068d4464ada51242ab792a06b06f31c53c92ae2",
    "stats": {
      "startTime": "2026-10-17T00:12:24.176Z",
      "duration": 143407.65,
      "expected": 77,
      "skipped": 0,
      "unexpected": 3,
      "flaky": 0
    },
    "reportSHA256": "348e717f160250d46e47dd69b5cccee8d881b71aa834fa3b837e951d9b0960dc",
    "retained": true,
    "exposed": "After silent updater redraws were removed, explicit UI Stop left idle audition controls disabled. The menu test also assumed the removed redraw. Both worker gates and all three new updater controls passed in that intermediate run."
  }
}

@Samfa12-tech
Samfa12-tech changed the base branch from codex/daw-rustls-security-20261017 to main October 17, 2026 01:13
@Samfa12-tech
Samfa12-tech marked this pull request as ready for review October 17, 2026 01:13
@Samfa12-tech
Samfa12-tech merged commit 63c89d4 into main Oct 17, 2026
16 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