results: multi-round cascade dynamics, adoption is single-shot not building (#130) - #155
results: multi-round cascade dynamics, adoption is single-shot not building (#130)#155sebasmos wants to merge 3 commits into
Conversation
…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
|
Parser-bug correction (2026-07-21). The answer parser (
|
…ted numbers; keyless-reproducible off the updated cache)
Agastya191
left a comment
There was a problem hiding this comment.
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.
|
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. |
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.
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)
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)
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.ruffclean. Seeexperiments/cascade/README.md.