Repository navigation
Mission run authority: bind run credentials to mission-run/RUN - #6263
Merged
schickling-assistant merged 14 commits intoNov 10, 2026
Merged
schickling-assistant merged 14 commits into
schickling-assistant merged 14 commits into
Conversation
…gine-authority' into schickling/2026-11-10-program-engine-run-credential
…gine-authority' into schickling/2026-11-10-program-engine-run-credential
… person stays bound
…gine-authority' into schickling/2026-11-10-program-engine-run-credential # Conflicts: # docs/st3/large-value-sites.json
…s that hold a bound caller to itself
…gine-authority' into schickling/2026-11-10-program-engine-run-credential
Contributor
Author
|
Review record: independent reviewer round 1 at |
Base automatically changed from
schickling/2026-11-10-program-engine-authority
to
main
November 10, 2026 18:31
…-program-engine-run-credential
schickling-assistant
marked this pull request as ready for review
November 10, 2026 18:31
schickling-assistant
temporarily deployed
to
evidence-signing
November 10, 2026 18:32 — with
GitHub Actions
Inactive
schickling-assistant
temporarily deployed
to
evidence-signing
November 10, 2026 18:32 — with
GitHub Actions
Inactive
Contributor
Author
|
Delta review record for head
|
schickling-assistant
temporarily deployed
to
evidence-signing
November 10, 2026 18:32 — with
GitHub Actions
Inactive
schickling-assistant
enabled auto-merge
November 10, 2026 18:32
schickling-assistant
temporarily deployed
to
evidence-signing
November 10, 2026 18:32 — with
GitHub Actions
Inactive
schickling-assistant
temporarily deployed
to
evidence-signing
November 10, 2026 18:37 — with
GitHub Actions
Inactive
schickling-assistant
temporarily deployed
to
evidence-signing
November 10, 2026 18:52 — with
GitHub Actions
Inactive
schickling-assistant
temporarily deployed
to
evidence-signing
November 10, 2026 18:52 — with
GitHub Actions
Inactive
schickling-assistant
temporarily deployed
to
evidence-signing
November 10, 2026 19:21 — with
GitHub Actions
Inactive
schickling-assistant
deleted the
schickling/2026-11-10-program-engine-run-credential
branch
November 10, 2026 19:53
This branch was previously deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Program steps must act as
mission-run/RUN(docs/st3/program-engine.md §3, D2). Today a program effect is a daemon descendant withoutST_AGENT, so its requests act as an unrestricted person and can name any actor.Goal
Second PR of the M1.4 run-authority stack (stacked on #6260): the run credential and the binding. The engine minting it per attempt, the journal claims written as the run and child runs created as the parent run follow in a PR stacked on the engine branch; enforcement follows after.
Decisions
Credential = a row of the existing local
capabilitiestable: kindprogram-run, subject the step run, incarnation the attempt, secret stored hashed (Store::issue_run_credential).No revocation API:
Store::run_bindingbinds only while the attempt is the step run's current attempt and the step is live (ready|working|blocked), so a credential dies with its attempt (retry, completion, cancellation).The ancestry walk reads
ST_RUN_CREDENTIALbesideST_AGENT(HarnessAncestry::Run). A credential and an agent marker in one environment bind neither. The secret'sDebugis redacted.The serving guard resolves the credential to
BoundRun; a credential that no longer binds makes the caller unverifiable. A bound run follows the bound-agent rules (no internal routes, no person headers,actor/requestermust be the run), and the write principal fills a missing actor with the run.CLI:
configured_actordefaults tomission-run/$ST_MISSION_RUNwhen the credential is present;--as mission-run/RUNparses.Review fixes: the trusted Unix client carries a run actor (
Client::unix_run;ClientSession::local_runacceptsmission-run/RUNonly when the request's credential binds that run). Handlers that hold a bound caller to itself (documents, publication, attributed repair) read oneBoundActorextractor for agents and runs, so a run writes no seat'sdoc/agents/…document and is the writer its document writes name.Verification
Run on the Linux build host at the stack head 5494372 (contains this PR), all pass:
Focused tests :
fractal-store:a_run_credential_binds_its_run_only_while_its_attempt_runs,a_run_credential_is_refused_when_unknown_expired_or_of_another_kind.fractal-api-core:a_run_credential_in_the_environment_binds_a_run_and_never_an_agent_too,a_program_effects_descendant_binds_its_run(real process tree, descendant with a cleared environment),a_run_credential_binds_requests_to_its_run(router + guard: attributed to the run, foreign actors refused, nothing written after the attempt ends).fractalCLI:a_program_effect_acts_as_its_run.Hosted CI at the exact head is the proof; pushed with
ST_EVIDENCE_LOCAL=off.Complexity
High risk by docs/review.md: a new bound identity at the trust boundary. Nothing mints credentials in this PR, so production behaviour is unchanged until the engine dispatches attempts.
Concerns
ST_AGENTnearer in its ancestry binds as that agent.BoundAgentdirectly (records, work) see a run-bound request as unbound; the guard and write principal still pin its actor to the run.Friction & bottlenecks
Build host memory pressure; builds serialized.
Follow-ups
Mint in
dispatch_program, journal actor, child-run starter (stacked on the engine branch); enforcement (audit, then enforce, as a daemon setting).References
docs/st3/program-engine.md §3; #6260.