Skip to content

deploy_dashboard_srv1 E2BIG on every main push: emitted deploy fold spawns sh with whole script as one argv (grew past MAX_ARG_STRLEN with roadmap content); root fix = reference checked-out artifacts instead of embedding (dag/gunbc/live_deploy/emit.dag; first failure run 29468603049) - #6733

Merged
briansrls merged 9 commits into
mainfrom
session/warm-bee-432
Jul 16, 2026

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Auto-opened by session-dashboard for session warm-bee-432.
Pushing to session/warm-bee-432 advances this PR.

Worker attestation

Before flipping this PR to ready for review, confirm each item:

  • Title describes the change (not the session id or branch).
  • PR body summarises what and why (replace the TODO below).
  • Tests run: name the command (e.g. npm test, cargo test) and the result.
  • If this closes a work item, the body contains a Closes #N directive.
  • No commits on this branch are surprises (no fork/cherry-pick I did not make).
  • No secrets / credentials / large binaries staged.

Summary

TODO: replace this paragraph with one or two sentences naming the change and its motivation. Reviewers read this first.

Test plan

  • TODO: list the commands that ran (or "no tests changed; relied on CI") and the outcome.

Brian Searls and others added 5 commits July 16, 2026 03:54
The negative-check witness embedded a literal "{script}" substring in
its needle string, which the compiler's string-literal interpolation
picked up as a reference to an out-of-scope `script` variable
(undefined variable 'script'). Drop that witness; the remaining two
(stdin transport present, script exceeds the local argv-embed budget)
already prove the fix.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Both witness tests independently hardcoded a byte_size(65536) budget
under two different local names — a §3 nickname fork of the same
kernel fact. Ground it once in dag/extdeps/shell/shell.dag as
shell_argv_max_arg_strlen, citing the Linux kernel's MAX_ARG_STRLEN
(include/uapi/linux/binfmts.h, 32 pages = 131072 bytes), and have both
witnesses derive their budget from that authority instead of
re-declaring it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review July 16, 2026 05:47
Brian Searls added 2 commits July 16, 2026 05:50
@cursor

cursor Bot commented Jul 16, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

Brian Searls and others added 2 commits July 16, 2026 06:01
The stdin transport (PR #6711/#6733) writes the full script to the
child's stdin synchronously, before draining stdout/stderr. A script
that both consumes a large stdin payload and produces substantial
stdout can deadlock on full OS pipe buffers; when the child exits
early the write then fails with EPIPE ("Broken pipe (os error 32)"),
which is exactly what deploy_dashboard_srv1 hit on main after #6711
merged (the apply script is 246KB in, ~150KB out).

Move the stdin write to a spawned thread running concurrently with
wait_with_output() (which drains stdout/stderr). A stdin-write error
is only treated as fatal if the child itself exited non-zero, since a
script that exits 0 before consuming all of stdin is a legitimate
early-exit pattern (ordinary SIGPIPE/broken-pipe semantics).

Verified locally: a real shell.Exec.Run invocation with a 163,907-byte
stdin script that echoes 148,890 bytes of stdout completed cleanly
(exit=0) with the fix; reproduces the deadlock/broken-pipe without it.

Drops two scratch files (_deadlock_big_script.sh,
_deadlock_repro_test.dag) that an automated WIP commit picked up from
local verification scratch space — not intended as tracked test
fixtures.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Investigated the CI failure on 09d93d6a6: test_migration_debt_module_count_does_not_grow (batch 2 discovery-corpus).

This is unrelated to this PR's diff — it's a v2 migration-debt ratchet that counts un-migrated src/v1 #[test]-bearing .rs modules against a baseline of 77, scoped entirely under src/v2/lens/test_migration_debt.dag. This branch only touches dag/extdeps/shell/shell.dag and src/v1/stage0/src/v1_interpreter.rs (non-test code) — nothing that changes the test-migration roster.

Ran it locally against the exact same commit (09d93d6a6b):

claim_batch --source-root dag --source-root src/v2 --entry src/v2/test/claim/manual/test_migration_debt_test.dag --function test_migration_debt_module_count_does_not_grow
...
PASS test_migration_debt_module_count_does_not_grow

Clean pass. This looks like the known shared-runner infra flake pattern (adaptive-width concurrent jobs on the same host transiently observing a sibling job's mid-write filesystem state), not a real regression. Re-running the CI job should clear it — no code fix needed here.

— sent from warm-bee-432

@briansrls
briansrls merged commit afb9e14 into main Jul 16, 2026
2 checks passed
@briansrls
briansrls deleted the session/warm-bee-432 branch July 16, 2026 06:29
briansrls added a commit that referenced this pull request Jul 16, 2026
The E2BIG deploy witness needs live_deploy + shell_argv_max_arg_strlen
authorities; strip-empty replay would not resolve.

Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls added a commit that referenced this pull request Jul 16, 2026
The E2BIG deploy witness needs live_deploy + shell_argv_max_arg_strlen
authorities; strip-empty replay would not resolve.

Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls added a commit that referenced this pull request Jul 16, 2026
The E2BIG deploy witness needs live_deploy + shell_argv_max_arg_strlen
authorities; strip-empty replay would not resolve.

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jul 16, 2026
#6733's stdin-transport fix to dag/gunbc/live_deploy/emit.dag changed the
emitted apply script but never regenerated the committed golden, tripping
GeneratedArtifactDriftGate on every main push since. Regenerated via
`gunbc run ... dag/tools/generated_artifact_gate.dag --function main_wet`;
re-ran the drift gate locally against the result — ExitSuccess.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jul 16, 2026
#6745)

#6733's stdin-transport fix to dag/gunbc/live_deploy/emit.dag changed the
emitted apply script but never regenerated the committed golden, tripping
GeneratedArtifactDriftGate on every main push since. Regenerated via
`gunbc run ... dag/tools/generated_artifact_gate.dag --function main_wet`;
re-ran the drift gate locally against the result — ExitSuccess.

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jul 16, 2026
The E2BIG deploy witness needs live_deploy + shell_argv_max_arg_strlen
authorities; strip-empty replay would not resolve.

Co-authored-by: Cursor <cursoragent@cursor.com>
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