Conversation
added 14 commits
September 29, 2026 17:40
The image's stdout and stderr were pipes nothing read, so a child that printed enough while starting could fill one and stall before it bound its port; its output now goes to a log in its scratch directory. The wait ends as soon as the child has exited, a failed start is tried once more on a fresh port, and the failure logs the deadline, the exit status and the child's own output instead of only the profile path.
The harness added the project's :paths and alias :extra-paths to its own image and logged that eval could reach them, but every role except the supervisor evaluates in the project image, which starts with no alias. A test namespace a branch had just written under an alias-only test dir could not be required. The route now adds the same roots to the project image when it starts one, and the harness log says which image it means.
The shell policy allowed jolt aliases one row at a time, so every alias a project added was refused until someone wrote a row for it. jolt -A:* and -M:* are now allowed, with wrappers and hard denies still judged per segment. A refused form of a head that has allowed forms now says so, rather than that the command is not on the allow list at all.
One sentence covered a missing task, a closed one and one another branch held, so a branch that had closed its own task read that another run held it and created a duplicate. The refusal now reads the task's row and says which, including when the branch closed it itself.
The budget was read only at the beam's round boundary, so a feature, team or decompose run, which the beam sees as one turn, spent without bound inside its nested loops. The arbiter, which may read the db, now sums what the run has billed when a budget is set, and route ends the branch exhausted once it is reached, whichever loop the branch is in.
The provider-error arm, and an inactive branch with no answer, ended a branch without an inactive-reason, so an oversight pass could record abandoned with nothing saying why. Route now names the reason when nothing else did.
advance-all cancelled its in-flight turns only when the throw was a cancel signal, so any other failure while waiting left the turns it had spawned running past the driver that owned them.
A stale serve process answered /health exactly like a current one. The response now carries the checkout's commit and whether its tree was dirty, read once when the process loaded them, and when the process started.
A directive queued for a closed branch sat pending forever, since nothing drains a finished branch's boundary. submit! now refuses it, saying how the branch ended; an exhausted branch still takes directives, since extend can reopen it.
The verify pass reasoned in long paragraphs that quoted candidates' severity tags, and a tag anywhere in a line opened a finding, so the whole deliberation was stored as the findings and handed to the retry. A reply's surviving-findings section is now what is read when it has one, a tag opens a finding only at the start of a line, and a segment that opens on a blank line is still the finding under it.
A composed child runs as one node of its parent, under the parent's prompt, and its own :prompt was dropped with nothing saying so. Compile now adds a :composed-prompt-ignored warning naming the child, and RFC-002 says composition is routing-only.
DeepSeek ends a reply mid-generation with this finish reason under load, and it read as a model that made no call. Truncation is now any finish reason in wordlists :truncated-finish-reasons, length included.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Triaged all 22 open bug beads against current code. Five were already fixed or stale and are closed with the evidence (rbxt, ko5b, ktaw, 5ot9, and bkjm, fixed in jolt 0.8.15); 410p no longer reproduces on 0.8.15 and the boot-time mitigation stays.
Fixed here:
Still open: dsfx needs a decision, and cc3a is a jolt reload bug with repros recorded on the bead.