Skip to content

fix(markdown): persist conflict-safe updates - #2968

Merged
George Ng (GeorgeNgMsft) merged 4 commits into
mainfrom
georgengmsft-markdown-durable-updates
Sep 10, 2026
Merged

fix(markdown): persist conflict-safe updates#2968
George Ng (GeorgeNgMsft) merged 4 commits into
mainfrom
georgengmsft-markdown-durable-updates

Conversation

@GeorgeNgMsft

@GeorgeNgMsft George Ng (GeorgeNgMsft) commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Stack

Layer 3 of the replacement stack for #2940.

Included

  • Persists headless Markdown updates directly to the authorized workspace file.
  • Makes streaming completion idempotent by recognizing the already-produced revision instead of applying operations twice.
  • Carries immutable binding identity and SHA-256 revision checks across read/apply.
  • Rejects stale tokens, rebound root/path/file identities, revision conflicts, and roots replaced by symlinks or junctions.
  • Adds request IDs to concurrent document read/apply IPC and correlates responses.
  • Keeps the view service server-authoritative for update persistence even when no browser/SSE client is connected.

Deferred to browser layer

  • Browser document-manager.ts rewrite and serializer/autosave behavior.
  • Primary/secondary SSE lifecycle, browser synchronization/promotion UX, and reopening the same file while preserving browser binding state.
  • Broader browser snapshot adoption and loopback binding behavior.

Validation

Historical results from before the rebase (not rerun as full build/Jest validation):

  • @typeagent/markdown-agent TypeScript and frontend build
  • Focused Jest suites: 44 tests passed across Markdown persistence, operation engine, path policy, creation path policy, and action handler coverage
  • Prettier changed-file check
  • Git diff check
  • Repo lint ratchet

After rebasing onto f3e4308ea2cd722a2905eceac3f2a1e61d19a420: 23 focused Node integration smoke checks passed using the actual handler, persistence module, and operation engine with simulated translator/view IPC; TypeScript 5.4.5 syntax parsing and Git diff checks passed. Full build/Jest, semantic typechecking, and repository ratchets were not rerun: this worktree has no installed dependencies (fluid-build missing). Pinned Prettier 3.5.3 was unavailable offline.

Complete layer diff against the new main base: 992 insertions, 532 deletions (1,524 changed lines), across 6 files.

@GeorgeNgMsft
George Ng (GeorgeNgMsft) force-pushed the georgengmsft-markdown-durable-updates branch from b3a8718 to cff6411 Compare September 3, 2026 22:49
Base automatically changed from georgengmsft-markdown-safe-updates to main September 4, 2026 23:12
@GeorgeNgMsft
George Ng (GeorgeNgMsft) force-pushed the georgengmsft-markdown-durable-updates branch from cff6411 to ab068c6 Compare September 5, 2026 05:27
@GeorgeNgMsft
George Ng (GeorgeNgMsft) marked this pull request as ready for review September 5, 2026 07:47
Comment thread ts/packages/agents/markdown/src/view/route/service.ts
Comment thread ts/packages/agents/markdown/src/view/route/service.ts Outdated
Comment thread ts/packages/agents/markdown/src/view/route/service.ts
Comment thread ts/packages/agents/markdown/src/view/route/service.ts Outdated
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Clarify document path policy, preserve existing-only loads, synchronize changed Yjs spans, and read bound documents asynchronously with identity checks.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Declare the Jest globals dependency and cover stale load tokens and external disk edits in the real service.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@GeorgeNgMsft
George Ng (GeorgeNgMsft) force-pushed the georgengmsft-markdown-durable-updates branch from 3bd7670 to a28a689 Compare September 10, 2026 00:26
@GeorgeNgMsft
George Ng (GeorgeNgMsft) added this pull request to the merge queue Sep 10, 2026
Merged via the queue into main with commit 09a375f Sep 10, 2026
27 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants