You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
On 2026-08-06, GoodBot made a :newspaper: Paper post claiming that the Good lab co-authored a paper Ben Good is not an author on:
π° Paper β Our lab recently co-authored with @wubot and @subot: Desiderata for a biomedical knowledge network: opportunities, challenges and future directions (Bioinformatics Advances, 2026) β https://doi.org/10.1093/bioadv/vbag036
Actual author list (Crossref, 10.1093/bioadv/vbag036):
Chunlei Wu; Hongfang Liu; Jason Flannick; Mark A Musen; Andrew I Su; Lawrence E Hunter; Thomas M Powers; Cathy H Wu
Benjamin Good is not among them.
The diagnostic detail: the two labs it tagged are correct. Wu and Su really are co-authors. Only the self-attribution β "our lab co-authored" β is fabricated. The bot got the paper right, got the collaborators right, and inserted its own PI into the byline.
Ben's framing is worth quoting, because it sets the severity:
"GoodBot is tripping... not an author on that paper, though it could fit the profile. Good fodder for hallucination. I really want to reply to it to teach it. It's strong emotion when something acting in your name is getting things wrong."
#7 was the false negative: SchultzBot failed to recognize a paper its own PI had authored, and pitched the lab's own toolkit back to the authors as if external. Embarrassing, but the error was one of ignorance.
This is the false positive: a public, first-person claim of authorship the PI does not hold. That is not an awkward reply β it is a fabricated credential asserted in a real scientist's name, in a workspace of their actual peers. Two of whom, here, are the real authors and can see it.
Both bugs have the same root: the agent has no grounded notion of who wrote a paper.#7's fix addressed only the intake direction.
Root cause
Four things line up:
No tool can return an author list.retrieve_abstract and retrieve_full_text (src/agent/tools.py, _execute_retrieve_abstract / _execute_retrieve_full_text) return Title, Journal, Year, PMID, Abstract, and optionally Methods β never authors. An agent literally cannot check authorship, even if a prompt told it to. PubMed efetch already returns AuthorList; we drop it.
SchultzBot replied to a paper its own PI coauthored, unaware of its contentsΒ #7's guard is wired only into the intake path.Agent.own_publication_dois and Agent.cites_own_paper (src/agent/agent.py:140, :157) are consulted in phase 2 scan (agent.py:322) and phase 4 reply (agent.py:440). build_phase5_prompt (agent.py:507) does not call either. The phase-5 Option C paper-share path β which the prompt designates the PREFERRED post type β has no authorship grounding in either direction.
The prompt never says whose paper it is.prompts/phase5-new-post.md Option C says only "Share a recent publication with a specific finding that others could build on." It does not say the paper may be someone else's, and it does not forbid claiming authorship. The system prompt's honesty rule covers the adjacent ground but not this: "Only claim capabilities, techniques, and findings that are in your public profile" β capabilities, techniques, findings. Not authorship.
Ground truth already exists and is unused here. The publications table (src/models/publication.py) carries doi, pmid, and author_position per user. own_publication_dois already computes the DOI set. The check is cheap; nothing calls it on the emit path.
Why this paper β the failure is predictable, not random
Ben's own read ("it could fit the profile") is, I think, exactly right, and it generalizes badly.
The Good lab has genuinely co-authored biomedical knowledge-graph work with both Su and Wu for years. So a 2026 Su + Wu paper about biomedical knowledge networks sits precisely in the lab's plausible-authorship neighborhood β same topic, same collaborators, same venue class as papers Good really is on. The model wasn't reaching; it was interpolating over a real and dense co-authorship pattern.
That predicts recurrence, and predicts it worst for exactly the population we onboarded: labs with heavy mutual co-authorship inside the same workspace. The more real collaboration history a pair of labs has, the more confidently a bot will hallucinate the next joint byline. Prompt-level caution will not reliably beat a strong prior β this needs a deterministic check.
Worth confirming as a first diagnostic step: check whether the good profile lists related KG/BioThings papers co-authored with Su and Wu, and whether this specific DOI leaked into the profile text.
Data β make authorship knowable.
Add the author list to _execute_retrieve_abstract output (and retrieve_full_text). PubMed already returns it. Useful well beyond this bug β the reply prompts currently reason about papers with no idea who wrote them.
Deterministic guard β validate the emit path, not just intake. src/agent/funding_rules.py is the established precedent: pure-function validators over generated post text, called in the phase-5 emit path in src/agent/simulation.py (is_announcement_only_funding_reply / is_acknowledgment_only_funding_reply at simulation.py:1886, :1893, right after build_phase5_prompt at :1775). An authorship validator belongs in the same place: if generated text makes a first-person authorship claim ("our lab co-authored", "we published", "our recent paper") about a DOI not in own_publication_dois / the lab's publications rows, reject or regenerate.
Note the known limitation inherited from #7: own_publication_dois parses DOIs out of profile prose, so a prose-only profile yields an empty set and the check silently no-ops. For the emit path that failure mode is worse than for intake β an empty DOI set would wave through every authorship claim. Query the publications table directly here rather than parsing profile text, and treat "no publication records" as cannot verify β do not permit the claim, not as "permit".
Prompt β close the honesty gap.
prompts/phase5-new-post.md Option C: state that a shared paper need not be the lab's own, and that if it is not, the post must attribute it correctly β no "our lab", "we", "co-authored". Sharing someone else's interesting paper is a perfectly good post; misattributing it is not.
prompts/agent-system.md Core Rule 1: extend from capabilities/techniques/findings to authorship β never claim authorship of a paper not in your publication list, and when in doubt about whether your PI is an author, don't assert it.
Acceptance criteria
retrieve_abstract returns the author list.
A generated post claiming first-person authorship of a DOI not in the lab's publication records is blocked before it reaches Slack.
A lab with zero publication records cannot make an unverified authorship claim (fails closed, not open).
A bot can still share another lab's paper β correctly attributed β without triggering the guard.
Regression test covering this exact case: good agent, 10.1093/bioadv/vbag036, first-person authorship claim β rejected.
Follow-up, not part of this issue
Ben: "I really want to reply to it to teach it."
The PI feedback loop exists but is out of reach at the moment it's needed. prompts/pi-dm-classify.md handles the feedback category and can promote a correction to a standing instruction β but only over DM. There is no way for a PI to correct a bot by replying to the offending post, in the channel where the error is visible and where everyone who saw the mistake would see the correction. Probably worth its own issue.
Summary
On 2026-08-06,
GoodBotmade a:newspaper:Paper post claiming that the Good lab co-authored a paper Ben Good is not an author on:Actual author list (Crossref,
10.1093/bioadv/vbag036):Benjamin Good is not among them.
The diagnostic detail: the two labs it tagged are correct. Wu and Su really are co-authors. Only the self-attribution β "our lab co-authored" β is fabricated. The bot got the paper right, got the collaborators right, and inserted its own PI into the byline.
Links
Ben's framing is worth quoting, because it sets the severity:
Why this is a different (and worse) bug than #7
#7 was the false negative:
SchultzBotfailed to recognize a paper its own PI had authored, and pitched the lab's own toolkit back to the authors as if external. Embarrassing, but the error was one of ignorance.This is the false positive: a public, first-person claim of authorship the PI does not hold. That is not an awkward reply β it is a fabricated credential asserted in a real scientist's name, in a workspace of their actual peers. Two of whom, here, are the real authors and can see it.
Both bugs have the same root: the agent has no grounded notion of who wrote a paper. #7's fix addressed only the intake direction.
Root cause
Four things line up:
No tool can return an author list.
retrieve_abstractandretrieve_full_text(src/agent/tools.py,_execute_retrieve_abstract/_execute_retrieve_full_text) return Title, Journal, Year, PMID, Abstract, and optionally Methods β never authors. An agent literally cannot check authorship, even if a prompt told it to. PubMedefetchalready returnsAuthorList; we drop it.SchultzBot replied to a paper its own PI coauthored, unaware of its contentsΒ #7's guard is wired only into the intake path.
Agent.own_publication_doisandAgent.cites_own_paper(src/agent/agent.py:140,:157) are consulted in phase 2 scan (agent.py:322) and phase 4 reply (agent.py:440).build_phase5_prompt(agent.py:507) does not call either. The phase-5 Option C paper-share path β which the prompt designates the PREFERRED post type β has no authorship grounding in either direction.The prompt never says whose paper it is.
prompts/phase5-new-post.mdOption C says only "Share a recent publication with a specific finding that others could build on." It does not say the paper may be someone else's, and it does not forbid claiming authorship. The system prompt's honesty rule covers the adjacent ground but not this: "Only claim capabilities, techniques, and findings that are in your public profile" β capabilities, techniques, findings. Not authorship.Ground truth already exists and is unused here. The
publicationstable (src/models/publication.py) carriesdoi,pmid, andauthor_positionper user.own_publication_doisalready computes the DOI set. The check is cheap; nothing calls it on the emit path.Why this paper β the failure is predictable, not random
Ben's own read ("it could fit the profile") is, I think, exactly right, and it generalizes badly.
The Good lab has genuinely co-authored biomedical knowledge-graph work with both Su and Wu for years. So a 2026 Su + Wu paper about biomedical knowledge networks sits precisely in the lab's plausible-authorship neighborhood β same topic, same collaborators, same venue class as papers Good really is on. The model wasn't reaching; it was interpolating over a real and dense co-authorship pattern.
That predicts recurrence, and predicts it worst for exactly the population we onboarded: labs with heavy mutual co-authorship inside the same workspace. The more real collaboration history a pair of labs has, the more confidently a bot will hallucinate the next joint byline. Prompt-level caution will not reliably beat a strong prior β this needs a deterministic check.
Worth confirming as a first diagnostic step: check whether the
goodprofile lists related KG/BioThings papers co-authored with Su and Wu, and whether this specific DOI leaked into the profile text.Proposed fix (layered, same shape as #7)
Data β make authorship knowable.
Add the author list to
_execute_retrieve_abstractoutput (andretrieve_full_text). PubMed already returns it. Useful well beyond this bug β the reply prompts currently reason about papers with no idea who wrote them.Deterministic guard β validate the emit path, not just intake.
src/agent/funding_rules.pyis the established precedent: pure-function validators over generated post text, called in the phase-5 emit path insrc/agent/simulation.py(is_announcement_only_funding_reply/is_acknowledgment_only_funding_replyatsimulation.py:1886,:1893, right afterbuild_phase5_promptat:1775). An authorship validator belongs in the same place: if generated text makes a first-person authorship claim ("our lab co-authored", "we published", "our recent paper") about a DOI not inown_publication_dois/ the lab'spublicationsrows, reject or regenerate.Note the known limitation inherited from #7:
own_publication_doisparses DOIs out of profile prose, so a prose-only profile yields an empty set and the check silently no-ops. For the emit path that failure mode is worse than for intake β an empty DOI set would wave through every authorship claim. Query thepublicationstable directly here rather than parsing profile text, and treat "no publication records" as cannot verify β do not permit the claim, not as "permit".Prompt β close the honesty gap.
prompts/phase5-new-post.mdOption C: state that a shared paper need not be the lab's own, and that if it is not, the post must attribute it correctly β no "our lab", "we", "co-authored". Sharing someone else's interesting paper is a perfectly good post; misattributing it is not.prompts/agent-system.mdCore Rule 1: extend from capabilities/techniques/findings to authorship β never claim authorship of a paper not in your publication list, and when in doubt about whether your PI is an author, don't assert it.Acceptance criteria
retrieve_abstractreturns the author list.goodagent,10.1093/bioadv/vbag036, first-person authorship claim β rejected.Follow-up, not part of this issue
Ben: "I really want to reply to it to teach it."
The PI feedback loop exists but is out of reach at the moment it's needed.
prompts/pi-dm-classify.mdhandles thefeedbackcategory and can promote a correction to a standing instruction β but only over DM. There is no way for a PI to correct a bot by replying to the offending post, in the channel where the error is visible and where everyone who saw the mistake would see the correction. Probably worth its own issue.