The attribution memo you replied to credits the wrong laboratory — do not ship it - #292
Open
syncytium2 wants to merge 2 commits into
Open
The attribution memo you replied to credits the wrong laboratory — do not ship it#292syncytium2 wants to merge 2 commits into
syncytium2 wants to merge 2 commits into
Conversation
syncytium2
pushed a commit
that referenced
this pull request
Aug 27, 2026
…o surface Two sessions closed together; this is the one file the next one reads. Root HANDOFF.md, because five PRs are in flight — #304, #292, #270 (red), #53, #50 — and `tests/test_handoff_is_honest.py` retires it when the last of them closes. MURDERBOARDED, 11 of 11 roles, 2 blind rounds, record in docs/reviews/HANDOFF_2026-08-27.md. The freshness gate stopped the run first, for the second time in three days — vendored 94d720c against upstream 73dad04 — so the family was re-vendored before any role ran. Roster unchanged at 11. THE TWO FINDINGS THAT MATTER WERE BOTH FOUND BY RUNNING SOMETHING. The handoff guard rejected the first draft. Its opening forty lines — the region the guard checks and the briefing shows — named exactly one PR, #298, which is closed. The page asserted "five PRs are open" in prose while the only machine-checkable thing where it counted was a dead one. The open PRs are named there now and it resolves all six live. Then the full suite caught the file starving the waiting-on-Tony list. ALARM_ROOM is a shared pool spent in emission order, and a root handoff renders first — correctly; it is the stop-something-is-in-flight line. This one is 601B, which left the list too little, and the third item's action line came out as "-> Did […]". That item is "did you mean to close PR #298" — one of the three decisions the page exists to put in front of a person. The handoff was cutting the decision list to make room for itself. The fix follows this file's own ALARM_ROOM comment, which already calls that trade backwards: the handoff is the safer thing to shorten, because its alarm says READ THE FILE and the reader is about to, while a decision request appears nowhere else. emit_bounded takes a RESERVE — a block that renders early is told what a later, less truncatable one needs and spends only the remainder. The ADR todo's waiting: line also went from 278B to 160B, three sentences where the convention is one. A SECOND TEST WAS WRITTEN FOR THIS AND DELETED. It counted action lines; the truncation cut the tail of the third line rather than the line, so the count never moved and it passed with the fix reverted. test_it_surfaces_work_that_is_finished_and_waiting_on_a_person already asserts the real property and fails without the reserve — verified in both directions. A guard nobody has watched fail is not a guard, and shipping a redundant one that cannot fire would have been this session's own criticism, committed. The budget could not just be raised. tools/hook_spill_census.sh, built by the other session from 55 real spill records, puts the threshold at (8962B, 10186B] and rates the 9,000B budget "ok, 1186B under the smallest refusal". No room to buy. ALSO: the machine-local board went from 12 ACTIVE claims to 4. The eight released held nothing — merged branches, reaped worktrees — and the briefing was showing them as live to every session that started. Suite 1,378 passed, 13 skipped. sapper clear. Briefing 8,962B against 9,000B, which the page states, because the next thing added to that hook degrades FOUNDATIONS §9. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This was referenced Aug 27, 2026
… not ship it
docs/reviews/attribution_corrections_2026-08-24.md
interface2's method-attribution memo told you to credit "the Cossart-lab SCE
rule" and cite Dard 2022. Both are wrong. The rule is a YUSTE-lab method:
Cossart R, Aronov D, Yuste R (2003) Nature 423(6937):283-288
doi:10.1038/nature01614, PMID 12748641
Cossart is FIRST author there, at Columbia, in Yuste's lab, as a postdoc; Yuste
is last author. She carried the method to Marseille. The lineage is Yuste ->
Cossart, so the memo is ~19 years late and one laboratory upstream. If that goes
into your UI you publish a wrong attribution -- which is the exact failure the
memo exists to correct, one level up.
Three more you should act on, all verified:
* The "event-time merge rule" is published, not an interface2 adaptation. It
is the sentence immediately after the passage the memo block-quotes, cut at
exactly that point (Dard 2022: "separated by at least five imaging frames").
Modol has it at 7; CICADA implements it as sce_min_distance.
* The Zenodo citation points at a release that does not contain the code. The
v1.0.3 tarball has no sce_stats_utils.py at all. Cite the Software Heritage
revision Dard 2022 uses, or a commit SHA.
* The memo's "quirk we faithfully preserved" is not upstream behaviour.
CICADA never composes get_sce_threshold with detect_sce -- the plugin is
per-frame on both sides. The pairing is the port's, and it is PERMISSIVE:
the windowed sum is pointwise >= the single-frame null, so the threshold
sits too low and detections inflate. Check whether your port inherited it.
Two more are flagged UNVERIFIED and should not be acted on until read. Thomas
Kreuz, who wrote the measure you wrapped, says he publishes a threshold-plus-
max-gap detection layer on SPIKE-synchronization (Cecchini 2022 PLoS Comput Biol
SM1; Kreuz 2024 and Mariani, J Neurosci Methods), which bears on the memo's
"detection layer ours". He also points at Mainen & Sejnowski, Science 1995 as
possibly the origin of PSTH thresholding, which bears on rate_detect's "ours as
far as we know". Read them before rewriting anything.
One thing needs no action and is recorded so nobody reopens it: Kreuz recommends
profile C (symmetric) over E for global event identification, because
identification should not depend on order. sync.py already uses C.
PROVENANCE, because it is the point. Items 1-4 came from two blind murderboard
runs on the memo as it stood at interface2 16c0e362^, run independently with the
known failure withheld; both caught the wrong lab. Items 5-6 were missed by every
run and came from an email Kreuz sent on 2026-04-23 -- four months before the memo
was written. The evidence was in-house the entire time and no literature search
surfaced it, because it was correspondence, not a paper. Treat this list as what
two reviews and one email produced, not as complete.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The reviews behind items 1-7 ran against a doc_review_process.md that predates the re-vendor in #307, which added trace-citations-forward and ask-what-the- humans-hold to role 2. Merging without applying them ships a review that skipped them silently. Applied. Items 1-7 unchanged; two reclassified and three gaps that were invisible are now named. The largest: nobody has ever asked the Cossart lab anything, while this memo makes four claims about their artifacts and one about their intent - and the cheapest open item in the document is one email to them. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
syncytium2
pushed a commit
that referenced
this pull request
Aug 28, 2026
…eview over nothing The freshness gate reported STALE and hard-stopped the review of #292. Every vendored file was byte-identical to upstream with the stamp line removed, and no commit between our stamp and upstream HEAD touched any of the five: 3593c44 changed traffic.yml and metrics/, the two after it changed .claude-plugin/, a CI workflow and a traffic script. Stamps bumped to f62acb3, which is what murderboard_revendor.py had been reporting all along beside "body changed: none". Content does not move; the diff is five comment lines. Filed the gate's semantics rather than patching a vendored file in place, which its own header forbids: it compares stamps, not content, so any upstream commit makes every consumer stale and every clearance costs a PR onto the default branch. The process file warns twice that noise is what gets a check switched off. The two --selftest failures are the known portability defect and reproduce on an unmodified primary checkout. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
syncytium2
force-pushed
the
attribution-corrections
branch
from
August 28, 2026 22:40
3cfe1cf to
6713607
Compare
This was referenced Aug 29, 2026
syncytium2
pushed a commit
that referenced
this pull request
Sep 1, 2026
… rotting The root HANDOFF.md is read aloud at every session start. It claimed main at ced0da4 (37 commits back), the suite at 1,569 against 1,708 collected, and the board at "30 ACTIVE, 7 with a live worktree" against 39 ACTIVE of 275 with 29 having none. What makes this worth a commit rather than a quiet fix: the note directly beneath those figures, dated 2026-08-30, says "every figure above had rotted" and draws the general lesson -- "a file whose whole job is to say what is true cannot be checked only on its own retirement condition". Then it refreshed the numbers and left them there. Same file, same claim, wrong twice in three days, with the diagnosis printed underneath both times. So the counts come out rather than getting a third value. Each is one command and the commands are now in their place, alongside docs/MILESTONES.md for the durable question -- rows pinned to commits, which can go incomplete but cannot silently change their minds. RESET.md reached this first and says why: "those were wrong within the hour it took to draft this." The retirement gate is untouched and still cannot fire: #292, #53 and #50 are all open, so test_handoff_is_honest.py stays green no matter what this file says. That is a separate defect and it stays open. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
syncytium2
added a commit
that referenced
this pull request
Sep 1, 2026
… rotting (#437) The root HANDOFF.md is read aloud at every session start. It claimed main at ced0da4 (37 commits back), the suite at 1,569 against 1,708 collected, and the board at "30 ACTIVE, 7 with a live worktree" against 39 ACTIVE of 275 with 29 having none. What makes this worth a commit rather than a quiet fix: the note directly beneath those figures, dated 2026-08-30, says "every figure above had rotted" and draws the general lesson -- "a file whose whole job is to say what is true cannot be checked only on its own retirement condition". Then it refreshed the numbers and left them there. Same file, same claim, wrong twice in three days, with the diagnosis printed underneath both times. So the counts come out rather than getting a third value. Each is one command and the commands are now in their place, alongside docs/MILESTONES.md for the durable question -- rows pinned to commits, which can go incomplete but cannot silently change their minds. RESET.md reached this first and says why: "those were wrong within the hour it took to draft this." The retirement gate is untouched and still cannot fire: #292, #53 and #50 are all open, so test_handoff_is_honest.py stays green no matter what this file says. That is a separate defect and it stays open. Co-authored-by: richard defazio <defazio@umich.edu> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.
docs/reviews/attribution_corrections_2026-08-24.md— the full commit message carries the account.The headline
interface2's memo told you to credit "the Cossart-lab SCE rule" and cite Dard 2022. Both are wrong.
Cossart is first author there, at Columbia, in Yuste's lab, as a postdoc; Yuste is last author. She carried the method to Marseille. The lineage is Yuste → Cossart — so the memo is ~19 years late and one laboratory upstream. Publishing "Cossart lab" to the UI would be a wrong attribution, which is the exact failure the memo exists to correct, one level up.
Verified — act on these
Unverified — do not act until read
Thomas Kreuz, author of the measure you wrapped, reports publishing a threshold-plus-max-gap detection layer on SPIKE-synchronization (Cecchini 2022 PLoS Comput Biol SM1; Kreuz 2024 and Mariani, J Neurosci Methods), which bears on the memo's "detection layer ours". He also points at Mainen & Sejnowski, Science 1995 as possibly the origin of PSTH thresholding, which bears on
rate_detect's "ours, as far as we know".One visible difference already: Kreuz requires an amplitude condition (mean calcium > 1.7 SD) in addition to synchrony;
sync.pygates on the C profile alone.No action needed, recorded so nobody reopens it
Kreuz recommends profile C (symmetric) over E for global event identification.
sync.pyalready uses C.Provenance, because it is the point
Items 1–4 came from two blind murderboard runs on the memo at interface2
16c0e362^, run independently with the known failure withheld. Both caught the wrong lab.Items 5–6 were missed by every run. They came from an email Kreuz sent 2026-04-23 — four months before the memo was written. The evidence was in-house the whole time; no literature search surfaced it, because it was correspondence, not a paper.
This list is not exhaustive, and the one class of finding that did not come from the process is the class the process is supposed to be best at.
🤖 Generated with Claude Code