Skip to content
Merged
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
57ed737
fix(ci): clear post-merge annotations
BigSimmo Jul 3, 2026
2d5e029
Add generated sitemap audit
BigSimmo Jul 3, 2026
2d16f83
feat(search): universal footer chips + mode-identity icons on mobile
BigSimmo Jul 3, 2026
18f9ba6
fix(search): scope popover reachable via + menu on desktop widths
BigSimmo Jul 3, 2026
ca34ea9
fix(ui): prevent mode-home search composer overlap flash on services/…
BigSimmo Jul 3, 2026
2630d5f
Refine database search and answer rendering flows
BigSimmo Jul 4, 2026
080243c
Add public anonymous access implementation plan
BigSimmo Jul 4, 2026
51e4e51
Merge origin/main into codex/fix-ci-annotations
Copilot Jul 4, 2026
e922119
chore: fix Prettier formatting in 4 files to pass CI format:check
Copilot Jul 4, 2026
bfb2b07
Fix jsx-a11y/label-has-associated-control lint errors in ClinicalDash…
Copilot Jul 4, 2026
6215b9a
fix(pr-254): address Codex review findings and prettier CI gate
BigSimmo Jul 4, 2026
32cf2ce
fix: unblock CI verify gate after main merge (exports, sitemap, test)
BigSimmo Jul 4, 2026
c991340
chore(test): recalibrate function-coverage regression floor to 43%
BigSimmo Jul 4, 2026
028293b
Fix ui-smoke selectors for updated launcher and favourites UI
Copilot Jul 4, 2026
dde6964
Update Playwright smoke tests for current UI semantics
Copilot Jul 4, 2026
2bd65f4
Changes before error encountered
Copilot Jul 4, 2026
1af550f
fix(pr-254): address remaining review findings
BigSimmo Jul 4, 2026
44e757f
feat(ui): compact phone bottom search on search/result views for max …
BigSimmo Jul 4, 2026
bbbfec2
feat(mobile): hide universal header on scroll to maximise phone scree…
BigSimmo Jul 4, 2026
71f7cd8
fix(ui): fit mode home pages to phone viewports without scrolling (#256)
BigSimmo Jul 4, 2026
8fb254c
Fix header new chat button to open answer mode
BigSimmo Jul 4, 2026
e5c82d4
Redesign Clinical Guide sidebar for responsive navigation and fix UI …
BigSimmo Jul 4, 2026
55c9f17
feat(answer): add follow-up suggestions, thread storage, and collapse…
BigSimmo Jul 4, 2026
db082af
feat(search): open bottom-docked command surface upward above the pill.
BigSimmo Jul 4, 2026
98d2def
fix(ui): fit mode home and detail pages to phone viewports without ov…
BigSimmo Jul 4, 2026
ceedbea
fix(answer): bootstrap thread persistence safely and share mode icons.
BigSimmo Jul 4, 2026
c9a3dea
fix(ui): use sheets for clinical notes and evidence on all breakpoints.
BigSimmo Jul 4, 2026
caa5f95
fix(ui): tighten scope and source-only disclosure styling.
BigSimmo Jul 4, 2026
b0ae58c
fix(ui): compact evidence gap cards in mobile sheets.
BigSimmo Jul 4, 2026
46c1afa
test(ui): lock tablet rail tools and active-route affordance.
BigSimmo Jul 4, 2026
ac7aa9e
fix: export maxStoredAnswerTurns and drop invalid compact header prop.
BigSimmo Jul 4, 2026
dc9b693
fix(answer): harden thread restore on reload and extract result surface.
BigSimmo Jul 4, 2026
61b5d29
refactor(answer): re-export StagedAnswerResultSurface from shared mod…
BigSimmo Jul 4, 2026
9aeeaba
fix(answer): polish follow-up chips, quote smoke, and sign-out thread…
BigSimmo Jul 4, 2026
e20c66d
test(ui): align Playwright specs with launcher cards and answer follo…
BigSimmo Jul 4, 2026
31543a9
Align worker env defaults and refresh onboarding/verification docs.
BigSimmo Jul 4, 2026
5f4eb1e
fix(answer): derive concise topics for first-turn suggestion chips
BigSimmo Jul 4, 2026
0b1b99b
Merge origin/main into codex/fix-ci-annotations
BigSimmo Jul 4, 2026
1c5d767
Add codebase index and Cursor semantic search configuration.
BigSimmo Jul 4, 2026
93e7841
refactor(answer): complete answer-review hygiene pass
BigSimmo Jul 4, 2026
56d6f40
fix(ui): edge-to-edge mobile layout for mode homes and footer dock (#…
BigSimmo Jul 8, 2026
cdf2811
Fix differential badge design for mobile search results (#412)
BigSimmo Jul 8, 2026
4144b5d
Fix mobile medication search result text cutoff (#414)
BigSimmo Jul 8, 2026
2191f6f
fix(answer): dedupe and compact Also in your library cross-mode links…
BigSimmo Jul 9, 2026
d0b1be7
docs: refresh site map after cross-mode and medications routes
cursoragent Jul 9, 2026
0a353d3
fix(ui): top-align favourites/tools on mobile mode homes (#422)
BigSimmo Jul 9, 2026
0c70b54
chore: begin merge conflict resolution with origin/main
Copilot Jul 9, 2026
aa67af9
fix: resolve all merge conflicts with origin/main
Copilot Jul 9, 2026
8ff686d
Merge branch 'main' into archive/local-main-wip-20260705
BigSimmo Jul 9, 2026
ef535b0
fix: apply CodeRabbit auto-fixes
coderabbitai[bot] Jul 9, 2026
a668294
fix(ui): remove PR 430 conflict artifacts
BigSimmo Jul 9, 2026
505f001
Merge remote-tracking branch 'origin/main' into codex/pr430-publish
BigSimmo Jul 9, 2026
8681ae9
test(ui): query differentials result filters as tabs
BigSimmo Jul 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 97 additions & 1 deletion tests/ui-tools.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -972,7 +972,7 @@ test.describe("Clinical KB tools launcher", () => {
await expect(page.getByRole("link", { name: "Delirium / Acute Confusion / Encephalopathy" }).first()).toBeVisible();
});

test("differentials search badges stay single-line on narrow viewport", async ({ page }) => {
test("differentials evidence-backed search badges stay single-line on narrow viewport", async ({ page }) => {
await page.setViewportSize({ width: 375, height: 812 });

await page.route(/\/api\/setup-status(?:\?.*)?$/, async (route) => {
Expand Down Expand Up @@ -1053,6 +1053,102 @@ test.describe("Clinical KB tools launcher", () => {
await expectNoPageHorizontalOverflow(page);
});

test("differentials search badges stay single-line on narrow viewport", async ({ page }) => {
Comment thread
BigSimmo marked this conversation as resolved.
await page.setViewportSize({ width: 375, height: 812 });

await page.route(/\/api\/setup-status(?:\?.*)?$/, async (route) => {
await route.fulfill({
json: {
demoMode: true,
checks: [
{ id: "env", label: ".env.local configured", status: "ready", detail: "Test environment ready." },
{ id: "project", label: "[REDACTED] target", status: "ready", detail: "Test project ready." },
{ id: "schema", label: "supabase/schema.sql applied", status: "ready", detail: "Test schema ready." },
{ id: "search", label: "Search RPC and vector indexes", status: "ready", detail: "Test search ready." },
{ id: "openai", label: "OpenAI API key available", status: "ready", detail: "Test OpenAI ready." },
],
},
});
});
await page.route(/\/api\/search(?:\?.*)?$/, async (route) => {
await route.fulfill({
json: {
results: [
{
id: "chunk-acute-confusion",
document_id: "11111111-1111-4111-8111-111111111111",
title: "Acute confusion differential guide",
file_name: "acute-confusion-differentials.pdf",
page_number: 1,
chunk_index: 0,
section_heading: "Differentials",
content: "Acute confusion with inattention should prioritise delirium and other urgent causes.",
image_ids: [],
similarity: 0.91,
hybrid_score: 0.93,
images: [],
},
],
visualEvidence: [],
relatedDocuments: [],
documentMatches: [
{
document_id: "11111111-1111-4111-8111-111111111111",
title: "Acute confusion differential guide",
file_name: "acute-confusion-differentials.pdf",
labels: [],
summarySnippet: "Reviewed acute confusion differential guidance.",
bestPages: [1],
bestChunkIds: ["chunk-acute-confusion"],
imageCount: 0,
tableCount: 0,
matchReason: "Matched indexed passage",
score: 0.93,
},
],
relevance: { verdict: "strong", score: 0.91, directSourceCount: 1, weakSourceCount: 0 },
smartPanel: {},
telemetry: { query_class: "differential_compare", retrieval_strategy: "text_fast_path" },
scope: { queryMode: "compare_guidance" },
sourceGovernanceWarnings: [],
demoMode: true,
},
});
});

await gotoLauncher(page, "/differentials");
await page.locator('input[placeholder="Ask or search a presentation"]:visible').first().fill("acute confusion");
await page.locator('button[aria-label="Search differential presentations"]:visible').click();

await expect(page.getByTestId("differentials-search-results")).toBeVisible();
const tabs = page.getByTestId("differential-result-type-tabs");
await expect(tabs).toBeVisible();
await expect(tabs.getByRole("tab", { name: "All (8)" })).toBeVisible();
await expect(tabs.getByRole("tab", { name: "Presentations (1)" })).toBeVisible();
await expect(tabs.getByRole("tab", { name: "Diagnoses (7)" })).toBeVisible();

const tabMetrics = await tabs.getByRole("tab").evaluateAll((tabElements) =>
tabElements.map((tab) => {
const rect = tab.getBoundingClientRect();
return { height: rect.height, scrollHeight: tab.scrollHeight };
}),
);
for (const tab of tabMetrics) {
expect(tab.scrollHeight).toBeLessThanOrEqual(tab.height + 1);
}

const emergentBadge = page.getByTestId("differential-status-badge").first();
await expect(emergentBadge).toBeVisible();
await expect(emergentBadge).toHaveText(/Emergent/i);
const badgeMetrics = await emergentBadge.evaluate((element) => {
const rect = element.getBoundingClientRect();
return { height: rect.height, scrollHeight: element.scrollHeight };
});
expect(badgeMetrics.height).toBeGreaterThanOrEqual(22);
expect(badgeMetrics.scrollHeight).toBeLessThanOrEqual(badgeMetrics.height + 1);
await expectNoPageHorizontalOverflow(page);
});

test("differentials presentation comparison page stays wired to differentials mode", async ({ page }) => {
await page.setViewportSize({ width: 1440, height: 920 });
const workflow = acuteConfusionPresentationWorkflow;
Expand Down
Loading