Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
| 2026-08-16 | PR-2008 / codex/tools-show-all-20260816 | 008093943c407a3caaac65d49d5c8e80de552ef0 | PR #2008 latest-base refresh after green exact-head CI | Merged main fb8c71c94f8a45028df36aa669e3653c4f75cd2a; its durable ULID/Crockford outstanding-issues tooling and related tests, docs, and hooks do not overlap this PR's launcher or focused UI regression; no new P0/P1/P2 defects confirmed | Exact-head PR required, static, build, unit, production UI, critical UI, advisory UI, CI-managed Lighthouse budget, SAST, and secret scans passed at 99592cad854c205b2626f4d5a001956ef6e13b8f; 3f33068da16ef8a3235359ff974c9314cf79d758-to-fb8c71c94f8a45028df36aa669e3653c4f75cd2a compare reviewed; clean non-overlapping merge-tree construction |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
| 2026-08-16 | codex/tools-show-all-20260816 | 6b67263c9d41a598bda3329e40846425071ddf20 | PR #2008 compact Show all tools launcher review and latest-main merge | No P0/P1/P2 defects confirmed; preserved the focused launcher-to-directory control and merged latest main without conflict; PR description placement wording is stale but not a proven code defect | Manual adversarial merged-tree review; targeted source-contract assertions passed; exact pre-sync head PR required wrapper, lint, typecheck, SAST and secret scan passed |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
| 2026-08-16 | PR-2008 / codex/tools-show-all-20260816 | db72f545635c9e611da3c4f3bb70bbda991699a4 | PR #2008 latest-base refresh after green exact-head CI | Merged main 4b601e34f2a3398121a23e7db64a04690075ddd3; its default-off clinical answer evidence preview changes do not overlap the launcher component or dedicated Show all regression; no new P0/P1/P2 defects confirmed | Exact-head PR required, static, build, unit, production UI, critical UI, CI-managed Lighthouse budget, SAST, and secret scans passed at f34fad1f725410995fe90f1d356c7764de9b5a07; 54585e98df133c0b49cf32cc878473ea0beba46d-to-4b601e34f2a3398121a23e7db64a04690075ddd3 compare reviewed; clean non-overlapping merge-tree construction |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
| 2026-08-16 | PR-2008 / codex/tools-show-all-20260816 | 75028ebb9d48ae06ccd99621b3f7881af50b91f4 | PR #2008 latest-base shared UI test merge after green exact-head CI | Merged main 54585e98df133c0b49cf32cc878473ea0beba46d; kept its low-confidence AccessibleTable 320px mockup journey in the shared suite and moved this PR's Show all launcher regression to dedicated tests/ui-tools-show-all.spec.ts; no new P0/P1/P2 defects confirmed | Exact-head PR required, static, build, unit, production UI, critical UI, advisory UI, CI-managed Lighthouse budget, SAST, and secret scans passed at 4db291a50e7aad2239fe85303b886ab248978c3f; fb8c71c94f8a45028df36aa669e3653c4f75cd2a-to-54585e98df133c0b49cf32cc878473ea0beba46d compare reviewed; merged source and test contracts reviewed |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
| 2026-08-16 | PR-2008 / codex/tools-show-all-20260816 | e40e375dfa5346614d5b0c143e9f2e8f0fe44bd8 | PR #2008 post-review base refresh | Required base refresh to 4c52fe1dbbc921be769c31b36efbcdba798ba11b reviewed; the base delta adds only unrelated branch-review records and outstanding-issue inbox updates, with no overlap with this PR's launcher or focused UI regression files; the original review disposition remains valid | Exact-head PR required, CI, SAST, and secret scan passed at b089bf262b1aff99f57b22e45cbd941e815175c1; a96dcbb6280ab6889c3b443be4d348950786a809-to-4c52fe1dbbc921be769c31b36efbcdba798ba11b compare reviewed; clean synthetic merge-tree verification |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
| 2026-08-16 | PR-2008 / codex/tools-show-all-20260816 | 74f618c8c6b3a5ec2099ab070cd198ddf70a3f1c | PR #2008 content-address repair and latest-base refresh | Corrected the malformed review-record filename to the repository-derived SHA-256 path without changing its row bytes; merged main 3f33068da16ef8a3235359ff974c9314cf79d758, whose API response-parsing changes and two review records do not overlap this PR's launcher or focused UI test; no new P0/P1/P2 defects confirmed | Exact-head CI reproduced the ledger guard failure; canonical path b50552bc27edf96d286fcb2c582831863c1893c66a80b3dc38988a8ef6ef5dc0 derived from reviewRecordPath; 4c52fe1dbbc921be769c31b36efbcdba798ba11b-to-3f33068da16ef8a3235359ff974c9314cf79d758 compare reviewed; prior b089bf262b1aff99f57b22e45cbd941e815175c1 exact-head required CI passed; final head requires rerun |
14 changes: 14 additions & 0 deletions src/components/applications-launcher-page.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -119,6 +119,7 @@ function launcherAppsForSession(canAccessFavourites: boolean): LauncherApp[] {
const toolsLauncherCopy = {
heading: "Tools",
description: "Assessment, prescribing, workflows.",
showAllLabel: "Show all",
allSectionLabel: "All tools",
countNoun: "tools",
emptyTitle: "No tools match",
Expand DownExpand Up@@ -827,6 +828,19 @@ export function ApplicationsLauncherWorkspace({
headingLevel={1}
/>

<Link
href="/tools"
aria-label="Show all tools"
data-testid="tools-show-all"
className={cn(
"inline-flex min-h-tap items-center justify-center gap-2 rounded-full border border-[color:var(--clinical-accent-border)] bg-[color:var(--surface)] px-3 text-xs font-semibold text-[color:var(--text-heading)] shadow-[var(--shadow-inset)] transition hover:bg-[color:var(--clinical-accent-soft)] sm:text-sm lg:min-h-9",
focusRing,
)}
>
<Grid2X2 className="h-3.5 w-3.5 text-[color:var(--clinical-accent)]" strokeWidth={1.75} aria-hidden="true" />
{copy.showAllLabel}
</Link>

{desktopComposerSlotId ? (
<DesktopComposerPortalSlot
id={desktopComposerSlotId}
Expand Down
39 changes: 39 additions & 0 deletions tests/ui-tools-show-all.spec.ts
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
import { expect, test, type Page } from "playwright/test";

async function gotoLauncher(page: Page, path = "/tools") {
await page.goto(path, { waitUntil: "domcontentloaded" });
await expect(page.locator("#main-content").first()).toBeVisible({ timeout: 15_000 });
}

async function expectNoPageHorizontalOverflow(page: Page) {
const overflow = await page.evaluate(() => {
const documentWidth = Math.max(document.documentElement.scrollWidth, document.body?.scrollWidth ?? 0);
return documentWidth - document.documentElement.clientWidth;
});

expect(overflow).toBeLessThanOrEqual(2);
}

test("Show all opens the unfiltered tools search mode", async ({ page }) => {
await page.setViewportSize({ width: 390, height: 844 });
await gotoLauncher(page, "/?mode=tools");

const showAll = page.getByRole("link", { name: "Show all tools" });
await expect(showAll).toBeVisible();
await expect(showAll).toHaveText("Show all");
await expect(showAll).toHaveAttribute("href", "/tools");

const showAllBox = await showAll.boundingBox();
expect(showAllBox?.height).toBeGreaterThanOrEqual(48);

await showAll.focus();
await expect(showAll).toBeFocused();

await Promise.all([page.waitForURL(/\/tools$/), page.keyboard.press("Enter")]);

const results = page.getByTestId("tools-search-results-page");
await expect(results).toBeVisible();
await expect(results.getByRole("heading", { level: 1, name: "All tools" })).toBeVisible();
await expect(results.getByTestId("tools-results-home-composer").getByTestId("global-search-input")).toBeVisible();
await expectNoPageHorizontalOverflow(page);
});
Loading