From efeaa554ffa6317c30625a4a123f52f988e7b61d Mon Sep 17 00:00:00 2001 From: ghost <49853598+JSONbored@users.noreply.github.com> Date: Sat, 11 Jul 2026 01:36:00 -0700 Subject: [PATCH] fix(review): avoid overlapping screenshot table extraction --- .../src/review/screenshot-table-gate.ts | 1 + src/review/screenshot-table-gate.ts | 1 + test/unit/screenshot-table-gate-engine.test.ts | 9 +++++++++ test/unit/screenshot-table-gate.test.ts | 9 +++++++++ 4 files changed, 20 insertions(+) diff --git a/packages/gittensory-engine/src/review/screenshot-table-gate.ts b/packages/gittensory-engine/src/review/screenshot-table-gate.ts index 60891c9476..c4905b41d7 100644 --- a/packages/gittensory-engine/src/review/screenshot-table-gate.ts +++ b/packages/gittensory-engine/src/review/screenshot-table-gate.ts @@ -211,6 +211,7 @@ export function extractTableRows(body: string | null | undefined): string[][] { rows.push(cells); j += 1; } + i = j - 1; } return rows; } diff --git a/src/review/screenshot-table-gate.ts b/src/review/screenshot-table-gate.ts index f55adbd374..b12323ecb3 100644 --- a/src/review/screenshot-table-gate.ts +++ b/src/review/screenshot-table-gate.ts @@ -211,6 +211,7 @@ export function extractTableRows(body: string | null | undefined): string[][] { rows.push(cells); j += 1; } + i = j - 1; } return rows; } diff --git a/test/unit/screenshot-table-gate-engine.test.ts b/test/unit/screenshot-table-gate-engine.test.ts index 4591dcfef0..767cb146d0 100644 --- a/test/unit/screenshot-table-gate-engine.test.ts +++ b/test/unit/screenshot-table-gate-engine.test.ts @@ -6,6 +6,7 @@ import { DEFAULT_SCREENSHOT_TABLE_GATE, evaluateScreenshotTableGate, extractTableRowImageUrls, + extractTableRows, hasCommittedImageFile, hasImageBearingMarkdownTable, hasImageOutsideTable, @@ -322,6 +323,14 @@ describe("requiredScreenshotMatrixPairs (#4535)", () => { }); }); +describe("extractTableRows", () => { + it("extracts a crafted separator-only table once instead of duplicating overlapping regions", () => { + const body = Array.from({ length: 40 }, () => "| --- |").join("\n"); + + expect(extractTableRows(body)).toHaveLength(38); + }); +}); + describe("missingScreenshotMatrixPairs (#4535)", () => { const FULL_MATRIX_BODY = [ "| Viewport · Theme | Before | After |", diff --git a/test/unit/screenshot-table-gate.test.ts b/test/unit/screenshot-table-gate.test.ts index 8c7dead3d8..1ac43a330b 100644 --- a/test/unit/screenshot-table-gate.test.ts +++ b/test/unit/screenshot-table-gate.test.ts @@ -5,6 +5,7 @@ import { DEFAULT_SCREENSHOT_TABLE_GATE, evaluateScreenshotTableGate, extractTableRowImageUrls, + extractTableRows, hasCommittedImageFile, hasImageBearingMarkdownTable, hasImageOutsideTable, @@ -321,6 +322,14 @@ describe("requiredScreenshotMatrixPairs (#4535)", () => { }); }); +describe("extractTableRows", () => { + it("extracts a crafted separator-only table once instead of duplicating overlapping regions", () => { + const body = Array.from({ length: 40 }, () => "| --- |").join("\n"); + + expect(extractTableRows(body)).toHaveLength(38); + }); +}); + describe("missingScreenshotMatrixPairs (#4535)", () => { const FULL_MATRIX_BODY = [ "| Viewport · Theme | Before | After |",