Offer a gene list however it is handed over, and remember it - #299
Merged
Merged
Conversation
Reported 2026-09-29, both answered by the model with website instructions: - "here is my gene list TP53, ERBB3 and JAX9", sent straight after the chat said "include the genes in your message"; - "can you analyze the gene list that I gave you", with the list in an earlier message. Now: - "here is my gene list ...", "my genes are ...", "these are my genes" count as a request. - After the how-to invites a list, the next message that lists two or more identifiers is offered, however phrased. - The last list a reader sends is remembered (in the process store, not the saved session), and a request that points back at it offers that list, saying it came from an earlier message. With no list yet, the chat asks for one instead of the model sending them to the website. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Round four of adversarial review, on the hand-over / invitation /
pointing-back routes:
- After the how-to, its own group example ("control, control, treated,
treated"), "yes, great" and "WT, KO" were offered as gene lists. A
reply to an invitation now needs three items or one gene-shaped token,
and sample, group and cell-line labels are not identifiers.
- "run a gene set analysis on my expression data I sent before" got "I
don't have a gene list" instead of the matrix how-to. Pointing back now
has to name a gene list, and not a matrix, file, GSA or results.
- Chit-chat ("hmm, interesting") replaced the remembered list. A list is
remembered only with three items, one gene-shaped.
- "are" no longer opens lists in general; a hand-over reads the list
after its phrase, and prose after it is not a list.
- Declining an offer of an earlier list names the genes to the model.
- All decisions are one pure function, run off the event loop.
A fresh set for these routes, measured once before its fixes: 13/16.
Co-Authored-By: Claude Opus 5.5 <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.
Two conversations reported on 2026-09-29. In both, the model answered with website instructions, and those instructions were wrong: they sent a gene list to ReactomeGSA, which takes a matrix.
Now
gene_list.read_messagemakes all of these decisions, as a pure function, and runs off the event loop.Review
One round of adversarial review. It found two regressions in this flow, which are fixed and tested:
It also found chit-chat overwriting the remembered list, the word "are" opening lists everywhere, and 4× parse cost. All are fixed. Each guard has a test that fails when the guard is sabotaged. One sabotage survived at first, so I added cases that only that guard catches.
Measured
A fresh set for the new routes, written after review and measured once before its fixes: 13/16. The two misses fixed since are marked as tuned. The third, "BRCA1 and BRCA2" as a reply to an invitation, is pinned as a known limit. A case earlier moved into held-out set 4 after a fix aimed at it now sits in
TUNED_LATER.Verified
./checks.shpasses.Not fixed here
The model's own answers about gene lists come from the website's user guide, and they tell people to paste a gene list into ReactomeGSA. That answer path is shared with the search page, so it needs a separate change.
🤖 Generated with Claude Code