Repository navigation
feat(oracle-gaps): write the stream to <out>/stream.log and name it in the first line - #57
Open
KyleAMathews wants to merge 5 commits into
Open
KyleAMathews wants to merge 5 commits into
KyleAMathews wants to merge 5 commits into
Conversation
The maintainer's decision of 2026-11-12: an agent that runs a check in the background learns where to read its stream from the run itself. A run that starts a check names `<out>/stream.log` in its first line on both streams (`oracle-gaps: note log <path>`), and that file holds the stderr's lines, in order, cold, through the daemon, and after a stop or an abort. The driver records each run's first lines and whether its log equals its stderr; two calibrations give a log that misses a line and a naming line after another line. Co-authored-by: Isaac <no-reply@databricks.com>
…og first The maintainer's decision of 2026-11-12 names the stream log first in every run that starts a check, refusals in it included. The refusal law (#46) owed stdout = the done line alone; it now owes [note log, done line] when the check started, and [done line] for a refusal of the run's arguments, which comes before any check (outsideSource, and the static oracle's argument refusals). Law 15's log checks apply to runs that start a check. Co-authored-by: Isaac <no-reply@databricks.com>
…irst A run that starts a check creates `<out>/stream.log`, writes `oracle-gaps: note log <path>` as its first line on both streams, and writes every stderr line to the log too: the cold check's lines, a daemon reply's stderr, an internal error's or refusal's ending, the completed done line, and the supervisor's own done line for a stopped or crashed run. Co-authored-by: Isaac <no-reply@databricks.com>
Co-authored-by: Isaac <no-reply@databricks.com>
🦋 Changeset detectedLatest commit: 5a92a3e The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars.
|
commit: |
…nd run on a live --out The supervisor opens <out>/stream.log and writes the note before it spawns the child; it resolves --out once and passes it to the child and to the daemon request; it tees the child's stderr, V8 lines included, to the log. A run whose log cannot be opened is refused before any check (exit 2, one done line), and a second run on a live output directory is refused without writing into it (maintainer decision, 2026-11-13). Oracle: out-mode (explicit or default) and log-blocked and overlap histories, with the law that a completed run's results.json sits beside its stream log and that a refused run writes nothing into a live directory. Stop histories use the stop-only witness. Co-authored-by: Isaac <no-reply@databricks.com>
KyleAMathews
added a commit
that referenced
this pull request
Nov 13, 2026
… witnesses - P10: the Windows CLI runs assert the done line on both streams, and that it matches the exit code (scripts/windows-witness.mjs done). - A package with no package.json is refused with exit 2 and a done line that names it (Windows witness). - One early stop: SIGINT once the CLI prints its first line; the run must end with the stop's done line on both streams, or with no output (#57). - Per-shell replay (framework, accepted by the coordinator): a failing property's PowerShell and cmd lines each reproduce the failure in their own shell. The POSIX line is run in PowerShell and must not reproduce (the RED). A run that printed only the POSIX line fails here (the mutant). - The tsc link lookup in package.test.ts reads npm's Windows shim, not a symlink. - The eslint plugin suite runs even when the framework suite fails. - Job timeouts are 20 minutes, as high backstops (2026-11-12). Co-authored-by: Isaac <no-reply@databricks.com>
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.
Summary
The
oracle-gapsrun owns its stream log,<out>/stream.log. The supervisor opens the log and writes the note line before it starts the child, so a stop at any point after the note still leaves the log and both streams naming it.--outis resolved once and passed to the child and to the daemon request, so a run, its daemon check, and its stream log share one output directory. A second run on a live output directory is refused without writing into it (maintainer decision of 2026-11-13). A stream log that cannot be opened is refused before any check starts.Review findings, and what this PR does with each:
missingSourcefault is an owns entry in a test file that names a missing source (tests/b.test.ts: owns entry src/missing.ts#f0 names a missing file). The analysis refuses it after the check has started, so its stdout owes the note line; the model's[note, done]expectation is correct, and the history passes on the parent commit. The argument-stage case, a--sourcethat is not a file of the package, is refused insideparseArgsand is the static oracle'sabsentSource, which already expects the done line alone. The model now carries a comment saying so.--out) fixed. RED: the stop and daemon histories with the default output directory fail on the parent commit.--out) fixed, per the maintainer decision of 2026-11-13. RED: the second run exits 0 on the parent commit.stream.log. Judged by inspection only; see Limits.cli.exit !== 0.Evidence
Law. A run that starts a check names its stream log in its first line on both streams.
<out>/stream.logholds the stderr lines in order, and its last line equals stdout's done line. A completed run'sresults.jsonsits beside that log. A refusal of the arguments, or any refusal before the check starts, writes no stream log. A second run on a live output directory exits 2 with one refusal block naming the directory, writes nothing there, and leaves the first run's stream log equal to its stderr. Authority: the maintainer decisions of 2026-11-12 (stream log) and 2026-11-13 (live-directory refusal), and the refusal law (law 12) in the gap-report oracle.Reach. Each new dimension is declared in
requiredand reached by a constructed history: a stop with the default output directory, a daemon check with the default output directory, a stream log that cannot be written, and two runs on one output directory. Each is also run as a fixed-seed, random-seed, and determinism unit (12 units). Generated-campaign reach was not measured.RED (parent commit 23b47d5, production unchanged;
/tmp/gapwork/RED-batch.log):stream.log is not its stderr, line for linethe run completed, but its results.json is not beside its stream logEISDIRline on stderrthe second run on a live output directory exited 0, not refusing itGREEN (with this change;
/tmp/gapwork/batch-green.log, count-checked, BATCH PASS): the four histories and the two calibrations, 6 of 6. The timing run (/tmp/gapwork/measure12-r2.log) passes all 12 units: the stop unit takes about 3 s and the daemon unit about 5 s.Mutant (each restored afterwards, each run against the same histories):
--outto the child or daemon. The stop and daemon histories fail.Suites. Gap fast suites (static, classify, probe-form, mutant-validity): 33891 of 33891 pass (
/tmp/gapwork/fast-r2.log).e2e-shards checkandpr-shards checkboth pass.Limits
logBlockedoroverlap, because it creates no stream log and runs no second CLI process. The end-to-end histories own those two dimensions. The clearing lives in one named function (staticResolve).w_stopalone). The stop law and its observation are unchanged; the capture witness is not in that history.stream.logthat fails mid-run (removed, replaced, or disk full) is not judged. The supervisor's done-line append is guarded, but a failure in the raw-stderr tee is not handled, so the supervisor could print a stack trace in that case. Not tested.two authored mutants.e2e-shards.mjsnow callspnpm --silent exec vitest list, because pnpm's workspace banner broke the JSON parse.This pull request and its description were written by Isaac.