Research brief reopening the 09-19 Jev evaluation: same model
(jev-1.13.0), only the state changes (previous turn + previous
decision + continuation Noul, per Magpie v0.1.142). Re-extract
source B with case_id; thresholds unchanged.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0199rbQDTsUbCVw84wc8BTFe
T7 of TASK-rectification-grounding-20260927. Skill not bumped (10.0.31 text
unchanged, sliced per turn). regenerate_agentic_rectification_turn kept, to be
retired in a later brief.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
PROGRESS with the final domain -> technique table, before/after
model-visible sizes over 3 public AA charts x 10 questions, answer-contract
keys kept/removed, red-line test list, lookup and clock design, telemetry,
assertion changes and test/build/gzip numbers. Device checklist for
parents/children/marriage/career, follow-up domain carry-over, D60 lookup
and waiting time. Task index row set to 待验收.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
Measure the model-visible consultation payload on three public charts, draft per-domain cards, and record the Narayana/pratyantar projection gap as BUG-1054. No runtime behavior change.
Product decision 2026-09-27 (D1-D4), overriding the BUG-1038 login-return
stash and the "latest session" default landing:
- A full load of / without ?c= (login, typed address, bookmark, refresh of
bare /) lands on the current person's blank starter home; an existing
empty draft of that person is reused, otherwise one is created locally.
- ?c= and ?new=1 are unchanged; a refresh inside a conversation keeps its ?c=.
- The login-return stash is removed: redirectToLogin and sidebar links no
longer write it, bootstrap no longer reads it and clears a leftover value
once. replace-selected, the lookup origin/other-subject branch and the warm
resumeRectification dependency go with it.
- A background answer being recovered no longer takes over the blank home
(same rule BUG-1015 set for ?new=1).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
- BUG-1049 (recurrence of BUG-504): the opening stem carries six examples and
an example answer again and is server-owned on the zero-evidence opening;
the body is two plain sentences (no 大运/盘面/代表分钟/精确到秒, no year, no
question). Stem de-dup compares whole sentences / near-equality instead of a
12-char prefix, which had deleted the body's examples sentence since
aa7ccb30 (BUG-604) + dd8f35f7 (BUG-648).
- BUG-1050: plain step labels; a finished step label shows once and
「已完成 N 步」counts shown rows; failed rows read 「…未完成」 from the
in-progress wording.
- Skill 10.0.30 -> 10.0.31 (OpeningPolicy); 10.0.30 kept as deprecated.
- VOICE / DESIGN / CHANGELOG / BUG_HISTORY / PROGRESS / real-device checklist
and screenshots.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
One row per rectification Case, written once when the range card is first
delivered (GET /api/rectification/cases/[caseId], fire-and-forget after the
response is built). Numbers and closed enums only: no user / case / session
id, birth data, names, text or timestamps finer than the ISO week. Dedupe via
a separate case_id ledger that cascades with the Case (and account deletion).
Migration 20260926010000 is additive: two RLS tables with no runtime table
grants, SECURITY DEFINER write (service_role), purge (service_role) and
aggregate-only summary (admin_runtime) functions; 180-day retention.
Admin: 「校正统计」 page + GET /api/admin/rectification-telemetry
(admin.customers.read), aggregates only, no per-row view or export.
TASK-rectification-telemetry-20260926. test:db not run locally (no Docker).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
- R1: flipping 1 answer keeps truth in range 98-100% but cuts head hit by
a third or more; 2 flips squeeze truth out in 7-10% of ±30/±60 replays
(two flips = 8 points = SEPARATION_LEAD).
- R2: weights do apply (research scorer == production at V0); V1/V2 are
identity at ±30/±60 by construction and leave six-question metrics
unchanged at ±10 -> no_benefit (measured). Supplementary V1n does not
pass the gate.
- R3: boundary shift is ~3.8 days/minute (1.3-5.9), not 1.1; the 45-day
gate is ~8-34 minutes. The _representative_pairs hypothesis is refuted
(all-pairs adds no dated probes); the bottleneck is monthly evaluation.
New finding recorded as BUG-1048 (investigating): _boundary_windows
year-straddle exemption and positional zip misalignment bypass the gate.
- Dated errata appended (no deletions) to the 09-14/09-16 briefs and
research docs; README board row -> 待验收. No production code, scoring,
thresholds, gates or Skill changed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
Board: 59 rectification-related rows re-checked against origin/staging
ancestry, Gitea deploy-staging runs (current 8a409434, run 2930) and
acceptance records; unaccepted merges marked 已合入, real-device debt kept.
BUG_HISTORY: 085/086 closed_obsolete (V5 retired in f3946eaa); 981/984
fix-version lines record deployed commits/runs, status stays investigating;
1038-1047 fix-version lines corrected; 743 left as is (style probes still
score via tie_break path). BLOCKED: undeployed notes struck with evidence.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
BUG-1045 (recurrence of BUG-585 via BUG-969): the snapshot merge now drops
the attached stem from the streamed "ack + stem" text with the same
stripQuestionSentences the GET route uses; server text unchanged.
BUG-1046: a failed choice submit (409 / network) or typed send withdraws
the local answered mark, remounts the card, re-reads the Case and shows
"这次没提交上,请再点一次。"; the persisted question hangs on the latest
settled assistant message with other copies of the same focus removed
(standalone block only when nothing can carry it); willContinue and the
send() settle merge unseen assistant turns (same gap as BUG-685).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
- The anchor listener and follow observer now attach whenever the scroller
element itself appears (checked after every commit, no-op unless element,
active or resetKey changed). The home page mounts `.conversation` after its
loading screen with unchanged active/resetKey, so a directly opened session
never got a listener, never landed on its newest content, showed the jump
chip under short replies and did not follow after pressing it.
- After a pin, geometry no longer releases the hold: only a wheel, touch drag,
scroll key or scrollbar press followed by a scroll within 1s does. The
rectification pin rests 94px from the bottom, inside the 96px threshold,
which dragged long replies to their last line.
- Real React lifecycle tests (loading screen -> reveal, 94px rest), DESIGN,
BUG history, PROGRESS, CHANGELOG, device checklist and CDP screenshots.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
The BUG-930 pin spacer sat on the last assistant row, pushing its sibling
.message-actions (and follow-ups / delivery card) below half a screen of
empty space. Move the same min-height onto the last turn's entry
(`:last-child:has(.message-assistant)`) with align-content: start so the
rectification grid wrap does not stretch its rows. Hook logic unchanged.
Records BUG-1043 / BUG-1044 (pre-existing, investigating) found during
browser verification.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
TASK-starter-home-polish-20260926:
- D1 today's trend moves to a sub-line under the greeting
(.starter-greeting-sub), read from the same dailyStarlanguage state the
warm snapshot seeds; static sentence until ready, hidden without a minute.
- D2 the line under the pills appears only for a resumable case or a
non-self subject; the first-run and redo sentences are removed.
- BUG-1041 entrySummaryFromResponse read snake_case keys while the
entry-summary route returns camelCase, so every account parsed as a
first run; the parser now reads the route's shape (snake_case still ok).
- D3 daily entry icon MoonStar, credits icon Coins; D4 boundary line kept.
- Records: CHANGELOG, DESIGN, VOICE, BUG_HISTORY, PROGRESS, testing list.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
Coming back to / from /chart, /ephemeris, /reports or /people by client
navigation remounted Home from hydrated=false and replayed the whole
bootstrap: model catalog, consult status, entry summary and daily card,
3-5 round trips plus up to 4 s of reveal budget, every time.
The reveal now counts per document load, not per mount:
- lib/home-warm-snapshot.ts: memory-only, per-account snapshot of the
model catalog, rectification entry summary, session cursor and today's
card (keyed by person + birth fingerprint + day). Account, profile and
the session list already survive in SessionListProvider. Cleared on
account change, sign-out, provider 401 and redirectToLogin.
- lib/home-warm-start.ts: Home's useState initializers take one warm
decision per mount. Complete snapshot + settled list + complete profile
+ a landing computable in memory -> start ready, landing resolved with
the cold-path functions (?new=1, ?c=, login-return stash and its person
scope from BUG-1038). Anything missing or needing a lookup -> the
unchanged cold path (no half-reveal, BUG-1021).
- runHomeWarmRefresh commits the landing, then refreshes catalog, account
and background-consultation recovery in the background (recovery shares
resolveReservedConsultation with the cold path). Summary and daily card
refresh through their existing effects.
- Next renders the new page before it writes the address bar, so AppLink /
navigateAppPath note the target href (lib/client-navigation-target.ts);
unknown target -> cold path.
Home() useState 33 / useRef 37 unchanged; page.tsx 1329 -> 1373 lines.
Tests: home-warm-return-lifecycle (13, real Home + sidebar + provider,
navigating in Next's render-then-write-URL order; 11 fail with warm start
disabled) and home-warm-snapshot (12). Full suite 3953 / 61 failing,
failure names identical to the 3928 / 61 baseline. Build: / stays Static,
rootMainFiles gzip 130933 B unchanged. Local Chrome with every /api/*
held 1.5 s: /chart -> 新建对话 interactive in 18-23 ms with no loading
ring (baseline 5530 ms with ring).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
Coming back to / from /people could show the previous rectification session
as a locked page: its title in the header, the composer stuck on
"正在打开生时校正…", and the new-chat greeting in the middle.
The state that survived between pages is the sessionStorage login-return
stash that secondary-page sidebar links write from the current ?c=:
- /people「和 TA 对话」used a second intent (?newChat=1) parsed by a
component mounted inside Home after bootstrap, so the bootstrap new-chat
branch never ran and the stash won.
- A stash id not in the current person's loaded list was looked up and
landed with urlAction "keep", which assumes ?c= is already in the address
bar. It was not, so the rectification auto-open never fired. The stash
also ignored which person was current.
- An in-page new chat left the stash in place.
Fix: delete NewChatDeepLink / ?newChat and route「和 TA 对话」through
newChatHref(); a looked-up stash writes ?c= back (replace-selected) and is
dropped when it belongs to another person; startNewChat and
openChatBoundToProfile clear the stash. ?c= deep links, BUG-989 and BUG-705
are unchanged.
Tests: new real-lifecycle suite mounting the real Home, sidebar and people
page (10 cases: four secondary pages + mobile drawer, 和 TA 对话 for self and
another person, out-of-scope stash, same-person stash beyond the first page,
in-page new chat), plus two contract/unit tests. Six fail on origin/staging,
all pass here. Full suite 3928 / 61 failing, failure names identical to the
0ab061b9 baseline (3916 / 61).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8