Canvas export once returned 503 for a valid app-font scene #1073

Open
opened 2026-10-04 22:36:33 +00:00 by kayg · 2 comments
Owner

Merge-round #867 saw one Canvas export return HTTP 503 on a standard valid scene.

The scene has three elements: two live elements and one deleted text element. It uses the app font and retains opaque Unicode fixture metadata. API PNG/SVG passed in an earlier run. The next run failed at its first API export with 503. A later run passed API PNG/SVG and CLI PNG/SVG, then stopped on a stale MCP envelope prerequisite. That prerequisite now asserts the trust envelope and reads its data.

Evidence: artifacts/merge-round-7c2/canvas-export-976-final.log and canvas-export-976-verified.log, merge-round head 60ec7b5a6. The same real local server snapshot and sandbox renderer were used. The failed run did not retain the renderer's child diagnostics. This report does not assign the cause to host load without evidence.

Required follow-up: record bounded renderer failure reasons without source content or secrets, and distinguish timeout, renderer exit and unavailable runtime. Keep the sandbox, input bound, output bound and timeout. Test the normal API/CLI/MCP/WebMCP export scene under concurrent bounded requests. No authorization or data integrity failure was observed.

Merge-round #867 saw one Canvas export return HTTP 503 on a standard valid scene. The scene has three elements: two live elements and one deleted text element. It uses the app font and retains opaque Unicode fixture metadata. API PNG/SVG passed in an earlier run. The next run failed at its first API export with 503. A later run passed API PNG/SVG and CLI PNG/SVG, then stopped on a stale MCP envelope prerequisite. That prerequisite now asserts the trust envelope and reads its data. Evidence: `artifacts/merge-round-7c2/canvas-export-976-final.log` and `canvas-export-976-verified.log`, merge-round head 60ec7b5a6. The same real local server snapshot and sandbox renderer were used. The failed run did not retain the renderer's child diagnostics. This report does not assign the cause to host load without evidence. Required follow-up: record bounded renderer failure reasons without source content or secrets, and distinguish timeout, renderer exit and unavailable runtime. Keep the sandbox, input bound, output bound and timeout. Test the normal API/CLI/MCP/WebMCP export scene under concurrent bounded requests. No authorization or data integrity failure was observed.
Author
Owner

Round 7c3 could not reproduce the historical valid app-font Canvas 503. The sandbox renderer passed 20 consecutive PNG/SVG runs. The real production export flow passed lossless PNG/SVG through HTTP API, CLI, MCP and WebMCP, then 12 further exports of the same app-font scene and a four-call burst (valid PNG or exact 429). Chunk ETags, re-opened scene metadata, font notices, frame bounds and passive export checks passed. Six macOS production captures cover 390/820/1440 px in light and dark.

Added a permanent loop and bounded-burst regression to apps/web/e2e/canvas-export-976.mjs. Added content-free renderer failure classes in the Notes export boundary (spawn, pipe, output limit, numeric exit, empty/invalid output, deadline). The pipe/deadline regression passes. The 25-second limit, output bound, one-render permit and namespace boundary stay in force. No child stderr or scene text is logged.

The original cause is still unknown. These passes do not prove that the historical intermittent failure is fixed. The new diagnostics will identify its class if it recurs. No performance-budget claim is made on this shared host.

Round 7c3 could not reproduce the historical valid app-font Canvas 503. The sandbox renderer passed 20 consecutive PNG/SVG runs. The real production export flow passed lossless PNG/SVG through HTTP API, CLI, MCP and WebMCP, then 12 further exports of the same app-font scene and a four-call burst (valid PNG or exact 429). Chunk ETags, re-opened scene metadata, font notices, frame bounds and passive export checks passed. Six macOS production captures cover 390/820/1440 px in light and dark. Added a permanent loop and bounded-burst regression to apps/web/e2e/canvas-export-976.mjs. Added content-free renderer failure classes in the Notes export boundary (spawn, pipe, output limit, numeric exit, empty/invalid output, deadline). The pipe/deadline regression passes. The 25-second limit, output bound, one-render permit and namespace boundary stay in force. No child stderr or scene text is logged. The original cause is still unknown. These passes do not prove that the historical intermittent failure is fixed. The new diagnostics will identify its class if it recurs. No performance-budget claim is made on this shared host.
Author
Owner

Round 7c3 final status at head b49c7f145a: the historical intermittent 503 is still not explained and is not claimed fixed. Added content-free renderer failure classes and a production app-font repeat/burst regression. The 25-second deadline, output limit, one-render permit and namespace boundary stay in force.

No failure in 20 standalone sandbox renderer exports. Production flow output, verbatim:

PASS app-font export loop: 12 lossless PNG/SVG exports; four-call burst admits valid PNG or exact 429
PASS MCP chunk reconstruction with matching ETags
PASS app-font textarea and six macOS production screenshots
PASS generated frame-label bounds before raster allocation
PASS focused export adversarial: huge geometry refused; resource paint stripped

All four adapters also passed PNG/SVG export and lossless scene reopening. The export loop used the prior repair binary while final Rust compilation continued; final server gates rebuilt the current binary and passed. These tests do not establish the cause of the historical intermittent response.

Rust gates, verbatim:

cargo fmt --check: exit 0
calternal-plugin-notes clippy: exit 0
calternal-plugin-notes test: exit 0
calternal-server clippy: exit 0
calternal-server test: exit 0

The full web suite passed 249 files and 1,726 tests. bun run check reported 0 errors and four existing CSS warnings. Six macOS captures at phone/tablet/desktop widths, in light/dark, are attached to #867 with the full report. READY FOR STAGING remains no due to the unresolved history here and the separately owned #1079 fixture gate. Issues remain open.

Round 7c3 final status at head b49c7f145ae41e5fb7b3f89610060f742b83bcd6: the historical intermittent 503 is still not explained and is not claimed fixed. Added content-free renderer failure classes and a production app-font repeat/burst regression. The 25-second deadline, output limit, one-render permit and namespace boundary stay in force. No failure in 20 standalone sandbox renderer exports. Production flow output, verbatim: ``` PASS app-font export loop: 12 lossless PNG/SVG exports; four-call burst admits valid PNG or exact 429 PASS MCP chunk reconstruction with matching ETags PASS app-font textarea and six macOS production screenshots PASS generated frame-label bounds before raster allocation PASS focused export adversarial: huge geometry refused; resource paint stripped ``` All four adapters also passed PNG/SVG export and lossless scene reopening. The export loop used the prior repair binary while final Rust compilation continued; final server gates rebuilt the current binary and passed. These tests do not establish the cause of the historical intermittent response. Rust gates, verbatim: ``` cargo fmt --check: exit 0 calternal-plugin-notes clippy: exit 0 calternal-plugin-notes test: exit 0 calternal-server clippy: exit 0 calternal-server test: exit 0 ``` The full web suite passed 249 files and 1,726 tests. bun run check reported 0 errors and four existing CSS warnings. Six macOS captures at phone/tablet/desktop widths, in light/dark, are attached to #867 with the full report. READY FOR STAGING remains no due to the unresolved history here and the separately owned #1079 fixture gate. Issues remain open.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/calternal#1073
No description provided.