wave 1 (platform stream): background-observability accuracy + owner-driven follow-ups

- observability: liveness-gated stale-job recovery, extraction run registry on globalThis with
  explicit 'embedding' phase, /api/jobs force-dynamic, client refresh nudges at every seam
- headless: providerSafePng canonicalizer (multi-IDAT Chrome PNGs → single-IDAT) fixing qwen 400s
- composer: Enter routes through pure enterAction — accepts a pending plan verdict (owner decision)
- markdown chrome: session-scoped mermaid overlay + md-blocks component set + pan-zoom math,
  corner-copy (clipboard grant in electron main), math/table/code block fixes, heading weight 900

543/543 tests; typecheck/lint/build clean
This commit is contained in:
amosblomqvist
2026-09-19 13:16:34 +03:00
parent cbecb8df03
commit 487f5d4cea
27 changed files with 1754 additions and 111 deletions
+6
View File
@@ -193,6 +193,12 @@ describe("plan popup (live derivation)", () => {
// Arrows into not-yet-visited nodes are grayed out (owner, round 6).
assert.match(html, /marker-end="url\(#.*-dim\)"/);
assert.match(html, /live — statuses derive from your check outcomes/);
// No top-left flash: at static render settled=false, so the diagram
// wrapper paints at opacity 0 — the fit runs in an effect AFTER the
// first paint and the chart would otherwise flash at the initial
// top-left zoom:1 state for a frame (owner report, 2026-09-19;
// transition-gating alone didn't hide it).
assert.match(html, /opacity: ?0[;,}]/, "diagram hidden until the first fit applies");
});
it("renders the empty state when the session has no plan", () => {