Skip to content

Fix the open bugs that still reproduce - #64

Merged
yogthos merged 14 commits into
mainfrom
open-bugs
Sep 29, 2026
Merged

yogthos merged 14 commits into
mainfrom
open-bugs

Conversation

@yogthos

@yogthos yogthos commented Sep 29, 2026

Copy link
Copy Markdown
Owner

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:

  • The project image's output went to pipes nothing read, so a chatty start could stall it; it now logs to a file, fails fast on a dead child, retries once on a fresh port, and says why it failed (69p0, tetz).
  • The project image now gets the project's declared roots, so a test namespace under an alias-only path can be required from eval (1b37).
  • Any jolt alias is allowed, and a refused form of an allowed command says so (9nsf).
  • A refused task claim says whether the task is missing, closed (by you), or held by whom (fjrq).
  • The run's token budget ends branches inside nested feature, board and team loops, not only at the beam's round boundary (lq57).
  • Every abandoned branch gets a reason (n6ql).
  • A round that fails for any reason cancels the turns it started (odyx).
  • /health says which harness revision is answering (uk77).
  • Directives to branches that have already ended are refused (amem).
  • The critic's second pass keeps only its surviving findings, not its deliberation (kdoj).
  • A composed sub-manifest's :prompt is warned about rather than silently dropped (r6x1).
  • DeepSeek's insufficient_system_resource reads as a truncated reply (6uyv).
  • RFC-002 now says a direct edit to a .samizdat file is checked but not soaked or replayed (95u5).

Still open: dsfx needs a decision, and cc3a is a jolt reload bug with repros recorded on the bead.

Yogthos 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.
@yogthos
yogthos merged commit cf984b7 into main Sep 29, 2026
3 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