From da06464f6b17bc5262244d65c1e9998c662c4bc6 Mon Sep 17 00:00:00 2001 From: tegwick Date: Sun, 27 Sep 2026 00:56:50 +0200 Subject: [PATCH] Contrast navigation ownership with pinned Zulip sources Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a0cffe-206f-7323-89d3-b20ca4cf4bf9 --- TREE.md | 4 + research/candidates/FocusReturn.md | 9 + research/candidates/ProgressiveEnhancement.md | 18 +- research/candidates/URLAddressableState.md | 21 +- research/catalog/SourceCatalog.md | 9 + research/evolution/EvolutionReport.md | 37 ++- .../2026-09-27-zulip-navigation-effort.json | 26 ++ research/evolution/ledger.json | 39 +++ research/evolution/profiles.json | 33 ++- research/plan/OpenQuestions.md | 9 + research/reviews/NavigationCoverage.md | 7 + research/reviews/NavigationThreadReview.md | 10 + .../reviews/ZulipNavigationSourceStudy.md | 93 ++++++ research/reviews/ZulipNavigationSources.json | 268 ++++++++++++++++++ .../walkthroughs/VC03-ContentPublication.md | 9 + workplans/FEP-WP-0003-contrasting-schools.md | 18 ++ workplans/FEP-WP-0006-language-evolution.md | 18 ++ 17 files changed, 611 insertions(+), 17 deletions(-) create mode 100644 research/evolution/cycles/2026-09-27-zulip-navigation-effort.json create mode 100644 research/reviews/ZulipNavigationSourceStudy.md create mode 100644 research/reviews/ZulipNavigationSources.json diff --git a/TREE.md b/TREE.md index 6ca772d..b1c2fc8 100644 --- a/TREE.md +++ b/TREE.md @@ -356,6 +356,8 @@ research/evolution/cycles/2026-09-27-navigation-focus.md research/evolution/cycles/2026-09-27-navigation-ownership-effort.json research/evolution/cycles/2026-09-27-navigation-ownership.md research/evolution/cycles/2026-09-27-navigation.md +research/evolution/cycles/2026-09-27-zulip-navigation-effort.json +research/evolution/cycles/2026-09-27-zulip-navigation.md research/evolution/ledger.json research/evolution/profiles.json research/evolution/snapshots/baseline-2026-09-26.json @@ -456,6 +458,8 @@ research/reviews/TransactionalEvidenceExpansion.md research/reviews/TransactionalLiveReview.yaml research/reviews/TruncationDiagnosis.md research/reviews/VC01-VC02-Comparison.md +research/reviews/ZulipNavigationSourceStudy.md +research/reviews/ZulipNavigationSources.json research/reviews/recovery-review-01/inputs.json research/reviews/recovery-review-01/prompt.md research/reviews/recovery-review-01/receipt.json diff --git a/research/candidates/FocusReturn.md b/research/candidates/FocusReturn.md index dcfe1f0..8e4043d 100644 --- a/research/candidates/FocusReturn.md +++ b/research/candidates/FocusReturn.md @@ -94,3 +94,12 @@ focus from a newer search task; an obsolete navigation result must not supply a continuation at all. The earlier single-response route policy is insufficient for competing completions. This contrast does not expand the modal candidate into a universal routing pattern or prove AT behavior. + +## Independent non-modal source contrast — 2026-09-27 + +[Zulip ZN05–ZN07](../reviews/ZulipNavigationSourceStudy.md) locates search entry/exit +focus policy and selection-aware editing restoration. These are task-specific +continuations, not evidence of returning from a modal to its invoker. The inspected +editing restoration schedules focus work after a selected-message check; this does +not prove ownership is valid when the timer runs. Retain the modal scope and mark +AT/runtime validation and auxiliary continuation behavior unknown. diff --git a/research/candidates/ProgressiveEnhancement.md b/research/candidates/ProgressiveEnhancement.md index 66be540..e6ae315 100644 --- a/research/candidates/ProgressiveEnhancement.md +++ b/research/candidates/ProgressiveEnhancement.md @@ -69,8 +69,8 @@ AT, delayed history and overlapping-request behavior remain unverified. ## Separate completion and focus ownership — 2026-09-27 [Competing navigation](../reviews/NavigationOwnershipExperiment.md) NO01–NO06 exposes -limits of the preceding single-response policy. Validate ownership before any result -effects, including old errors and history restoration, not only before moving focus. +limits of the preceding single-response policy. Validate applicability for each intended result +effect, including old errors and history restoration, not only before moving focus. A current response may update content/title/status while the user has moved focus to another surviving task; an obsolete response may own none of those effects. The latest-intent policy tested here does not revive older success when newer intent @@ -80,3 +80,17 @@ A scoped navigation generation and separate focus-change check meet the tested obligations. Their history adapter depends on pinned htmx internals; multiple history misses, nonzero swap delays, redirects, lifecycle teardown and AT validation remain open. Do not apply this navigation policy indiscriminately to unrelated background work. + +## Effect-specific applicability contrast — 2026-09-27 + +[Zulip source study](../reviews/ZulipNavigationSourceStudy.md) ZN02–ZN04 shows a useful +contrast: noncurrent fetches may update cached data, while selected-view continuations +check list identity. Shared connection feedback and view-specific errors have different +scopes. Do not turn the earlier generation guard into a blanket discard rule for +every result from a view the user has left. Define data/cache acceptance separately +from current-view, feedback and focus effects, with their own consistency contracts. + +This is static support for an asynchronous-navigation obligation, not evidence that +Zulip supplies the native/no-script path required by this whole candidate. Some +auxiliary continuations lack a visible matching guard in the inspected code; runtime +behavior and transport/caller limits remain unknown. Hypothesis retained. diff --git a/research/candidates/URLAddressableState.md b/research/candidates/URLAddressableState.md index 4b98984..4571551 100644 --- a/research/candidates/URLAddressableState.md +++ b/research/candidates/URLAddressableState.md @@ -14,9 +14,10 @@ Problem: an address change can conceal state that only exists in the current tab Addressability competes with private/transient state and URL/schema stability. Proposed solution: encode the public, stable resource identity and relevant view -selection in path/query parameters. Define parameter validation, defaults and route -resolution so direct entry and reload reconstruct that selection under current -authorization. A URL identifies a view, not necessarily immutable bytes or guaranteed +selection in path/query parameters, or in a fragment when a declared client runtime +reconstructs the view. Define validation, defaults and the required resolution path +so direct entry and reload reconstruct that selection under current authorization. +A client-fragment contract does not imply no-script availability. A URL identifies a view, not necessarily immutable bytes or guaranteed future availability. Use an explicit version if a stable historical snapshot matters. Do not place secrets, private draft content, focus or every transient interaction @@ -63,3 +64,17 @@ Other policies require an explicit contract. Browser history can change the URL loading completes: pending-state disclosure/recovery is still unresolved here. The authored guard supports this obligation only in the tested schedules, not a portable router or proof of independent application recurrence. + +## Independent application source contrast — 2026-09-27 + +[Zulip ZN01–ZN08](../reviews/ZulipNavigationSourceStudy.md) locates pinned hash-to-view +reconstruction, separate history pointer/offset state, and current-list guards on +main fetch continuations. It supplies static partial application evidence; no direct +load or Back race was executed in Zulip. Auxiliary lookup/anchor paths and deferred +focus remain unverified. + +Applicability belongs to each effect: noncurrent results can still populate cached +data without acquiring the right to change current selection. Object/list identity +and a navigation generation are different implementation policies; neither alone +proves freshness. Keep addressability separate from no-script enhancement and from +within-session focus/scroll restoration. Full-contract recurrence remains unassessed. diff --git a/research/catalog/SourceCatalog.md b/research/catalog/SourceCatalog.md index 8d30290..e54ba4c 100644 --- a/research/catalog/SourceCatalog.md +++ b/research/catalog/SourceCatalog.md @@ -196,3 +196,12 @@ compares the unchanged prior focus policy with an authored generation/focus guar keyboard-helper failures retained. Same fixture family and pinned htmx package. SRC-0040 event documentation and pinned loadHistoryFromServer source delimit the experimental history-XHR adapter; no vendor patch or production claim. + +## Zulip navigation/search source contrast — 2026-09-27 + +SRC-0013 follow-up at existing pinned revision +`5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c`: [ZN01–ZN08](../reviews/ZulipNavigationSourceStudy.md), +[twelve-file hash/range manifest](../reviews/ZulipNavigationSources.json). New hash, +search, message-fetch/list and continuation paths, distinct from prior draft/send +reads; same application family. Static partial mechanisms and limiting branches; no +upstream tests or application executed. No full-pattern/no-script or bug claim. diff --git a/research/evolution/EvolutionReport.md b/research/evolution/EvolutionReport.md index eb7d2e1..6e3e7b4 100644 --- a/research/evolution/EvolutionReport.md +++ b/research/evolution/EvolutionReport.md @@ -13,7 +13,7 @@ The baseline profiles are author-model assessments by Codex; they do not confer | Evidence attached to a candidate | Candidates | | --- | ---: | | documentary | 17 | -| static-code | 5 | +| static-code | 7 | | runtime | 8 | Categories overlap. Runtime includes authored fixtures and negative controls. Family labels group related evidence; they are not counts of independent applications. @@ -55,9 +55,17 @@ Ten selected retrospective outcomes (not a historical census), followed by prosp | inconclusive | 0 | | merge | 0 | | rejection | 0 | -| revision | 11 | +| revision | 12 | -Cycles with recorded research effort: 3/13. Unknown effort is neither zero nor estimated from commits, tokens or assertion counts. +Cycles with recorded research effort: 4/14. Unknown effort is neither zero nor estimated from commits, tokens or assertion counts. + +### Stream B / B-independent-navigation-source-v1 + +| Cycle | Outcome | Research minutes | Consequential outcome/hour | +| --- | --- | ---: | ---: | +| LEARN-0014 | revision | 6.345 | 9.46 | + +One bounded question counts at most one consequential outcome. Corroboration and inconclusive work remain visible separately. Fewer than three comparable cycles: no trend assessment. ### Stream B / B-navigation-mechanism-v1 @@ -231,8 +239,9 @@ Make a navigable state reconstructible from its URL. | documentary | Web platform | pushState changes history, not server dereferenceability. | [NavigationRenderingEvidence](../../research/reviews/NavigationRenderingEvidence.md) | | runtime | htmx in authored public-catalog fixture | NH01–NH06: native/enhanced routes, history hit/miss, actual browser cache ordering and missing-Vary negative control; explicit Node validator checks separate. | [NavigationHistoryExperiment](../../research/reviews/NavigationHistoryExperiment.md) | | runtime | htmx in authored public-catalog fixture | NO01–NO06: ordered history/success/error races, prior policy 0/12 full obligations versus guarded 12/12; separate focus ownership. Same fixture family; pinned history-XHR adapter. | [NavigationOwnershipExperiment](../../research/reviews/NavigationOwnershipExperiment.md) | +| static-code | Zulip | ZN01–ZN08 at pinned revision: partial hash/list/cache mechanisms and non-modal continuation contrast. No application/test execution, no no-script claim, no complete pattern recurrence. | [ZulipNavigationSourceStudy](../../research/reviews/ZulipNavigationSourceStudy.md) | -Open limits: Independent application recurrence and human/AT validation remain unverified. Pending history disclosure, multiple history misses, redirects, nonzero swap delays, bfcache, lifecycle cleanup, interrupted/late enhancement and offline availability remain open. +Open limits: Independent application recurrence and human/AT validation remain unverified. Pending history disclosure, multiple history misses, redirects, nonzero swap delays, bfcache, lifecycle cleanup, interrupted/late enhancement and offline availability remain open. Zulip auxiliary target/anchor callbacks, deferred editing focus and search callback wiring remain unverified; static guards do not prove whole-application ownership. Superseded by: none recorded. @@ -249,8 +258,9 @@ Keep essential actions usable when enhancement is unavailable. | runtime | htmx in authored public-catalog fixture | NH01–NH06: native/enhanced routes, history hit/miss, actual browser cache ordering and missing-Vary negative control; explicit Node validator checks separate. | [NavigationHistoryExperiment](../../research/reviews/NavigationHistoryExperiment.md) | | runtime | htmx in authored public-catalog fixture | NF01–NF06: Tab/Enter navigation, raw versus authored focus/status policy, held-response ownership and background update; DOM evidence only, not AT speech. | [NavigationFocusExperiment](../../research/reviews/NavigationFocusExperiment.md) | | runtime | htmx in authored public-catalog fixture | NO01–NO06: ordered history/success/error races, prior policy 0/12 full obligations versus guarded 12/12; separate focus ownership. Same fixture family; pinned history-XHR adapter. | [NavigationOwnershipExperiment](../../research/reviews/NavigationOwnershipExperiment.md) | +| static-code | Zulip | ZN01–ZN08 at pinned revision: partial hash/list/cache mechanisms and non-modal continuation contrast. No application/test execution, no no-script claim, no complete pattern recurrence. | [ZulipNavigationSourceStudy](../../research/reviews/ZulipNavigationSourceStudy.md) | -Open limits: Independent application recurrence and human/AT validation remain unverified. Pending history disclosure, multiple history misses, redirects, nonzero swap delays, bfcache, lifecycle cleanup, interrupted/late enhancement and offline availability remain open. +Open limits: Independent application recurrence and human/AT validation remain unverified. Pending history disclosure, multiple history misses, redirects, nonzero swap delays, bfcache, lifecycle cleanup, interrupted/late enhancement and offline availability remain open. Zulip auxiliary target/anchor callbacks, deferred editing focus and search callback wiring remain unverified; static guards do not prove whole-application ownership. Superseded by: none recorded. @@ -339,8 +349,9 @@ Restore meaningful focus after a temporary interaction ends. | runtime | Radix | Authored fixture: raw 20/24 versus routed 24/24; browser/build limits retained. | [NestedOwnershipRouting](../../research/reviews/NestedOwnershipRouting.md) | | runtime | htmx in authored public-catalog fixture | NF01–NF06: Tab/Enter navigation, raw versus authored focus/status policy, held-response ownership and background update; DOM evidence only, not AT speech. | [NavigationFocusExperiment](../../research/reviews/NavigationFocusExperiment.md) | | runtime | htmx in authored public-catalog fixture | NO01–NO06: ordered history/success/error races, prior policy 0/12 full obligations versus guarded 12/12; separate focus ownership. Same fixture family; pinned history-XHR adapter. | [NavigationOwnershipExperiment](../../research/reviews/NavigationOwnershipExperiment.md) | +| static-code | Zulip | ZN01–ZN08 at pinned revision: partial hash/list/cache mechanisms and non-modal continuation contrast. No application/test execution, no no-script claim, no complete pattern recurrence. | [ZulipNavigationSourceStudy](../../research/reviews/ZulipNavigationSourceStudy.md) | -Open limits: One implementation family; repeated trials are not independent uses. Animated exits and competing owners remain untested; no production repair claim. Route ownership is a contrast, not independent modal recurrence; AT speech and broader history/lifecycle cases remain unverified. +Open limits: One implementation family; repeated trials are not independent uses. Animated exits and competing owners remain untested; no production repair claim. Route ownership is a contrast, not independent modal recurrence; AT speech and broader history/lifecycle cases remain unverified. Zulip auxiliary target/anchor callbacks, deferred editing focus and search callback wiring remain unverified; static guards do not prove whole-application ownership. Superseded by: none recorded. @@ -544,3 +555,17 @@ Evidence: [NavigationOwnershipExperiment](../../research/reviews/NavigationOwner Remaining uncertainty: One authored htmx family and author-model review, not production recurrence or AT validation. History adapter is pinned implementation-dependent; pending-state, multiple-miss and lifecycle limits remain open. Three distinct protocols are not a comparable diminishing-returns window. Supersedes: none recorded. + +### LEARN-0014 — Where does independently developed Zulip scope navigation/search result and focus applicability, and where does our model fail to establish a guarantee? + +2026-09-27 · stream B · prospective · revision + +Before: The authored navigation generation guard protected current-view and focus effects, but independent application recurrence and alternative ownership/cache policies were unverified. + +Conclusion: Revise guidance toward per-effect applicability: pinned Zulip preserves noncurrent cache data while guarding main selected-view continuations by list identity. Make client-fragment addressability explicit without inferring no-script enhancement. Shared feedback, auxiliary callbacks and deferred focus limit the inference. + +Evidence: [ZulipNavigationSourceStudy](../../research/reviews/ZulipNavigationSourceStudy.md), [ZulipNavigationSources](../../research/reviews/ZulipNavigationSources.json), [2026-09-27-zulip-navigation-effort](../../research/evolution/cycles/2026-09-27-zulip-navigation-effort.json). + +Remaining uncertainty: Static targeted ranges in twelve files, no Zulip runtime/upstream test execution or independent human/AT review. Auxiliary lookup/anchor continuations, deferred focus and callback wiring need a bounded follow-up before any race claim. One Zulip family supplies partial mechanisms, not full-contract recurrence or a no-script guarantee. + +Supersedes: none recorded. diff --git a/research/evolution/cycles/2026-09-27-zulip-navigation-effort.json b/research/evolution/cycles/2026-09-27-zulip-navigation-effort.json new file mode 100644 index 0000000..cf4c42b --- /dev/null +++ b/research/evolution/cycles/2026-09-27-zulip-navigation-effort.json @@ -0,0 +1,26 @@ +{ + "start": 200742.642170344, + "execution_seconds": 17.33504651399562, + "executions": [ + { + "command": [ + "make", + "evolution-check", + "evolution-test", + "schema-test", + "bench-test" + ], + "seconds": 17.33504651399562, + "exit_code": 0 + } + ], + "status": "complete", + "end_utc": "2026-09-26T22:56:26.171475+00:00", + "start_utc_approx": "2026-09-26T22:49:48.147633+00:00", + "elapsed_seconds": 398.024, + "research_minutes": 6.345, + "execution_minutes": 0.289, + "method": "Monotonic single-agent elapsed research session minus timed repository-check subprocesses. Source retrieval, targeted inspection, interpretation and recording are active overhead; no upstream application/test execution.", + "excluded": "Work before clock and final receipt refresh, commit/snapshot/sync administration after cutoff; model tokens/cost unknown.", + "budget": "Within registered 40 active research / 10 check-execution minutes; twelve-file cap reached without expansion." +} diff --git a/research/evolution/ledger.json b/research/evolution/ledger.json index 4078cc0..fb3c801 100644 --- a/research/evolution/ledger.json +++ b/research/evolution/ledger.json @@ -450,6 +450,45 @@ "cost_usd": null }, "supersedes": [] + }, + { + "id": "LEARN-0014", + "date": "2026-09-27", + "recording": "prospective", + "stream": "B", + "comparison_group": "B-independent-navigation-source-v1", + "protocol_ref": "research/evolution/cycles/2026-09-27-zulip-navigation.md", + "question": "Where does independently developed Zulip scope navigation/search result and focus applicability, and where does our model fail to establish a guarantee?", + "previous_belief": "The authored navigation generation guard protected current-view and focus effects, but independent application recurrence and alternative ownership/cache policies were unverified.", + "conclusion": "Revise guidance toward per-effect applicability: pinned Zulip preserves noncurrent cache data while guarding main selected-view continuations by list identity. Make client-fragment addressability explicit without inferring no-script enhancement. Shared feedback, auxiliary callbacks and deferred focus limit the inference.", + "disposition": "revision", + "affected_patterns": [ + "CAND-0009", + "CAND-0010", + "CAND-0016" + ], + "evidence": [ + "research/reviews/ZulipNavigationSourceStudy.md", + "research/reviews/ZulipNavigationSources.json", + "research/evolution/cycles/2026-09-27-zulip-navigation-effort.json" + ], + "remaining_uncertainty": [ + "Static targeted ranges in twelve files, no Zulip runtime/upstream test execution or independent human/AT review.", + "Auxiliary lookup/anchor continuations, deferred focus and callback wiring need a bounded follow-up before any race claim.", + "One Zulip family supplies partial mechanisms, not full-contract recurrence or a no-script guarantee." + ], + "reviewer": { + "name": "Codex", + "role": "author-model", + "independent_human": false + }, + "effort": { + "research_minutes": 6.345, + "execution_minutes": 0.289, + "reported_tokens": null, + "cost_usd": null + }, + "supersedes": [] } ] } diff --git a/research/evolution/profiles.json b/research/evolution/profiles.json index ac0586a..53e117f 100644 --- a/research/evolution/profiles.json +++ b/research/evolution/profiles.json @@ -317,7 +317,7 @@ "id": "CAND-0009", "path": "research/candidates/URLAddressableState.md", "title": "URL-addressable State", - "sha256": "7374180994e13cbca7b1dd4cf4da27c36926e462e844bbc0beb42e5ef6e562f5", + "sha256": "07d524c3c0dd080bd42ff5dd79a36e6ecd2a8654f07ece880b483477f7ca4497", "status": "draft", "maturity": "hypothesis", "decision": "Make a navigable state reconstructible from its URL.", @@ -345,6 +345,12 @@ "family": "htmx in authored public-catalog fixture", "ref": "research/reviews/NavigationOwnershipExperiment.md", "scope": "NO01–NO06: ordered history/success/error races, prior policy 0/12 full obligations versus guarded 12/12; separate focus ownership. Same fixture family; pinned history-XHR adapter." + }, + { + "kind": "static-code", + "family": "Zulip", + "ref": "research/reviews/ZulipNavigationSourceStudy.md", + "scope": "ZN01–ZN08 at pinned revision: partial hash/list/cache mechanisms and non-modal continuation contrast. No application/test execution, no no-script claim, no complete pattern recurrence." } ], "independent_full_contract_uses": null, @@ -357,7 +363,8 @@ }, "gaps": [ "Independent application recurrence and human/AT validation remain unverified.", - "Pending history disclosure, multiple history misses, redirects, nonzero swap delays, bfcache, lifecycle cleanup, interrupted/late enhancement and offline availability remain open." + "Pending history disclosure, multiple history misses, redirects, nonzero swap delays, bfcache, lifecycle cleanup, interrupted/late enhancement and offline availability remain open.", + "Zulip auxiliary target/anchor callbacks, deferred editing focus and search callback wiring remain unverified; static guards do not prove whole-application ownership." ], "superseded_by": [] }, @@ -365,7 +372,7 @@ "id": "CAND-0010", "path": "research/candidates/ProgressiveEnhancement.md", "title": "Progressive Enhancement", - "sha256": "3eebc18862e1f5cd0221fa72f468a74719e7fbeab407cc81930d9e4ea397b3b5", + "sha256": "1dc3885ef896b9a7cb61af11fa8893484eb1e13454207326abc7250d5ca4382b", "status": "draft", "maturity": "hypothesis", "decision": "Keep essential actions usable when enhancement is unavailable.", @@ -399,6 +406,12 @@ "family": "htmx in authored public-catalog fixture", "ref": "research/reviews/NavigationOwnershipExperiment.md", "scope": "NO01–NO06: ordered history/success/error races, prior policy 0/12 full obligations versus guarded 12/12; separate focus ownership. Same fixture family; pinned history-XHR adapter." + }, + { + "kind": "static-code", + "family": "Zulip", + "ref": "research/reviews/ZulipNavigationSourceStudy.md", + "scope": "ZN01–ZN08 at pinned revision: partial hash/list/cache mechanisms and non-modal continuation contrast. No application/test execution, no no-script claim, no complete pattern recurrence." } ], "independent_full_contract_uses": null, @@ -411,7 +424,8 @@ }, "gaps": [ "Independent application recurrence and human/AT validation remain unverified.", - "Pending history disclosure, multiple history misses, redirects, nonzero swap delays, bfcache, lifecycle cleanup, interrupted/late enhancement and offline availability remain open." + "Pending history disclosure, multiple history misses, redirects, nonzero swap delays, bfcache, lifecycle cleanup, interrupted/late enhancement and offline availability remain open.", + "Zulip auxiliary target/anchor callbacks, deferred editing focus and search callback wiring remain unverified; static guards do not prove whole-application ownership." ], "superseded_by": [] }, @@ -578,7 +592,7 @@ "id": "CAND-0016", "path": "research/candidates/FocusReturn.md", "title": "Focus Return", - "sha256": "a09b79e3b481caab81a7f9ee10d895ba77c6c7eedb71f4313733735eea58a477", + "sha256": "9149c2f563eafcfec983a9285949225840d97804568309bd16bbb1eb6b3dde77", "status": "draft", "maturity": "hypothesis", "decision": "Restore meaningful focus after a temporary interaction ends.", @@ -612,6 +626,12 @@ "family": "htmx in authored public-catalog fixture", "ref": "research/reviews/NavigationOwnershipExperiment.md", "scope": "NO01–NO06: ordered history/success/error races, prior policy 0/12 full obligations versus guarded 12/12; separate focus ownership. Same fixture family; pinned history-XHR adapter." + }, + { + "kind": "static-code", + "family": "Zulip", + "ref": "research/reviews/ZulipNavigationSourceStudy.md", + "scope": "ZN01–ZN08 at pinned revision: partial hash/list/cache mechanisms and non-modal continuation contrast. No application/test execution, no no-script claim, no complete pattern recurrence." } ], "independent_full_contract_uses": null, @@ -625,7 +645,8 @@ "gaps": [ "One implementation family; repeated trials are not independent uses.", "Animated exits and competing owners remain untested; no production repair claim.", - "Route ownership is a contrast, not independent modal recurrence; AT speech and broader history/lifecycle cases remain unverified." + "Route ownership is a contrast, not independent modal recurrence; AT speech and broader history/lifecycle cases remain unverified.", + "Zulip auxiliary target/anchor callbacks, deferred editing focus and search callback wiring remain unverified; static guards do not prove whole-application ownership." ], "superseded_by": [] }, diff --git a/research/plan/OpenQuestions.md b/research/plan/OpenQuestions.md index c5eb679..b8cd8c9 100644 --- a/research/plan/OpenQuestions.md +++ b/research/plan/OpenQuestions.md @@ -123,3 +123,12 @@ can violate current intent even when the prior single-response policy seemed ade Q05 remains open beyond one fixture family. [Thread review](../reviews/NavigationThreadReview.md) pauses the fixture and proposes an independently developed application source contrast. No new ownership pattern or canonical dimension is admitted. + +## Q03/Q05 independent navigation source contrast — 2026-09-27 + +[Zulip ZN01–ZN08](../reviews/ZulipNavigationSourceStudy.md) provides partial evidence +from an independently developed application. Cached-data acceptance, selected-view +continuation and focus have different applicability scopes; list identity is not +identical to a navigation epoch. Auxiliary callbacks and delayed focus limit any +whole-app conclusion. Q03 full-contract recurrence and Q05 generality remain open; +no no-script, runtime or independent-review result follows from static inspection. diff --git a/research/reviews/NavigationCoverage.md b/research/reviews/NavigationCoverage.md index d886c0d..aabe0eb 100644 --- a/research/reviews/NavigationCoverage.md +++ b/research/reviews/NavigationCoverage.md @@ -48,3 +48,10 @@ evidence to provisional VC-03. Guarded policy meets 12/12 full obligations, prio policy 0/12; one authored family, no AT/independent validation. The [thread review](NavigationThreadReview.md) pauses local fixture expansion and names a pinned Zulip navigation/search source contrast as the next evidence direction. + +## Independent source contrast — 2026-09-27 + +[Zulip ZN01–ZN08](ZulipNavigationSourceStudy.md) adds static partial application +evidence for fragment addressability and effect-specific applicability. It is a +contrast to VC-03's native public-document contract, not a no-script implementation +of that brief or an additional completed walkthrough. The local fixture stays paused. diff --git a/research/reviews/NavigationThreadReview.md b/research/reviews/NavigationThreadReview.md index a843dc3..aa9492f 100644 --- a/research/reviews/NavigationThreadReview.md +++ b/research/reviews/NavigationThreadReview.md @@ -57,3 +57,13 @@ Keep these residuals live, without automatically extending the fixture: Reopen the local fixture when independent evidence exposes a specific contradiction or a concrete consumer needs one of these limits resolved. The next source contrast can narrow, merge or reject our claims; promotion is not its default outcome. + +## Follow-through — independent source slice, 2026-09-27 + +The proposed [Zulip study](ZulipNavigationSourceStudy.md) is now completed as +LEARN-0014 under its own static-source protocol. Twelve pinned files add partial +mechanisms and counter-limits; applicability is refined per effect, rather than +requiring wholesale discard. No upstream runtime or human review was performed. +The authored fixture remains paused. Next uncertainty is the bounded caller/transport +context around auxiliary target/anchor callbacks and deferred focus; do not infer +a defect from the absence of one local predicate. diff --git a/research/reviews/ZulipNavigationSourceStudy.md b/research/reviews/ZulipNavigationSourceStudy.md new file mode 100644 index 0000000..9b67d22 --- /dev/null +++ b/research/reviews/ZulipNavigationSourceStudy.md @@ -0,0 +1,93 @@ +# Zulip navigation/search source contrast — 2026-09-27 + +LEARN-0014; Codex author-model review. [Protocol](../evolution/cycles/2026-09-27-zulip-navigation.md) +committed as `f3ac569` before source inspection. Stream B, group +B-independent-navigation-source-v1. **Static source evidence only**: no application +build, browser run, upstream test execution or inference call. + +Pinned Zulip revision `5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c`, deliberately reused +from the earlier recovery review, not claimed latest. [Source manifest](ZulipNavigationSources.json) +records twelve files, raw SHA256 and reviewed line ranges. This is one independently +developed application family, already known to this research through different paths; +it is not twelve independent uses or an independent review of our conclusions. + +## Located claims + +| Claim | Exact pinned locators | Observed code | Interpretation / limit | +| --- | --- | --- | --- | +| ZN01 | [hash reconstruction](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/hashchange.ts#L171-L235), [history metadata](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/browser_history.ts#L168-L195), [save guard](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/narrow_history.ts#L10-L63) | Hash terms select a message view; history state supplies message pointer/offset. Saving selection checks URL/filter agreement first. | Addressability and within-session continuation are separate contracts; these paths require the client. No no-script or direct-load runtime claim. | +| ZN02 | [fetch continuation](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_view.ts#L830-L878), [selection guard](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_view.ts#L1413-L1481), [current-list lifecycle](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_lists.ts#L24-L64) | Main narrow-fetch continuation returns when its captured message list is no longer current; selected-message rendering also checks list identity. | Partial support for protecting current selection/hash effects without requiring a global navigation counter. Not a proof for all callbacks. | +| ZN03 | [success routing](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_fetch.ts#L213-L280), [processing](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_fetch.ts#L159-L210), [preserved view policy](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_list.ts#L152-L199), [list updates](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_list.ts#L269-L326) | For a noncurrent, nonpreserved list, success switches to data-only processing instead of discarding the response. Preserved combined-feed views are an explicit exception. Other message/sidebar processing still occurs. | Leaving a view does not make its data useless. Cache/data applicability differs from permission to affect active navigation. Not a claim that inactive results have zero UI effects. | +| ZN04 | [error and connection feedback](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_fetch.ts#L418-L508) | Success and HTTP 400 close shared connection feedback before the noncurrent-list error guard. Errors for noncurrent, non-combined lists return before further processing/retry; other errors have backoff/retry handling. | Feedback has scopes too. Global connection evidence and view-specific errors are different; helper internals and runtime correctness were not audited. | +| ZN05 | [query dispatch](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/search.ts#L60-L95), [suggestion callback](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/search.ts#L151-L212), [suggestion construction](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/search_suggestion.ts#L1530-L1636), [IME/Enter handling](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/search.ts#L290-L335) | Committed search passes parsed terms to an injected callback and blurs search; the inspected suggestion provider synchronously returns a list. Enter/IME handling distinguishes composing or selecting a suggestion from submitting search. | Do not treat every keystroke as a remote query race. Callback wiring and all imported suggestion-helper internals are outside this twelve-file slice. | +| ZN06 | [search continuation](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/search.ts#L396-L437), [close focused search](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/search.ts#L470-L483), [editing focus restore](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_list_view.ts#L345-L392) | Search entry focuses search; exit may keep a narrow, redirect or focus the app. Editing focus capture records message/selection; restoration checks selected-message identity, then schedules focus work. | Non-modal task continuation differs from return to a modal invoker. A pre-timeout identity check is not proof of completion-time focus ownership or AT behavior. | +| ZN07 | [target-message lookup](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_view.ts#L662-L699), [anchor navigation](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_view.ts#L1002-L1074) | An auxiliary target lookup re-enters show from success/error callbacks. The anchor fetch continuation creates/uses the then-current list through a closure. These branches have no visible captured-current-list guard like ZN02. | Concrete unverified paths prevent a whole-app ownership guarantee. No reproduced race, exploit or vendor bug claim; unseen transport/caller behavior may constrain execution. | +| ZN08 | [preserved-list reuse](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_view.ts#L175-L194), [filter source](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/narrow_state.ts#L14-L67), [inspected upstream test](https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/tests/message_fetch.test.cjs#L1-L40) | A preserved combined-feed list may be reused; narrow state derives from the current view. The inspected test covers date-anchor parameter handling. | List identity is not equivalent to a monotonically increasing navigation generation. This test file supplies no executed or inspected competing-navigation coverage; the rest of the suite was not reviewed. | + +## Bounded trace and counterexample to overgeneralization + +The hash path parses route terms and calls message_view.show. That function constructs +or restores a list, updates the hash when required and makes the list current. A needed +message fetch captures that list. When it completes, data/fetch state can still be +processed, while the main view continuation checks current-list identity before changing +selected-view state. See ZN01–ZN03. This is a trace across located functions, not a +running-session observation. Search dispatch itself is located, but the initializer +that supplies its injected navigation callback was not included; do not infer its +complete wiring from the naming alone. + +The meaningful contrast is **applicability per effect**: + +| Effect | Located decision / remaining uncertainty | +| --- | --- | +| Populate cached message data | Can remain useful after leaving a view; cache consistency/retention internals not audited | +| Update a preserved rendered list | Explicit conditional combined-feed exception; not a universal discard rule | +| Change selected view/hash/message position | Main continuation and selection paths check current list identity | +| Update shared connection feedback | Some updates precede view-specific error applicability checks | +| Move input focus | Search-task policy and editing selection context are distinct; timer completion still untested | + +Our earlier generation guard is one implementation of a selected-view policy. It must +not become a requirement to drop an entire response or every side effect whenever a +newer navigation exists. Nor does Zulip's list identity establish that all effects are +safe: ZN07 and deferred focus in ZN06 are explicit limits requiring additional evidence. +A preserved object can become current again; object identity and latest-intent generation +encode different policies. Freshness, authorization and data consistency are not proven +by either identity mechanism. + +## Pattern disposition: revision without promotion + +Revise URL-addressable State to make client-fragment reconstruction an explicit option, +with its required client/runtime contract, separate from server-visible path/query +resolution. Hash-based addressability does not establish progressive enhancement. + +Refine Progressive Enhancement's asynchronous-navigation obligation to decide result +applicability per effect: cache data, current selection, global versus local feedback, +and focus. Zulip is a static implementation contrast for that obligation, **not a +verified no-script application or a full known use of Progressive Enhancement**. +Focus Return gains only a non-modal scope contrast, not an additional complete modal use. + +This is one consequential revision, with corroborating identity guards and limiting +branches recorded together. CAND-0009/0010/0016 remain draft/hypothesis; independent +full-contract use counts stay unassessed. Independent implementation provenance is +stronger than another authored fixture variant, but the review remains author-model. +No new canonical identity, relation, pattern, M1/M2 acceptance or usefulness finding. + +## Scope closure and follow-up + +The twelve-file cap is reached; no further callees were fetched. Files were inspected +at the manifest's ranges, not exhaustively audited. The raw GitHub URLs supplied the +source after the browsing tool could not open the commit page; retrieval hashes are +preserved. No upstream code or frozen evaluation artifact changed. A source test was +read, not executed. The earlier htmx fixture remains paused. + +[Effort receipt](../evolution/cycles/2026-09-27-zulip-navigation-effort.json) records +active source work versus repository-check execution, with final administration +excluded and token/cost unknown. This source-review protocol is a separate comparison +group; four distinct prospective protocols still do not provide a diminishing-returns +window. Full language usefulness and independent human/AT review remain unresolved. + +WP-0003 T01 follow-up: before trusting ZN07 or delayed focus, preregister a narrowly +scoped upstream call-path/test study of the target lookup and anchor continuation; +include callback wiring/transport context, preserve negative findings, and do not +report a bug until reproduced or otherwise established. Broader evidence collection +can proceed without expanding our local adapter. T02 retains independent review and +the offline case branch. WP-0006 T03 retains comparable-window/review-date work. diff --git a/research/reviews/ZulipNavigationSources.json b/research/reviews/ZulipNavigationSources.json new file mode 100644 index 0000000..5f3ef6e --- /dev/null +++ b/research/reviews/ZulipNavigationSources.json @@ -0,0 +1,268 @@ +{ + "repository": "zulip/zulip", + "revision": "5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c", + "accessed": "2026-09-27", + "method": "Pinned raw GitHub source, static inspection only; no application or upstream tests executed", + "files": [ + { + "path": "web/src/hashchange.ts", + "sha256": "ad749d6eecaa5475e03e5f95a9066e00871506b3c617f61376fecea1b925a1a4", + "lines": 622, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/hashchange.ts", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/hashchange.ts", + "reviewed_ranges": [ + { + "start": 171, + "end": 235, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/hashchange.ts#L171-L235" + }, + { + "start": 602, + "end": 622, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/hashchange.ts#L602-L622" + } + ] + }, + { + "path": "web/src/search.ts", + "sha256": "17b62ee84dd2cf53aec2678875f2b3a09cbe7e480f071e1fa352fda8883bbc32", + "lines": 483, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/search.ts", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/search.ts", + "reviewed_ranges": [ + { + "start": 60, + "end": 95, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/search.ts#L60-L95" + }, + { + "start": 151, + "end": 212, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/search.ts#L151-L212" + }, + { + "start": 290, + "end": 335, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/search.ts#L290-L335" + }, + { + "start": 396, + "end": 437, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/search.ts#L396-L437" + }, + { + "start": 470, + "end": 483, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/search.ts#L470-L483" + } + ] + }, + { + "path": "web/src/message_fetch.ts", + "sha256": "70b4367e41313789850026398727c8132ce3347229dabca226042b1d55f2693e", + "lines": 857, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_fetch.ts", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_fetch.ts", + "reviewed_ranges": [ + { + "start": 159, + "end": 210, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_fetch.ts#L159-L210" + }, + { + "start": 213, + "end": 280, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_fetch.ts#L213-L280" + }, + { + "start": 418, + "end": 529, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_fetch.ts#L418-L529" + } + ] + }, + { + "path": "web/src/message_lists.ts", + "sha256": "d5466ca0e5fa3815e81931b415338b578d27fb3e8fda8faf8362c120d83148bb", + "lines": 113, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_lists.ts", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_lists.ts", + "reviewed_ranges": [ + { + "start": 24, + "end": 64, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_lists.ts#L24-L64" + } + ] + }, + { + "path": "web/src/narrow_state.ts", + "sha256": "b2257a20074e7278ecc481ecb88e1315c3a24212e8705b3acd783076de9d11b0", + "lines": 387, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/narrow_state.ts", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/narrow_state.ts", + "reviewed_ranges": [ + { + "start": 14, + "end": 67, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/narrow_state.ts#L14-L67" + } + ] + }, + { + "path": "web/src/narrow_history.ts", + "sha256": "c7cbc3152a0d6f4dad7681013fa09c4083ea9de263869b6717d85f4e0d5eea00", + "lines": 63, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/narrow_history.ts", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/narrow_history.ts", + "reviewed_ranges": [ + { + "start": 10, + "end": 63, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/narrow_history.ts#L10-L63" + } + ] + }, + { + "path": "web/src/message_view.ts", + "sha256": "8dae489715846f1ded057663c89e1852ae871b7e3a1d7d7d04773c18429a4d89", + "lines": 1801, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_view.ts", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_view.ts", + "reviewed_ranges": [ + { + "start": 175, + "end": 194, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_view.ts#L175-L194" + }, + { + "start": 255, + "end": 292, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_view.ts#L255-L292" + }, + { + "start": 449, + "end": 528, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_view.ts#L449-L528" + }, + { + "start": 662, + "end": 699, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_view.ts#L662-L699" + }, + { + "start": 830, + "end": 878, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_view.ts#L830-L878" + }, + { + "start": 1002, + "end": 1074, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_view.ts#L1002-L1074" + }, + { + "start": 1413, + "end": 1481, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_view.ts#L1413-L1481" + } + ] + }, + { + "path": "web/src/browser_history.ts", + "sha256": "342b79942f3c0d33f30119e07acefeacdc4034493b2a39cbfb3dcc5e875f0dd6", + "lines": 211, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/browser_history.ts", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/browser_history.ts", + "reviewed_ranges": [ + { + "start": 130, + "end": 158, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/browser_history.ts#L130-L158" + }, + { + "start": 168, + "end": 195, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/browser_history.ts#L168-L195" + } + ] + }, + { + "path": "web/src/message_list.ts", + "sha256": "af214b8055206edf53bf6a5848566f0065a1a31d50fe5fd09c3f1da10708e6d1", + "lines": 739, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_list.ts", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_list.ts", + "reviewed_ranges": [ + { + "start": 152, + "end": 199, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_list.ts#L152-L199" + }, + { + "start": 269, + "end": 326, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_list.ts#L269-L326" + } + ] + }, + { + "path": "web/tests/message_fetch.test.cjs", + "sha256": "affadd8643b3adc9ac82baf44b820cb88fec4d1feb627a9ff169053453340b11", + "lines": 40, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/tests/message_fetch.test.cjs", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/tests/message_fetch.test.cjs", + "reviewed_ranges": [ + { + "start": 1, + "end": 40, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/tests/message_fetch.test.cjs#L1-L40" + } + ] + }, + { + "path": "web/src/search_suggestion.ts", + "sha256": "0f1e79178c69a9f6d1daa58e08ca8039dc095dbeb485cba517ebcb0eeeffb217", + "lines": 1641, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/search_suggestion.ts", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/search_suggestion.ts", + "reviewed_ranges": [ + { + "start": 1530, + "end": 1636, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/search_suggestion.ts#L1530-L1636" + } + ] + }, + { + "path": "web/src/message_list_view.ts", + "sha256": "4d4f6bf09d7c87ff3b3fb1cca60d6fd89c0c9ba4d352a996f01235ca9e0150a9", + "lines": 2428, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_list_view.ts", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_list_view.ts", + "reviewed_ranges": [ + { + "start": 345, + "end": 392, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_list_view.ts#L345-L392" + }, + { + "start": 584, + "end": 586, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_list_view.ts#L584-L586" + }, + { + "start": 1493, + "end": 1503, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_list_view.ts#L1493-L1503" + }, + { + "start": 1993, + "end": 1997, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_list_view.ts#L1993-L1997" + } + ] + } + ], + "scope": "Twelve files, targeted ranges only; not a whole-file/application audit. Same pinned Zulip family as SRC-0013, new navigation evidence. No runtime or upstream test execution.", + "preregistration_commit": "f3ac569" +} diff --git a/research/walkthroughs/VC03-ContentPublication.md b/research/walkthroughs/VC03-ContentPublication.md index ece3ed4..2b60138 100644 --- a/research/walkthroughs/VC03-ContentPublication.md +++ b/research/walkthroughs/VC03-ContentPublication.md @@ -128,3 +128,12 @@ including preserving committed content when the newest request fails. It is not general router or AT validation. Pending Back-state disclosure and broader history lifecycle remain open. [Thread review](../reviews/NavigationThreadReview.md) pauses fixture expansion; VC-03 stays provisional with independent/AT and offline gaps. + +## Independent application contrast — 2026-09-27 + +[Zulip source review](../reviews/ZulipNavigationSourceStudy.md) distinguishes +client-fragment resolution from this brief's native document path. Its cached-data +acceptance and current-list guards refine the asynchronous effect contract but do +not validate this public publication case or its offline/no-script requirements. +VC-03 remains provisional; selected-view applicability need not forbid useful +off-screen data processing. diff --git a/workplans/FEP-WP-0003-contrasting-schools.md b/workplans/FEP-WP-0003-contrasting-schools.md index b746c1b..2b4fbeb 100644 --- a/workplans/FEP-WP-0003-contrasting-schools.md +++ b/workplans/FEP-WP-0003-contrasting-schools.md @@ -233,3 +233,21 @@ T01 retains pending history disclosure, multiple misses, redirects, delayed swap bfcache/lifecycle and interrupted/late enhancement before any production claim. T02 retains independent human/AT review and offline VC-03 branch. WP-0006 T03 retains review-date reconciliation and useful comparable-cycle windows; no M1/M2 closure. + +## Independent Zulip navigation source study completed — 2026-09-27 + +LEARN-0014 preregistered at f3ac569; twelve files at existing Zulip revision +5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c, static ranges/hash manifest and ZN01–ZN08 +review retained. Main list-identity guards coexist with off-screen cache updates; +shared feedback, auxiliary callbacks and deferred focus limit generalization. One +revision: effect-specific applicability and explicit client-fragment addressability. +No Zulip app/tests executed, no no-script/full-contract/bug claim. Same Zulip family, +new navigation paths; all candidates remain hypotheses. Local fixture stays paused. + +WP-0003 T01 follow-up: preregister a bounded caller/transport/test study of auxiliary +target lookup and anchor continuations, including deferred focus/search wiring only +if needed to establish applicability. Record unknowns; reproduce before claiming a +defect. T02 retains independent human/AT and offline-case obligations. WP-0006 T03 +retains remaining review dates and comparable-window work; this static protocol is +not pooled with runtime cycles. No M1/M2 closure. See +research/reviews/ZulipNavigationSourceStudy.md and ZulipNavigationSources.json. diff --git a/workplans/FEP-WP-0006-language-evolution.md b/workplans/FEP-WP-0006-language-evolution.md index b0fd4f9..a8397e0 100644 --- a/workplans/FEP-WP-0006-language-evolution.md +++ b/workplans/FEP-WP-0006-language-evolution.md @@ -112,3 +112,21 @@ T01 retains pending history disclosure, multiple misses, redirects, delayed swap bfcache/lifecycle and interrupted/late enhancement before any production claim. T02 retains independent human/AT review and offline VC-03 branch. WP-0006 T03 retains review-date reconciliation and useful comparable-cycle windows; no M1/M2 closure. + +## Independent Zulip navigation source study completed — 2026-09-27 + +LEARN-0014 preregistered at f3ac569; twelve files at existing Zulip revision +5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c, static ranges/hash manifest and ZN01–ZN08 +review retained. Main list-identity guards coexist with off-screen cache updates; +shared feedback, auxiliary callbacks and deferred focus limit generalization. One +revision: effect-specific applicability and explicit client-fragment addressability. +No Zulip app/tests executed, no no-script/full-contract/bug claim. Same Zulip family, +new navigation paths; all candidates remain hypotheses. Local fixture stays paused. + +WP-0003 T01 follow-up: preregister a bounded caller/transport/test study of auxiliary +target lookup and anchor continuations, including deferred focus/search wiring only +if needed to establish applicability. Record unknowns; reproduce before claiming a +defect. T02 retains independent human/AT and offline-case obligations. WP-0006 T03 +retains remaining review dates and comparable-window work; this static protocol is +not pooled with runtime cycles. No M1/M2 closure. See +research/reviews/ZulipNavigationSourceStudy.md and ZulipNavigationSources.json.