frontend-patterns/research/evolution/cycles/2026-09-27-zulip-target-lookup.md
tegwick fad8abdc2c Record LEARN-0017: traced Zulip target-lookup/anchor guard gap (corroboration)
Second cycle in comparison group B-independent-navigation-source-v1, a
naturally-motivated follow-up to LEARN-0014's ZN07 finding rather than a
manufactured repetition. Traces the target-message lookup and anchor-
navigation fetch continuation to their unconditional completion points in
message_fetch.ts: neither participates in the opt-in current-list-identity
guard used elsewhere in the same file, and no located test covers a
stale-navigation scenario. No reproduction or defect claim; static source
read only. CAND-0009/CAND-0010 evidence and gaps updated accordingly.

Declined to reopen the paused local navigation fixture to force a third
cycle in an existing group, per the prior agreed pause and WP-0006 T03's
own rule against manufacturing cycles to hit a count.

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
2026-09-27 23:21:02 +02:00

3.9 KiB

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)

  • Evidence references, retained failures and counterexamples: see ZulipTargetLookupCallPath and source manifest.
  • Changed understanding and applicability limits: corroborates and sharpens ZN07 with a traced call path to its concrete completion point — see review.
  • Disposition: corroboration
  • Why this is one outcome, not a count of assertions/files: one bounded question (guard presence and test coverage for two specific continuations), answered with multiple located call sites as supporting detail.
  • Remaining uncertainty and live workplan/task: no reproduction, no defect claim, no application/upstream test execution. WP-0003 T01 retains any further reproduction; WP-0003 T02 retains independent review.
  • Superseded ledger entries, if any: none.
  • Active research minutes / execution minutes: unknown; no wall-clock timer was started before inspection. See effort receipt.
  • Reported tokens / cost USD: unknown, not measured.
  • Reviewer name, role and independence: Codex, author-model, not independent.

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.