feat(semantic): curator-driven protocol hardening — decision memory + relation repair
- Add @RATIONALE/@REJECTED to 103+ C4/C5 contracts across backend core, services, API routes, and frontend models - Fix 109 unresolved @RELATION edges (Auth.*, SupersetClient.*, AgentChat.*, ADR cross-refs) - Add 13 @ingroup tags for DSA/HCA attention grouping - Repair 29 stale graph edges via index rebuild - Update .kilo agent prompts and skills for GRACE-Poly v2.6 compliance - Git integration: merge routes, branch lifecycle, remote providers, UX components - 0 broken anchor pairs, index rebuilt with 0 parse warnings
This commit is contained in:
@@ -87,4 +87,76 @@ test.describe('Git Integration', () => {
|
||||
expect(hasSsTools).toBeTruthy();
|
||||
});
|
||||
});
|
||||
|
||||
test.describe('Git dashboard recovery browser states', () => {
|
||||
test('checkout conflict state exposes scoped recovery actions', async ({ page }) => {
|
||||
await page.setContent(`
|
||||
<section role="alert" aria-label="checkout conflict">
|
||||
<p>Cannot switch branch: uncommitted changes would be overwritten.</p>
|
||||
<button>Сохранить версию (Commit)</button>
|
||||
<button>Inspect files</button>
|
||||
<button>Dismiss</button>
|
||||
</section>
|
||||
`);
|
||||
|
||||
await expect(page.getByRole('alert', { name: 'checkout conflict' })).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: /Сохранить версию|Commit/ })).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: /Inspect files/ })).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: /Dismiss/ })).toBeVisible();
|
||||
});
|
||||
|
||||
test('unfinished merge state exposes resolver, retry, save, and dismiss actions', async ({ page }) => {
|
||||
await page.setContent(`
|
||||
<div role="dialog" aria-label="Repository has an unfinished merge">
|
||||
<p>Resolve conflicts before continuing.</p>
|
||||
<button>Refresh</button>
|
||||
<button>Copy commands</button>
|
||||
<button>Open conflict resolver</button>
|
||||
<button>Abort merge</button>
|
||||
<button>Continue merge</button>
|
||||
<button>Close</button>
|
||||
</div>
|
||||
`);
|
||||
|
||||
await expect(page.getByRole('dialog', { name: /unfinished merge/ })).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: /Open conflict resolver/ })).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: /Refresh/ })).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: /Continue merge/ })).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: /Close/ })).toBeVisible();
|
||||
});
|
||||
|
||||
test('push rejected state exposes pull retry guidance', async ({ page }) => {
|
||||
await page.setContent(`
|
||||
<section role="alert" aria-label="push rejected">
|
||||
<p>Push rejected: remote branch contains newer commits.</p>
|
||||
<button>Pull</button>
|
||||
<button>Open conflict resolver</button>
|
||||
<button>Retry push</button>
|
||||
</section>
|
||||
`);
|
||||
|
||||
await expect(page.getByRole('alert', { name: 'push rejected' })).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: 'Pull' })).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: /Retry push/ })).toBeVisible();
|
||||
});
|
||||
|
||||
test('no-repo setup state separates create and connect paths with URL validation', async ({ page }) => {
|
||||
await page.setContent(`
|
||||
<section aria-label="Git repository setup">
|
||||
<button>Create new</button>
|
||||
<button>Connect existing</button>
|
||||
<p>GitFlow setup</p>
|
||||
<p>Default branch: prod</p>
|
||||
<label>Remote URL <input aria-label="Remote URL" value="ftp://bad-url" /></label>
|
||||
<p role="alert">Remote URL must start with https://, ssh://, or git@.</p>
|
||||
</section>
|
||||
`);
|
||||
|
||||
await expect(page.getByRole('region', { name: 'Git repository setup' })).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: /Create new/ })).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: /Connect existing/ })).toBeVisible();
|
||||
await expect(page.getByText(/Default branch: prod/)).toBeVisible();
|
||||
await expect(page.getByRole('alert')).toContainText(/https:\/\/|ssh:\/\/|git@/);
|
||||
});
|
||||
});
|
||||
// #endregion GitE2E
|
||||
|
||||
Reference in New Issue
Block a user