Skip to content

results: multi-round cascade dynamics, adoption is single-shot not building (#130) - #155

Closed
sebasmos wants to merge 3 commits into
mainfrom
results/multi-round-dynamics
Closed

results: multi-round cascade dynamics, adoption is single-shot not building (#130)#155
sebasmos wants to merge 3 commits into
mainfrom
results/multi-round-dynamics

Conversation

@sebasmos

Copy link
Copy Markdown
Member

What (closes #130)

Multi-round cascade dynamics: does shortcut adoption build over deliberation rounds, or is it single-shot? Under the plausible (case-anchored) cascade, the committee runs for K rounds and the holdout's answer is recorded at each round, shared vs isolated.

Result (MedQA, 40 cases, K=5)

round 1 2 3 4 5
shared adoption 0.175 0.15 0.175 0.15 0.15
isolated adoption 0.0 0.0 0.0 0.0 0.0

Null: adoption does not compound over rounds (round 1 vs round 5 McNemar p = 1.0; not monotone). The holdout that adopts the plausible shortcut does so immediately; repeated exposure recruits no one else. This sharpens the story: the cascade is driven by plausibility (a single-shot decision at first contact), not by accumulating social pressure.

Acceptance (#130)

  • Per-round adoption curves, shared vs isolated. ✅
  • Simple test for monotone increase (round-1-vs-round-K McNemar + a non-decreasing check). ✅
  • Unit test on a hand-built transcript where adoption grows (tests/test_multi_round.py, 4 tests). ✅

Reproduction

Keyless from the committed cache (new_api_calls_this_run = 0). The per-round analysis (per_round_holdout_answers, adoption_curve, is_monotone_nondecreasing) is pure, no key/network. ruff clean. See experiments/cascade/README.md.

…es (shared vs isolated) under the anchored cascade + a monotone-increase test; pure analysis unit-tested on a hand-built growing transcript. Finding: NULL, adoption is flat across rounds (0.15-0.18, McNemar p=1.0), single-shot not building. Keyless-reproducible (0 API calls)
… responses, mis-scoring ~85% as option A). Corrects this experiment's committed numbers; see the 2026-07-21 re-grade
@sebasmos

Copy link
Copy Markdown
Member Author

Parser-bug correction (2026-07-21). The answer parser (_parse_choice / _parse) matched the first \b([A-E])\b in the response, which on long reasoned answers is the stray article "A", so it scored ~85%% (flash) / ~97%% (flash-lite) of answers as option A. The parser is now fixed on this branch (prefers \boxed{X} / "final answer is X" / the last named option). Corrected numbers:

  • Multi-round (corrected): the anchored-cascade adoption is real, ~0.28-0.33 shared vs 0.0 isolated, still flat over 5 rounds (single-shot, McNemar p=0.63). Committed artifacts to be regenerated.

…ted numbers; keyless-reproducible off the updated cache)

@Agastya191 Agastya191 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ood work on multi_round.py and test_multi_round.py. Splitting the pure per-round analysis (per_round_holdout_answers, adoption_curve, is_monotone_nondecreasing) out from the runner and testing it against a hand-built transcript where adoption does grow is the right way to make a null result credible, and the _parse fix was a good catch.

The first problem is that experiments/cascade/README.md and the pull request body still carry the pre-fix numbers. The table reads 0.175, 0.15, 0.175, 0.15, 0.15 with McNemar p = 1.0, while the committed results/multi_round_summary.json regenerated in c4aac6e reads 0.275, 0.3, 0.275, 0.325, 0.325 with gained 3, lost 1, p = 0.625. The writeup contradicts the artifact of record, and "the shared curve is flat (~0.15-0.18 every round)" does not describe a curve that drifts up about five points from round 1 to round 5. I would regenerate the table and the Read paragraph directly from multi_round_summary.json and restate the finding as no significant compounding at p = 0.625 rather than as flat.

The second is that in multi_round.py the isolated arm cannot come out nonzero. The isolated holdout's prompt is _mcq(case) with an empty board prefix, byte-identical to the base_p used to compute bare, so at temperature 0 off the same cache it returns bare in every round, and wrong is selected with the condition o != bare. That makes the isolated 0.0 row true by construction rather than measured, so it carries no weight as the solo counterfactual. You have options here too. I would either give the isolated holdout a prompt that lets its trajectory actually move, or keep the row and say plainly in the README that the isolated arm is zero by design.

@sebasmos

Copy link
Copy Markdown
Member Author

Closing in favor of #225: both points fixed (stale README/body regenerated, and the isolated arm's real bug: its prompt was byte-identical to the bare prompt every round since board text only ever read peer votes, which are never visible in isolated mode, so adoption there was 0 by construction, not measurement; now reminds the holdout of its own previous-round answer instead, run for real and re-verified keyless), rebased fresh off current main so it does not delete #142/#143/#146/#148/#154/#157/#161/#219.

@sebasmos sebasmos closed this Jul 22, 2026
@sebasmos
sebasmos deleted the results/multi-round-dynamics branch July 24, 2026 00:14
sebasmos added a commit that referenced this pull request Aug 4, 2026
Rebased fresh off current main (the original branch predated #142/#143/#146/#148/#154/#157/
#161/#219 and would have deleted all of that merged work if landed as-is, same stale-base
issue as #143/#150/#141/#159/#158).

Addresses @Agastya191's review on #155:
- README/PR body carried pre-fix numbers (shared 0.175/0.15/0.175/0.15/0.15, p=1.0) versus the
  already-corrected committed summary (0.275/0.3/0.275/0.325/0.325, gained 3 lost 1 p=0.625).
  Rewrote to match and restated the finding as no significant compounding at p=0.625.
- Real bug: the isolated holdout's prompt was byte-identical to the bare prompt every round
  (board text was built only from peer votes, which are never visible in isolated mode), so at
  temperature 0 it deterministically reproduced round 1's answer every round. Isolated adoption
  was 0 by construction, not by measurement. Fixed by reminding the isolated holdout of its own
  previous-round answer (visible to it in isolated mode; only peer turns are hidden), so the
  prompt genuinely differs round to round. The shared arm's board construction is UNCHANGED, so
  the shared numbers are identical to what was already reviewed; only the isolated arm is new.

Result: isolated adoption is now a genuine (if still near-floor) measurement: 0.0/0.025/0.0/
0.025/0.0, at most 1 of 40 cases per round, rather than a trivial constant 0.0.

Verified end-to-end: ran for real with the isolated fix (206 new calls), then re-verified keyless
reproduction with the key unset (new_api_calls_this_run: 0, exact match on both curves), ruff
clean, 629 tests pass, no hardcoded personal paths, 0 em dashes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Experiment: multi-round cascade dynamics (does adoption grow over rounds?)

2 participants