Skip to content

Host-effect interface Phase A: mint apply(target,effect,policy) -> Reconciliation over the HostEffect coproduct per docs/plans/host-effect-orchestration.md (MERGED spec). Model-only + ShellCommand arm REALIZED green-by-execution + RedfishAction arm fail-closed Unimplemented stub. Co-mint with neat-b - #5756

Merged
briansrls merged 4 commits into
mainfrom
session/lively-stag-276
Jun 24, 2026

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Jun 24, 2026 •

Copy link
Copy Markdown
Contributor

Host-effect interface Phase A: mint apply(target, effect, policy) -> Reconciliation

Mints the one host-operation interface (docs/plans/host-effect-orchestration.md, MERGED spec) as new .dag. Phase A only — model-before-implement; no B/C/D/E/F.

What lands

gunbc.host_effect (agnostic interface — only the shapes):

  • HostEffect = ShellCommand { script } | RedfishAction { action } — a COPRODUCT of effect-kinds (a Redfish op is a typed action, not bash).
  • NodeControlPlane = HostOs { node } | BmcController { node } — target-duality: a logical node has two control planes (in-band OS shell/systemd, out-of-band BMC Redfish). apply targets a control plane, not a host address; the target supplies the WHERE (resolved over fleet_intent), the effect is pure intent.
  • Policy = OneShotIdempotent | ConvergeToFixpoint; HostEffectIntent (provenance); HostEffectEvidence.
  • Return REUSES std.realization_reconcile.Reconciliation<A,E> — NO second receipt grammar (DESIGN §3 single-authority).

gunbc.host_effect_realize (dispatch + realization — peripheral to the interface, DESIGN §3):

  • resolve_host_effect_cell = the single total dispatch fold over (control-plane × effect-kind), no _ => arm → an incompatible combo (RedfishAction@HostOs, ShellCommand@BmcController) is a typed IncompatibleCell refusal, unwritable-bad-state not a silent no-op (DESIGN §5).
  • ShellCommand@HostOs REALIZED over LocalShell (extdeps.shell.shell.Exec.Run), grounded inline from the observed exit (nonzero exit → DoesNotGround → NotConverged; a failing read can never fabricate Converged).
  • RedfishAction@BmcController = fail-closed Unimplemented NotConverged stub — never a fake success on a power/boot action (the exact §5 trap). neat-boar-71 realizes it over RedfishRest in Phase C.
  • host_effect_policy_directive: Converged → Settled; incompatible refusal → Refused (terminal regardless of policy — a mismatch never converges, so ConvergeToFixpoint can't re-drive it forever); compatible NotConverged → ReDrive (Converge) / Settled (OneShot). This is the seam neat-boar's Phase-C poll-loop composes on.

extdeps.bmc.types: RedfishSystemAction arm TYPE (4 variants, FINAL-pinned with neat-boar: SetBootSourceOverride / ResetSystem / SetAccountPassword{new_password: Secret} / GetSystem), reusing the existing boot/reset enums + std Secret; no host/system_id/creds fields (the WHERE is the BmcController target, keeping the action transport-agnostic).

Execution evidence (not grep)

  • host_effect_apply_holds green by execution — 9 sub-witnesses over all four cells (real sh -c true / sh -c "exit 1") + the policy directive.
  • Discriminating RED control proven: flipping the fail-closed assertion (expect a failing shell to converge) flips the witness RED (FAIL). The green is earned.
  • Compile-clean gate (gunbc compile --target rust, whole corpus): 597 files, 0 diagnostics.

Review notes

  • Layer (smart-newt): homed in gunbc.* (the application layer above the product domain models, imports point toward std), not literally product/. Confirmed correct.
  • NodeControlPlane.node : ComputeHost (neat-boar point . #3): confirmed the right carrier — ComputeHost binds BmcEndpoint per node via baseboard.bmc (and HostIdentity via identity), so Phase-C BmcController(node) resolves bmc_host + creds over fleet_intent without an interface refactor. Settled in A, verified by neat-boar.
  • ShellCommand.script : String (claude-opus-4-7, non-blocking 🟡): a Phase-A scaffold — the in-band arm carries a raw bash string for the same reason there's no shell-action grammar yet (symmetric to RedfishAction being typed). Dissolves onto a future shell-action AST authority when one exists; tracked here rather than as an inert marker.
  • Three prose _doc: String constants were removed (zero-consumer; the corpus-wide prose-in-data retirement). Rationale lives in this description + commit history. Typed refusal strings inside the IncompatibleCell / NotConverged arms stay — those are located diagnostics, not docs.

briansrls and others added 2 commits June 24, 2026 20:33
…conciliation over the HostEffect coproduct

Mints the one host-operation interface (docs/plans/host-effect-orchestration.md,
MERGED spec) as new .dag — Phase A only, model-before-implement:

- gunbc.host_effect (agnostic interface): HostEffect = ShellCommand{script} |
  RedfishAction{action} coproduct; NodeControlPlane = HostOs(node) | BmcController(node)
  (target-duality, the target supplies the WHERE over fleet_intent, the effect is pure
  intent); Policy = OneShotIdempotent | ConvergeToFixpoint; HostEffectIntent provenance;
  HostEffectEvidence. Reuses std.realization_reconcile.Reconciliation as the return — NO
  second receipt grammar (DESIGN §3 single-authority).
- gunbc.host_effect_realize (dispatch + realization, peripheral per DESIGN §3):
  resolve_host_effect_cell is the single total dispatch fold over (control-plane ×
  effect-kind) — no `_ =>` arm, so an incompatible combo (RedfishAction@HostOs,
  ShellCommand@BmcController) is a typed mismatch, not a silent no-op (DESIGN §5).
  ShellCommand@HostOs REALIZED over LocalShell (extdeps.shell.shell.Exec.Run), grounded
  inline from the observed exit (a nonzero exit grounds DoesNotGround → NotConverged, no
  fabricated convergence). RedfishAction@BmcController is a fail-closed Unimplemented stub
  (typed NotConverged, never a fake success on a power/boot action) — neat-boar-71 realizes
  it over RedfishRest in Phase C. host_effect_policy_directive bakes the policy contract:
  incompatible → Refused (terminal); compatible NotConverged → ReDrive under
  ConvergeToFixpoint, Settled under OneShotIdempotent (the seam Phase-C poll-loop composes).
- extdeps.bmc.types: RedfishSystemAction arm TYPE (4 variants, FINAL-pinned with neat-boar),
  reusing the existing boot/reset enums + std Secret; no host/system_id/creds fields (the
  WHERE is the BmcController target, keeping the action transport-agnostic).
- Witness host_effect_apply_witness_test: GREEN BY EXECUTION (real sh execs) over all four
  cells + the policy directive; discriminating RED control proven (flipping the fail-closed
  assertion to expect a failing shell to converge flips the witness RED).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review June 24, 2026 20:42
briansrls and others added 2 commits June 24, 2026 20:53
…-consumer, per the corpus-wide retirement)

Co-owner review (neat-boar-71) APPROVED the architecture (all 4 co-owned points
verified byte-for-byte) with one must-fix: redfish_system_action_doc,
host_effect_interface_doc, and host_effect_realize_doc are zero-consumer prose-in-String
constants — the exact pattern the operator is retiring corpus-wide this hour (the
"delete zero-consumer prose strings" gate). The design rationale moves to the PR
description + commit history. The strings INSIDE the IncompatibleCell / NotConverged
arms stay — those are typed refusal payloads (located diagnostics), not docs.

Removed std.types.String from extdeps/bmc/types.dag's import (the doc was its only user;
Secret remains for RedfishSystemAction.SetAccountPassword). Re-verified: compile-clean
gate 597 files / 0 diagnostics; witness host_effect_apply_holds green by execution.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jun 24, 2026
…sition debt mark

#5739 went RED on realization_vocab_clean_tree_holds: the bash-AST rework
imported extdeps.languages.bash.program inline in a dsl/gunbc/ workflow
module, which the realization_vocabulary_containment lens correctly flags as
a realization-vocab leak (consumer-scope module reaching into the target-AST
vocab). Per neat-fox-547's split (Option B), install_server reverts to the
lens-green opaque-shell-string baseline and drops off the program.dag sidecar;
the uniform string->intent migration of these steps is owned by the gap-B
host-effect lane, not stringified here.

Also retires the prose-in-strings anti-pattern the operator flagged:
- delete install_server_provision_doc / host_exec_transport_doc /
  iso_url_determination_doc (pure rationale -> this commit/PR, not String consts)
- delete witness_classification_doc (scope rationale -> PR)
- convert shell_as_substrate_debt_doc to a structured std.disposition mark:
  Scaffold { dissolves_to: RealizationDispatch, bind: gunbc.host_effect.HostEffect }
  matching the bmc_onboard.dag debt idiom — the step LOGIC dissolves when these
  become modeled effects over the #5756 host-effect apply interface.

Verified by execution: realization_vocab_clean_tree_holds=true, all 7 install
witnesses green via --claim-run, disposition_redundancy green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jun 24, 2026
…dissolution trigger in Phase B

Phase A minted gunbc.host_effect + host_effect_realize (#5756). The
ShellCommand{script:String} raw-string scaffold's named dissolution
trigger now lives on the lane-authority carrier (Phase B): it dissolves
jointly with host_exec's script strings onto the bash AST, symmetric to
RedfishAction being typed — not left as PR-body prose.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Jun 24, 2026

Copy link
Copy Markdown
Contributor Author

Re: claude-opus-4-7's non-blocking nit — host_effect_policy_directive re-running resolve_host_effect_cell to recover the Refused branch.

This is a pure re-derivation from the single authority, not a stored parallel representation. HostEffectIntent (carried in Reconciliation.applied) is the one source of (target, effect); resolve_host_effect_cell is a deterministic total fold over it, so re-running it recomputes the cell from that single authority rather than reading a second copy. The alternative — encoding 'this NotConverged is a terminal mismatch vs a retryable drift' into the NotConverged.reason String and parsing it back out — would be the actual stringly §3 fork. Keeping the discriminant as a re-fold over the typed intent is the more §3-correct choice, and (as the reviewer notes) it's internal to one file. Leaving as-is; thanks for the careful read.

— sent from lively-stag-276

@briansrls
briansrls merged commit a9f3d4d into main Jun 24, 2026
1 of 2 checks passed
@briansrls
briansrls deleted the session/lively-stag-276 branch June 24, 2026 21:30
briansrls added a commit that referenced this pull request Jun 24, 2026
briansrls added a commit that referenced this pull request Jun 24, 2026
…lution trigger (#5759)

* WIP: dag managed infra

* WIP: dag managed infra

* Host-effect orchestration note: fold in target-duality + HostEffect coproduct + async Receipt (neat-boar srv3 BMC evidence)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Host-effect note: bootstrap chain mechanism-agnostic (VirtualMedia or PXE); srv3 OpenBMC ground-truth

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* WIP: dag managed infra

* WIP: dag managed infra

* Resolve add/add conflict in host-effect-orchestration.md (keep Phase A LANDED + Phase B dissolution)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Brian Searls <briansrls@gunb.ai>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jun 25, 2026
…p was BACKWARDS (shipped false status)

My prior "drift fix" was the wrong direction and un-landed correct status (§5
ships-false-status trap). Ground truth (parent neat-boar-71 verified by reading
both files on origin/main):
  - the committed .md said Phase A "[LANDED #5756]" = CORRECT
  - the .dag authority (host_effect_orchestration.dag) says "[now, parallel]" = STALE
    (the authority itself was regressed, likely by #5764 grounding a pre-landed draft).
main_wet regenerated the .md FROM the stale .dag, propagating the regression INTO the
.md and reverting the accurate "[LANDED #5756]" back to "[now, parallel]".

My differential control (committed == origin/main) only proved the drift was not
introduced by this PR's 4 model files — it did NOT establish which side was correct.
I wrongly assumed authority==truth; here the authority was the stale side.

Fix: restore docs/plans/host-effect-orchestration.md to origin/main (the LANDED
version). KEEP ROADMAP.md + roadmap_authority.dag (the srv3 orphan-doc pointer — legit
BMC scope). Do NOT touch the .dag or re-run main_wet — the drift ROOT (stale .dag) is
the host-effect lane's to fix in a separate focused PR.

EXPECTED: generated_artifact_drift_gate stays RED on #5773 until the host-effect lane's
.dag fix lands on main; that is correct, not a regression to chase. Rebase on main after
their fix merges.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jun 25, 2026
My regeneration via main_wet reverted the plan doc from LANDED [#5756]
to [now, parallel] — wrong direction. The .dag Plan authority needs to be
updated (not the committed .md) to fix the drift, and that belongs to the
host-effect lane (neat-boar/fierce-carp). Restoring the correct LANDED state.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
gunbai-bot Bot pushed a commit that referenced this pull request Jun 25, 2026
main_wet regenerates host-effect-orchestration.md from its .dag Plan
authority, which still emits the pre-#5756 '[now, parallel]' text; that
stale regen leaked into this PR and rewound Phase A's LANDED marker.
This PR is roadmap citations only — restore origin/main's doc verbatim.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jun 25, 2026
…rity (drift fix)

The committed .md carried a stale pre-grounding version ('LANDED #5756'
Phase A/B text) that predated #5764's grounding of the plan into its
gunbc.plans authority. Regenerated via main_wet so the projection matches
the single-authority output (identical to origin/main); fixes the
generated_artifact_drift_gate red. No 3-file scope content touched.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls pushed a commit that referenced this pull request Jun 25, 2026
… truth (regressed by #5764) (#5790)

The .dag authority had a stale pre-landed draft ([now, parallel]); the committed .md was correct ([LANDED #5756]). Restores the .dag li(text) to the landed prose so projection(.dag) == committed .md and the main-wide generated_artifact_drift_gate goes green.

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jun 25, 2026
…re-tower census refresh (#5788)

* WIP: roadmap inversion (again)

* WIP: roadmap inversion (again)

* Drop unrelated host-effect doc regen-drift from roadmap-citation PR

main_wet regenerates host-effect-orchestration.md from its .dag Plan
authority, which still emits the pre-#5756 '[now, parallel]' text; that
stale regen leaked into this PR and rewound Phase A's LANDED marker.
This PR is roadmap citations only — restore origin/main's doc verbatim.

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

* WIP: roadmap inversion (again)

---------

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jun 25, 2026
…repo requirements (DESIGN.md, extdeps conventions, no handwritten/embedded js or shell, Playwright modeled in extdeps), produce a design for review, THEN implement. Prior approaches (hand-written .mjs, embedded-JS-emit) were reject (#5773)

* WIP: srv3 WebUI-KVM virtual-media install, FROM SCRATCH: FIRST understand rep

* Ground srv3 WebUI-KVM virtual media as a distinct capability + install mechanism

srv3's OpenBMC 2.07 exposes virtual media ONLY via the legacy WebUI KVM
(OpenBMC web-UI NBD over wss), NOT over Redfish/DMTF InsertMedia (404). The
on-main solve therefore resolved srv3 to PxeHttpInstall — wrong, since PXE
cannot cross the Tailscale overlay (needs BIOS net-stack + same-L2).

Per DESIGN §3 (single authority; the OpenBMC web-UI mechanism is a DIFFERENT
mechanism than DMTF Redfish VirtualMedia, not a nickname for it):

- extdeps/bmc/capability: add a DISTINCT CapabilityWebuiVirtualMedia variant
  (kept separate from CapabilityVirtualMedia, the Redfish surface) and ground
  openbmc_2_07_00_capabilities to include it (srv3 live-probe confirms the
  web-UI KVM media path works).
- gunbc/os_install_mechanism: add the WebuiVirtualMediaInstall arm; solve
  prefers Redfish VirtualMediaInstall (automatable standard) first, then
  WebuiVirtualMediaInstall, then FirmwareUpdateThenVirtualMedia, then PXE. srv3
  now falls out of the grounded solve to WebuiVirtualMediaInstall.

Witness green-by-execution (8/8 PASS via claim_executor) + discriminating RED
control (dropping the capability flips srv3's two grounding tests to FAIL):
- redfish_vm_preferred_over_webui (both caps -> Redfish, proves ordering)
- webui_vm_capable_row_solves_webui (WebUI-only -> WebuiVirtualMediaInstall)
- vm_capable_firmware_row_flips_to_update_path uses an update-only current row
  (srv3's row now carries WebUI VM, so the old test premise moved).

The install-WORKFLOW over browser ops is HELD pending the operator's
runner-origin decision (see docs/plans/srv3-webui-kvm-virtual-media.md §5);
this PR is pure modeling, zero JS.

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

* WIP: srv3 WebUI-KVM virtual-media install, FROM SCRATCH: FIRST understand rep

* Rename Webui→NbdProxy virtual-media capability (§3: cite OpenBMC's real term, not a client nickname)

CapabilityWebuiVirtualMedia / WebuiVirtualMediaInstall were named after one
CLIENT (the WebUI browser). Per DESIGN §3 (single authority; cite the upstream's
real name, not a coined nickname), the actual BMC capability is OpenBMC's
nbd-proxy virtual media (upstream "proxy mode": browser/JS NBD server over a
secure websocket carrying NBD) — distinct from DMTF Redfish InsertMedia
(CapabilityVirtualMedia). The browser is just one client of that protocol;
openbmc/jsnbd ships a non-browser reference (the nbd-proxy binary).

Rename only — solve precedence (Redfish-VM > nbd-proxy-VM > firmware-update >
PXE) and the 8/8 witness logic are unchanged:
  CapabilityWebuiVirtualMedia  -> CapabilityNbdProxyVirtualMedia
  WebuiVirtualMediaInstall     -> NbdProxyVirtualMediaInstall
(+ matching test-fn / local-var names). srv3 still falls out to
NbdProxyVirtualMediaInstall as a consequence of the grounded solve.

This keeps the client-named nickname OFF main entirely (not cement-then-churn).
The formal openbmc/jsnbd ExternalAuthority citation homes with the Layer-1
transport shape in the B design (extdeps/bmc/webui), not the capability
taxonomy. Witness 8/8 green-by-execution via claim_executor.

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

* Design doc → architecture B (direct wss+NBD seed client), fold in srv3 read-only probe

Rewrite the srv3 virtual-media design from the rejected browser/Playwright path to
architecture B: the WebUI KVM "attach media" is sugar over OpenBMC's documented
nbd-proxy protocol (NBD carried in a secure WebSocket; BMC is the NBD client, we
are the NBD server). The honest realization is a direct wss+NBD client in the Rust
seed — a transport realization like ureq/sh, NOT UI automation. No browser, no JS.

Adds:
- §1 the protocol grounded from openbmc/jsnbd (nbd-proxy / nbd.js) + the NBD
  fixed-newstyle handshake + docs/designs/virtual-media.md.
- §2 read-only srv3 probe findings: Redfish VirtualMedia 404 under BOTH Systems
  and Managers => InsertMedia AND legacy HTTPS/CIFS share-mount are OUT (answers
  parent's disambiguation; Tailscale-reachability for that path is moot). New
  doubt: nbd ws route 404s on non-upgrade GET + no static WebUI + KVM-video-only
  => nbd-proxy may not be compiled into this 2.07.00 build; settling it needs an
  operator-gated ws-upgrade dry-run.
- §3 the §3 interface/transport/policy split for NbdProxyServe.
- §6 two sign-off gates before any seed code: (1) operator ws-upgrade dry-run
  confirming nbd-proxy is present, (2) acceptance of a seed-resident wss+NBD client
  as the realization origin.

Capability/dispatch modeling (8/8 witness) stays done in #5773; seed client deferred.

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

* WIP: srv3 WebUI-KVM virtual-media install, FROM SCRATCH: FIRST understand rep

* Fix §5 fail-open: keep srv3's cited row at read-only-probe truth (drop ungrounded NbdProxy VM capability)

Review (claude-opus-4-7, REQUEST_CHANGES) correctly caught a §5 fail-open: the
openbmc_2_07_00_capabilities cited row asserted CapabilityNbdProxyVirtualMedia for
srv3, but the design doc itself flags that surface as UNSETTLED — /nbd/0 404s on a
non-upgrade GET (indistinguishable from absent), and settlement is gated on the §6
operator ws-upgrade dry-run. Asserting the capability before the dry-run dispatches
srv3 to NbdProxyVirtualMediaInstall on an ungrounded fact.

Fix — leave the cited row at exactly what the read-only probe grounded:
  - drop CapabilityNbdProxyVirtualMedia from openbmc_2_07_00_capabilities (back to
    PowerControl/BootSourceOverride/AccountManagement/FirmwareUpdate — the 200-confirmed
    Redfish surfaces; KVM video != virtual media).
  - srv3 now HONESTLY solves to PxeHttpInstall today (FirmwareUpdate present, catalog
    has no VM-capable firmware), not NbdProxyVirtualMediaInstall.
  - witness: srv3_capabilities_are_grounded now asserts NbdProxyVirtualMedia == false;
    srv3_install_mechanism_is_nbd_proxy_vm_today -> srv3_install_mechanism_is_pxe_until_dry_run.

Kept (reviewer: "the dispatch arm and discriminating RED rows are fine to land now"):
the NbdProxyVirtualMediaInstall enum arm + solve precedence, and the synthetic-row
proofs nbd_proxy_vm_capable_row_solves / redfish_vm_preferred_over_nbd_proxy — the arm
is proven on a GROUNDED synthetic row, not on srv3's ungrounded one.

Flipping srv3's row to CapabilityNbdProxyVirtualMedia is deferred to the PR that lands
the §6 dry-run confirmation receipt. Design doc §5 updated to match. Witness 8/8 green
by execution via claim_executor.

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

* WIP: srv3 WebUI-KVM virtual-media install, FROM SCRATCH: FIRST understand rep

* Revert host-effect-orchestration.md to origin/main — my main_wet sweep was BACKWARDS (shipped false status)

My prior "drift fix" was the wrong direction and un-landed correct status (§5
ships-false-status trap). Ground truth (parent neat-boar-71 verified by reading
both files on origin/main):
  - the committed .md said Phase A "[LANDED #5756]" = CORRECT
  - the .dag authority (host_effect_orchestration.dag) says "[now, parallel]" = STALE
    (the authority itself was regressed, likely by #5764 grounding a pre-landed draft).
main_wet regenerated the .md FROM the stale .dag, propagating the regression INTO the
.md and reverting the accurate "[LANDED #5756]" back to "[now, parallel]".

My differential control (committed == origin/main) only proved the drift was not
introduced by this PR's 4 model files — it did NOT establish which side was correct.
I wrongly assumed authority==truth; here the authority was the stale side.

Fix: restore docs/plans/host-effect-orchestration.md to origin/main (the LANDED
version). KEEP ROADMAP.md + roadmap_authority.dag (the srv3 orphan-doc pointer — legit
BMC scope). Do NOT touch the .dag or re-run main_wet — the drift ROOT (stale .dag) is
the host-effect lane's to fix in a separate focused PR.

EXPECTED: generated_artifact_drift_gate stays RED on #5773 until the host-effect lane's
.dag fix lands on main; that is correct, not a regression to chase. Rebase on main after
their fix merges.

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

---------

Co-authored-by: Brian Searls <briansrls@gunb.ai>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jun 25, 2026
…ore byte-equality proof (#5771)

* WIP: P3-impl gap B: orchestration-as-intent emit(intent,Bash) core + retry_co

* WIP: P3-impl gap B: orchestration-as-intent emit(intent,Bash) core + retry_co

* WIP: P3-impl gap B: orchestration-as-intent emit(intent,Bash) core + retry_co

* gap B review: hoist scenario extraction out of std (§3) + fail-closed Optional accessors (§5)

Addresses claude-opus-4-7 review on #5771:
- §3: remove retry_eagain_command/retry_eagain_pattern (gunbc-scenario
  nicknames) from v2.std.orchestration; the retry intent->(command,pattern)
  extraction now lives in the witness (gunbc layer), restoring the
  std<-extdeps<-workflow arrow. bash retry target models take command/pattern
  strings directly (gap-A emit_directive precedent: construction-safe, no
  Step sum-match in the realization).
- §5: replace ''-fabricating accessors (classifier_pattern,
  step_run_command_spelling) with fail-closed Optional ones
  (classifier_log_pattern, step_command_spelling) -> Present only for the
  meaningful arm, Absent otherwise; witness threads Optional and a missing
  shape goes red instead of emitting an empty slot.

Both witnesses green by execution under claim_batch; RED twin still breaks
byte-equality.

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

* WIP: P3-impl gap B: orchestration-as-intent emit(intent,Bash) core + retry_co

* WIP: P3-impl gap B: orchestration-as-intent emit(intent,Bash) core + retry_co

* WIP: P3-impl gap B: orchestration-as-intent emit(intent,Bash) core + retry_co

* WIP: P3-impl gap B: orchestration-as-intent emit(intent,Bash) core + retry_co

* Regenerate host-effect-orchestration plan doc to match its .dag authority (drift fix)

The committed .md carried a stale pre-grounding version ('LANDED #5756'
Phase A/B text) that predated #5764's grounding of the plan into its
gunbc.plans authority. Regenerated via main_wet so the projection matches
the single-authority output (identical to origin/main); fixes the
generated_artifact_drift_gate red. No 3-file scope content touched.

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

* WIP: P3-impl gap B: orchestration-as-intent emit(intent,Bash) core + retry_co

* WIP: P3-impl gap B: orchestration-as-intent emit(intent,Bash) core + retry_co

* WIP: P3-impl gap B: orchestration-as-intent emit(intent,Bash) core + retry_co

* WIP: P3-impl gap B: orchestration-as-intent emit(intent,Bash) core + retry_co

* WIP: P3-impl gap B: orchestration-as-intent emit(intent,Bash) core + retry_co

* gap B (round-4): canonical list_head/list_tail + inline Predicate match; fix payload-concretization cascade

Findings 1+2: deleted std nicknames (escalations_head/escalations_rest/
pipeline_first_step) and one-arm projections (predicate_log_pattern/
step_command_spelling); witness now calls canonical list_head/list_tail
(algebra.dag) in test-local re-wrap helpers and matches the closed
Predicate/Step coproducts inline, exhaustive + fail-closed.

Interp constraint found by execution: field access / variant-match on a
value bound directly from a generic list_head payload cascades (the
payload type stays deferred). Concretize by re-wrapping into a
concretely-annotated Optional<T> (escalation field access) and routing
the Step variant-match through a concrete-EscalationLevel/Step-param
helper (command extraction). 3/3 witnesses green by execution.

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

---------

Co-authored-by: Brian Searls <briansrls@gunb.ai>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jun 25, 2026
…mplete #5790) (#5796)

#5790 restored host_effect_orchestration.dag Phase A/B to [LANDED #5756] but did
NOT regenerate the committed .md projection. Meanwhile #5785 (a CI floor profiling
run) had regenerated the .md from the THEN-stale .dag, leaving the committed .md at
[now, parallel]. Result: .dag=LANDED vs committed .md=now-parallel — the drift
gate stayed RED on main, blocking every open PR (the whole de-fork wave).

This is a pure regen-on-main: the .dag authority is already correct and settled
(#5790), so regenerating its projection makes projection(.dag) == committed .md
with the LANDED text preserved. No content decision — just running main_wet on the
already-correct authority. Verified: regen changes ONLY this file; .md now carries
[LANDED #5756]; gate green.

Co-authored-by: Brian Searls <briansearls1@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jun 25, 2026
…599) + Optional receiver unwrap before method call (E0624) (#5777)

* WIP: Lane A cargo-green re-census + Phase C1 fixed-point SCOPING (post measur

* WIP: Lane A cargo-green re-census + Phase C1 fixed-point SCOPING (post measur

* WIP: Lane A cargo-green re-census + Phase C1 fixed-point SCOPING (post measur

* WIP: Lane A cargo-green re-census + Phase C1 fixed-point SCOPING (post measur

* Fix E0599 over-broad Clone bound: narrow gate to body-is-not-param-ref

Without the `body_is_param_ref` guard, `emit_fn_def` added `M: Clone` to
every function whose return type was a bare generic param — breaking
`generic_fn_emits_type_params_without_synthesized_bounds` (identity/fold_stack).

Correct signal: `ExprVar` nodes carry the variable name as `.name` and have no
children; `ExprFieldAccess` nodes carry the field name (not the receiver).
So `body.name ∈ value_param_names` IFF the body is a direct parameter return.

Clone bound is now added only when `return_is_bare_generic && !body_is_param_ref`,
which fires for `measure_count<Q,S,M>(m) -> M { m.count }` (field access, M: Clone
needed to call `.clone()` through Rc) but not for `identity<T>(x) -> T { x }`
(direct param ref, no Rc access, no .clone() emitted).

Also regenerate docs/plans/host-effect-orchestration.md from its .dag authority
(pre-existing drift since #5764; the committed file matched an older Phase A/B state).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Revert host-effect-orchestration.md: drift fix was wrong-direction

My regeneration via main_wet reverted the plan doc from LANDED [#5756]
to [now, parallel] — wrong direction. The .dag Plan authority needs to be
updated (not the committed .md) to fix the drift, and that belongs to the
host-effect lane (neat-boar/fierce-carp). Restoring the correct LANDED state.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* E0091: realize unused type-alias params as PhantomData (cargo-green 2→0)

type Compose<Algebra, MachineConstraint> = Phantom emits a bare Phantom ZST
with neither param referenced in the RHS → E0091 ×2. Fix mirrors the struct
path (rust_phantom_marker_inner, line ~3229): detect params absent from the
alias RHS via alias_unused_param_names (same type_node_mentions_name predicate
as struct_unused_param_names), then substitute
std::marker::PhantomData<(Algebra, MachineConstraint)> for the RHS.

Guard: only fires when unused_params |> count > 0 — param-using aliases
(List<T>, Map<K,V>) have their params present in the RHS and are left unchanged.

Witness: unused_param_alias_gets_phantom_data (positive — Compose gains
PhantomData carrying both params) + param_using_alias_has_no_phantom_data
(negative control — Wrapper<T> = List<T> is unperturbed). Both axes of
E0599+E0624 witnesses still green (no regression).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fmt: fix brace placement + module order (cargo fmt --all --check red)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix html_markup_smoke_test: add dsl/extdeps source root (smoke dag imports extdeps.languages.html after d3ed2a9)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Brian Searls <briansrls@gunb.ai>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.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