Skip to content

Plan per-attempt steps 3-9, including the jailer command the authorized arm emits - #10927

Merged
briansrls merged 14 commits into
mainfrom
session/cool-wolf-258
Sep 10, 2026
Merged

briansrls merged 14 commits into
mainfrom
session/cool-wolf-258

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Sep 10, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Plan per-attempt host-boot steps 3–9 as shadow Y in gunbc.runner_attempt_launch. Only LaunchAuthorized carries a jailer argv, and no arm executes one (planned_jailer_launches counts a plan variant). Existing homes (runner_slot_network, nft, slice, workspace path, kvm, firecracker_jailer_run_command, busybox_dd_sparse_image_command) are bound into that plan, not reimplemented. VMM exit 0 is modeled as WorkNotEstablished, not as work evidence.
  • This is the DESIGN §3 staged carve-out, not a cutover. A powered-off host you cannot exec on is the gap-intolerant boundary. Y is a planner in shadow; one later transition switches the root and deletes X together.

Four conditions (in the corpus, not only this body)

The transition trigger is host_boot_cutover_frontier in gunbc.runner_attempt_launch, an unbound DissolutionCondition. It is not only this paragraph.

  1. Transition trigger — host_boot_cutover_frontier is unbound. The capability that fires the cut is: Y execs at host boot and the host image is built from Y, so recovered initramfs/init has zero production consumers. Not satisfied by this planner compiling, a gunbc binary in a checkout, or Y sitting beside X.
  2. No production consumer of Y until the cut — no production module imports plan_attempt_launch. That is an import-graph fact, not a false constant in the planner. No dual dispatch, no "use Y when available", no fallback to X.
  3. Displacement is not done. Reported rung is the minimum across in-scope paths (reported_attempt_launch_rung = Mitigatable). Planner-witness REDs exist; the host-boot jailer-exec path has not executed (mtcollins1 off; placeability still access-refused). Recovered/'s dissolution is not satisfied by Y beside X; that is the still-unbound host_boot_cutover_frontier, not a second false Bool.
  4. Plan-level refusal arms vs X. The planner encodes these as AttemptLaunchPlan refusals (a plan with no jailer command): grant disagreement; prior resources; presented envelope standing (absent, malformed, signature reject, unit/boot/nonce/attempt binding, payload digest, floor, ceiling); unresolved VM config. Not yet represented (cutover will be judged against this list): live signature verification and fetch (mint is the Give GitHubEffect a REST performer whose shape is hermetically verdicted #10923 frontier; standing is presented); nft install/readback refusal; mkfs failure; live bidirectional cgroup placement census; PID1 refusals (no boot secret, stage2 missing files) — those have no constructor on this plan.

Mint HTTP is still a declared frontier. Trigger is gunbc#10923 merging gunbc.github_effect_perform (not an unmerged compile dependency, not "a performer someday").

Test plan

  • CI required witnesses / clippy
  • runner_attempt_launch_witness_test: empty/short credential, unauthorized grant, prior resources, authorized plan carries network/slice/workspace/jailer argv, VMM exit 0 is WorkNotEstablished, reported rung Mitigatable, cutover/mint frontiers UnboundDissolution, every presented envelope refusal arm
  • every_guest_path_is_scoped_to_its_own_attempt still greens with workspace path under the attempt dir

Made with Cursor

@gunbai-bot

gunbai-bot Bot commented Sep 10, 2026

Copy link
Copy Markdown
Contributor Author

Addressed review 38602 / dashboard artifact /api/reviews/63060/artifacts/stdout.log on a326ba31ab7.

The credential_bytes: Int parameters those line numbers named are gone (envelope standing replaced them), but the defect was still live: jit_config_byte_floor / jit_config_byte_ceiling and EnvelopeStanding magnitudes were bare Int. They are now std.measure ByteSize, compared with measure_le. Witnesses construct sizes with byte_size.

money_generation: Int stays Int — it is the money-lease fence already typed that way at grant_authorizes_reservation / MoneyLease.generation, not a measured money quantity.

— sent from cool-wolf-258

@gunbai-bot

gunbai-bot Bot commented Sep 10, 2026

Copy link
Copy Markdown
Contributor Author

Addressed dashboard review artifact /api/reviews/63070/artifacts/stdout.log on 89fa43e6d36.

  • money_generation: Int — agreed, not a unit defect; left as the lease-fence counter already typed at grant_authorizes_reservation.
  • mke2fs_format_command no longer sits under populate's // block. Populate's size/m-suffix annotation is immediately above mke2fs_populate_command again; format has its own leading block (no magnitude, no m suffix).
  • Workspace create is now in the plan: busybox_dd_sparse_image_command (sparse 4 GiB, count=0/seek as Mebibyte) then mke2fs_format_command. Format-only cannot produce the image X produces.

— sent from cool-wolf-258

@gunbai-bot

gunbai-bot Bot commented Sep 10, 2026

Copy link
Copy Markdown
Contributor Author

Addressed dashboard review artifact /api/reviews/63080/artifacts/stdout.log on ec87aa8237d.

  • Dropped placement_is_cgroup_join_then_exec and LaunchAuthorized.placement. Authorized means the supervisor join-then-exec path; PlacementNotEstablished is no longer writable on a counted jailer launch.
  • Deleted vmm_exit_establishes_work (always false on a one-arm type). The witness matches WorkNotEstablished for exit 0 and 1.
  • Deleted host_pid1_refusal_is_outside_this_planner and its type. PID1 refusals have no AttemptLaunchPlan constructor.

— sent from cool-wolf-258

@gunbai-bot gunbai-bot Bot changed the title Model per-attempt steps 3-9 including the jailer exec Plan per-attempt steps 3-9, including the jailer command the authorized arm emits Sep 10, 2026
@gunbai-bot

gunbai-bot Bot commented Sep 10, 2026

Copy link
Copy Markdown
Contributor Author

Addressed dashboard review artifact /api/reviews/63094/artifacts/stdout.log on 4bfdb051946.

Deleted production_may_dispatch_attempt_launch, recovered_host_image_source_dissolution_satisfied, and jailer_cgroup_version_flag_places_the_process, plus the !f() witnesses. Shadow is an import-graph fact; recovered standing is the unbound host_boot_cutover_frontier; the cgroup-version flag is the annotated firecracker_jailer_cgroup_version_2 row, not a Bool.

Frontier witnesses now match UnboundDissolution vs BoundDissolution (binding early reds). Dropped string_contains over the description strings.

Kept reported_attempt_launch_rung matching Mitigatable: inflating attempt_launch_host_boot_exec_rung to MechanicallyPreventable changes the min and that witness reds.

— sent from cool-wolf-258

@gunbai-bot

gunbai-bot Bot commented Sep 10, 2026

Copy link
Copy Markdown
Contributor Author

Not changing money_generation: Int (dashboard review artifact /api/reviews/63102/artifacts/stdout.log).

This is not a measured money quantity. It is the lease-fence generation counter already typed Int at MoneyLease.generation (product.fabric.budget) and grant_authorizes_reservation(money_generation: Int). This planner passes that value through verbatim. Wrapping it as MoneyMicros / Measure would mint a second meaning for a generation, which is the §3 fork the unit rule exists to prevent — the same row was already refuted on /api/reviews/63070/artifacts/stdout.log.

— sent from cool-wolf-258

Brian Searls and others added 10 commits September 10, 2026 13:59
…al cannot reach the jailer.

The host boot script's jailer exec had no authority; this ordered planner consumes the existing network and attempt modules, mints only after grant_authorizes_reservation, and treats a clean VMM exit as non-evidence that work ran.

Co-authored-by: Cursor <cursoragent@cursor.com>
…hecks.

A one-arm `type X = Variant` was an alias to an unresolved name, which refused the floor with a cascade into FreeMonoid.

Co-authored-by: Cursor <cursoragent@cursor.com>
… no production dispatch, honest mitigatable rung, and every X envelope refusal.

Shadow Y stays beside recovered init until Y execs at host boot and the image is built from it; mint remains a #10923 frontier, not a performer.

Co-authored-by: Cursor <cursoragent@cursor.com>
Floor, ceiling, EnvelopeStanding magnitudes, and the admit comparison now use std.measure so credential size is not a second unit.

Co-authored-by: Cursor <cursoragent@cursor.com>
… workspace before formatting it.

Leading // now attaches to the declaration it describes. The planner emits busybox dd (sparse 4 GiB) then mke2fs, matching X's two-step workspace rather than format-only.

Co-authored-by: Cursor <cursoragent@cursor.com>
…Bool wrappers.

LaunchAuthorized no longer carries PlacementNotEstablished. VMM standing is only WorkNotEstablished, matched at the witness. PID1 refusals stay outside the plan by having no constructor.

Co-authored-by: Cursor <cursoragent@cursor.com>
…g, not consumption.

The witness inspects a plan; it does not run a jailer.

Co-authored-by: Cursor <cursoragent@cursor.com>
…diting them.

Shadow standing, recovered dissolution, and the jailer cgroup-version flag are import-graph and annotation facts. The remaining frontier witness matches UnboundDissolution versus BoundDissolution.

Co-authored-by: Cursor <cursoragent@cursor.com>
`type WorkStandingFromVmm = WorkNotEstablished { ... }` was the same coproduct-as-alias defect that made GrantCommitted unresolvable against FreeMonoid.

Co-authored-by: Cursor <cursoragent@cursor.com>
…oad as over-ceiling.

credential_bytes_admit is three conjuncts; reconstructing the cause from size alone fabricated EnvelopePayloadAboveCeiling when the axis standing was not AxisRequired.

Co-authored-by: Cursor <cursoragent@cursor.com>
@gunbai-bot
gunbai-bot Bot force-pushed the session/cool-wolf-258 branch from 4c575e2 to 22c7a54 Compare September 10, 2026 14:00
@gunbai-bot

gunbai-bot Bot commented Sep 10, 2026

Copy link
Copy Markdown
Contributor Author

Rebased onto main (dropped the MegaRac comment hoist; that landed as #10932).

On dashboard review artifact /api/reviews/63117/artifacts/stdout.log: money_generation: Int stays the lease-fence ordinal. The fabricated over-ceiling arm is fixed — an in-bounds payload refused because envelope_floor_is_required() is false is now EnvelopeAdmissionAxisNotRequired, not EnvelopePayloadAboveCeiling.

— sent from cool-wolf-258

…-jail drives.

Create and format work.img under the jailer chroot root, copy kernel and rootfs there, and make the witness check dd of= against the workspace drive's path_on_host. JIT device write stays an unbound frontier until the mint lands.

Co-authored-by: Cursor <cursoragent@cursor.com>
@gunbai-bot

gunbai-bot Bot commented Sep 10, 2026

Copy link
Copy Markdown
Contributor Author

Addressed review 63144 (/api/reviews/63144/artifacts/stdout.log).

The authorized arm now creates the jailer chroot root, copies kernel and rootfs into it, and creates/formats work.img at <chroot-root>/work.img while the VM config still attaches /work.img (in-jail). firecracker_jailer_chroot_root is the host path the stock jailer pivots into. JIT /jit.bin contents stay jail_jit_device_staging_frontier until #10923 supplies the minted blob.

The witness now checks dd's of= against workspace_path and that the work drive's path_on_host is jail_workspace_path. Guest machine size is a caller-supplied RunnerMicroVmSize so this planner does not inherit gunbc_runner_microvm_vm_config's Absolute-entitlement refusal (that class already has its own stall). issue() is matched as a list of GrantIssue rows, which is what the fixture actually returns.

— sent from cool-wolf-258

Brian Searls and others added 2 commits September 10, 2026 17:06
…kname.

The authorized planner already places work.img under the jailer chroot; a second attempt-root work.img function was a second answer to the same question. Isolation stays on the attempt-owned jail base.

Co-authored-by: Cursor <cursoragent@cursor.com>
@gunbai-bot

gunbai-bot Bot commented Sep 10, 2026

Copy link
Copy Markdown
Contributor Author

Addressed review 63170 (/api/reviews/63170/artifacts/stdout.log).

  • Dropped firecracker_release_jailer_path_in_tarball. It had no execution consumer. Installing jailer from the tarball belongs in gunbc.runner_microvm_host_ready when that module copies the jailer the way it already copies Firecracker; this planner takes jailer_binary as a parameter and must not grow a second install path.
  • Deleted runner_microvm_attempt_workspace_path (<attempt_dir>/work.img). The authorized plan's host file is <jailer-chroot-root>/work.img. Isolation is now asserted on runner_microvm_attempt_jail_base, which is the attempt-owned tree that chroot actually uses.
  • Agreed on money_generation: Int: lease-fence generation, not a money magnitude.

— sent from cool-wolf-258

An empty issued_pairs arm returning true would green the floor RED without exercising EnvelopePayloadBelowFloor.

Co-authored-by: Cursor <cursoragent@cursor.com>
@gunbai-bot

gunbai-bot Bot commented Sep 10, 2026

Copy link
Copy Markdown
Contributor Author

Addressed review 63181 (/api/reviews/63181/artifacts/stdout.log).

a_zero_byte_credential_does_not_start_the_vmm now uses Empty {} => false on issued_pairs(), same as the sibling arms. Agreed that money_generation: Int is the lease fence epoch, not a money measure.

— sent from cool-wolf-258

@briansrls
briansrls merged commit eab0337 into main Sep 10, 2026
4 checks passed
@briansrls
briansrls deleted the session/cool-wolf-258 branch September 10, 2026 18:39
@briansrls
briansrls restored the session/cool-wolf-258 branch September 10, 2026 18:40
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