Skip to content

The attribution memo you replied to credits the wrong laboratory — do not ship it - #292

Open
syncytium2 wants to merge 2 commits into
mainfrom
attribution-corrections
Open

The attribution memo you replied to credits the wrong laboratory — do not ship it#292
syncytium2 wants to merge 2 commits into
mainfrom
attribution-corrections

Conversation

@syncytium2

Copy link
Copy Markdown
Owner

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 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. 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

# finding
1 SCE origin is Cossart/Aronov/Yuste 2003 (building on Mao 2001), not a 2020s Cossart-lab rule
2 The "event-time merge rule" is published, not an interface2 adaptation — it is the sentence immediately after the memo's block quote, cut at exactly that point
3 The Zenodo v1.0.3 citation points at a tarball that does not contain the code; use the Software Heritage revision Dard 2022 pins
4 The "quirk we faithfully preserved" is not upstream behaviour — CICADA never composes those two functions, and the pairing is permissive, inflating detections

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.py gates 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.py already 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

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>
defazio2 and others added 2 commits August 28, 2026 14:54
… 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
syncytium2 force-pushed the attribution-corrections branch from 3cfe1cf to 6713607 Compare August 28, 2026 22:40
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>
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.

2 participants