feat(compose): sequence separately recorded Flow bundles - #430
Merged
Conversation
abrichr
force-pushed
the
feat/compose-recorded-bundles
branch
2 times, most recently
from
August 29, 2026 04:46
f2191bf to
c1f3243
Compare
Add `openadapt-flow compose` as a parent sequencer of already-compiled child bundles. Each child keeps its recorded surface. Handoffs copy effect-bound parameter facts after a VERIFIED (or explicitly allowed) predecessor outcome; missing evidence HALTs. certify/run execute the parent; replay refuses it. The child-run extension point is execute(capability, admission, inputs, ...) bound today to the governed run path. Signed-off-by: Richard Abrich <richard.abrich@mldsai.com>
Ruff wanted the compose --after help on one line. The claims report used a HEAD timestamp, so CI's committed-registry --now failed the gate and the wheel job saw a stale public-artifact inventory. Signed-off-by: Richard Abrich <richard.abrich@mldsai.com>
abrichr
force-pushed
the
feat/compose-recorded-bundles
branch
from
August 29, 2026 05:30
c1f3243 to
32722d8
Compare
abrichr
enabled auto-merge (squash)
August 29, 2026 05:30
Member
Author
|
Merged by an agent session, not the founder. |
This was referenced Aug 29, 2026
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.
Summary
openadapt-flow composesequences already-compiled child bundles under a handoff contract. Each child stays bound to the surface it was recorded on.certifyandrunexecute the parent directory;replayrefuses it.The launcher form is
openadapt flow compose.Child B starts only after child A ends
VERIFIED, or a halt class named with--allow-halt. Handoffs copy parameter values that A's confirmed effect contract already bound. Window titles and URLs are not evidence. Missing evidence HALTs.Default order is
--childorder.--after NAME=PREDdeclares a DAG; cycles refuse at authoring. The parent artifact iscomposition.jsonplus copied children, not a largerProgramGraph.Child execution goes through
execute(capability, admission, inputs, ...)inopenadapt_flow/runtime/composition.py. Today that binds to governedrun(admission gate plus Replayer). When a publicexecute()primitive lands, rebind there. Raw replay is not the public path.Rebased onto
mainafter #432.openadapt_flow/compiler/__init__.pyanddocs/design/WORKFLOW_PROGRAM_IR.mdcarry both the REST-admission exports and the compose sequencer.What this does not do
StateKind, subflow, worklist) on the parent.What a reviewer must check
tests/test_compose_runtime.pycovers missing evidence, unverified predecessor, and allowed halt class.openadapt_flow/composition.pystays a parent spec plus copied children.replayrefuses a composition directory; onlycertify/runexecute it.compiler/__init__.pyexports bothauthor_compositionand the REST admission symbols from feat(compiler): admit REST bindings only after held-out Effect confirmation #432.Test plan
tests/test_compose_authoring.py— copy, effect-bound source, unknown target, one child, cycle, backwards handoff, explicit--aftertests/test_compose_runtime.py— missing handoff HALT, unverified predecessor HALT, allowed halt class, scripted VERIFIED handoff, MockMed + FakeBackend fixturetests/test_cli_compose.py— parser, CLI write, replay refusaltestjob passed on 32722d8 (38m9s), binding the three compose test files forcompose-recorded-bundles