From eb23574cfbe36563639273d67fa667c39bf9d600 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Thu, 16 Jul 2026 03:54:35 +0000 Subject: [PATCH 1/3] WIP: deploy_dashboard_srv1 E2BIG on every main push: emitted deploy fold spaw --- dag/extdeps/shell/shell.dag | 5 ++- ...shell_exec_run_argv_embed_witness_test.dag | 39 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 dag/test/claim/shell_exec_run_argv_embed_witness_test.dag diff --git a/dag/extdeps/shell/shell.dag b/dag/extdeps/shell/shell.dag index ba1383e5b31..6b9d0b1ba01 100644 --- a/dag/extdeps/shell/shell.dag +++ b/dag/extdeps/shell/shell.dag @@ -204,7 +204,10 @@ service shell.Exec { stderr: String from "stderr" } - transport shell { argv: ["sh", "-c", "{script}"] } + transport shell { + argv: ["sh", "-s"] + stdin: script + } exit { 0 => Unit nonzero => String "Script failed" diff --git a/dag/test/claim/shell_exec_run_argv_embed_witness_test.dag b/dag/test/claim/shell_exec_run_argv_embed_witness_test.dag new file mode 100644 index 00000000000..8d11c0af6dd --- /dev/null +++ b/dag/test/claim/shell_exec_run_argv_embed_witness_test.dag @@ -0,0 +1,39 @@ +module test.claim.shell_exec_run_argv_embed_witness + +import std.types { Bool, String } +import std.measure { ByteSize, byte_size, byte_size_count } +import gunbc.live_deploy.emit { live_deploy_apply_script_for } +import gunbc.live_deploy.spec { deployment_spec_srv1 } +import extdeps.filesystem.filesystem_io +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } + +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree + +data shell_dag_path: String = "dag/extdeps/shell/shell.dag" + +data local_argv_embed_budget: ByteSize = byte_size(65536) + +fn src_has(path: String, needle: String) -> Bool { + let r = filesystem_read(path: path) + string_contains(s: r.content, pattern: needle) +} + +fn witness_apply_script_exceeds_local_argv_embed_budget() -> Bool { + let script_len = length(live_deploy_apply_script_for(spec: deployment_spec_srv1())) + let budget = byte_size_count(b: local_argv_embed_budget) + script_len > budget +} + +fn witness_shell_exec_run_uses_stdin_transport() -> Bool { + src_has(path: shell_dag_path, needle: "stdin: script") +} + +fn witness_shell_exec_run_argv_no_longer_embeds_script() -> Bool { + !src_has(path: shell_dag_path, needle: "argv: [\"sh\", \"-c\", \"{script}\"]") +} + +test fn shell_exec_run_argv_embed_witnesses() -> Bool { + witness_apply_script_exceeds_local_argv_embed_budget() + && witness_shell_exec_run_uses_stdin_transport() + && witness_shell_exec_run_argv_no_longer_embeds_script() +} From b7526e56267c88a331f18eed65d16c6b35d7a29f Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Thu, 16 Jul 2026 04:13:48 +0000 Subject: [PATCH 2/3] WIP: deploy_dashboard_srv1 E2BIG on every main push: emitted deploy fold spaw --- dag/test/claim/_tmp_shell_repro5_test.dag | 39 +++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 dag/test/claim/_tmp_shell_repro5_test.dag diff --git a/dag/test/claim/_tmp_shell_repro5_test.dag b/dag/test/claim/_tmp_shell_repro5_test.dag new file mode 100644 index 00000000000..f764802ea63 --- /dev/null +++ b/dag/test/claim/_tmp_shell_repro5_test.dag @@ -0,0 +1,39 @@ +module test.claim._tmp_shell_repro5 + +import std.types { Bool, String } +import std.measure { ByteSize, byte_size, byte_size_count } +import gunbc.live_deploy.emit { live_deploy_apply_script_for } +import gunbc.live_deploy.spec { deployment_spec_srv1 } +import extdeps.filesystem.filesystem_io +import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } + +data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree + +data shell_dag_path: String = "dag/extdeps/shell/shell.dag" + +data local_argv_embed_budget: ByteSize = byte_size(65536) + +fn src_has(path: String, needle: String) -> Bool { + let r = filesystem_read(path: path) + string_contains(s: r.content, pattern: needle) +} + +fn witness_apply_script_exceeds_local_argv_embed_budget() -> Bool { + let script_len = length(live_deploy_apply_script_for(spec: deployment_spec_srv1())) + let budget = byte_size_count(b: local_argv_embed_budget) + script_len > budget +} + +fn witness_shell_exec_run_uses_stdin_transport() -> Bool { + src_has(path: shell_dag_path, needle: "stdin: script") +} + +fn witness_shell_exec_run_argv_no_longer_embeds_script() -> Bool { + !src_has(path: shell_dag_path, needle: "argv: [\"sh\", \"-c\", \"{script}\"]") +} + +test fn shell_exec_run_argv_embed_witnesses() -> Bool { + witness_apply_script_exceeds_local_argv_embed_budget() + && witness_shell_exec_run_uses_stdin_transport() + && witness_shell_exec_run_argv_no_longer_embeds_script() +} From 67b49882171a400cac185bddf471d069153108b3 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Thu, 16 Jul 2026 04:18:30 +0000 Subject: [PATCH 3/3] Fix compile-clean regression in shell.Exec.Run argv-embed witness test 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 --- dag/test/claim/_tmp_shell_repro5_test.dag | 39 ------------------- ...shell_exec_run_argv_embed_witness_test.dag | 5 --- 2 files changed, 44 deletions(-) delete mode 100644 dag/test/claim/_tmp_shell_repro5_test.dag diff --git a/dag/test/claim/_tmp_shell_repro5_test.dag b/dag/test/claim/_tmp_shell_repro5_test.dag deleted file mode 100644 index f764802ea63..00000000000 --- a/dag/test/claim/_tmp_shell_repro5_test.dag +++ /dev/null @@ -1,39 +0,0 @@ -module test.claim._tmp_shell_repro5 - -import std.types { Bool, String } -import std.measure { ByteSize, byte_size, byte_size_count } -import gunbc.live_deploy.emit { live_deploy_apply_script_for } -import gunbc.live_deploy.spec { deployment_spec_srv1 } -import extdeps.filesystem.filesystem_io -import v2.std.live_tree { LiveTreeDisposition, ReadsLiveTree } - -data live_tree_disposition: LiveTreeDisposition = ReadsLiveTree - -data shell_dag_path: String = "dag/extdeps/shell/shell.dag" - -data local_argv_embed_budget: ByteSize = byte_size(65536) - -fn src_has(path: String, needle: String) -> Bool { - let r = filesystem_read(path: path) - string_contains(s: r.content, pattern: needle) -} - -fn witness_apply_script_exceeds_local_argv_embed_budget() -> Bool { - let script_len = length(live_deploy_apply_script_for(spec: deployment_spec_srv1())) - let budget = byte_size_count(b: local_argv_embed_budget) - script_len > budget -} - -fn witness_shell_exec_run_uses_stdin_transport() -> Bool { - src_has(path: shell_dag_path, needle: "stdin: script") -} - -fn witness_shell_exec_run_argv_no_longer_embeds_script() -> Bool { - !src_has(path: shell_dag_path, needle: "argv: [\"sh\", \"-c\", \"{script}\"]") -} - -test fn shell_exec_run_argv_embed_witnesses() -> Bool { - witness_apply_script_exceeds_local_argv_embed_budget() - && witness_shell_exec_run_uses_stdin_transport() - && witness_shell_exec_run_argv_no_longer_embeds_script() -} diff --git a/dag/test/claim/shell_exec_run_argv_embed_witness_test.dag b/dag/test/claim/shell_exec_run_argv_embed_witness_test.dag index 8d11c0af6dd..9b85ff4dc19 100644 --- a/dag/test/claim/shell_exec_run_argv_embed_witness_test.dag +++ b/dag/test/claim/shell_exec_run_argv_embed_witness_test.dag @@ -28,12 +28,7 @@ fn witness_shell_exec_run_uses_stdin_transport() -> Bool { src_has(path: shell_dag_path, needle: "stdin: script") } -fn witness_shell_exec_run_argv_no_longer_embeds_script() -> Bool { - !src_has(path: shell_dag_path, needle: "argv: [\"sh\", \"-c\", \"{script}\"]") -} - test fn shell_exec_run_argv_embed_witnesses() -> Bool { witness_apply_script_exceeds_local_argv_embed_budget() && witness_shell_exec_run_uses_stdin_transport() - && witness_shell_exec_run_argv_no_longer_embeds_script() }