fix(ce-ideate): scale the run with the ask, and slim the always-loaded body - #1357
Conversation
… body ce-ideate carried 8,354 words of always-loaded prose, the largest of the ideation chain. Slimming it surfaced five defects, each reproduced before it was fixed: - Phase 1 cited Phase 0.3 for issue-tracker detection; the detector lives in 0.2, and divergent-ideation.md already said so. - Two of five cost examples contradicted their own enumeration (~13 vs 14, ~14 vs 15). The formula that produced them is gone rather than patched. - Scaling ran one way only. `go deep` raised every agent to the ceiling tier; tactical signals (`quick wins`, `polish`) lowered the ambition floor but left the fleet at ~14 agents. - The tactical waiver was defeated one layer down: the Phase 3 verifier runs on a fresh context with none of the generation history, was told to enforce the meeting-test unconditionally, and its judgment supersedes the generators'. - Surprise-me was specified in eight places across ~350 lines. Tactical scope now cuts agents, never lenses: 2 ideation agents covering all six frames, axes and scouts capped together, waiver passed to the verifier. Frame coverage is a floor, so a false-positive trigger costs breadth nothing. Issue intelligence and user-research handling move to references, but the ordered dispatch skeletons stay inline -- the shape that measured 0/5 in the ce-debug Phase 4 eval. Always-loaded prose: 8,354 -> 6,941 words (-17% net, ~25% gross of the surprise-me table and tactical block added back). Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
PR SummaryMedium Risk Overview Mode collisions and waivers are made deterministic. Always-loaded body is slimmed (~9% fewer words). Issue intelligence and user-research artifact handling move to on-demand references, with ordered dispatch skeletons kept inline. Surprise-me deltas consolidate into one Phase 0.2 table with local hooks. Cost notices stop using hand-maintained agent totals.
Adds two contract test files (~47 tests) pinning skeletons, dials, collision pairs, and software/universal parity. Reviewed by Cursor Bugbot for commit b460ed1. Bugbot is set up for automated code reviews on this repo. Configure here. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 16729b4d64
ℹ️ 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".
…t variants Two review findings, both real: The tactical caps stranded an axis. Axes capped at 3 and scouts at 2, while the stated rationale for coupling them is that scouts dispatch one per axis and no axis should reach generation without an evidence dossier. Every tactical run left exactly one axis with only the Phase 1 orientation gist. The caps are now equal at 3 — three is the decomposition floor, so this is the smallest coupled pair rather than a further cut on either side. Colliding fleet variants had no defined winner. Tactical selects a 2-agent six-frame fleet and issue-tracker mode selects a 4-agent theme-frame fleet, so "quick wins from open issues" was undefined, and the insufficient-issue-signal fallback hardcoded 5 agents over a scaled run. Frames and agent count are now decided separately: whichever variant owns the surface picks the frames, whichever owns the budget picks the count. The fallback inherits the run's own scaling. The cap test now asserts the two numbers are equal rather than pinning either value. Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e186d7e7fc
ℹ️ 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".
… detection Round-2 review found two consequences of the collision rules added in e186d7e: The `go deep` waiver leak. `go deep` beats a tactical signal, so a prompt can carry `quick wins` while tactical scope is suppressed — but all seven meeting-test waivers keyed on "Phase 0.5 detected tactical focus signals." A `go deep quick wins` run therefore went all-ceiling with a second critic and still admitted below-floor candidates. Phase 0.5 now resolves an active state and says so explicitly; `go deep` suppresses tactical scope outright rather than only outranking its fleet, and every waiver site keys on "tactical scope is active." The six-frame invariant overclaimed. "All six frames are covered in every variant" sat directly above the issue-tracker variant, which deliberately replaces the frame set with at most four theme frames. Two dispatch directives in contradiction. The floor is now scoped to variants that use the default frame set, with issue-tracker mode exempted by name. Tests assert the waiver keys on the active state and that no reference reintroduces detection-keyed wording. Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 06a1fb1843
ℹ️ 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".
…elsewhere paths Third review round found two more sites the tactical/routing work had not reached. Both are the same class as the previous two rounds -- a cross-cutting mode added without sweeping every path that must honor it -- so this fixes the class rather than the two instances. The universal (elsewhere-non-software) path never scaled. Phase 0.3 routes it to references/universal-ideation.md in place of the Phase 2 frame dispatch, so it never loads divergent-ideation.md and never saw the fleet packing, the axis cap, or the verifier waiver. "quick wins for this launch strategy" silently got the full treatment. That reference now carries all three, with frame coverage still a floor. The research routing test gated only the repo scan. Elsewhere-mode synthesis reads "any rich-prompt material", so a survey or analytics export could reach synthesis AND a distiller, duplicating the file into Topic context. The test now runs before both dispatch blocks, and the synthesis dispatch excludes routed evidence at its own site. Swept the remaining tactical mentions for the same gap; the issue-tracker fallback, the caps, and the waivers were already covered. Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 28476615c9
ℹ️ 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".
…ler count
Fourth review round, both small:
tactical + surprise-me had no row in the collision table. It is reachable
whenever a vague tactical prompt ("quick wins") sends the user to the 0.2
subject gate and they pick "Surprise me" -- both variants then fire with no
winner. Surprise-me now owns the fleet and tier, since subject discovery is
that mode's entire value and cannot run on two native-tier agents; tactical
keeps only its waived ambition floor, because the user did still ask for
small wins. The axis and scout caps are moot there, as surprise-me skips
decomposition. The table now covers every pair that can fire together, and
a test enumerates them.
The Phase 0.6 cost notice promised one distiller per research artifact,
but small artifacts fold into the grounding summary with no sub-agent, and
the size rule lives in a reference not loaded until Phase 1. Qualified in
place rather than pulling the size rule forward.
Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2c8b45050c
ℹ️ 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".
…e universal fleet to depth
Fifth review round, both defects introduced by this PR's own earlier commits:
The issue-intelligence load fired after the steps it governs. The four-step
skeleton is executable ("dispatch the analyst in SCAN mode"), and the
instruction to read the reference -- plus the prohibition against composing
a dispatch from the summary -- sat below it. A sequential agent could launch
the scan from the deliberately incomplete summary before reaching the line
telling it not to. The load now precedes step a, and a test asserts that
ordering by index rather than by presence.
The universal tactical block promised a fleet the selected depth would not
dispatch. Only Full depth runs frames as parallel sub-agents in that mode,
yet the block applied the 2-agent packing to Full while steering tactical
runs toward Quick/Standard -- so the common path could announce two ideation
agents and dispatch none. Depth is now explicitly the fleet decision there:
Full packs six frames into 2 agents, Quick/Standard dispatch zero and cover
all six inline, and Phase 0.6 says the count for this mode is not settled
until that depth is chosen.
Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0beee5d069
ℹ️ 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".
Sixth review round. The research-artifact reference load sat in its own section below the Phase 1 dispatch blocks, so a sequential agent could run the whole grounding batch before reading the spec that requires distillers to run *in* that batch -- serializing the most expensive read in the phase behind codebase, learnings, and web grounding. The load now sits beside the pre-dispatch routing test, conditional on that test actually routing something to evidence. A test asserts its index precedes the parallel-batch instruction. Same class as the issue-intelligence load fixed in 0beee5d: an extraction moved content to a reference, and the load instruction landed after the step that needed it rather than before. Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
Seventh review round. Fixing the depth/fleet contradiction in the previous commit moved the tactical depth preference into "How to generate", but "How to start" is where this mode actually chooses depth and it comes first -- so a sequential pass could lock Full before ever reading that tactical prefers Quick or Standard. Phase 0.5's flat "2 ideation agents" reinforced it, since only Full can satisfy that count here. The cue now sits in "How to start" beside the depth options, stating that depth is the fleet decision in this mode and that Phase 0.5's count is the software-path packing. Phase 0.5 notes that elsewhere-non-software resolves its count with depth, with the six-frame floor holding either way. Same ordering class as the previous two rounds: a rule placed after the step it governs. Tests now assert the cue's index falls between "How to start" and "How to generate". Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 100af7db5e
ℹ️ 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".
…lving them Eighth review round. The Phase 0.6 notice told the agent to subtract the web researcher on a V15 cache reuse, but the cache is not checked until Phase 1 after <scratch-dir> exists -- so the notice cannot know whether that dispatch will be skipped. Swept the rest of the paragraph for the same shape and found an un-flagged twin: it also announced the issue cluster call unconditionally, though that call only happens when the scan returns usable signal. Both are now stated as conditional, with a rule covering the class: say "conditional" for anything this phase cannot yet resolve rather than pre-subtracting or asserting it. A skip phrase stays a real subtraction -- that one is readable from the prompt at notice time. Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7f758e70d3
ℹ️ 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".
… packing frames
Reverts the 2-agents-x-3-frames tactical packing. Two problems with it, both
verifiable in the file it lived in:
Packing barely saved anything. divergent-ideation.md states per-frame idea
targets explicitly persist under packing ("a two-frame agent targets that per
frame"), so two packed agents still had to generate the same 36-48 candidates.
The saving was fixed dispatch overhead plus a repeated input block that the
payload is deliberately structured to make cache-friendly.
Packing starved the basis check. The verification-read budget is per agent,
not per frame -- so a three-frame agent got 5 reads across ~18-24 ideas where
three single-frame agents got 15. That is a ~3x cut to the mechanism the skill
exists to enforce: a `direct:` basis must quote a line the agent actually read.
Tactical now keeps the default 5-agent/6-frame fleet and gets cheap where the
cost actually is: 3-4 ideas per frame instead of 6-8, 2-3 verification reads
instead of 5, plus the existing axis/scout caps and waived floor. Roughly
halves generated output while leaving each idea's verification ratio intact.
The universal path and the variant-collision table follow the same rule:
tactical contributes volume, reads, and the waived floor, and never repacks
another variant's fleet.
A 16-run paired eval (Claude + Codex) found packing did not dilute per-frame
output as feared -- volume held and inter-frame distinctness was if anything
higher, since independent agents converge on the same salient evidence. The
verification-budget argument, not dilution, is why packing is out.
Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 45919aa156
ℹ️ 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".
The inline Phase 1 fallback said to "use the default Phase 2 fleet" when the issue scan finds no reachable tracker or too little signal, while both extracted references say to fall back at this run's own agent count. On a `go deep` or surprise-me run that also carried issue-tracker intent, the inline wording silently discarded the depth the user asked for. The inline step now names the six default frames at the run's own count and budgets. A test pins that wording and asserts the flat-reset phrasing is gone from the body -- the references already agreed; the body was the outlier. Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
Three review findings, all stale statements left by the previous commit's switch from fleet-packing to volume/read cuts: the issue-analysis fallback still resolved 2 agents under tactical, the issue-tracker collision still said tactical sets the agent count, and the surprise-me collision still said tactical keeps "only" the waived floor while the reference also gave it the volume and read cuts. Fixing the three in place would leave the same trap for the next change, since each collision site re-enumerated tactical's effect from scratch. Phase 0.5 now defines **tactical's dials** as one complete named set -- 3-4 ideas per frame, 2-3 verification reads, 3 axes, 3 scouts, floor waived at both layers -- and states what tactical does NOT touch (agent count, frame set, tier). Every collision site and both references now reference the set by name. A test pins the named set, its does-not-touch clause, the by-name references, and the absence of any surviving 2-agent tactical claim. Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 536976e1ed
ℹ️ 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".
… a real distiller Two findings: The universal path swallowed explicit volume overrides. divergent-ideation.md has always said an override like "100 ideas" adjusts the per-frame target, but universal-ideation.md hardcoded "3-4 when tactical scope is active" with no escape -- so "100 quick wins for this launch strategy" capped at 18-24 raw ideas on the non-software path. The override clause is now mirrored there. The user-research stub awaited a distiller that may not exist. It said to distill and await unconditionally, while the reference folds a small artifact into the grounding summary inline with no sub-agent. A literal runner would dispatch an agent that should not exist and block the batch on it. The stub now names the no-distiller case and makes the await conditional on one running. Tests pin the override escape on both paths and the conditional await. Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f5a095cb60
ℹ️ 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".
…size unresolved at notice time The frame guard was vacuous a third time, one level finer than the last fix. Section scoping still let the section's own intro sentence -- "ceiling frames (assumption-breaking, analogy, constraint-flipping)" -- plus the axis-coverage example satisfy three of the six probes, so deleting those three definitions on the universal path left the test green. Confirmed by running it. Frames are now asserted by DEFINITION LINE: each name must head its own bolded list item inside the owning section. A passing mention in prose no longer counts. Falsified against both the reviewer's exact case (delete three universal definitions, keep the intro) and a single-definition deletion on the software side; each turns the suite red. Separately, Phase 0.6 asked the cost notice to name the ideation fleet size, but the six-agent go-deep/surprise-me variant is defined in divergent-ideation.md, which is not loaded until Phase 2, and Phase 0.5 names those overrides without their counts. A sequential runner could not derive the number and would likely reuse the five-agent example -- the one value certain to be wrong there. The notice now names the fleet as scaled by the active override instead of stating a count, matching how it already handles the depth-dependent universal count. Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fb90c26463
ℹ️ 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".
…-count cases together The reads fix from two commits ago was still wrong. It lifted a raised-volume run back to "the ordinary 5 reads" -- but 5 is calibrated for roughly 6-8 ideas from ONE frame, so at ~16-17 ideas per frame it verifies a third as much per idea, and the default fleet's two-frame cousin agent was already submitting two frames' worth against that same 5. The "ratio is the point" claim was never literally true even at baseline. The budget is now stated as a rate sized to what an agent actually submits: the tactical cut is legitimate because generation is cut alongside it, a volume override raises the budget with it instead of snapping back to a smaller-target number, and a two-frame agent needs proportionally more. Mirrored on the universal path. Added the honest valve rather than pretending the rate solves everything: at a large raw-volume override, per-idea depth still falls, and the artifact must say so instead of implying uniform scrutiny. Separately, the Phase 0.6 fleet-size paragraph added last commit contradicted the sentence above it, which still called elsewhere-non-software "the one mode" with an unsettled count -- an exclusivity claim that licensed reusing the five-agent example for a software go-deep run, the exact miscount the addition forbade. Both cases are now stated together, with tactical explicitly excluded since it changes volume and reads but never the agent count. Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fbc5ed70e8
ℹ️ 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".
My previous fix made the 5-read budget a per-submission *rate* ("any agent
carrying more than one frame's 6-8 ideas needs proportionally more"), which
directly contradicted the flat budget line two lines above it -- and that line
governs every default dispatch, since the default fleet's cousin agent holds
two frames.
That is the third consecutive round where a repair contradicted its neighbour
(the duplicate survivor-scoring rubric, the "one mode" exclusivity claim, now
this). The common cause is adding a statement beside an existing one without
reconciling them, so this reverts the elaboration rather than adding a fourth
statement to reconcile three.
What remains is one budget and its two real consequences:
- One stated budget: 5 reads, 10 under `go deep`, 2-3 under tactical scope.
- The tactical cap is paired with the tactical volume cut, so a run carrying
both a tactical signal and a volume override verifies at 5, not 2-3.
- Budgets are ceilings, not guarantees of uniform scrutiny. A two-frame agent
or a raised-volume run gets less per-idea depth; that is an accepted trade
and the artifact says so rather than implying equal verification.
The per-idea "ratio" framing is gone entirely -- it was never true even at
baseline, since the cousin agent always submitted two frames' worth against
one budget. A test asserts the rate formulation cannot return.
Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7db4ede948
ℹ️ 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".
…g cases The previous commit replaced "the one mode whose count is unsettled" with "two situations" -- a smaller closed set, but still a closed set, and it was still incomplete. Issue-tracker mode is a third: the fleet is 4 theme agents if the Phase 1 scan returns usable themes, otherwise the default, and that is decided after this notice fires. Adding a third bullet would invite a fourth, so the enumeration is gone. Phase 0.6 now states the rule -- if the number comes from a decision this phase has not made, describe the leg instead of counting it -- with the known cases listed as explicitly non-exhaustive examples, issue-tracker mode among them. Tactical stays named as the case that IS resolvable, since it changes volume and reads but never the agent count. Tests assert the rule and the non-exhaustive marker, and that neither closed-set phrasing can return. Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 52d8aceca9
ℹ️ 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".
All four are "which number wins when two rules apply": A raw total below the frame floor was unsatisfiable. "3 ideas about auth" divided three ideas across six required frames, so the run had to either overshoot the ask or leave frames unrun. Any total at or below roughly one per frame now reads the way `top 3` does -- generate normally, cut to that many survivors -- on both paths. An explicit survivor count lost to the depth default. The universal convergence target was unconditional, so `top 3 names for a coffee shop` could return five at Standard depth even though line 81 makes `top 3` the survivor limit. An explicit count now wins outright, with the depth-keyed target as the fallback. The issue-tracker fallback said "the default fleet" -- the ordinary five -- directly above a sentence forbidding that figure. It now falls back to the six-frame default at this run's own count, which is 6 under go deep or surprise-me. The docs page claimed all software/product tactical runs keep five agents, but an issue-tracker run with usable themes dispatches four. Exception added. Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 483bca0f87
ℹ️ 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".
The issue-analysis fallback named tactical's lowered volume and reads, so "100 quick wins from open issues" that fell back on an unreachable tracker discarded the user's explicit total and generated 18-24 candidates against the tactical read cap -- after divergent-ideation.md had already resolved the override as the winner. Last round fixed the agent-count half of this same sentence and left the volume/read half naming specifics. Both halves, and the two references stating the same rule, now say the fallback carries every value the run has already resolved -- count, volume, reads, and any explicit user override -- and restores the default frame set only. Naming any specific value in a fallback is the defect: it re-derives what an earlier phase settled and silently outranks a user's request. All three sites now name none, and a parity rule plus a negative assertion keep tactical's defaults from reappearing there. Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 72c0acd134
ℹ️ 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".
…values Last commit's "carry every resolved value, re-derive nothing" was inverted, and broke in two ways at once. Issue-tracker mode resolves a 4-agent fleet. Carrying that agent count while switching to the six default frames leaves 4 agents holding 6 frames -- exactly the packing this PR removed, because the verification budget is per agent. And carrying a per-frame volume across a 4-to-6 frame change multiplies the total: "100 ideas from open issues" resolved as 25 per theme frame becomes ~150 on fallback, contradicting the rule that a raw number is a total. The split is now explicit at all three sites: preserve what the user asked for (raw total, explicit survivor count, `go deep`, tactical signal) and re-derive what the mode computed for the surface being abandoned (agent count, per-frame split, and the read budget that followed from them). Both hazards are named in the text so the reason survives the next edit. Also removed a parity entry added last commit that asserted this rule on both paths. Issue-tracker fallback is software-path-only -- the universal path has zero issue-tracker mentions -- so its universal probe was matching an unrelated survivor-count line and could never fail. The assertion now lives in the software-only contract test, checked across all three sites, and falsified by injecting each hazard's removal. Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
…ot raw signals The fallback rule from last commit preserved the user's raw prompt signals -- "`go deep`, a tactical signal" -- and re-derived the dials from them. That skips Phase 0.5's collision resolution, where `go deep` suppresses tactical scope entirely. A `go deep quick wins from open issues` run that fell back would resurrect the waived ambition floor and lowered volume on an all-ceiling maximum-depth fleet -- the same waiver leak this PR fixed at the start, returning through a different door. The fallback now carries Phase 0.5's already-resolved state (which overrides survived its collisions, plus the raw total or explicit survivor count) and re-derives only the two values the abandoned frame count determined: the agent count and the per-frame split. It explicitly does not re-read the prompt. Tests pin the post-collision wording and the stated reason, and assert that neither of the two earlier formulations -- inherit-everything, or re-derive-from-raw-signals -- can return. Falsified by reverting the wording and watching it go red. Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 229f9e29cb
ℹ️ 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".
…te machine Twenty rounds of review-driven "precision" had grown SKILL.md from 6,941 words back to 7,890 -- recovering 67% of this PR's slimming and leaving it only 5.6% under main. Three sections absorbed 908 of those 937 words: the fallback rule (194 words across three files), Phase 0.6's unresolved-count enumeration, and Phase 0.5's per-pair collision table. Each addition was individually valid and each spawned the next contradiction, because the sections were being written as a state machine for an executor rather than guidance for an agent that can reason. The field guide is explicit: if removal mainly gives a capable model more freedom to reason, it is judgment -- delete it first, and do not answer lost quality by stacking more protocol. Collapsed: - The fallback is one clause: fall back to the six default frames, keeping the scaling already resolved and recomputing only what the frame count itself determines. An agent applying that will not put a 4-agent fleet on 6 frames or multiply a requested total; both are visibly incoherent. - Phase 0.6 states one conditional rule instead of a case list that was incomplete three times running. - Phase 0.5 states surface-owns-frames / budget-owns-volume once, with the per-variant table left to divergent-ideation.md, which owns dispatch. Kept every rule with a demonstrated failure behind it: tactical cuts volume not lenses, no packing, the waiver at both layers, the named dial set, the ordered scan/scope/cluster/await skeleton, load-before-dispatch, and derive-don't- memorize. Tests now assert those principles; the assertions that had calcified the deleted nitpick wording are gone. SKILL.md 7,890 -> 7,566 words. Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 5233c9e. Configure here.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5233c9ed66
ℹ️ 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".
Applying Feedback to Skills gates whether a finding is worth editing for, but says nothing about what happens once a fix itself becomes the next round's target. PR #1125 diagnosed prose accretion across review rounds and installed the author-side gate; this closes the gap it left open. Observed on this PR: ~26 review rounds produced overwhelmingly material findings -- 7 of the last 8 named a concrete runtime consequence -- yet ce-ideate's SKILL.md still grew 6,941 -> 7,890 words, because each valid finding was answered with more prose, manufacturing fresh cross-file surface for the next round to find. The reviewer was not the problem. The re-verify clause is earned by a regression here: collapsing three sections to principles (5233c9e) left a condensed rule pointing universal-path runs at a table that has no universal rows. Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
…vivor limit a consumer Three fixes, each removing a wrong statement rather than qualifying it. - The tactical read-budget pairing keyed on a run *carrying* `quick wins`, so `go deep -- give me 100 quick wins` halved go deep's 10 reads to 5. It now keys on tactical scope still being active after Phase 0.5 resolves collisions, which is what the governing rule already said. - A total too small to spread across frames resolves to a survivor limit, but Phase 3 targeted 5-7 unconditionally, so `3 ideas about auth` could return more than asked. post-ideation-workflow.md now honors an explicit survivor count first, matching the wording the universal path already used. - Phase 0.5's collision rule pointed at divergent-ideation.md for the per-variant table while naming the universal path as a colliding surface. universal-ideation.md carries its own depth-keyed rules instead, so the pointer was wrong on that path; dropped it, since each path already loads its own dispatch spec. The always-loaded body shrinks 5 words. Full suite green (2968 pass). Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
|
@codex review Two commits landed after the last review pass (which stopped at
The third is a deletion — please check that dropping the pointer did not strand the software path, which now relies on the Phase 1 load instruction alone. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b460ed198f
ℹ️ 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".
b460ed1 replaced "fewer than 5" with "fewer than the target" so an explicit count would be honored, but on a default run "the target" is the 5-7 range, so five or six sound survivors read as a shortfall. The floor is now named inline: the explicit count when one was given, five otherwise. Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq

Summary
ce-ideatenow scales with what you asked for. Previously onlygo deepchanged a run — it raised every agent to the ceiling tier, doubled verification reads, and added a critic. A tactical ask (quick wins,polish,cleanup) lowered the ambition floor and nothing else, so the cheapest-to-be-wrong phase in the chain stayed the most expensive to run. Tactical now roughly halves generated output without cutting a lens or thinning the basis check.The always-loaded body is 9.5% smaller — 8,354 → 7,561 words, with 1,279 words moved into two references that load only when their trigger fires.
Rewriting the scaling rules is what exposed the defects below: 30 of the 33 commits are correctness fixes, and the diff is net-additive. Read this as a fix PR with a size benefit, not a cleanup.
AGENTS.mdalso gains one rule, diagnosed from this PR's own review history: when a finding targets text an earlier round added, delete that addition rather than qualify it — and re-verify the shortened rule against every path it served.What was broken
The tactical waiver was cancelled one phase later. Generators waive the meeting-test under tactical scope, but the Phase 3 verifier is dispatched with "none of the generation history", told to check the meeting-test with no waiver, and its judgment "supersedes the generators' self-attestation" — so every candidate on a tactical run should come back
weak.go deepsilently lost half its verification budget. The tactical read cut keyed on a run carryingquick winsrather than on tactical scope surviving collision resolution, sogo deep — give me 100 quick winsdropped from 10 reads to 5 even thoughgo deepsuppresses tactical outright.A survivor limit had no consumer. A total too small to spread across the frames resolves to a survivor limit, but Phase 3 targeted 5-7 unconditionally — so
3 ideas about authcould return more than asked.Two of five cost examples contradicted their own enumeration (printed "~13 agents", listed 14). The formula is gone rather than patched: the agent derives the line from the dispatch decisions it just made.
Phase 1 cited the wrong phase for issue-tracker detection, and surprise-me was specified in eight places across ~350 lines, with silent partial application as the failure mode.
Codex, reviewing the pre-change prose blind during the eval, stated the scaling defect back unprompted: "'quick wins' triggered only the tactical-scope relaxation — it did not reduce the default fleet or candidate volume."
Two decisions worth pushing back on
Cost comes out of volume, never out of lenses or verification. Packing six frames into two agents was tried on this branch and reverted: per-frame idea targets persist under packing, so two packed agents still generate the same 36-48 candidates — while the verification-read budget is per agent, so a three-frame agent checks each idea's basis about a third as thoroughly. Tactical keeps the default 5-agent/6-frame fleet and lowers what each frame produces.
Both extractions keep their dispatch skeleton inline. Issue intelligence and user research moved to references, but both carry an ordered dispatch with an await — the shape that measured 0/5 in the
ce-debugPhase 4 eval, where agents read the reference and stopped. The references own only the payloads.Validation
Mechanical:
bun run test(2,968 pass, 0 fail),release:validate,plugin:validate --strict. Two new contract files carry 47 tests; when first written, 15 of the dispatch-contract assertions were confirmed to fail against the pre-change files. Three defects here were ordering problems — a load instruction placed after the step it governs — and every one passed a presence-style assertion, so those are now index assertions.Behavioral: paired old-vs-new blind injection, 48 runs across Claude and Codex, per
docs/solutions/skill-design/paired-old-vs-new-injection-skill-evals.md. Tactical scaling with frame coverage held went 0/6 → 6/6 on both hosts. Issue-intelligence sequencing, surprise-me consolidation, and the verifier waiver each held at 6/6 with no regression — the waiver scenario is non-discriminating, since both models reasoned past the old contradiction unaided.Read honestly: only the tactical-scaling row is a demonstrated behavior change. The rest buys determinism and weaker-model insurance.
Residual
universal-ideation.mdis a parallel implementation of the same generation contract for non-software topics, with nothing enforcing parity — five findings here traced to it, each a different rule that never crossed. Predates this PR; the new both-paths assertions cover only the rules that broke.direct:>external:>reasoned:, while the two ceiling-tier frames are the ones told to producereasoned:— the skill may be discounting the output it spends the most on.The last two predate this PR and need an eval that grades idea quality rather than dispatch shape.
Security Disclosure
No security-relevant changes. No shell/exec, path or input handling, converter/writer output, credential, permission, or dependency changes. The Phase 1 scratch-directory fence is unchanged; the reference-file and
AGENTS.mdadditions are prose only.Agent Disclosure
Claude Code · claude-opus-5[1m]