Worker bridged implementer path (#431 follow-up) - #437
DanielKillenberger wants to merge 5 commits into
Conversation
…its implicit task Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gretn9Fz79EuiZXQkwnr1s
… is reached by CLI - agents/worker.md gains a "Bridged implementer" section gated on the implementer tier resolving to a CLI-bridged model: keep Phase 0/1 and the persisted base, skip Phase 1.5 and scout fan-out, compose the pointer prompt plus the usage guide's long-task brief verbatim (never the worker's TIMEBOX), run the bridge foreground from the asserted repo root at the commit-permitting sandbox level, review <base>..HEAD on return, then Phase 3 onward as today - work phases.md 3c: the worker runs the bridge itself, the conductor never bridges, TIMEBOX is the worker's cap and never the child's; the SECTION3C heredoc in sync-codex.sh now carries the implementer-tier paragraph and the bridge paragraph with grep guards - no-plan-route.md judicious subagent license narrows on the bridged path: parallel bridge calls on disjoint surfaces; research and scouting fall to the child - CHANGELOG Unreleased entry referencing gmickel#431 and gmickel#436; Codex mirror regenerated (idempotent on the second run) Task: fn-245-worker-bridged-implementer-path-431.1 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gretn9Fz79EuiZXQkwnr1s
…d remainder before review - no-plan-route.md bridged path: concurrent checkpointing children never share a checkout (one Git index); each gets its own workspace and branch, the worker integrates after all return; serial otherwise; commit ownership on the task branch reconciled - worker.md On return: a dirty tree is committed first so <base>..HEAD holds everything the child produced before the worker's inspection - CHANGELOG wording follows; Codex mirror regenerated (idempotent) Task: fn-245-worker-bridged-implementer-path-431.1 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gretn9Fz79EuiZXQkwnr1s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gretn9Fz79EuiZXQkwnr1s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gretn9Fz79EuiZXQkwnr1s
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4f354c9cff
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
|
||
| ## Bridged implementer (gated on the implementer tier) | ||
|
|
||
| **Gate.** This section runs only when the **implementer** tier resolves to a model this harness reaches by shelling out to another CLI, per its reach page (`plugins/flow-next/docs/reach/`). Resolve the tier by the routing precedence, highest first: an explicit argument in the invocation, then the project routing block in the instruction file, then the agent definition's own default, then the session model. When the tier resolves to the session model or to an in-host subagent model, this section is inert: the standard phases run unchanged, Phase 1.5 included. When the named model is unreachable from this harness, the reach page's degradation applies: fall back to the session model, say so once, and continue on the standard path. |
There was a problem hiding this comment.
Link the worker to the packaged reach page
When this agent runs from an installed plugin in a consumer repository—the normal deployment—plugins/flow-next/docs/reach/ does not exist in that checkout: canonical agent links must resolve through ../docs/reach/README.md, while the Codex mirror installs the page beneath ../docs/flow-next/reach/README.md. Because the fresh-context worker receives only configuration fields and this new gate depends on the reach page to distinguish an in-host model from a CLI-only or unreachable one, it can silently select the wrong implementation path. Make this a relative Markdown link so sync-codex.sh rewrites and validates the installed layout.
AGENTS.md reference: AGENTS.md:L7-L8
Useful? React with 👍 / 👎.
|
Closing in favour of #438, which shipped in 5.4.0 (https://github.com/gmickel/flow-next/releases/tag/flow-next-v5.4.0). Your diagnosis was right and is adopted: step 3c routed implementation to the implementer tier but the worker never consulted it, so a pinned bridge model was silently ignored. #438 takes that fix (worker Phase 1b: pointer prompt plus the usage guide's brief, one foreground bridge call, dirty-tree commit, base..HEAD review, gates, then the normal review and done) and the 3c paragraph, with the mirror's implementer-tier paragraph restored. Where it differs from this PR: fan-out stays with the bridged child rather than moving to the worker as parallel bridge calls in per-child worktrees. The direct route's premise is one owner with the whole task and its own delegation, so on the bridged path the owner is the child; the brief's never-list is back to five clauses (push, history rewrite, scope, verdict, nested bridge), and the July keep-the-child-flat caveat is now a dated watch after openai/codex#33267's own repro ran clean on codex-cli 0.153.4. The reasoning is recorded in STRATEGY.md (The owner holds the license) and criteria.md G3. Thanks for the work here; the changelog credits the diagnosis. |
Worker bridged implementer path (#431 follow-up)
Step 3c of the work skill routes implementation to the implementer tier, but the only thing it ever spawns is the in-host
workersubagent, and the worker's own phases never consult that tier. When a project's routing block pins the implementer to a model the harness reaches only through a CLI bridge, the two documents disagree by omission.Follow-up to #436, which closed #431.
TL;DR
TIMEBOXis never copied into that brief.flowctl doneexactly as before.Not in this PR (by design)
flowctl done.The change, top to bottom
When the implementer tier resolves to a model the harness reaches only by CLI bridge, the in-host worker now runs the bridge itself: it anchors and persists the base as today, skips its own investigation and any scout fan-out, hands the child a pointer prompt plus the usage guide's timebox-free brief, and on return reviews the child's commit range and runs the gates before review dispatch and flowctl done. The conductor never bridges, and the minted-task subagent license narrows on this path. Prose only; the Codex mirror is regenerated.
fn-245-aid-4f354c9c-207cfcf662d978796aa4b7b46e8bccec27109effe4f354c9cffed6d1e786c46102c974abf0fa4e1ddMODIFIEDCANONICALplugins/flow-next/agents/worker.mdMODIFIEDCANONICALplugins/flow-next/skills/flow-next-work/phases.mdMODIFIEDCANONICALscripts/sync-codex.shMODIFIEDCANONICALplugins/flow-next/skills/flow-next-work/references/no-plan-route.mdMODIFIEDCANONICALCHANGELOG.mdCritical changes
.flow/specs/fn-245-worker-bridged-implementer-path-431.json(+149/-0 lines) — Flow state, not hand-written prose.flow/specs/fn-245-worker-bridged-implementer-path-431.md(+82/-0 lines) — the spec this PR implements.flow/memory/bug/integration/committing-bridged-children-cannot-2026-09-14.md(+25/-0 lines) — memory entry captured from the review fix round.flow/tasks/fn-245-worker-bridged-implementer-path-431.1.md(+25/-0 lines) — task done summary and evidenceplugins/flow-next/agents/worker.md(+19/-1 lines) — the new worker contractHow to review this PR
The pipeline already verified this — you don't re-check it from scratch:
python3 scripts/run_tests_parallel.pygreen at the PR head (4991 ran, 0 failures);uvx ruff@0.16.0 check .clean;scripts/sync-codex.shidempotent (empty diff on the second run)Your job — the calls the pipeline can't make:
Review plan
Must review (~5%)
plugins/flow-next/agents/worker.md— the only canonical file among the high-churn set; it is the new always-loaded worker contract — Does the section keep prompt composition, the diff check, the gates, review dispatch, andflowctl donewith the worker while the child investigates, and does it forbid copyingTIMEBOXinto the child's brief? — open the## Bridged implementer (gated on the implementer tier)section (also touched byc6a4872f)Spot-check
plugins/flow-next/skills/flow-next-work/phases.md— one paragraph in step 3c: worker bridges, conductor never does,TIMEBOXis the worker's cap. Does it agree with the worker section word for word on who bridges?plugins/flow-next/skills/flow-next-work/references/no-plan-route.md— the narrowed license (first draft in85204f01, isolation rule added after review). Is the isolated-workspace-per-child rule the shape you want for parallel bridge calls?scripts/sync-codex.sh— the mirror's 3c heredoc now carries the implementer-tier paragraph and the bridge paragraph, with two grep guards. Is restoring the paragraph the mirror dropped since Orchestration by intent: named tiers, reach pages, zero shipped slugs #352 wanted here, or a separate change?CHANGELOG.md— one Unreleased entry; check the wording against the release-notes gate.Safe to skim (~85%)
plugins/flow-next/codex/(agents/worker.toml,skills/flow-next-work/phases.md,skills/flow-next-work/references/no-plan-route.md) — regenerated byscripts/sync-codex.sh, guard-verified, idempotent on the second run — skim.flow/(the spec.md/.json, the task.md/.json, the bug memory entry) — task-state, not hand-written code — skimMemory left behind
Bugs captured during this spec:
bug/integration/committing-bridged-children-cannot-2026-09-14— The bridged-implementer prose inno-plan-route.mdlicensed "parallel bridge calls on disjoint surfaces, each with the same long-task brief" and then claimed "commit ownership and the join barrier stand unchanged".Generated by
/flow-next:make-prfrom fn-245-worker-bridged-implementer-path-431 againstmainon 2026-09-14.🤖 Generated with Claude Code
https://claude.ai/code/session_01Gretn9Fz79EuiZXQkwnr1s