fix(#934): defer plan authorship under --start-paused to the first tick - #981
Open
0frankie wants to merge 1 commit into
Open
fix(#934): defer plan authorship under --start-paused to the first tick#9810frankie wants to merge 1 commit into
0frankie wants to merge 1 commit into
Conversation
Under --brain llm --start-paused, boot built the *default* world and the LLMPlanner authored every default persona's day at attach time -- real plan calls -- then a pre-start POST /config threw that world away and re-authored for the applied cast. ~$0.13 (~2%) wasted on the showcase candidate-1 run, scaling with default-cast size and the plan model's price, and the discarded personas muddied the lifetime by_actor ledger. PennStepper grows defer_plans (wired to --start-paused in main): attach holds each agent on its safe static day (source "deferred", the same fallback an unusable model answer gets -- seeding still runs its planner-present branches, since the planner will read that memory) and the first tick authors for the cast that is actually running, behind the budget guard, then re-stamps the manifest so the stored provenance describes the authored day. Every rebuild re-arms the deferral, so a pre-start re-cast stays free. The authoring block is extracted from attach_agents into cognition.author_llm_plan and shared by both paths, so they cannot drift. The mock path is unchanged (MockPlanner is free). Verified: full suite 2472 passed / 2 skipped (test_godot_smoke deselected -- it times out in any fresh worktree with no imported .godot cache, including on the untouched base commit). Closes #934. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This was referenced Aug 4, 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.
Closes #934.
What
Under
--brain llm --start-paused, boot built the default world and the LLMPlanner authored every default persona's day at attach time — real plan calls — then a pre-startPOST /configthrew that world away and re-authored for the applied cast. ~$0.13 (~2%) wasted on showcase candidate 1, scaling with default-cast size and the plan model's price, and the discarded personas muddied the lifetimeby_actorledger.Fix
The issue's suggested shape:
PennSteppergrowsdefer_plans(wired to--start-pausedinmain()).attach_agentsholds each agent on its safe static day (source"deferred"— the same fallback an unusable model answer gets). Seeding still runs its planner-present branches: the planner will read that memory, just later.tick()authors for the cast that is actually running — behind the budget guard, under the app lock — then re-stamps the manifest so the stored provenance describes the authored day. Every rebuild re-arms the deferral, so a pre-start re-cast stays free.attach_agentsintocognition.author_llm_planand shared by both paths, so they cannot drift.Verification
test_paused_boot_plans_934.pyfirst pinned today's waste (boot spendsday_outlineplan-role calls withdefer_plans=Truerequested).test_godot_smokedeselected — it times out in any fresh worktree with no imported.godotcache, including on the untouched base commit).🤖 Generated with Claude Code