From 0311ad89bac584452e5cff0c89e46f0a47bd33a1 Mon Sep 17 00:00:00 2001 From: Ben Stull Date: Fri, 12 Jun 2026 00:08:31 -0700 Subject: [PATCH] F10 SLICE-2: add renderPlain off-state (#29) Co-Authored-By: Claude Opus 4.8 (1M context) --- src/trackChangesModel.ts | 10 ++++++++++ test/trackChangesModel.test.ts | 11 +++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/trackChangesModel.ts b/src/trackChangesModel.ts index d5399ab..8e8929a 100644 --- a/src/trackChangesModel.ts +++ b/src/trackChangesModel.ts @@ -400,6 +400,16 @@ export function renderAuthorship( .join("\n"); } +/** Off-state body: the current buffer as plain markdown, no annotations (INV-33). */ +export function renderPlain(currentText: string, opts: RenderOptions = {}): string { + const render = opts.render ?? defaultRender; + try { + return render(currentText); + } catch (err) { + return chip(err instanceof Error ? err.message : String(err)); + } +} + /** Pure entry point: annotated HTML body for the preview (INV-22). */ export function renderTrackChanges( baselineText: string, diff --git a/test/trackChangesModel.test.ts b/test/trackChangesModel.test.ts index 0fb1b49..6476723 100644 --- a/test/trackChangesModel.test.ts +++ b/test/trackChangesModel.test.ts @@ -246,6 +246,17 @@ describe("colorByAuthor", () => { }); }); +import { renderPlain } from "../src/trackChangesModel"; + +describe("renderPlain", () => { + test("renderPlain renders current buffer as plain markdown (no marks)", () => { + const html = renderPlain("# Title\n\nhello"); + expect(html).toContain("

Title

"); + expect(html).toContain("hello"); + expect(html).not.toContain("cw-"); + }); +}); + import { renderTrackChanges as rtc2 } from "../src/trackChangesModel"; describe("renderTrackChanges — intra-diagram mermaid (#22)", () => {