Skip to content

Preserve logs on thrown executor paths, charge every call attempt, and render 2020-12 keywords honestly - #548

Merged
zackbart merged 1 commit into
mainfrom
fix/followup-edges
Sep 16, 2026
Merged

zackbart merged 1 commit into
mainfrom
fix/followup-edges

Conversation

@zackbart

Copy link
Copy Markdown
Owner

Closes #543 (items 1, 3, 4, 5; items 2 and 6 landed in #546 and #545).

  • Logs survive every failure. QuickJS streams accepted console entries to the parent within the IPC bound, so a program that is cancelled, killed at the deadline, crashed, or lost to an IPC failure still returns what it printed (4,000-character cap). A normal reply keeps its complete log array; the two copies are never joined.
  • Accounting. Every connecta.call attempt spends one host call on entry, so unknown addresses and other pre-dispatch refusals cannot loop for free. The request-held failure list used to re-type escaped errors keeps the most recent 64. An empty terminal error string is a failure with a fixed message on both the parent and the child transport.
  • Rendering. prefixItems renders as a tuple, dependentSchemas and if/then/else shapes are marked /* conditional */ with the truncation flag, and $dynamicRef resolves like $ref (else unknown, flagged).
  • Pool timing oracle is accepted and documented in auth.md: pool names grant no access, a fixed delay cannot hide unbounded grant I/O, and probing grants for unknown names would add work while holding a permit.

Full npm run check passes on this branch (pre-rebase; CI is the check of record for the rebased tree).

🤖 Generated with Claude Code

…d render 2020-12 keywords honestly

QuickJS now streams accepted console entries to the parent within the IPC
bound, so a program that is cancelled, killed at the deadline, crashed, or
lost to an IPC failure still returns what it printed, capped at the same
4,000 characters; a normal reply keeps its complete log array. Every
connecta.call attempt spends one host call on entry, so unknown addresses and
other pre-dispatch refusals can no longer loop for free; the request-held
failure list for re-typing escaped errors keeps the most recent 64; an empty
terminal error string is reported as a failure with a fixed message on both
the parent and the child transport. The compact renderer renders prefixItems
as tuples, marks dependentSchemas and if/then/else shapes conditional with the
truncation flag, and resolves $dynamicRef like $ref. The pool 404 timing
oracle is accepted and documented: names grant no access and a fixed delay
cannot hide unbounded grant I/O (#543).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@zackbart
zackbart merged commit 4a54810 into main Sep 16, 2026
2 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.

Rough edges from the 0.24.3 audit: pool timing oracle, tool-level authorize_connector, lossy 2020-12 rendering, executor accounting gaps

1 participant