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
The parity guard added last commit could not catch two of the rules it claimed
to pin. `divergent-ideation.md` contains no Phase 3 verifier at all -- the
probe was matching its generation-time verification-read budget, a different
mechanism in a different phase -- and the axis-spread probe matched the
generation-time "distribute across axes" instruction rather than survivor-set
scoring. Both real rules live in `post-ideation-workflow.md`, which the test
never read, so deleting either would have left the suite green.
Fixed structurally rather than by patching two regexes: each rule now names the
file that owns it, and the convergence reference is part of the software path.
Probing a whole path as one blob is what let a lookalike in the wrong file
satisfy an assertion. A meta-test asserts convergence-phase rules are probed in
the convergence file.
Then audited every probe instead of the two reported, by deleting each rule
from its owning file and confirming that rule's test goes red -- 11 rules
across both paths, 22 checks, all now failing on removal. The original
verification injected drift into only 2 of 11 probes and generalized from
those; that was the process error underneath this bug.
Three content gaps fixed alongside:
- The reads-track-ideas override never reached the universal path -- the fifth
distinct dial to miss it, and one the named dial set could not cover because
it is an interaction rule between a dial and an override rather than a dial.
It is now enforced by the parity map, not just present.
- Parallel research distillers collided on a shared basename: `q3/report.md`
and `q4/report.md` both slugified to `report`, so concurrent agents
overwrote each other's dossier while the gists still pointed at it. The slug
now derives from the full path plus a digest, with a distinctness check
before dispatch.
- The docs page's fleet claim was software-path-only; non-software runs
dispatch zero ideation agents at Quick/Standard and one per lens at Full.
Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
Two findings:
"100 ideas" multiplied instead of dividing. The spec said a volume override
"raises the per-frame target", so a request for 100 ideas asked each of six
frames for 100 -- ~600 raw candidates, and on a tactical run it defeated the
cost reduction entirely. A raw number is now explicitly a total to divide
across the frames in play (~16-17 each over six), while `top 3`-shaped requests
constrain survivors and leave generation alone. Both the software spec and its
universal twin carry the rule, and the test asserts both.
The docs page claimed six lenses run in six agents. The default is five: one
ceiling-tier agent holds assumption-breaking and constraint-flipping together
as cognitive cousins. The page now says six lenses across five agents, which
matters because the surrounding paragraph is explaining why packing was
rejected -- overstating the count undercut the point it was making.
Claude-Session: https://claude.ai/code/session_01LFdS46yevebfqNrcrJMiVq
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
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