You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 6f9aee6
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: docs/implementation/read-only-review.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -42,3 +42,5 @@ Extended the attribution guard to mixed items with both owned and ambiguous segm
42
42
A toolbar-focus browser regression reproduced review shortcuts being disabled while a button had focus. Only text-entry/select controls now suppress the single-letter shortcuts; native Enter/Space button behavior is unchanged. The plan-row click case already worked because rendering replaces the focused row.
43
43
44
44
Review round 3 identified demo fixture config escapes and inherited Git environment redirection. Regression checks first reproduced the config, symlink, and environment failures. Existing demos now require exact fixture paths and ordinary config/database/repository objects (including `.git` and SQLite sidecars). Demo and plant Git commands share a case-insensitive environment scrub and disable inherited global/system Git configuration. Four helper tests cover these boundaries, including mixed-case variable names for Windows.
45
+
46
+
Review round 4 had no inline findings but raised two summary concerns. Both were reproduced: planting accepted a non-ASCII path under case-insensitive identity even though the viewer refuses it; accepted cards retained an unplanned scope label. Planting now applies the same path guard, and accepted cards explicitly say “Accepted outside plan.” The underlying provenance remains intact. Unit/browser regressions cover both fixes; no concerns were declined.
if(plan.items.some(item=>item.files.some(file=>file.path===input.undeclaredPath||file.renamed_from===input.undeclaredPath)))thrownewError('Undeclared plant must be outside every declared file.');
Copy file name to clipboardExpand all lines: test/browser/review.spec.ts
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -63,7 +63,7 @@ test('keeps stale item controls unavailable after a failed refresh',async({page}
63
63
awaitpage.getByRole('button',{name:'Refresh',exact:true}).click();awaitexpect(page.getByText('Could not read this branch’s history.',{exact:false})).toBeVisible();awaitexpect(page.getByRole('button',{name:/P3ConfirmAPIcompatibility/})).toHaveCount(0);
64
64
});
65
65
test('accepts a foreign segment and keeps that choice across reload',async({page})=>{
66
-
awaitpage.goto(app.url);awaitpage.getByRole('button',{name:/Unplannedchanges/}).click();awaitpage.getByRole('button',{name:'Accept as is',exact:true}).first().click();awaitpage.getByRole('button',{name:/Accepted1/}).click();awaitexpect(page.getByRole('article').first()).toBeVisible();awaitpage.reload();awaitpage.getByRole('button',{name:/Accepted1/}).click();awaitexpect(page.getByRole('article').first()).toBeVisible();
66
+
awaitpage.goto(app.url);awaitpage.getByRole('button',{name:/Unplannedchanges/}).click();awaitpage.getByRole('button',{name:'Accept as is',exact:true}).first().click();awaitpage.getByRole('button',{name:/Accepted1/}).click();awaitexpect(page.getByRole('article').first()).toBeVisible();awaitexpect(page.getByText('Accepted outside plan',{exact:true})).toBeVisible();awaitpage.reload();awaitpage.getByRole('button',{name:/Accepted1/}).click();awaitexpect(page.getByRole('article').first()).toBeVisible();
67
67
});
68
68
test('shows the whole-plan empty state without claiming checks passed',async({page})=>{
Copy file name to clipboardExpand all lines: test/plant.test.ts
+5Lines changed: 5 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -15,3 +15,8 @@ it('plants in an isolated clone, retains ledger attribution, and leaves source h
15
15
try{constview=service.load();expect(view.segments.some(s=>s.path==='extra.txt'&&s.scope==='out-of-scope')).toBe(true);expect(view.segments.some(s=>s.content.includes('// planted extra behavior')&&s.row.startsWith('P'))).toBe(true);}finally{service.close();}
0 commit comments