diff --git a/SCOPE.md b/SCOPE.md index ffba37a..79fe680 100644 --- a/SCOPE.md +++ b/SCOPE.md @@ -49,7 +49,7 @@ submitted model-review adjudication. It establishes neither a naming benefit nor equivalence; independent human validation and decision-time measurement remain open. Evolution profiles, a baseline, learning ledger, snapshots and a generated report -are implemented. Five effort-accounted prospective cycles belong to five different +are implemented. Six effort-accounted prospective cycles belong to six different comparison groups: there is no comparable window for a diminishing-returns claim. Evidence types, implementation families and review provenance remain distinct. Static source mechanisms and authored runtime fixtures do not establish complete diff --git a/research/evolution/EvolutionReport.md b/research/evolution/EvolutionReport.md index 86b9f8c..53f510c 100644 --- a/research/evolution/EvolutionReport.md +++ b/research/evolution/EvolutionReport.md @@ -51,13 +51,13 @@ Ten selected retrospective outcomes (not a historical census), followed by prosp | Outcome | Entries (not independent discoveries) | | --- | ---: | -| corroboration | 2 | +| corroboration | 3 | | inconclusive | 0 | | merge | 0 | | rejection | 0 | | revision | 13 | -Cycles with recorded research effort: 5/15. Unknown effort is neither zero nor estimated from commits, tokens or assertion counts. +Cycles with recorded research effort: 6/16. Unknown effort is neither zero nor estimated from commits, tokens or assertion counts. ### Stream B / B-independent-navigation-source-v1 @@ -91,6 +91,14 @@ One bounded question counts at most one consequential outcome. Corroboration and 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 cross-stream / CD-acceptance-projection-static-v1 + +| Cycle | Outcome | Research minutes | Consequential outcome/hour | +| --- | --- | ---: | ---: | +| LEARN-0016 | corroboration | 4.182 | 0.00 | + +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 cross-stream / CD-authority-projection-documentary-v1 | Cycle | Outcome | Research minutes | Consequential outcome/hour | @@ -591,3 +599,17 @@ Evidence: [AuthorityProjectionComparison](../../research/reviews/AuthorityProjec Remaining uncertainty: Six living primary documents across four families, not independent full-contract implementations; exact revisions unknown. Synthetic VC-01/02 reasoning is not execution or demonstrated usefulness; authority/merge/storage and phase-specific recovery contracts still need application evidence. Existing candidate profiles unchanged; five prospective groups are not a comparable learning trend. Supersedes: none recorded. + +### LEARN-0016 — Does the six-question authority/projection aid distinguish local editable content, remote shared acceptance and subsequent projection in a pinned application? + +2026-09-27 · stream cross-stream · prospective · corroboration + +Before: Scoped acceptance, projection location and delivery schedule are separate questions with compatibility constraints; a local display need not establish shared acceptance. + +Conclusion: Corroborated in pinned Zulip content editing: conditional local Markdown echo precedes remote validation; locked optional content checks and server rendering precede save/event scheduling; HTTP and event application are distinct paths. Same displayed object can carry tentative content. No candidate or maturity change. + +Evidence: [ZulipAcceptanceProjection](../../research/reviews/ZulipAcceptanceProjection.md), [ZulipAcceptanceSources](../../research/reviews/ZulipAcceptanceSources.json), [2026-09-27-zulip-acceptance-effort](../../research/evolution/cycles/2026-09-27-zulip-acceptance-effort.json). + +Remaining uncertainty: Ten selected source/test files from one existing Zulip family, no application/database/upstream test execution or full-contract recurrence. Response/event ordering, lost response after acceptance and current-edit ownership need preregistered reproduction; no defect or safe-replay claim. Six prospective groups are not a comparable trend; original human and milestone gates remain open. + +Supersedes: none recorded. diff --git a/research/evolution/cycles/2026-09-27-zulip-acceptance-effort.json b/research/evolution/cycles/2026-09-27-zulip-acceptance-effort.json new file mode 100644 index 0000000..6608404 --- /dev/null +++ b/research/evolution/cycles/2026-09-27-zulip-acceptance-effort.json @@ -0,0 +1,32 @@ +{ + "status": "complete", + "start_monotonic": 626.587195988, + "start_utc": "2026-09-27T09:52:18Z", + "end_utc": "2026-09-27T09:56:59Z", + "elapsed_seconds": 257.08, + "research_minutes": 4.182, + "execution_minutes": 0.102, + "executions": [ + { + "command": [ + "make", + "evolution-check", + "evolution-test", + "reference-check", + "classification-check", + "schema-test" + ], + "seconds": 6.070879163999962, + "exit_code": 0 + }, + { + "command": "source hashes/ranges, changed Markdown links, git diff --check", + "seconds": 0.06774321000000327, + "exit_code": 0 + } + ], + "retained_validation_failure": "Initial channel.ts locator ended at 219 but file ends at 217. Corrected locator and reran; source unchanged.", + "method": "Single-agent monotonic active session minus timed verification. Retrieval, interpretation, recording and diagnostic work count as active research. No app or upstream tests executed.", + "excluded": "Registration, failed pre-registration web retrieval, and final receipt/report refresh, snapshot, commit and sync administration after cutoff.", + "budget": "Ten substantive files; within 35 research and 5 verification minutes." +} diff --git a/research/evolution/cycles/2026-09-27-zulip-acceptance.md b/research/evolution/cycles/2026-09-27-zulip-acceptance.md index 38eaf96..77b7f41 100644 --- a/research/evolution/cycles/2026-09-27-zulip-acceptance.md +++ b/research/evolution/cycles/2026-09-27-zulip-acceptance.md @@ -46,3 +46,22 @@ outcome: corroboration, revision or inconclusive, justified by the review. Close with a review, source manifest, ledger/effort record and evolution snapshot. Record residuals under WP-0003 T01 (or T04 for recovery tests); preserve M1/M2/M3 and human gates. This static protocol is not comparable to documentary or runtime cycles. + +## Outcome — completed 2026-09-27 + +Corroboration; see [review](../../reviews/ZulipAcceptanceProjection.md) and +[source manifest](../../reviews/ZulipAcceptanceSources.json). Ten files, same Zulip +family; conditional client echo, server validation/rendering and event replacement +support the existing aid without a new candidate or profile change. Unknown response/ +event ordering and edit ownership remain live under WP-0003 T01, with receiver/storage +fault validation under T04. No full-contract recurrence, human or milestone pass. + +Seventeen repository tests passed; evolution, classification and frozen preview checks +passed. Source ranges/hash and link review found one out-of-bounds channel.ts locator, +corrected with the failed check retained in the manifest/effort receipt. Initial web +retrieval returned no source content; substantive inspection began after registration. + +One question and one corroboration outcome; no supersession. Measured effort is in +[the receipt](2026-09-27-zulip-acceptance-effort.json); tokens/cost unknown. Reviewer: +Codex, author-model, not independent human. Final receipt/report refresh and snapshot/ +sync administration occur after the recorded cutoff. diff --git a/research/evolution/ledger.json b/research/evolution/ledger.json index a6ee786..6794a83 100644 --- a/research/evolution/ledger.json +++ b/research/evolution/ledger.json @@ -523,6 +523,41 @@ "cost_usd": null }, "supersedes": [] + }, + { + "id": "LEARN-0016", + "date": "2026-09-27", + "recording": "prospective", + "stream": "cross-stream", + "comparison_group": "CD-acceptance-projection-static-v1", + "protocol_ref": "research/evolution/cycles/2026-09-27-zulip-acceptance.md", + "question": "Does the six-question authority/projection aid distinguish local editable content, remote shared acceptance and subsequent projection in a pinned application?", + "previous_belief": "Scoped acceptance, projection location and delivery schedule are separate questions with compatibility constraints; a local display need not establish shared acceptance.", + "conclusion": "Corroborated in pinned Zulip content editing: conditional local Markdown echo precedes remote validation; locked optional content checks and server rendering precede save/event scheduling; HTTP and event application are distinct paths. Same displayed object can carry tentative content. No candidate or maturity change.", + "disposition": "corroboration", + "affected_patterns": [], + "evidence": [ + "research/reviews/ZulipAcceptanceProjection.md", + "research/reviews/ZulipAcceptanceSources.json", + "research/evolution/cycles/2026-09-27-zulip-acceptance-effort.json" + ], + "remaining_uncertainty": [ + "Ten selected source/test files from one existing Zulip family, no application/database/upstream test execution or full-contract recurrence.", + "Response/event ordering, lost response after acceptance and current-edit ownership need preregistered reproduction; no defect or safe-replay claim.", + "Six prospective groups are not a comparable trend; original human and milestone gates remain open." + ], + "reviewer": { + "name": "Codex", + "role": "author-model", + "independent_human": false + }, + "effort": { + "research_minutes": 4.182, + "execution_minutes": 0.102, + "reported_tokens": null, + "cost_usd": null + }, + "supersedes": [] } ] } diff --git a/research/reviews/ZulipAcceptanceProjection.md b/research/reviews/ZulipAcceptanceProjection.md new file mode 100644 index 0000000..d3c288d --- /dev/null +++ b/research/reviews/ZulipAcceptanceProjection.md @@ -0,0 +1,117 @@ +# Zulip message editing — acceptance and projection source study + +2026-09-27. LEARN-0016 preregistered at `ff0c1d4`; Codex author-model review. +Pinned Zulip revision `5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c`. Ten source/test +files inspected in selected ranges; [source manifest](ZulipAcceptanceSources.json) +records hashes and exact locators. No application, database, upstream tests or live +inference executed. Test bodies below are evidence of intended checks, not results. + +## Result + +**Corroboration of the six-question decision aid.** Local editable input, a tentative +display, shared acceptance and subsequent projection remain distinguishable in this +application. Rendering occurs both before acceptance in the browser and during the +server mutation path. A representation is therefore insufficient evidence of shared +acceptance, regardless of where it was computed. + +The useful qualification is that the boundaries need not occupy separate objects or +a simple linear UI workflow. A client message object temporarily carries optimistic +content; pending metadata and saved prior content distinguish its meaning. Server +rendering also participates in validation: a rendering failure can prevent acceptance. +Separate architectural questions do not imply independent execution or deployable +components. This is consistent with the aid's existing compatibility qualification. + +No new pattern, candidate revision, promotion or independent full-contract use is +claimed. The 0.1 candidate profiles and pinned reference stay unchanged. This is the +same Zulip family as earlier draft/navigation studies, with a newly inspected edit +acceptance path. No new independent family count follows from additional files. + +## Source observations and interpretation + +ZA labels refer to precise file/range entries in the manifest. These are static +observations. Statements about expected behavior under failure remain hypotheses. + +| Claim | Located mechanism | Interpretation and boundary | +| --- | --- | --- | +| ZA01 — local editing | `message_edit.ts` stores the active textarea and its pre-edit raw content separately; save reads both. | Proposed content and its base are distinct from shared acceptance. These maps do not establish restart persistence. | +| ZA02 — tentative projection | For eligible content, save records original values, marks a local edit timestamp, invokes local echo and closes the edit form before PATCH completion. Backend-only syntax bypasses this branch. `echo.ts` renders Markdown and rerenders lists. | The message object can contain tentative display state. Browser projection is conditional; it is not authority over shared content. A pending notice is described in code; its actual appearance/accessibility was not tested. | +| ZA03 — shared validation | The endpoint calls `check_update_message`, then returns success. The action uses a transaction and locked message access, checks edit permission/time and optional prior-content hash, normalizes input and renders it before applying changes. `access_message` selects the message row for update. | Located locking and hash comparison support a content precondition under this path. The hash is optional at the API, covers content rather than all message state, and is not an operation identity or monotonic revision. No concurrent database execution or all-writer audit performed. | +| ZA04 — persistence and notification | The direct-message branch calls the save helper and schedules an update event; the channel branch also saves and arranges cache invalidation after commit. `send_event_on_commit` registers a transaction callback. Events include raw and rendered content. | Server-side change and subsequent notification are separate steps. The save helper and queue transport were not followed beyond this cap; an on-commit callback is not proof of durable eventual delivery, replay or receipt retention. | +| ZA05 — accepted representation | `message_events.update_messages` replaces cached rendered content, clears pending display metadata, ends the edit UI, updates raw content and rerenders lists. HTTP success separately clears echo bookkeeping; it does not return the full displayed message. | HTTP response and event application are distinct evidence paths. Their ordering was not established. Event-driven replacement need not be a new fetch or client recomputation of Markdown. | +| ZA06 — error recovery | The edit error callback, when the original list is current, restores saved display values and can reopen proposed text. A mismatch code receives a specific message. The channel wrapper forwards ordinary errors, with reload/authentication exceptions. | The located callback does not demonstrate an unknown-outcome protocol or an operation lookup. Restoring a display is not proof that a server transaction rolled back. Lost-response/event races and navigation-away behavior require a bounded test before defect or safety claims. | +| ZA07 — upstream test intent | `test_edit_message_race_condition` issues two sequential edits with the original content hash; it expects the second rejected and the first retained. Frontend tests cover eligibility and limits. | The backend test models a stale client; its name does not establish overlapping transactions. Neither inspected test range exercises the response/event race or durable recovery. No upstream test was run. | + +## Six questions applied to one content edit + +1. **Decision scope and acceptor.** The user controls an in-page proposal. The server + path checks permission and the supplied content base before changing the shared + message. Client edit eligibility helps interaction but does not replace those checks. + This says nothing about every state scope in Zulip. +2. **Acknowledgement.** Typing changes input; echo makes proposed content visible; + HTTP success supplies a response from the update endpoint; the update event supplies + server-rendered content. Visibility alone is not acceptance. Server commit followed + by a lost response remains untested, as does event arrival before the HTTP callback. +3. **View input and retention.** Before submission, the base is the raw content saved + when editing begins. During echo the displayed object contains locally rendered + proposed content with pending metadata. After the event, it contains the server's + representation. These are transient client observations here, not an established + local primary record with a crash recovery contract. +4. **Computation placement.** The edit form and eligible optimistic Markdown are + computed in the browser. Server Markdown is computed in the acceptance path and + delivered in an event; the browser then updates its lists. Initial page bootstrap + and offline reconstruction were outside the selected path. No SSR/client-only + classification of the whole application follows from it. +5. **Delivery and failure.** The edit response and event are separate deliveries; + neither is an inspected streaming-HTML contract. Backend-only syntax waits for a + different projection path. Explicit mismatch feedback and generic errors exist, + but ordering, lost events, retry identity and accessible announcements remain unknown. +6. **Invalidating constraint.** Requiring final shared acceptance while disconnected, + persistent local editing after a crash, safe replay of an unknown operation or + preservation of another in-progress edit would need evidence beyond these paths. + A responsive optimistic display does not satisfy those stronger requirements. + +## Contrasts that prevent overgeneralization + +- Local echo deliberately modifies the displayed message model before acceptance. + Distinguish state meaning and pending status; do not require a separate object for + every architectural state as though it were part of the pattern contract. +- Content containing backend-only syntax does not take the optimistic branch. The + same authority scope can use different projection schedules depending on content. +- Rendering can fail inside the transaction before the update is applied. Projection + and acceptance are separate questions with dependencies, not freely interchangeable + stages. Source code uses a durable transaction decorator; no crash/flush guarantee + was measured and the decorator name must not be treated as such evidence. +- The prior-content hash prevents a mismatch only when supplied and only for its + content scope. Equal content after intervening edits can have the same hash. Do not + substitute it for complete history identity, an edit-operation receipt or replay + deduplication. This is a contract distinction, not a discovered upstream defect. +- Event application calls `end_message_edit` by message ID. Source alone does not + establish that any currently open input belongs to that event's edit attempt. + The eligibility helper blocks editing while echo bookkeeping is pending; that + narrows possible schedules. Reopening after the HTTP success callback, or an event + from another client, remains a relevant follow-up, not a reproduced loss claim. Likewise, restoring original display data after an error is not a + verified reconciliation policy for an already committed but unacknowledged edit. + +## Candidate implications and residual ownership + +CAND-0005 gains a located example of temporary base/proposal separation, but event +ownership and restart retention are not established. CAND-0006 has a concrete partial +content-check/lock path; optional scope and unexecuted concurrency prevent declaring +full-contract recurrence. CAND-0007's distinct outcome requirement remains important; +this edit path does not establish its proposed identity/lookup contract. CAND-0008 +must allow server-provided replacement as well as refetching, already compatible with +its contract. These are comparisons, not evidence-profile upgrades in this seed study. + +One corroboration outcome answers the registered question. No case becomes validated, +no ontology gate closes, and this sixth prospective comparison group creates no +comparable trend window. Manifest retrieval history retains the initial web-tool cache +miss; shell raw-source retrieval subsequently succeeded for all ten files. + +WP-0003 T01 retains a bounded response/event ownership question: check an acknowledged +edit event against a newly opened edit, an event before the HTTP callback, a lost +response after acceptance, and navigation away before failure. Reuse the pinned +application/test infrastructure if feasible; do not restart the paused navigation +fixture or claim a defect before reproducing it. Stop if transport setup exceeds a +new preregistered budget. WP-0003 T04 retains actual storage/receiver fault validation; +this study supplies neither a local durability test nor an operation replay guarantee. +The older Zulip auxiliary-navigation residual and WP-0002 human/usefulness gate stay open. diff --git a/research/reviews/ZulipAcceptanceSources.json b/research/reviews/ZulipAcceptanceSources.json new file mode 100644 index 0000000..70e7db4 --- /dev/null +++ b/research/reviews/ZulipAcceptanceSources.json @@ -0,0 +1,263 @@ +{ + "repository": "zulip/zulip", + "revision": "5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c", + "accessed": "2026-09-27", + "method": "Static selected-range inspection only; no application or upstream tests executed", + "preregistration": "ff0c1d4", + "files": [ + { + "path": "web/src/message_edit.ts", + "sha256": "557367a0f2b2dd4da30ef1466e426bce14bc9efbd76f68a1c31130e5fdb90bf1", + "lines": 1884, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_edit.ts", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_edit.ts", + "reviewed_ranges": [ + { + "start": 67, + "end": 101, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_edit.ts#L67-L101" + }, + { + "start": 171, + "end": 232, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_edit.ts#L171-L232" + }, + { + "start": 640, + "end": 660, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_edit.ts#L640-L660" + }, + { + "start": 798, + "end": 811, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_edit.ts#L798-L811" + }, + { + "start": 1311, + "end": 1512, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_edit.ts#L1311-L1512" + } + ] + }, + { + "path": "zerver/views/message_edit.py", + "sha256": "349c385b0737e02e7084df267aba5e4510204dc0f27d427eb5ecbe45d4d69051", + "lines": 291, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/views/message_edit.py", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/views/message_edit.py", + "reviewed_ranges": [ + { + "start": 149, + "end": 180, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/views/message_edit.py#L149-L180" + } + ] + }, + { + "path": "zerver/actions/message_edit.py", + "sha256": "2d7b5ed24d2f73196f635962b5084f170e3260a415e29ee089346a83073d9894", + "lines": 1999, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/actions/message_edit.py", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/actions/message_edit.py", + "reviewed_ranges": [ + { + "start": 131, + "end": 196, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/actions/message_edit.py#L131-L196" + }, + { + "start": 540, + "end": 577, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/actions/message_edit.py#L540-L577" + }, + { + "start": 914, + "end": 1015, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/actions/message_edit.py#L914-L1015" + }, + { + "start": 1205, + "end": 1225, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/actions/message_edit.py#L1205-L1225" + }, + { + "start": 1420, + "end": 1432, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/actions/message_edit.py#L1420-L1432" + }, + { + "start": 1634, + "end": 1662, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/actions/message_edit.py#L1634-L1662" + }, + { + "start": 1762, + "end": 1851, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/actions/message_edit.py#L1762-L1851" + }, + { + "start": 1924, + "end": 1945, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/actions/message_edit.py#L1924-L1945" + } + ] + }, + { + "path": "web/src/echo.ts", + "sha256": "2315ef455cd72c5d3584cd98cbcd6c3e641a43040aea627bf99cab655297d7ef", + "lines": 725, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/echo.ts", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/echo.ts", + "reviewed_ranges": [ + { + "start": 371, + "end": 456, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/echo.ts#L371-L456" + } + ] + }, + { + "path": "web/src/message_events.ts", + "sha256": "1ae060d462e790d0919627a29db0db4eb21ad4ffd51226649ad9f21778f60826", + "lines": 1038, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_events.ts", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_events.ts", + "reviewed_ranges": [ + { + "start": 441, + "end": 525, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_events.ts#L441-L525" + }, + { + "start": 548, + "end": 581, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_events.ts#L548-L581" + }, + { + "start": 965, + "end": 1009, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/message_events.ts#L965-L1009" + } + ] + }, + { + "path": "zerver/lib/message.py", + "sha256": "e886c8ba62e93c2104e196330d4b3ae6a3fb52aec3e8e2a14cc884992c2c44ed", + "lines": 1765, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/lib/message.py", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/lib/message.py", + "reviewed_ranges": [ + { + "start": 399, + "end": 449, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/lib/message.py#L399-L449" + } + ] + }, + { + "path": "zerver/tests/test_message_edit.py", + "sha256": "b46be653643fde6bf76ad203d016026853dca1c3f00afa5ffb98396b1d6d0ef9", + "lines": 2962, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/tests/test_message_edit.py", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/tests/test_message_edit.py", + "reviewed_ranges": [ + { + "start": 2598, + "end": 2636, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/tests/test_message_edit.py#L2598-L2636" + } + ] + }, + { + "path": "web/tests/message_edit.test.cjs", + "sha256": "28d6e0b5ea570a9539b503ac6a90edef40755bd71d64b336c7046c24fcb048b6", + "lines": 306, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/tests/message_edit.test.cjs", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/tests/message_edit.test.cjs", + "reviewed_ranges": [ + { + "start": 1, + "end": 92, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/tests/message_edit.test.cjs#L1-L92" + } + ] + }, + { + "path": "zerver/tornado/django_api.py", + "sha256": "3319af33816c71f5f289c309b345d0821388ceeb0647b971223b7f3ceeed6d41", + "lines": 292, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/tornado/django_api.py", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/tornado/django_api.py", + "reviewed_ranges": [ + { + "start": 275, + "end": 292, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/zerver/tornado/django_api.py#L275-L292" + } + ] + }, + { + "path": "web/src/channel.ts", + "sha256": "ad5284520c12a9bffe32a70c551a1a07a6d9f7eaa18036d1d057e03ed6f40809", + "lines": 217, + "raw_url": "https://raw.githubusercontent.com/zulip/zulip/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/channel.ts", + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/channel.ts", + "reviewed_ranges": [ + { + "start": 79, + "end": 170, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/channel.ts#L79-L170" + }, + { + "start": 194, + "end": 217, + "url": "https://github.com/zulip/zulip/blob/5b06fa3d34f28fa01f459fbf3ba053e3c0858e9c/web/src/channel.ts#L194-L217" + } + ] + } + ], + "retrieval_history": [ + { + "tool": "web open", + "path": "web/src/message_edit.ts", + "outcome": "Cache miss; no source content returned. Attempt before successful registration commit; substantive collection began after ff0c1d4." + }, + { + "tool": "Python urllib HTTPS raw GitHub", + "outcome": "All ten pinned files retrieved successfully after registration." + } + ], + "claims": { + "ZA01": [ + "web/src/message_edit.ts" + ], + "ZA02": [ + "web/src/message_edit.ts", + "web/src/echo.ts" + ], + "ZA03": [ + "zerver/views/message_edit.py", + "zerver/actions/message_edit.py", + "zerver/lib/message.py" + ], + "ZA04": [ + "zerver/actions/message_edit.py", + "zerver/tornado/django_api.py" + ], + "ZA05": [ + "web/src/message_edit.ts", + "web/src/message_events.ts" + ], + "ZA06": [ + "web/src/message_edit.ts", + "web/src/channel.ts" + ], + "ZA07": [ + "zerver/tests/test_message_edit.py", + "web/tests/message_edit.test.cjs" + ] + }, + "validation_notes": [ + "Initial range check rejected channel.ts end line 219 beyond its 217 lines; corrected locator to 194\u2013217. Source hash unchanged." + ] +} diff --git a/workplans/FEP-WP-0003-contrasting-schools.md b/workplans/FEP-WP-0003-contrasting-schools.md index b1c3050..0f1d902 100644 --- a/workplans/FEP-WP-0003-contrasting-schools.md +++ b/workplans/FEP-WP-0003-contrasting-schools.md @@ -311,3 +311,22 @@ handoff. Human/AT/usability stay under WP-0002 T03 / WP-0003 T02. core and separate conditional Conflict Copy / Explicit Reconciliation retrieval. No mandatory requires edge, general recurrence or M2 closure. T03 remains todo for the full M2 review; this bounded preview assessment is preparation only. + +## Pinned acceptance/projection study — 2026-09-27 + +LEARN-0016 preregistered at ff0c1d4; ten pinned Zulip source/test files inspected. +[Review](../research/reviews/ZulipAcceptanceProjection.md) corroborates the six-question +aid: tentative local rendering, locked server validation/rendering and event-driven +replacement have different meanings. Response/event ordering, lost-response recovery +and event ownership of a newly opened edit remain unknown; no app/upstream tests run. +Source manifest retains hashes, ranges and the failed web-tool retrieval. No candidate, +profile, 0.1 reference or maturity change; no new independent implementation family. + +WP-0003 T01 next: preregister a bounded response/event ownership reproduction around +an edit reopened after HTTP success, an event before response, response lost after +acceptance and navigation away before failure. Include echo-pending eligibility guards +in the setup; do not infer a defect from callback inspection. Reuse pinned application +infrastructure if feasible within a new budget. Existing auxiliary-navigation residual +stays open, local navigation fixture stays paused, and WP-0003 T04 retains storage/ +receiver validation. WP-0006 T03 retains review dates/comparable-window work; this sixth +prospective group supplies no learning trend. Human validation and M1/M2/M3 stay open. diff --git a/workplans/FEP-WP-0006-language-evolution.md b/workplans/FEP-WP-0006-language-evolution.md index 47817df..2a3c3ea 100644 --- a/workplans/FEP-WP-0006-language-evolution.md +++ b/workplans/FEP-WP-0006-language-evolution.md @@ -157,3 +157,22 @@ questions. Select the application by the needed evidence; retain contrary/unknow paths. Existing Zulip auxiliary continuation residual stays open; local navigation fixture remains paused. WP-0002 T03 retains independent usefulness review; WP-0003 T02/T03 gates and WP-0006 T03 review dates/comparable measurement remain open. + +## Pinned acceptance/projection study — 2026-09-27 + +LEARN-0016 preregistered at ff0c1d4; ten pinned Zulip source/test files inspected. +[Review](../research/reviews/ZulipAcceptanceProjection.md) corroborates the six-question +aid: tentative local rendering, locked server validation/rendering and event-driven +replacement have different meanings. Response/event ordering, lost-response recovery +and event ownership of a newly opened edit remain unknown; no app/upstream tests run. +Source manifest retains hashes, ranges and the failed web-tool retrieval. No candidate, +profile, 0.1 reference or maturity change; no new independent implementation family. + +WP-0003 T01 next: preregister a bounded response/event ownership reproduction around +an edit reopened after HTTP success, an event before response, response lost after +acceptance and navigation away before failure. Include echo-pending eligibility guards +in the setup; do not infer a defect from callback inspection. Reuse pinned application +infrastructure if feasible within a new budget. Existing auxiliary-navigation residual +stays open, local navigation fixture stays paused, and WP-0003 T04 retains storage/ +receiver validation. WP-0006 T03 retains review dates/comparable-window work; this sixth +prospective group supplies no learning trend. Human validation and M1/M2/M3 stay open.