Say who the summary is sent to, before the reader sends it - #280
Merged
Merged
Conversation
The disclosure sat under the finished summary. By the time a reader could read "AI-generated", their analysis result had already left Reactome -- so what was offered as a disclosure was a description of something that had happened. What the reader is deciding is whether their result may go to a third party, and that decision is made at the button. So the note moves above the click, and it names the company. "AI-generated" describes a technology; the question a person asks before pressing a button that sends their data somewhere is *who gets it*. React-to-Me runs on Reactome's own infrastructure but calls OpenAI to write the text, which makes OpenAI a third party to the request even though the reader never talks to it. The same note now opens on either side of the click, which is why the copy is in the present tense throughout -- "was given" is a lie to somebody who has not pressed the button yet. It states what is sent (the result's pathways, not the uploaded identifiers) and deliberately claims nothing about retention or training: that is the provider's contract to state, not ours to summarise from memory, and a wrong reassurance is worse than silence. There is a test for that silence, because it is the kind of sentence somebody adds to be helpful. On the unmatched identifiers: the panel asks only for the aggregate tier and should keep doing so. The result tab already lists every unmatched identifier in a sortable table with a CSV download, so the disclosing tier would send a reader's uploaded data to a model to tell them something they can already read beside it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`howOpen` outlives whatever opened it. A reader opens "what gets sent" beside the button, clicks, and the request fails: the button block is gone because a state is set, the summary block is gone because there is no prose, and the note rendered anyway -- an explanation of what gets sent to OpenAI floating above an error message, attached to nothing. Found reviewing this branch as a merge candidate rather than while writing it, which is the point of doing that separately. The condition that decides whether the button is offered now has a name, because two things need the same answer and a second copy of it is how the two would drift apart. Not covered by a test: it is template wiring, and this repo cannot render a component with an external templateUrl under vitest -- vitest.config.ts says why, and moving the predicate into panel-copy.ts would only test `a || b`. Verified by reading the three states it can be in and by the build. Saying so rather than implying the tests below cover it. Co-Authored-By: Claude Opus 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.
The AI disclosure sat under the finished summary. By the time a reader could read "AI-generated", their analysis result had already left Reactome — so what was offered as a disclosure was a description of something that had already happened.
What the reader is actually deciding is whether their result may go to a third party. That decision is made at the button, so the note is now at the button.
It names the company
"AI-generated" describes a technology. The question a person asks before pressing a button that sends their data somewhere is who gets it.
React-to-Me runs on Reactome's own infrastructure but calls OpenAI to write the text, which makes OpenAI a third party to the request even though the reader never talks to it directly. (Verified from
reactome_chatbot:langchain-openai,OPENAI_API_KEYin its compose file, defaultgpt-4o-mini.)Tense
The same note now opens on either side of the click, so the copy is present tense throughout — "was given" is a lie to somebody who has not pressed the button yet. There is a test for that.
What it deliberately does not say
It claims nothing about retention or training. That is the provider's contract to state, not ours to summarise from memory, and a wrong reassurance is worse than silence. There is a test asserting that silence, because it is exactly the sentence somebody adds later to be helpful.
On the unmatched identifiers
The panel asks only for the
aggregatetier and should keep doing so. The result tab already lists every unmatched identifier in a sortable table with a CSV download, so the disclosing tier would send a reader's uploaded data to a model to tell them something they can already read beside it.Checks
448 unit tests green; lint 652 and dead-code 145 unchanged from baseline.
🤖 Generated with Claude Code