Preregister LEARN-0017: Zulip target-lookup/anchor continuation guard question

Bounded follow-up to ZN07 (ZulipNavigationSourceStudy.md), same static
pinned-revision protocol as LEARN-0014. No inspection performed yet.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: sonnet
Assistant-Process: 290719@bnt-lap001
Assistant-Session: 55cbe504-1bfe-4932-b761-29016523c87b
This commit is contained in:
tegwick 2026-09-27 23:17:14 +02:00
parent 7295172f1e
commit 884803cdf5

View file

@ -0,0 +1,46 @@
# LEARN-0017 — Target-message lookup and anchor-navigation continuation ownership
Status: preregistered before inspection. Codex author-model review. 2026-09-27
Europe/Berlin. Stream B, comparison group B-independent-navigation-source-v1
(second cycle in this group; shares LEARN-0014's static-source-only protocol,
evidence tier and effort accounting).
- Date and owner: 2026-09-27, Codex.
- Stream: B. Comparison group: B-independent-navigation-source-v1 (LEARN-0014's
static, read-only, pinned-revision source-inspection protocol).
- Question and affected CAND identities: does independently developed Zulip code
guard the target-message lookup (`channel.get` to `/json/messages/:id` inside
`message_view.show`) and the anchor-navigation fetch continuation
(`navigate_to_anchor_message` / `message_fetch.load_messages_around_anchor`)
against a stale navigation that occurred while the request was in flight, the
way `message_view.ts`'s main narrow-fetch continuation does (ZN02)? Affects
CAND-0009 (URL-addressable State) and CAND-0010 (Progressive Enhancement).
- Previous belief: ZN07 (ZulipNavigationSourceStudy.md) located both callbacks
and noted they have "no visible captured-current-list guard like ZN02," but
did not trace their actual callers or check test coverage.
- Observation that would contradict the belief: either callback checking list/
narrow identity before acting, or an existing upstream test exercising a
stale-navigation race for either path.
- Evidence/contexts to inspect: `web/src/message_view.ts` (target lookup ~L640-700,
`navigate_to_anchor_message` ~L998-1074), `web/src/message_fetch.ts`
(`load_messages_around_anchor`, `process_result`, `get_messages_success`,
`load_messages` error-path guard), `web/tests/message_fetch.test.cjs`,
`web/tests/message_view.test.cjs`. Same pinned revision as LEARN-0014/0016
(`5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c`), reused deliberately. Out of
scope: deferred editing focus, search callback wiring, any application/test
execution, any defect or reproduction claim.
- Effort budget and recording method: single-agent session, static reading only;
active research minutes recorded by wall-clock start/end, no execution
subprocess beyond repository checks (`make evolution-check evolution-test
schema-test`).
- Review provenance and acceptance criteria: author-model (Codex), no
independent human review. Accept whatever the located code and tests show;
a missing guard is evidence of an unverified path, not a proven defect.
## Outcome (complete after execution)
Pending.
Append an entry to research/evolution/ledger.json with `recording: prospective` and
`protocol_ref` pointing here. Update profiles, run evolution checks, then snapshot at
the agreed review boundary. No automatic maturity promotion.