From 07f63b8a658976025ae15a747f3486fd3de67f72 Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Thu, 25 Jun 2026 16:43:14 +0000 Subject: [PATCH 1/2] WIP: ShellProgram -> DAG --- dsl/extdeps/git/git.dag | 14 ++++++++++++++ dsl/gunbc/tools/roadmap_spawn_request.dag | 6 +++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/dsl/extdeps/git/git.dag b/dsl/extdeps/git/git.dag index 2521ada4eb6..f195c4e78e4 100644 --- a/dsl/extdeps/git/git.dag +++ b/dsl/extdeps/git/git.dag @@ -77,6 +77,20 @@ service git.Core { } } + operation HeadCommit { + input {} + output { + sha: CommitSha from "stdout" + success: Bool from "exit_success" + } + readonly + transport shell { argv: ["git", "rev-parse", "HEAD"] } + exit { + 0 => Unit + 128 => String "Not a git repository" + } + } + operation RemoteBranches { input {} output { branches: List from "stdout_lines" } diff --git a/dsl/gunbc/tools/roadmap_spawn_request.dag b/dsl/gunbc/tools/roadmap_spawn_request.dag index 58f5ce4354c..2bd18b7c0f7 100644 --- a/dsl/gunbc/tools/roadmap_spawn_request.dag +++ b/dsl/gunbc/tools/roadmap_spawn_request.dag @@ -1,13 +1,13 @@ module gunbc.tools.roadmap_spawn_request -import extdeps.shell +import extdeps.git import gunbc.roadmap_spawner { roadmap_spawn_request_json } import gunbc.roadmap_authority { roadmap_authority, authored_merged_prs } func roadmap_next_spawnable() -> String { - let sha_result = shell.Exec.Run(script: "git rev-parse HEAD 2>/dev/null | tr -d '\\n'") + let sha_result = git.Core.HeadCommit() if sha_result.success { - roadmap_spawn_request_json(doc: roadmap_authority(), merged: authored_merged_prs(), anchor_commit: sha_result.stdout) + roadmap_spawn_request_json(doc: roadmap_authority(), merged: authored_merged_prs(), anchor_commit: sha_result.sha) } else { "{\"schema\": \"roadmap-spawn-request/v1\", \"error\": \"anchor_commit unavailable: git rev-parse HEAD failed\", \"ready\": []}" } From 759819621a79ef8c4ec271a40a0c4ef129f0021e Mon Sep 17 00:00:00 2001 From: Brian Searls Date: Thu, 25 Jun 2026 21:48:58 +0000 Subject: [PATCH 2/2] De-roster roadmap_spawn_request: #5822 dissolves the leak, supersedes #5821's roster entry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #5821 took the fast roster path (added dsl/gunbc/tools/roadmap_spawn_request.dag to medium_structure_exception_roster), which MASKS the lens and grows the frozen roster rather than removing the ShellInRun leak. This PR dissolves the leak at its source (git rev-parse HEAD 2>/dev/null -> git.Core.HeadCommit extdeps op), so the roster entry is now inert cruft pointing at a file that no longer leaks. Delete it. Verified by execution (claim_batch, both source-roots): - medium_structure_clean_tree_holds PASS with roster entry removed (pass is via the dissolve, not the roster — nothing left to mask) - git mock totality (git_mock_consumer_is_total_holds / _omitted_member_is_red_holds) PASS with HeadCommit added (no corpus red) Co-Authored-By: Claude Opus 4.8 (1M context) --- src/v2/lens/medium_structure_containment.dag | 1 - 1 file changed, 1 deletion(-) diff --git a/src/v2/lens/medium_structure_containment.dag b/src/v2/lens/medium_structure_containment.dag index 26026a5d1ad..e644a342f39 100644 --- a/src/v2/lens/medium_structure_containment.dag +++ b/src/v2/lens/medium_structure_containment.dag @@ -137,7 +137,6 @@ data medium_structure_exception_roster: List = [ "dsl/tools/emit_host_transport.dag", "dsl/gunbc/assimilate/bmc_token_federation.dag", "dsl/gunbc/tools/review.dag", - "dsl/gunbc/tools/roadmap_spawn_request.dag", "dsl/test/claim/fleet_converge_emit_test.dag", "dsl/test/claim/srv3_os_install_emit_test.dag",