Repository navigation
Conversation
…ess) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fqwfq2VbjHiLqM5WHy1kJE
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fqwfq2VbjHiLqM5WHy1kJE
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fqwfq2VbjHiLqM5WHy1kJE
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fqwfq2VbjHiLqM5WHy1kJE
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fqwfq2VbjHiLqM5WHy1kJE
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fqwfq2VbjHiLqM5WHy1kJE
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fqwfq2VbjHiLqM5WHy1kJE
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fqwfq2VbjHiLqM5WHy1kJE
…wo upserts Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fqwfq2VbjHiLqM5WHy1kJE
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fqwfq2VbjHiLqM5WHy1kJE
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fqwfq2VbjHiLqM5WHy1kJE
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Fqwfq2VbjHiLqM5WHy1kJE
This branch has not been deployed
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.
Status: ready to send (after the by-hand items in
docs/adoption/hunts/memos-issue.md, "Before sending").What was found
genclass_explorefound two races of one kind in Memos' web app (usememos/memos main@b40d8a7b5). In each, an older reply is written over newer client state and stays there.useUpdateMemo: Pin then Unpin, or "Check all tasks" then "Uncheck all tasks", on the memo's detail page. The page can end showing the first change while the server holds the second.useReactionActions: 👍 then ❤️. The 👍 click's rawgetMemoreply can land last and remove ❤️.Both reproduce without GenClass (plain Playwright, one reply held 1.5 s): 10 of 10 trials each, still stale 30 s later, 0 of 3 without the hold. A two-commit patch (13 source lines plus 3 Vitest tests that fail on main and pass fixed) brings that to 0 of 10 each. On the fixed build, explore's oracle shows 0 of 54 stale reordered loads, against 7 of 54 unfixed.
Files
docs/adoption/hunts/memos.md: the report (setup, every scenario with its verdict, the findings in causal order, root cause with lines, fix, tests, fixed variant, problems with GenClass, duplicates and policy, time).docs/adoption/hunts/memos.patch:git format-patchof the two commits againstb40d8a7b5. Checked withgit amon a fresh clone; it applies cleanly.docs/adoption/hunts/memos-issue.md: the issue in Memos'bug_report.ymlfields, the PR body (Memos has no template), the AI-assistance paragraph, and the "before sending" checklist.docs/adoption/hunts/memos/:setup.mjs: seeds the local instance.explore.mjs: the harness, GenClass injected from outside, with a DOM-vs-server oracle;GENCLASS=0runs it without GenClass.repro.mjs: reproduces both races without GenClass.summarise.mjs: builds the results tables.results/: the explore summaries (unfixed, fixed), three full explore reports, and the reproduction JSONs.docs/adoption/hunts/README.md: the new row.To send (a person, from a personal account)
go run ./cmd/memos --port 8081,pnpm dev). Reproduce pin and reactions by hand or withrepro.mjs, and put the commit you used in the issue's version field.memos-issue.md(bug template; the duplicate-search checkbox is ticked).git am memos.patch, re-author the commits, runcd web && pnpm lint && pnpm test, and see the three new tests fail with the source files stashed. Push and open the PR with the drafted body, filling inFixes #<issue>.scope.Measured (M, latencies)
Explore uses 2 request-order baselines plus 6 seeded orders per session, at
slow_ms300, 600 and 900. The oracle compares what the page shows withGetMemoafterwhenSettledand 2.5 s more.Unfixed, oracle counts of reordered loads where the page disagreed with the server (0 of 2 baselines in every session):
Fixed:
Without GenClass, one reply held 1.5 s:
GenClass's false reports (FIR on the correct runs): of the 12 complete unfixed sessions outside archive, 5 ended with a false RACE resting only on request counts (pin 600, reaction 600, comment 300/600/900). On the fixed build, 3 of 12 did (reaction 600, archive 600 and 900). In none of those runs did the page differ from the server.
Problems with GenClass itself (report section 6)
GetMemo,ListMemoComments,GetUserStatsandListMemosPOSTs as different writes, which caused every false RACE verdict above.role="img"with anaria-labeland no text, so the stale pin landed in "internal state only" (the witnesses did name it).genclass_findings. Its menu and popover state shows up as stale-write findings next to the real ones.UpdateMemo, queued by the fix, is labelledUpdateMemo#1~hedge.Time spent
About 2 hours, 16:33 to about 18:30 UTC.
Not run
pnpm build: CI runs it, and the change touches no build config.Generated by Claude Code