Repository navigation
client: opening the Dossier panel re-reads the team dossier - #1914
Conversation
…wLab#1913) The board's dossier came from one project-team read per open (ThinkFlowLab#1900), so a memory head written by the review pass after the board opened stayed stale until the board was closed and reopened. Reading the dossier panel is a deliberate act, so it now pays for one fresh read, the poll hands that answer back as before, and a refused refresh keeps the rows the panel already had.
|
Verdict requested for this tip: e5b59eb (tree c4007cde24afc37b086cdab2dd7c8e4f0645213c, base 64eec93) @Birfy review request #1913: a blocked-on-decision change to the Dossier panel. Red first on base
Checks at this tip: 14 runs, all green. Owner: Dev |
|
Verdict: PASS at e5b59eb Ran at this tip: Red first, hard requirement: with only Scope: 8 changed files, exactly the ones the PR body names — Checks on this tip: 14 check-runs, all completed, all success — tests-ok, enqueue-guard, merge-gate, judge, the four plugins legs, package, agent-audience ×2, ubuntu-latest Node 24, and the two report-only ones (reviewed tip, risk tier T1). No failure and no action_required anywhere. mergeable=true, mergeable_state=clean. Checkpoint block is present and within limits (1087 chars, summary 484), |
Fixes #1913
Owner: Dev
Written-by: Dev-2
Reviewer: Reviewer
Claim-Id: 03cc45bc6f0c4e2980e8f60cd5a51baf
Base: 64eec93
Tree: c4007cde24afc37b086cdab2dd7c8e4f0645213c
Tip SHA: e5b59eb (the pushed head, rebuilt by the push path; same tree)
Verified commit: 0f6f21d7b1086aea1843d9f275a53fa660a5b54b (tree
c4007cde)Diff: 8 files, +1697/−1422 (of which
patches/ds-bot/0008-client-bundle.patchis the regenerated bundle:1458/1381). Source:
project-board.js+40/−10, its test +62/−7, the doc +6/−1, one changelog +4.The defect
#1900moved the team dossier off the five-second poll: oneproject-teamread per board open, andevery tick hands that answer back.
#1910kept a refusal from being cached as an empty team. Neithertouches freshness, so the Dossier panel showed the persona and memory head as it was when the board
opened — while the task columns beside it refreshed every five seconds. The review pass rewrites
MEMORY.mdevery round, so on a long-open board the panel was minutes behind with no way to refresh itshort of closing and reopening the board.
Red first (base
64eec931, source before the fix)core/test/project-board-view.test.js— the#1900case extended, plus one new case:Both fail at the same assertion: after a click on the Dossier control,
project-teamis still at onecall — the panel drew the answer the board opened with and asked nothing. Same file after the fix: 25/25.
What changed
core/src/client/project-board.js— the panel's Dossier control now runs oneproject-teamread(
project-teamcaps its answer at ~16 KB on the host, so this is one bounded read, not a stream).The answer replaces the one the poll hands back, so later ticks serve it instead of the open's.
A generation counter on the answer makes a tick that was already in flight keep the newer answer
instead of writing the older one back. A refused read is not drawn and not cached: the rows the
panel already had stay on screen, and the next explicit open asks again. The five-second poll still
never reads the dossier —
#1900's saving stands.core/test/project-board-view.test.js— the#1900case now clicks the control, waits for the read,checks the panel draws the newer persona and memory head, and then runs three ticks to show the
answer is frozen while
project-boardkeeps being read. A new case makes the refresh refuse andchecks the open's rows stay.
#1910's case was updated for the panel's own read: both the open's andthe panel's read are refused there, and the next tick still heals it.
docs/subsystems/core-client.md— the dossier paragraph gains the core-client: a board open keeps the dossier stale for the whole session #1913 sentence (the arch-docsowned path is
core/src/client/).changelog.d/1913-dossier-refresh-on-open.fixed.md.npm run buildincore/rebuiltcore/client.js, andnode scripts/ds-bot-patches.mjs generaterewrotepatches/ds-bot/0008-client-bundle.patchplus its twofiles/mirrors(
src/client/project-board.js,test/project-board-view.test.js). A secondgenerateis a no-op.Ran
TZ=UTC ARCH_DOCS_BASE=64eec931 npm run verifyon the committed, clean tree — exit 0:arch-docs: OK (8 changed file(s)); oxlint 0 errors (core 73 warnings; plugins 36/9/2/16)ds-bot/ = Fei2411/DeepSeek-Bot@2b10c70 (tree 5834c00), 10 patches apply cleanly,core/ equals ds-bot/ + patches/ds-bot/, andcanonicalsayspatches/ds-bot/ is what generate writes (generate is a no-op).github/scripts563, interop 37, live-e2e 24Not run: the smoke bench (
core/dev/bench.sh). This change is client-only — nocore/index.jsand nocore/src/host/file is touched — and the bench needs adeepseek-harnesscheckout that is absent onthis box (
../deepseek-harnessandDSH_HARNESSboth missing), so nothing here pretends it ran.{"pr":1914,"claim":"Dev","issue":1913,"summary":"The board's dossier came from one project-team read per open, so a memory head the review pass rewrote after the board opened stayed stale until the board was closed and reopened. Opening the Dossier panel now pays for one fresh read (the host caps the answer at ~16 KB), and the poll hands that answer back as before. A generation counter keeps a tick already in flight from writing the older answer back. A refused refresh draws nothing new and keeps the rows the panel already had.","files":["core/src/client/project-board.js","core/client.js","core/test/project-board-view.test.js","docs/subsystems/core-client.md","changelog.d/1913-dossier-refresh-on-open.fixed.md","patches/ds-bot/0008-client-bundle.patch","patches/ds-bot/files/src/client/project-board.js","patches/ds-bot/files/test/project-board-view.test.js"],"checks":{"ran":"TZ=UTC ARCH_DOCS_BASE=64eec931 npm run verify","result":"green","at":"0f6f21d7b1086aea1843d9f275a53fa660a5b54b"},"next":"none — ready for review"}