Skip to content

Fixes found bringing up the srv1 lab: sudoers install regression, ALL grant, subshell truncation, host-keyed Claude offer, placement-record type - #13720

Merged
gunbai-bot[bot] merged 7 commits into
mainfrom
bright-moth-475/lab-fixes
Oct 11, 2026
Merged

gunbai-bot[bot] merged 7 commits into
mainfrom
bright-moth-475/lab-fixes

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Oct 11, 2026

Copy link
Copy Markdown
Contributor

These five fixes were made and run live on the srv1 lab (branch bright-moth-475/lab-dev) on 2026-10-10/11. Each is cherry-picked onto main with -x. The first one repairs a regression main has right now.

1. #13705 poisoned the sudoers install (main is broken for every deploy)

2. A (ALL) NOPASSWD: ALL grant read as holding no roster command

  • An operator-local deploy (briansrls) refused every grant-list probe right after installing the drop-in. The 2026-10-09 bringup ran as ghrunner for the same reason.
  • The typed reading (sudo_nopasswd_grant_list_line_admits_probe) and its shell twin now admit an ALL line whose run-as is (ALL), (ALL : ALL) or (root). Any other run-as still grants nothing as root.

3. bash_build_subshell given an or-else body dropped the right operand

  • The probe's ( A || B ) rendered as ( A ). The builder now constructs the subshell from a statement list (bash_build_subshell_from_stmts).
  • Not fixed here: the shared reader (bash_fold_flatten_stmt_list) still silently drops children of a malformed body. That's tracked in the convergence-coverage program (cause B), not papered over here.

4. The Claude offer belonged to one instance id, not the host

  • An executor=claude dispatch on the srv1 lab refused ("no provider offer matches the requested selection shape"), although the lab shares srv1's provider state and Claude credential.
  • declared_provider_inventory_for_instance now keys the offer on host_identity.
  • The annotation sits at module grain. A copy inside the fn body is a blocking error, and it took the lab server down once.

5. Every harness spawn crashed with split expects a string, got Record

  • Since extdeps.systemd.systemd_run: typed options, one projection, ArgvCommand everywhere #13257 (2026-10-07), belt_session_container_create passed List<SystemdRunProperty> to session_placement_record_write(unit_properties: List<String>).
  • The assignment Name=value is now spelled once (extdeps.systemd.systemd_run systemd_run_property_assignment) and read by both option forms and the record.
  • The typechecker admitted the mismatch. That's the compiler-floor finding, tracked separately (product_value_at_a_scalar_formal_is_accepted), not fixed here.

Evidence

  • On srv1 at this head: deploy_mutation_gate_witness 13/13, live_deploy/emit 84/84.
  • Live on the lab (lab-dev): sudoers install and roster probe pass operator-locally; harness dispatch spawns and runs against the GPU-pod backend.
  • Typecheck of roadmap_serve / roadmap_belt_tick_cli at this head: results to follow as a comment.
  • Findings ledger: https://claude.ai/artifact/7AMGHuyVXu1U7bFXDnbG1M (private to the operator).

🤖 Generated with Claude Code

gunbc-ci-auto-heal and others added 7 commits October 11, 2026 04:29
…ht operand poisoned the sudoers install

#13705 replaced grep -Fqx with grep -Fx >/dev/null. The bash serializer
refuses a redirect on a pipeline's right operand, so deploy_sudoers_install_shell
emitted its refusal marker and every deploy stopped there (srv1 lab apply,
2026-10-10). deploy_mutation_gate_witness and live_deploy/emit each went red
on it. grep -Fx without -q still reads its whole input, so the SIGPIPE fix holds.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit a721201)
…command

An operator principal whose sudoers entry is (ALL) NOPASSWD: ALL read as holding
no roster command, so the operator-local deploy refused every grant-list probe
right after installing the drop-in (srv1 lab apply, 2026-10-10). The typed
reading and its shell twin now admit an ALL line whose run-as is (ALL),
(ALL : ALL) or (root); any other run-as still grants nothing as root.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 49a4a61)
…-else body rendered only its left operand)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 9de9ff7)
…rv1 lab offers it too

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 405e441)
…ts Name=value assignment

session_placement_record_write declares unit_properties: List<String>, but the
spawn has passed List<SystemdRunProperty> since the typed systemd-run options
landed (#13257), so every harness spawn died with 'split expects a string, got
Record' after writing its request binding and before starting its unit. The
assignment is now spelled once (extdeps.systemd.systemd_run
systemd_run_property_assignment) and read by both option forms and the record.
The typechecker admitted the List<SystemdRunProperty> -> List<String> argument.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
(cherry picked from commit dfa390a)
…(a source annotation inside a fn body is a blocking error)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… typed row (review 78587); witness it

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Oct 11, 2026

Copy link
Copy Markdown
Contributor Author

Executed on srv1 at c54baa2 (built in its own checkout):

At b740571, roadmap_serve.dag and roadmap_belt_tick_cli.dag typecheck with 0 blocking errors.

Live: srv1's gunbc-ghrunner drop-in, reinstalled from main 982222d, admits the tailscale grant under this probe as ghrunner (pipeline exit 0).

— sent from bright-moth-475

@gunbai-bot
gunbai-bot Bot merged commit 83010d3 into main Oct 11, 2026
1 check passed
@gunbai-bot
gunbai-bot Bot deleted the bright-moth-475/lab-fixes branch October 11, 2026 15:28
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.

0 participants