From 3606707b65a82f5ace23f8a162f9b229f83b7019 Mon Sep 17 00:00:00 2001
From: BigSimmo <87357024+BigSimmo@users.noreply.github.com>
Date: Fri, 14 Aug 2026 22:44:18 +0800
Subject: [PATCH 1/5] feat(auth): refine responsive account setup
---
.../account-setup-dialog.tsx | 252 +++++++++++-------
tests/favourites-auth-gate.dom.test.tsx | 28 +-
tests/ui-smoke.spec.ts | 42 ++-
3 files changed, 198 insertions(+), 124 deletions(-)
diff --git a/src/components/clinical-dashboard/account-setup-dialog.tsx b/src/components/clinical-dashboard/account-setup-dialog.tsx
index 4f004e3533..0a176c50e9 100644
--- a/src/components/clinical-dashboard/account-setup-dialog.tsx
+++ b/src/components/clinical-dashboard/account-setup-dialog.tsx
@@ -1,7 +1,18 @@
"use client";
+import Link from "next/link";
import { type FormEvent, useState } from "react";
-import { Clock3, Heart, Loader2, Mail, ShieldCheck, SlidersHorizontal, type LucideIcon } from "lucide-react";
+import {
+ ArrowRight,
+ Clock3,
+ Heart,
+ Loader2,
+ LockKeyhole,
+ Mail,
+ ShieldCheck,
+ SlidersHorizontal,
+ type LucideIcon,
+} from "lucide-react";
import { BrandMark } from "@/components/clinical-dashboard/brand";
import { ProviderBrandIcon, type SsoProvider } from "@/components/clinical-dashboard/provider-brand-icons";
@@ -10,31 +21,31 @@ import { TextField } from "@/components/ui/text-field";
import { AsyncButton, cn, floatingControl, InlineNotice, primaryControl } from "@/components/ui-primitives";
import { useAuthSession, type OAuthProvider } from "@/lib/supabase/client";
-const storageBenefits = [
+const workspaceBenefits = [
{
- label: "Saved favourites",
- detail: "Available whenever you sign in on another device.",
- scope: "Account",
+ label: "Save favourites",
+ mobileLabel: "Favourites sync",
+ detail: "Reopen trusted resources on any device.",
icon: Heart,
},
{
- label: "Clinical defaults",
- detail: "Your jurisdiction and answer style follow your account.",
- scope: "Account",
+ label: "Keep your clinical defaults",
+ mobileLabel: "Preferences sync",
+ detail: "Your jurisdiction and answer style follow you.",
icon: SlidersHorizontal,
},
{
- label: "Recent searches",
- detail: "Stay in this browser session and do not sync.",
- scope: "This device",
+ label: "Recent searches stay here",
+ mobileLabel: "Searches stay here",
+ detail: "Browser activity does not sync to your account.",
icon: Clock3,
},
] as const;
-type StorageBenefit = {
+type WorkspaceBenefit = {
label: string;
+ mobileLabel: string;
detail: string;
- scope: "Account" | "This device";
icon: LucideIcon;
};
@@ -60,10 +71,10 @@ export function AccountSetupDialog({
const busy = auth.status === "loading";
const actionBusy = busy || pendingProvider !== null;
const isFavouritesIntent = intent === "favourites";
- const title = isFavouritesIntent ? "Sign up to save favourites" : "Set up your workspace";
+ const title = isFavouritesIntent ? "Sign up to save favourites" : "Continue to your workspace";
const description = isFavouritesIntent
? "Sign in or create an account to save favourites and reopen them on any device."
- : "Sign in or create an account to keep favourites and clinical defaults with you.";
+ : "Sign in or create an account in one step.";
const error = actionAttempted ? auth.error : null;
const notice = actionAttempted ? auth.notice : null;
@@ -91,59 +102,61 @@ export function AccountSetupDialog({
-
-
- }
- headerClassName="bg-[color:var(--surface-lux)]"
- titleClassName="text-base sm:text-lg"
- bodyClassName="bg-[color:var(--surface)] p-4 sm:p-6"
- contentClassName="account-setup-dialog max-h-[calc(100dvh-0.5rem)] sm:max-h-[calc(100dvh-2rem)] sm:max-w-[44rem]"
+ headerClassName="absolute right-3 top-3 z-30 w-auto border-0 bg-transparent p-0 sm:right-4 sm:top-4 sm:p-0"
+ titleClassName="sr-only"
+ bodyClassName="bg-[color:var(--surface)] p-0 sm:p-0"
+ contentClassName="account-setup-dialog relative max-h-[calc(100dvh-0.5rem)] sm:max-h-[calc(100dvh-2rem)] sm:max-w-[68rem]"
portal
>
-
+ );
+}
+
+function AccountOrientationPanel() {
+ return (
+
+
+
-
+
+
+
+
-
-
- What’s saved where
-
-
- Account data follows you; recent activity stays private to this browser.
-
-
+ Your workspace, wherever you work.
+
+
-
- {storageBenefits.map((benefit) => (
-
- ))}
-
+
+ {workspaceBenefits.map((benefit) => (
+
+ ))}
+
-
-
-
- No PHI required. Do not enter
- patient-identifying information during sign-in.
-
-
-
-
-
+
+
);
}
-function StorageBenefitRow({ benefit }: { benefit: StorageBenefit }) {
+function WorkspaceBenefitRow({ benefit }: { benefit: WorkspaceBenefit }) {
const Icon = benefit.icon;
return (
-
-
-
+
+
+
- {benefit.label}
- {benefit.detail}
-
-
- {benefit.scope}
+
+ {benefit.mobileLabel}
+
+
+ {benefit.label}
+
+
+ {benefit.detail}
+
);
}
+function PrivacyFooter({ className }: { className?: string }) {
+ return (
+
+
+
+ Do not enter patient-identifiable information.
+
+ Privacy and data processing
+
+
+
+
+ );
+}
+
function ProviderButton({
provider,
busy,
@@ -240,7 +294,7 @@ function ProviderButton({
data-provider={provider.toLowerCase()}
className={cn(
floatingControl,
- "w-full min-w-0 justify-center gap-2.5 bg-[color:var(--surface-lux)] px-3 shadow-[var(--shadow-inset)]",
+ "min-h-tap w-full min-w-0 justify-center gap-2.5 bg-[color:var(--surface-lux)] px-3 shadow-[var(--shadow-inset)]",
)}
>
{pending ? (
diff --git a/tests/favourites-auth-gate.dom.test.tsx b/tests/favourites-auth-gate.dom.test.tsx
index 681453a3cb..0534422e19 100644
--- a/tests/favourites-auth-gate.dom.test.tsx
+++ b/tests/favourites-auth-gate.dom.test.tsx
@@ -154,18 +154,24 @@ describe("favourites auth gate DOM", () => {
expect(screen.getByRole("heading", { name: "Sign up to save favourites" })).toBeVisible();
expect(screen.getByText(/Sign in or create an account to save favourites/i)).toBeVisible();
- expect(screen.getByText("Saved favourites")).toBeVisible();
+ expect(screen.getByText("Save favourites")).toBeVisible();
});
it("separates account-synced data from device-only recents", () => {
render( undefined} />);
- expect(screen.getByRole("heading", { name: "What’s saved where" })).toBeVisible();
- expect(screen.getAllByText("Account")).toHaveLength(2);
- expect(screen.getByText("This device")).toBeVisible();
- expect(screen.getByText(/Recent searches/i)).toBeVisible();
- expect(screen.getByText(/Stay in this browser session and do not sync/i)).toBeVisible();
- expect(screen.getByText(/No PHI required\./i)).toBeVisible();
+ expect(screen.getByRole("heading", { name: "Your workspace, wherever you work." })).toBeVisible();
+ expect(screen.getByText("Save favourites")).toBeVisible();
+ expect(screen.getByText(/Reopen trusted resources on any device/i)).toBeVisible();
+ expect(screen.getByText("Keep your clinical defaults")).toBeVisible();
+ expect(screen.getByText(/Your jurisdiction and answer style follow you/i)).toBeVisible();
+ expect(screen.getByText("Recent searches stay here")).toBeVisible();
+ expect(screen.getByText(/Browser activity does not sync to your account/i)).toBeVisible();
+ expect(screen.getAllByText("Do not enter patient-identifiable information.")).toHaveLength(2);
+ expect(screen.getAllByRole("link", { name: "Privacy and data processing" })).toHaveLength(2);
+ for (const privacyLink of screen.getAllByRole("link", { name: "Privacy and data processing" })) {
+ expect(privacyLink).toHaveAttribute("href", "/privacy");
+ }
expect(screen.queryByText(/Everything syncs across your devices/i)).toBeNull();
expect(screen.queryByText(/never shared/i)).toBeNull();
expect(screen.queryByText("Account-scoped saves")).toBeNull();
@@ -178,7 +184,7 @@ describe("favourites auth gate DOM", () => {
const apple = screen.getByRole("button", { name: "Continue with Apple" });
const google = screen.getByRole("button", { name: "Continue with Google" });
const microsoft = screen.getByRole("button", { name: "Continue with Microsoft" });
- const email = screen.getByLabelText(/Email address/);
+ const email = screen.getByLabelText(/Work email/);
expect(apple.compareDocumentPosition(google) & Node.DOCUMENT_POSITION_FOLLOWING).toBeTruthy();
expect(google.compareDocumentPosition(microsoft) & Node.DOCUMENT_POSITION_FOLLOWING).toBeTruthy();
@@ -206,16 +212,16 @@ describe("favourites auth gate DOM", () => {
for (const provider of ["Apple", "Google", "Microsoft"]) {
expect(screen.getByRole("button", { name: `Continue with ${provider}` })).toBeDisabled();
}
- expect(screen.getByRole("button", { name: "Continue with email" })).toBeDisabled();
+ expect(screen.getByRole("button", { name: "Continue securely" })).toBeDisabled();
});
it("submits email and announces success and failure feedback", async () => {
const user = userEvent.setup();
const { rerender } = render( undefined} />);
- const submit = screen.getByRole("button", { name: "Continue with email" });
+ const submit = screen.getByRole("button", { name: "Continue securely" });
expect(submit).toBeDisabled();
- const email = screen.getByLabelText(/Email address/);
+ const email = screen.getByLabelText(/Work email/);
expect(email).toHaveAttribute("data-sheet-autofocus", "true");
await user.type(email, "clinician@clinic.example");
await user.click(submit);
diff --git a/tests/ui-smoke.spec.ts b/tests/ui-smoke.spec.ts
index f574c5100f..e675520546 100644
--- a/tests/ui-smoke.spec.ts
+++ b/tests/ui-smoke.spec.ts
@@ -904,7 +904,7 @@ function accountSettingsDialog(page: Page) {
}
function accountSetupDialog(page: Page) {
- return page.getByRole("dialog", { name: "Set up your workspace" });
+ return page.getByRole("dialog", { name: "Account setup" });
}
async function expectAccountSettingsSurface(settings: Locator) {
@@ -981,19 +981,31 @@ async function expectMobileSettingsLayout(settings: Locator) {
}
async function expectAccountSetupSurface(setup: Locator) {
- await expect(setup.getByRole("heading", { name: "Set up your workspace" })).toBeVisible();
- await expect(setup.getByLabel("Email address")).toBeVisible();
- await expect(setup.getByRole("button", { name: "Continue with email" })).toBeVisible();
+ await expect(setup.getByRole("heading", { name: "Continue to your workspace" })).toBeVisible();
+ await expect(setup.getByRole("heading", { name: "Your workspace, wherever you work." })).toBeVisible();
+ await expect(setup.getByLabel("Work email")).toBeVisible();
+ await expect(setup.getByRole("button", { name: "Continue securely" })).toBeVisible();
await expect(setup.getByRole("button", { name: "Continue with Apple" })).toBeEnabled();
await expect(setup.getByRole("button", { name: "Continue with Google" })).toBeEnabled();
await expect(setup.getByRole("button", { name: "Continue with Microsoft" })).toBeEnabled();
await expect(setup.getByText(/Apple sign-in is not available/i)).toHaveCount(0);
- await expect(setup.getByRole("heading", { name: "What’s saved where" })).toBeVisible();
- await expect(setup.getByText("Account", { exact: true })).toHaveCount(2);
- await expect(setup.getByText("This device", { exact: true })).toBeVisible();
- await expect(setup.getByText(/Stay in this browser session and do not sync/i)).toBeVisible();
- await expect(setup.getByText(/No PHI required\./i)).toBeVisible();
- await expect(setup).toContainText("Do not enter patient-identifying information during sign-in.");
+ const accountSetupViewportWidth = await setup.evaluate(() => window.innerWidth);
+ if (accountSetupViewportWidth >= 1024) {
+ await expect(setup.getByText("Save favourites", { exact: true })).toBeVisible();
+ await expect(setup.getByText(/Reopen trusted resources on any device/i)).toBeVisible();
+ await expect(setup.getByText("Keep your clinical defaults", { exact: true })).toBeVisible();
+ await expect(setup.getByText(/Your jurisdiction and answer style follow you/i)).toBeVisible();
+ await expect(setup.getByText("Recent searches stay here", { exact: true })).toBeVisible();
+ await expect(setup.getByText(/Browser activity does not sync to your account/i)).toBeVisible();
+ } else {
+ await expect(setup.getByText("Favourites sync", { exact: true })).toBeVisible();
+ await expect(setup.getByText("Preferences sync", { exact: true })).toBeVisible();
+ await expect(setup.getByText("Searches stay here", { exact: true })).toBeVisible();
+ }
+ const privacyLink = setup.getByRole("link", { name: "Privacy and data processing" });
+ await expect(privacyLink).toBeVisible();
+ await expect(privacyLink).toHaveAttribute("href", "/privacy");
+ await expect(privacyLink.locator("xpath=..")).toContainText("Do not enter patient-identifiable information.");
}
async function expectAccountProviderLayout(setup: Locator, layout: "row" | "stack") {
@@ -1588,7 +1600,7 @@ test.describe("Clinical KB UI smoke coverage", () => {
await expect(setup).toBeVisible();
await expectAccountSetupSurface(setup);
await expectAccountProviderLayout(setup, "stack");
- await expect(setup.getByLabel("Email address")).toBeFocused();
+ await expect(setup.getByLabel("Work email")).toBeFocused();
const setupBox = await setup.boundingBox();
expect(setupBox).not.toBeNull();
expect(setupBox!.x).toBeGreaterThanOrEqual(-1);
@@ -1597,8 +1609,10 @@ test.describe("Clinical KB UI smoke coverage", () => {
await page.setViewportSize({ width: 320, height: 700 });
const setupClose = setup.getByRole("button", { name: "Close account setup" });
- await expect(setup.getByLabel("Email address")).toBeInViewport();
- await expect(setup.getByRole("button", { name: "Continue with email" })).toBeInViewport();
+ const setupEmail = setup.getByLabel("Work email");
+ await setupEmail.scrollIntoViewIfNeeded();
+ await expect(setupEmail).toBeInViewport();
+ await expect(setup.getByRole("button", { name: "Continue securely" })).toBeInViewport();
await expect(setupClose).toBeInViewport();
await expectNoPageHorizontalOverflow(page);
@@ -1606,7 +1620,7 @@ test.describe("Clinical KB UI smoke coverage", () => {
await setupScrollPort.evaluate((element) => {
element.scrollTop = element.scrollHeight;
});
- await expect(setup.getByText("No PHI required")).toBeInViewport();
+ await expect(setup.getByRole("link", { name: "Privacy and data processing" })).toBeInViewport();
await expect(setupClose).toBeInViewport();
await page.emulateMedia({ reducedMotion: "reduce", forcedColors: "active" });
From e79e5d5900e031bd0e8ad6a47c6a23343411daea Mon Sep 17 00:00:00 2001
From: BigSimmo <87357024+BigSimmo@users.noreply.github.com>
Date: Fri, 14 Aug 2026 22:47:40 +0800
Subject: [PATCH 2/5] chore(review): record account setup review
---
...82663cf239be31aa3a5eb4df2c4e9b49b249ce251af596c2038.record.md | 1 +
1 file changed, 1 insertion(+)
create mode 100644 docs/branch-review-records/9ef3a3c00e3f782663cf239be31aa3a5eb4df2c4e9b49b249ce251af596c2038.record.md
diff --git a/docs/branch-review-records/9ef3a3c00e3f782663cf239be31aa3a5eb4df2c4e9b49b249ce251af596c2038.record.md b/docs/branch-review-records/9ef3a3c00e3f782663cf239be31aa3a5eb4df2c4e9b49b249ce251af596c2038.record.md
new file mode 100644
index 0000000000..5c925c86a1
--- /dev/null
+++ b/docs/branch-review-records/9ef3a3c00e3f782663cf239be31aa3a5eb4df2c4e9b49b249ce251af596c2038.record.md
@@ -0,0 +1 @@
+| 2026-08-14 | codex/account-setup-polish-20260814 | 3606707b65a82f5ace23f8a162f9b229f83b7019 | account setup responsive auth privacy UI | No reproducible P0-P3 findings; local dev-server stale chunk was cleared by repository-safe restart and did not reproduce | live desktop and 390px phone review; axe WCAG A/AA 0 violations; focused DOM 17 passed; focused Chromium desktop and phone passed; typecheck, formatting, production-readiness passed; verify:pr-local timed out after 15 minutes without decisive output |
From 9c3d1b9dbf4484205c0d636337f72b4e9d1bbc4c Mon Sep 17 00:00:00 2001
From: BigSimmo <87357024+BigSimmo@users.noreply.github.com>
Date: Sun, 16 Aug 2026 02:27:11 +0800
Subject: [PATCH 3/5] fix(services): remove quick-search suggestions from
service filters
---
docs/filter-contract.md | 9 +++---
.../services/services-navigator-page.tsx | 29 -------------------
tests/ui-tools.spec.ts | 15 +++-------
3 files changed, 9 insertions(+), 44 deletions(-)
diff --git a/docs/filter-contract.md b/docs/filter-contract.md
index 0469e77946..342de4b41a 100644
--- a/docs/filter-contract.md
+++ b/docs/filter-contract.md
@@ -28,10 +28,11 @@ does today — tells the reader they cannot hold two domains at once, which is f
### There is no `navigate` kind, and that is the point
-Services' quick filters do not filter. They call `router.push` and **replace the query**, so
-choosing one discards the search and its results with no warning and no undo. A control labelled
-"Filter" must not do that. Query-replacing presets belong beside the composer as suggested
-searches (`AnswerSuggestionChips`), not inside the filter sheet.
+Services' former quick filters did not filter. They called `router.push` and **replaced the query**,
+so choosing one discarded the search and its results with no warning and no undo. A control labelled
+"Filter" must not do that. The presets were removed because they also competed visually with the
+service-group navigation; query-replacing suggestions should only return if they have a distinct,
+clearly labelled home beside the composer.
Factsheets' category dimension is not this pattern, despite an earlier draft of this section
grouping it with services' quick filters: `filterFactsheets(query, category)` ANDs the two, so
diff --git a/src/components/services/services-navigator-page.tsx b/src/components/services/services-navigator-page.tsx
index b02e528d70..e6443dfbcf 100644
--- a/src/components/services/services-navigator-page.tsx
+++ b/src/components/services/services-navigator-page.tsx
@@ -13,7 +13,6 @@ import {
SearchResultsSkeleton,
} from "@/components/clinical-dashboard/search-results-header-band";
import { UniversalSearchAlsoMatches } from "@/components/clinical-dashboard/universal-search-also-matches";
-import { AnswerSuggestionChips } from "@/components/clinical-dashboard/answer-suggestion-chips";
import {
ResultFilterSheet,
ResultFilterTrigger,
@@ -55,16 +54,6 @@ import { useRegistryRecords } from "@/lib/use-registry-records";
type ServiceResultScope = "results" | "all";
-const bestFitQuery = "13YARN crisis Aboriginal Torres Strait Islander phone";
-const serviceQuickFilters = [
- { label: "Best fit", query: bestFitQuery },
- { label: "Crisis", query: "crisis" },
- { label: "Culturally safe", query: "Aboriginal Torres Strait Islander" },
- { label: "Phone referral", query: "phone referral" },
- { label: "Free", query: "free" },
- { label: "WA", query: "WA" },
-] as const;
-
function displayText(value: string | null | undefined, fallback = "Confirm locally") {
return value?.trim() ? value.trim() : fallback;
}
@@ -661,24 +650,6 @@ export function ServicesNavigatorPage() {
) : undefined
}
/>
-
- {/* Evicted from the filter sheet: every quick filter called
- `router.push` and replaced the query outright, discarding the
- search and its results with no warning and no undo — exactly
- what docs/filter-contract.md section 1 forbids inside a control
- labelled "Filter". Framed as a new search, which is what
- picking one does. */}
- filter.label)}
- onPick={(label) => {
- const filter = serviceQuickFilters.find((item) => item.label === label);
- if (filter) applyServiceQuery(filter.query);
- }}
- />
>
}
>
diff --git a/tests/ui-tools.spec.ts b/tests/ui-tools.spec.ts
index ee790159a6..8e1cbf323e 100644
--- a/tests/ui-tools.spec.ts
+++ b/tests/ui-tools.spec.ts
@@ -1132,8 +1132,7 @@ test.describe("Clinical KB tools launcher", () => {
const quickFilter = page.getByTestId("service-filter-trigger-phone");
await expect(quickFilter).toBeVisible();
await expect(quickFilter).toHaveAccessibleName(/No filters active/);
- await page.getByTestId("service-quick-search-suggestions").getByRole("button", { name: "Crisis" }).click();
- await expect(page).toHaveURL(/\/services\?.*q=crisis/);
+ await expect(page.getByText("Try a focused search", { exact: true })).toHaveCount(0);
// Phones keep the full search results in the page instead of opening a
// command sheet over the small viewport.
@@ -1330,6 +1329,7 @@ test.describe("Clinical KB tools launcher", () => {
await gotoLauncher(page, "/services?focus=1");
await expect(page.getByTestId("services-home").getByTestId("global-search-input")).toBeVisible();
await expect(page.getByTestId("services-home").getByTestId("global-search-input")).toBeFocused();
+ await expect(page.getByText("Try a focused search", { exact: true })).toHaveCount(0);
await gotoLauncher(page, "/forms?focus=1");
await expect(visibleByTestId(page, "forms-home").getByTestId("global-search-input")).toBeVisible();
@@ -1370,16 +1370,9 @@ test.describe("Clinical KB tools launcher", () => {
await expect(page.getByRole("navigation", { name: "Service groups" })).toBeVisible();
await expect(page.getByTestId("services-shortlist-bar")).toHaveCount(0);
- const culturallySafe = page
- .getByTestId("service-quick-search-suggestions")
- .getByRole("button", { name: "Culturally safe" });
- await expect(culturallySafe).toBeVisible();
- await waitForReactEventHandler(culturallySafe);
- await culturallySafe.click();
- await expect(page).toHaveURL(/q=Aboriginal\+Torres\+Strait\+Islander/);
+ await expect(page.getByText("Try a focused search", { exact: true })).toHaveCount(0);
await expect(page.getByTestId("service-search-result-13yarn")).toBeVisible();
- // Quick search suggestions and facet clearing are separate contracts.
// Exercise a real facet, then clear only that facet while preserving q.
await page.getByTestId("service-filter-trigger-desktop").click();
const filterPanel = page.getByTestId("service-filter-panel");
@@ -1389,7 +1382,7 @@ test.describe("Clinical KB tools launcher", () => {
await crisisFacet.click();
await expect(page).toHaveURL(/acuity_flags=crisis_high/);
await filterPanel.getByTestId("service-filter-panel-clear").click();
- await expect(page).toHaveURL(/q=Aboriginal\+Torres\+Strait\+Islander/);
+ await expect(page).toHaveURL(/q=13YARN/);
await expect(page.getByTestId("service-search-result-13yarn")).toBeVisible();
await filterPanel.getByRole("button", { name: "Close", exact: true }).click();
From 8d59aecbdc648fe87fe14f17c223150799c30c7a Mon Sep 17 00:00:00 2001
From: BigSimmo <87357024+BigSimmo@users.noreply.github.com>
Date: Mon, 17 Aug 2026 00:08:06 +0800
Subject: [PATCH 4/5] Add outstanding-issues row-staleness fingerprint checks
---
scripts/check-outstanding-issues.mjs | 22 ++++++++++
scripts/ledger-inbox.mjs | 62 ++++++++++++++++++++++++++--
tests/repo-hygiene.test.ts | 55 +++++++++++++++++++++++-
3 files changed, 134 insertions(+), 5 deletions(-)
diff --git a/scripts/check-outstanding-issues.mjs b/scripts/check-outstanding-issues.mjs
index ac586f1b58..19e6d23e8a 100644
--- a/scripts/check-outstanding-issues.mjs
+++ b/scripts/check-outstanding-issues.mjs
@@ -29,6 +29,7 @@
import { execFileSync } from "node:child_process";
import { readFileSync } from "node:fs";
+import { createHash } from "node:crypto";
export const ISSUES_PATH = "docs/outstanding-issues.md";
@@ -52,6 +53,7 @@ const QUEUE_ID_CITATION = /#(\d+)/g;
* id shape is validated rather than assumed.
*/
const ID_CELL = /^#\d+$/;
+const ISSUE_ROW_FINGERPRINT = /^[0-9a-f]{64}$/i;
/**
* A table's separator row, e.g. `| ---- | --- |`, which declares its width.
* The inner pipes must be in the class: without them this only ever matched a
@@ -259,6 +261,26 @@ export function parseIssues(markdown) {
};
}
+export function issueRowFingerprint(markdown, issueId) {
+ const match = String(issueId)
+ .trim()
+ .match(/^#(\d+)$/);
+ if (!match) return null;
+ const number = Number(match[1]);
+ if (!Number.isFinite(number)) return null;
+
+ const row = parseIssues(markdown).rows.find(
+ (entry) => entry.number === number && entry.table === "open" && entry.valid && entry.raw,
+ );
+ if (!row) return null;
+ const normalized = `| ${cells(row.raw).join(" | ")} |`;
+ return createHash("sha256").update(normalized).digest("hex");
+}
+
+export function isValidIssueRowFingerprint(value) {
+ return ISSUE_ROW_FINGERPRINT.test(String(value ?? ""));
+}
+
export function checkIssues(markdown, { prettierIgnored = false } = {}) {
const problems = [];
const { openStart, archiveStart, nextId, markerCount, rows, orphans, bodyCount, queueCitations } =
diff --git a/scripts/ledger-inbox.mjs b/scripts/ledger-inbox.mjs
index 7a856fd00c..637b849207 100644
--- a/scripts/ledger-inbox.mjs
+++ b/scripts/ledger-inbox.mjs
@@ -13,7 +13,12 @@ import path from "node:path";
import { fileURLToPath } from "node:url";
import { addIssue, resolveIssue, updateIssue } from "./outstanding-issues.mjs";
-import { ISSUES_PATH, checkIssues } from "./check-outstanding-issues.mjs";
+import {
+ ISSUES_PATH,
+ checkIssues,
+ issueRowFingerprint,
+ isValidIssueRowFingerprint,
+} from "./check-outstanding-issues.mjs";
const ROOT = path.join(path.dirname(fileURLToPath(import.meta.url)), "..");
const INBOX_DIR = "docs/outstanding-issues-inbox";
@@ -38,6 +43,10 @@ function requestPath(id) {
return path.posix.join(INBOX_DIR, `${id}.json`);
}
+function readOutstandingIssues() {
+ return readFileSync(path.join(ROOT, ISSUES_PATH), "utf8");
+}
+
export function validateRequest(request) {
const problems = [];
if (!request || typeof request !== "object") return ["request must be an object"];
@@ -53,6 +62,11 @@ export function validateRequest(request) {
if (request.action === "done") {
if (!/^#\d{3,}$/.test(request.payload?.id ?? "")) problems.push("done requires a canonical #NNN id");
if (!request.payload?.outcome) problems.push("done requires outcome");
+ if (
+ request.payload?.baseRowFingerprint !== undefined &&
+ !isValidIssueRowFingerprint(request.payload.baseRowFingerprint)
+ )
+ problems.push("done requires a valid baseRowFingerprint");
}
if (request.action === "update") {
if (!/^#\d{3,}$/.test(request.payload?.id ?? "")) problems.push("update requires a canonical #NNN id");
@@ -62,6 +76,11 @@ export function validateRequest(request) {
if (!["pri", "summary", "detail", "source"].some((field) => request.payload?.[field] !== undefined)) {
problems.push("update requires pri, summary, detail, or source");
}
+ if (
+ request.payload?.baseRowFingerprint !== undefined &&
+ !isValidIssueRowFingerprint(request.payload.baseRowFingerprint)
+ )
+ problems.push("update requires a valid baseRowFingerprint");
if (request.payload?.pri !== undefined && !["P1", "P2", "P3"].includes(String(request.payload.pri))) {
problems.push("update pri must be P1, P2, or P3");
}
@@ -82,6 +101,18 @@ export function applyRequest(markdown, request) {
throw new Error("cancel requests must be applied through batch reconciliation");
}
const options = { date: request.createdOn };
+ if ((request.action === "done" || request.action === "update") && request.payload?.baseRowFingerprint) {
+ const id = request.payload.id;
+ const fingerprint = issueRowFingerprint(markdown, id);
+ if (!fingerprint) {
+ throw new Error(`${id} is no longer open; reread and reissue this request from the latest ledger`);
+ }
+ if (fingerprint !== request.payload.baseRowFingerprint) {
+ throw new Error(
+ `${id} is stale: the ledger row changed after this request was queued; reread and reissue from the latest ledger`,
+ );
+ }
+ }
if (request.action === "add") return addIssue(markdown, request.payload, options);
if (request.action === "done") return resolveIssue(markdown, request.payload.id, request.payload.outcome, options);
return updateIssue(markdown, request.payload.id, request.payload);
@@ -344,6 +375,13 @@ function createRequest(action, argv) {
detail: argValue(argv, "detail"),
source: argValue(argv, "source"),
};
+ if (["done", "update"].includes(action) && typeof payload.id === "string") {
+ const currentFingerprint = issueRowFingerprint(readOutstandingIssues(), payload.id);
+ if (currentFingerprint === null) {
+ throw new Error(`ledger request rejected: ${payload.id} is not in Open items`);
+ }
+ payload.baseRowFingerprint = currentFingerprint;
+ }
const request = { version: 1, id: randomUUID(), createdOn: date(), action, payload };
const problems = validateRequest(request);
if (problems.length > 0) throw new Error(problems.join("; "));
@@ -498,14 +536,14 @@ function selfTest() {
id: "22222222-2222-4222-8222-222222222222",
createdOn: "2026-08-13",
action: "done",
- payload: { id: "#001", outcome: "done" },
+ payload: { id: "#001", outcome: "done", baseRowFingerprint: issueRowFingerprint(base, "#001") },
};
const update = {
version: 1,
id: "33333333-3333-4333-8333-333333333333",
createdOn: "2026-08-13",
action: "update",
- payload: { id: "#001", summary: "updated" },
+ payload: { id: "#001", summary: "updated", baseRowFingerprint: issueRowFingerprint(base, "#001") },
};
const cancel = {
version: 1,
@@ -522,7 +560,7 @@ function selfTest() {
id: "55555555-5555-4555-8555-555555555555",
createdOn: "2026-08-13",
action: "update",
- payload: { id: "#001", pri: "P3" },
+ payload: { id: "#001", pri: "P3", baseRowFingerprint: issueRowFingerprint(base, "#001") },
};
if (validateRequest(reprioritise).length > 0) {
throw new Error("self-test failed: a pri-only update request must validate");
@@ -543,6 +581,22 @@ function selfTest() {
if (validateRequest({ ...add, payload: {} }).length === 0)
throw new Error("self-test failed: invalid request accepted");
+ const staleBase = base.replace("one", "stale");
+ let staleRejected = false;
+ try {
+ applyRequest(staleBase, done);
+ } catch (error) {
+ staleRejected = /stale/.test(String(error));
+ }
+ if (!staleRejected) throw new Error("self-test failed: stale done request was not rejected");
+ let staleUpdateRejected = false;
+ try {
+ applyRequest(staleBase, update);
+ } catch (error) {
+ staleUpdateRejected = /stale/.test(String(error));
+ }
+ if (!staleUpdateRejected) throw new Error("self-test failed: stale update request was not rejected");
+
let conflictRejected = false;
try {
applyRequestBatch(base, [done, update]);
diff --git a/tests/repo-hygiene.test.ts b/tests/repo-hygiene.test.ts
index 8d443d34ae..ca6c4d38ae 100644
--- a/tests/repo-hygiene.test.ts
+++ b/tests/repo-hygiene.test.ts
@@ -36,7 +36,7 @@ import {
sanitizeCell,
} from "../scripts/branch-review-ledger.mjs";
import { validateLedger } from "../scripts/check-branch-review-ledger.mjs";
-import { mergeAttributeProblem } from "../scripts/check-outstanding-issues.mjs";
+import { issueRowFingerprint, mergeAttributeProblem } from "../scripts/check-outstanding-issues.mjs";
import { applyRequest, validateRequest } from "../scripts/ledger-inbox.mjs";
describe("check-env-parity name parsing", () => {
@@ -673,4 +673,57 @@ describe("outstanding-issues inbox", () => {
].join("\n");
expect(applyRequest(ledger, add)).toContain("| #002 | P2 | issue | queued |");
});
+
+ it("rejects stale done/update requests when the row hash changed after queueing", () => {
+ const ledger = [
+ "",
+ "",
+ "## Recommended execution queue",
+ "",
+ "",
+ "",
+ "| Order | ID(s) |",
+ "| --- | --- |",
+ "| 1 | `#001` |",
+ "",
+ "## Open items",
+ "",
+ "",
+ "",
+ "| ID | Pri | Type | Summary | Detail / next action | Source | Added |",
+ "| --- | --- | --- | --- | --- | --- | --- |",
+ "| #001 | P2 | issue | original summary | original detail | source | 2026-01-01 |",
+ "",
+ "## Resolved / archive",
+ "",
+ "",
+ "",
+ "| ID | Type | Summary | Outcome | Resolved |",
+ "| ---- | ---- | ---- | ---- | ---- |",
+ "| #000 | issue | old | done | 2026-01-01 |",
+ "",
+ ].join("\n");
+ const baseFingerprint = issueRowFingerprint(ledger, "#001");
+ expect(baseFingerprint).not.toBeNull();
+
+ const done = {
+ version: 1,
+ id: "77777777-7777-4777-8777-777777777777",
+ createdOn: "2026-08-13",
+ action: "done",
+ payload: { id: "#001", outcome: "done", baseRowFingerprint: baseFingerprint },
+ };
+ const update = {
+ version: 1,
+ id: "88888888-8888-4888-8888-888888888888",
+ createdOn: "2026-08-13",
+ action: "update",
+ payload: { id: "#001", summary: "new summary", baseRowFingerprint: baseFingerprint },
+ };
+
+ const stale = ledger.replace("original summary", "mutated summary");
+ expect(() => applyRequest(ledger, done)).not.toThrow();
+ expect(() => applyRequest(stale, done)).toThrow(/stale|no longer open/);
+ expect(() => applyRequest(stale, update)).toThrow(/stale|no longer open/);
+ });
});
From 3662e35e439d5420812d84de08f2ee56670b570b Mon Sep 17 00:00:00 2001
From: BigSimmo <87357024+BigSimmo@users.noreply.github.com>
Date: Mon, 17 Aug 2026 16:19:59 +0800
Subject: [PATCH 5/5] Resolve merge conflicts + review fixes for PR #2009
(#2018)
---
.claude/hooks/issues-surface.sh | 8 +-
.claude/skills/handoff/SKILL.md | 8 +
.claude/skills/issues/SKILL.md | 6 +
.claude/skills/newtask/SKILL.md | 8 +
.design-sync/config.json | 2 +-
.env.example | 3 +
.github/workflows/ci.yml | 8 +
docs/README.md | 3 +
docs/audit/live-drift-forensics-2026-08.md | 235 +++++-
...ab62d03663c70e87ffdf0209fa2e5790.record.md | 1 +
...30c8fad36ffc94a1bafd0d5ca55693a7.record.md | 1 +
...53c64dbd30e5af948b0b041bd6ba537b.record.md | 1 +
...79183c4c8cd7d6d8303dba20a80489f4.record.md | 1 +
...ae2c97681ffc7179731785beb78b5a6a.record.md | 1 +
...b6e8fe8167098620126ddf8a61a1994e.record.md | 1 +
...415668919f9bc7f081bedf9fe16aecdf.record.md | 1 +
...8545f45e9ac5efe70e8e97e97233dfa6.record.md | 1 +
...55ccff9c97fc5f4a99286d566142b192.record.md | 1 +
...4eceaa07712147fdfb1fd71dcf2603d5.record.md | 1 +
...7f67b4c39e333654499b933d49b6b0f4.record.md | 1 +
...63a92e5d288897225e5e48dfe6822ca8.record.md | 1 +
...924563215dd96f29802abdb3f093fc41.record.md | 1 +
...526366619d6e858107ca0fe108f95382.record.md | 1 +
...3bac3f9a436acc5b0336b62533ab1c54.record.md | 1 +
...72c2610971d057b366f68f12bc87baba.record.md | 1 +
...56a5a019e93f3966580d3d41434e2a47.record.md | 1 +
...4d99c4075a36d42378e4fe7717a9b02f.record.md | 1 +
...3d7b2f39f39414b70103aab3a0a8fcc0.record.md | 1 +
...c22f231e8ebb30f3023eb4a5956ceef8.record.md | 1 +
...06a309c9f0d6beb92203bdd5717f47b3.record.md | 1 +
...647dac6fb84d348f6b12fea7f87e7968.record.md | 1 +
...5c4f4b2c2e82254fec86eb5c50ee6784.record.md | 1 +
...6b5c09228a76c7dcb950557c88123401.record.md | 1 +
...7e10477e73f22ca8c1ccfe02d4b84f50.record.md | 1 +
...b41a6841e644b036b1b0f9f54b118f37.record.md | 1 +
...e737d1565612b12828818d2377162c38.record.md | 1 +
...84067c3339f7a2f50cd5c5e642b9988e.record.md | 1 +
...0ef55dcb9d41bac400841a83eb4564f3.record.md | 1 +
...5a8e7d5b869c94ad78c36a062211e4e5.record.md | 1 +
...a51012c6de6ec22028f0f2b600adeaa7.record.md | 1 +
...38816418b90abb2584b88d3d49962c5d.record.md | 1 +
...b1ad5125cb1551eb036da361229c79c6.record.md | 1 +
...6a9dbfa89fdd249cead35fa563bd9119.record.md | 1 +
...aa45acffe5c1fd6c10a285564b8465e6.record.md | 1 +
...85cd5e9fa87be7bbcb0fe5f75c369912.record.md | 1 +
...4a753cf9a1522a6298f9286d8835adfd.record.md | 1 +
...494337db0a6927d4b2f55c077e60c173.record.md | 1 +
...734364de32bf354d9092762d7a6e4786.record.md | 1 +
...722498df625ff9e72b40ac86e0f75fe1.record.md | 1 +
...d293f56e299993ebe74b56b4ea329756.record.md | 1 +
...51b159fedb9b0e5fce759cb470f06252.record.md | 1 +
...cd3d1bfd81cd70b816831c3d166119de.record.md | 1 +
...ea9adacc348db610be6494d50d6bd842.record.md | 1 +
...2c64370049420fc3dd6939b28780721b.record.md | 1 +
...54e02ec2055fd40acb890720fbcdd8c3.record.md | 1 +
...7348002139c4d9b8ead0b7bfb6c1c548.record.md | 1 +
...55c0164dc545dce172e67703b2be6fda.record.md | 1 +
...0fc3a9008650b6c058d34bd4d87a2afe.record.md | 1 +
...be075d7400770fbb25654628610cda51.record.md | 1 +
...84a4cee33bf9c809091f21ed28f76192.record.md | 1 +
...d4f72e244027e5a389bee78924c450cf.record.md | 1 +
...12fc13abb7aaf5fc9d7e6f75a3db0fa1.record.md | 1 +
...c8589e5a59de4871bbab616ad8a91c5c.record.md | 1 +
...3d033ffc179a15ef4b69248c4df83669.record.md | 1 +
...952b5d8479ef56a45808b8fda27bba37.record.md | 1 +
...04d0fd60e25fab0edbf33408b720efa9.record.md | 1 +
...35a1a50108e2c0268cbf41ee612eaa76.record.md | 1 +
...59d5509bfd975096af94b63ef16e825a.record.md | 1 +
...8458290b624c6b506f6fd403ad8157c0.record.md | 1 +
...7a5b3debdb029af744345900ca5acdc1.record.md | 1 +
...78ba349cd9e9f625efb537215cbf1227.record.md | 1 +
...3b0b76a4bfd1cd9b2c9052dca555bc08.record.md | 1 +
...ed6cc3c4e988daa2a9d1d5165c4a8e2e.record.md | 1 +
...e6bc83a7ebc8734fba8c6c71148e0d6f.record.md | 1 +
...0a097a15f8fb74a52623abe427f21421.record.md | 1 +
...5f16432fe3243bb89a199885f6a09730.record.md | 1 +
...69be8ad8f8459b70b86140a155a88967.record.md | 1 +
...e9c3055ed0b3a5f9f139a838dc8c1c2d.record.md | 1 +
...3fe39d02317237fbe8fe7ab43f8a459d.record.md | 1 +
...cd7d2e44c4b79c2badd5c8be19153682.record.md | 1 +
...372309f02b547300fa7ca6426587d82c.record.md | 1 +
...10987b3597aeef62b9a2fb964975dd5b.record.md | 1 +
...4f04840076dfbb4f79fa55ab14605d71.record.md | 1 +
...bba0026f0898a8f6e3afae6123075fce.record.md | 1 +
...3f3acdf9d7d26bff9e0017e1cdd58c60.record.md | 1 +
...3d2e2d2709bee0f3d2e35384751e8358.record.md | 1 +
...ca83af0e52d784bb3860e470876e1e75.record.md | 1 +
...508df0c95fc85014b6cc6546b765bf32.record.md | 1 +
...161e501d15805774b5446fb4c393d383.record.md | 1 +
...ac6c21d3d7912bc77caa5deda23aefea.record.md | 1 +
...45206350cff5c6bf2f3b86690f27c5d7.record.md | 1 +
...4b56cfb2c711ec548b6aeea715b05c9f.record.md | 1 +
...d9edbfec91f1f75fd8ba007bdd90d979.record.md | 1 +
...fb142e1e4e1d4b8e8d787d6abf9ea62f.record.md | 1 +
...101d7e3ada1bb102dcd1631e83d7bf55.record.md | 1 +
...b8119ba24d916c6cd8b8f521347ffd23.record.md | 1 +
...54ba5f04f0c8c06a38fc88ddc42c85e6.record.md | 1 +
...6e929cbbe76b46ab8d3a953de2b0883f.record.md | 1 +
...825198aad8e34f32ecc8d6381b2ce5a2.record.md | 1 +
...32cd9e2adbed6433ed8cb4e2e04eb3aa.record.md | 1 +
...3db356d6b17cf68b4829a19643b9b71a.record.md | 1 +
...f4c8a0d304ec3a5251f1920d023b06c0.record.md | 1 +
...6744d11d10a1fee600ca1eac1d0354fe.record.md | 1 +
...bfe7cd5a364f7fd8d8da5287aa2a4e38.record.md | 1 +
...0660337191337c4097bc1831ccd34960.record.md | 1 +
...8a27e21ebb7545745fa66facf618d208.record.md | 1 +
...8fd5e5b18eee189d01baaaa18ffd432c.record.md | 1 +
...24d3c5d61ebd572a963c9495b3745731.record.md | 1 +
...12cf732bc2ad6e0bfc360a7a759102ed.record.md | 1 +
...cb7b441b62d2ddf6230bbc962e48a76c.record.md | 1 +
...2ac29c430dc0d2d9fc0930d314b14c9f.record.md | 1 +
...dbaa08024e096bbcc0201a7434bbf1f3.record.md | 1 +
...659aaa9b1439015c6354eb96e19d0c46.record.md | 1 +
...0713a6a06b532505caa5548de80b814c.record.md | 1 +
...080dd7191777c1be29037b6edc8c3069.record.md | 1 +
...6f562cfdaabd4d2b23cd3a67336a02ff.record.md | 1 +
...6822d3be129f8d506cb93ac4bc3960a3.record.md | 1 +
...0d9dcbbfa158d1876e0ed8744f2c0162.record.md | 1 +
...3d10e50e1fa7091856c41a9fe03cde52.record.md | 1 +
...061e0b75ff2d71b8610f6b5cfd49ae43.record.md | 1 +
...cf8e042b608a2c3553c5ae303b34e92b.record.md | 1 +
...a9971399fe8906bfc771c3543c63b820.record.md | 1 +
...d2b404d07061df6833f1ef1289d053f3.record.md | 1 +
...f47b1ae95aae4517cd969e5cd9246fa6.record.md | 1 +
...6b1851cec993f8a91dd526fcbc750d25.record.md | 1 +
...3256129ab978d51a792d14ad7c785d73.record.md | 1 +
...3a1c9ca11fa10969155f42bcdda2e75b.record.md | 1 +
...2fc5f3b7bb18a89e813bc2d9a11d1e12.record.md | 1 +
...406c49c01ccd942a2c3f16bca8ae8ade.record.md | 1 +
...75b5cabc1802d1b6511b30323adad6ad.record.md | 1 +
...3c1893c66a80b3dc38988a8ef6ef5dc0.record.md | 1 +
...7b7415e4213102534a21b99bb97e87fe.record.md | 1 +
...f4e32aab35d3d3bfe1d0654c41f7bf34.record.md | 1 +
...ce45c035738a63aaa40ea6ca6afcfa3d.record.md | 1 +
...445bd109c6f2bfcffd686c6e436d8c74.record.md | 1 +
...8c6faddaa53896ff35345ca396b74fc6.record.md | 1 +
...1e54c41d2868644d05d96de656d0fe06.record.md | 1 +
...b68f83afb90f34c467a97b28ecf12fc0.record.md | 1 +
...0d74e359a217e4d91d21eae705b7ab81.record.md | 1 +
...50012974b924d01bcc5b55b6dc00d1ad.record.md | 1 +
...557f400ee0e274af7e1ce61963db465b.record.md | 1 +
...a415ce87df2c2daba46045b0b84391ab.record.md | 1 +
...0452994ad503349944c2fb345c8b42a1.record.md | 1 +
...5eafe28d82fda3e3c9386541fb3aaec0.record.md | 1 +
...623eaa682ce4b9524e6eed48ee04a235.record.md | 1 +
...9a9ba43bc3591b8d0e1bd117ed930ea5.record.md | 1 +
...f09cbe3e2cf670a084930b870cd6fed6.record.md | 1 +
...f04e9dfb00089261c37800f7d8edf694.record.md | 1 +
...211520ff473b1e56d7fa4d4551f1c5b3.record.md | 1 +
...1d5f90e53c3187b03f4165df702e9b5d.record.md | 1 +
...901cef851b57bccb7874d8d6ff114f54.record.md | 1 +
...19edd41a2f38f86c05ae354673816ce5.record.md | 1 +
...10ada2f3ebe7fab5da0edc041142a1c1.record.md | 1 +
...9e88a0195f76078511821ab44cc09456.record.md | 1 +
...94177a6bbdef0d1c83cfdba62a110cd4.record.md | 1 +
...a3b8c870210d155da52c563fca1d97d9.record.md | 1 +
...b1e7c8c43197488836bb70a79c6d366b.record.md | 1 +
...0d8615e08db6094e54733085c7427d0c.record.md | 1 +
...9e2c8d4ea54160fe52e351afd389f9de.record.md | 1 +
...8d9da4ee00a7b78131ef1396fca2dfc8.record.md | 1 +
...548e9f4d84b79b828a42a53505e3ff5c.record.md | 1 +
...648e1632d2645016ce189113e6f4a1b3.record.md | 1 +
...753e5c619599c803531d4bc36c6914ce.record.md | 1 +
...3a90a7780810546df0674fb7b35b7d50.record.md | 1 +
...c4292d00fcdac8e3629b2e8e1f3f4845.record.md | 1 +
...e4cc4398091af68728179d8b5b63e2e0.record.md | 1 +
...30bc14b98d5c069c3e7fa8b7f89edee4.record.md | 1 +
...25da55131c0caacbaab18ac81507cd0d.record.md | 1 +
...565e99f53e2979f061dd3cc68c012315.record.md | 1 +
docs/database-remediation-plan.md | 40 +-
docs/database-remediation-playbook.md | 39 +-
docs/design-system/COMPONENTS.md | 2 +-
docs/design-system/GATES.md | 82 +-
docs/design-system/adoption-contract.json | 2 +-
docs/design-system/adoption-manifest.json | 8 +-
docs/filter-contract.md | 29 +-
docs/ledger-id-scheme-proposal.md | 149 ++++
docs/maturity-backlog-workorders.md | 36 +-
docs/medication-interaction-lexicon-review.md | 4 +-
docs/medication-lexicon-review-worklist.md | 188 +++++
...unchecked-indexed-access-migration-plan.md | 213 +++++
.../1d35d652-d833-4934-890c-84b6837581cd.json | 10 +
.../314e5e31-7d15-46f2-adb0-c4d113bc589d.json | 11 +
.../46750cbf-f4f4-4a00-ab93-bdac644afbde.json | 10 +
.../55cb57e8-7e6e-42f8-bd79-81b81a01ef3a.json | 11 +
.../55f0d5de-8642-487a-b063-44c1c0bc0921.json | 10 +
.../739887b7-24d6-4ea8-9aad-e7700a537913.json | 10 +
.../7ad31d10-aeef-4635-863d-d6ce9340d916.json | 11 +
.../7e454b66-74ae-4e67-8669-1f1fdc2c018c.json | 10 +
.../81fdf812-4dd6-4fd6-b2e8-f3b730affd8a.json | 10 +
.../a81b68eb-6b26-46db-81fa-90279a599886.json | 10 +
.../00428ff0-1b45-4066-9838-94216fa8b6eb.json | 0
.../01580a63-502e-4ee9-bdf2-a5bf492f7dee.json | 0
.../04a0b8d6-8af9-4779-8af8-8e3b6e9a3b2b.json | 0
.../0948fcd2-2e51-47bc-8990-7ec002934e43.json | 10 +
.../0a052268-97e1-4d4a-9ad7-033003aa486c.json | 13 +
.../0b6a19d6-c586-4ea3-8fc6-fa8ee941d922.json | 10 +
.../0bbea6d5-4d5e-4e9a-bcba-bc129beeba3f.json | 10 +
.../0e5573e3-425d-4253-9b28-0c1c81a4f3fe.json | 10 +
.../11e56221-8d46-4c9a-a89c-78621f18e754.json | 0
.../1376cc64-a753-41a0-9c54-30a5cca7f896.json | 10 +
.../17e1baf4-7d8f-4494-acd6-a845ade305ca.json | 0
.../1860498b-2e89-41cf-85f1-e62dc3cca057.json | 10 +
.../19762e55-fa25-41de-a5a2-7f4932a545fe.json | 11 +
.../19fb70c0-1fd4-43a8-a4f4-efa9c31d16b1.json | 11 +
.../1b483041-4f2e-4ccf-872e-f7657785cfb3.json | 0
.../1da43f2b-4b52-4fb7-b39a-e5aa5bf7c7e7.json | 12 +
.../1e598935-a21b-4aa5-9bd2-c667ce16ebbd.json | 0
.../2194da1d-c445-47db-8b97-09774056ab42.json | 0
.../21b6525a-dd2d-4dcc-95d5-c3c777420adf.json | 10 +
.../24408f86-38ff-4715-affa-55d6c7bc1bb7.json | 10 +
.../256e9f44-2c1d-4068-a3e6-74baf3de271d.json | 11 +
.../25f6b53a-86e2-42e9-9b38-1c2daae28892.json | 0
.../2b7856a5-fe32-49b8-9e3c-819d961784c6.json | 10 +
.../3156e1c9-82aa-46c3-84e6-0e119015acc6.json | 10 +
.../33d68dca-16b7-4325-8c50-f046c2f71316.json | 0
.../38c6095f-41f5-4925-b1ea-f5af5187885d.json | 10 +
.../397a3588-b8cf-404b-a3d4-6060b84f7d60.json | 10 +
.../39b08439-bd16-4b6d-b218-f04ad0a9a8cd.json | 0
.../3d0adf39-ec7a-4fa3-9309-057a193410de.json | 10 +
.../3d861de3-4402-4e40-8dec-8a84e10093c2.json | 10 +
.../3dda04ff-1ae9-4153-80ed-ad081931e396.json | 10 +
.../3f8797e0-dffa-4d26-8019-15147b9af397.json | 10 +
.../413a0aec-0239-45b2-8880-d3ace65cfdaf.json | 0
.../42dd600a-b032-45a5-8c53-cb185f08cf13.json | 11 +
.../4b6930e6-fae2-4b4f-9f90-49bf0bcd548c.json | 0
.../4b85e2d3-963d-46fe-a9c3-b234b4de14b0.json | 13 +
.../4bc449a1-ec81-426d-aadd-8a78abec21cf.json | 11 +
.../568597bd-fc9f-47d6-b582-443812115e67.json | 13 +
.../5cf082dd-60c3-42ef-95dc-82b9c255e9be.json | 11 +
.../5cf244c3-1b68-4214-8097-767b11a49e13.json | 10 +
.../5db479fa-07fc-4e9e-a377-93b4e27797ee.json | 10 +
.../606b1573-6217-457a-9183-7f8e550d3094.json | 10 +
.../60fea622-a448-4e8f-a5d3-0122ab08b2d0.json | 11 +
.../63419f06-c12a-4a84-a684-6e177f527365.json | 0
.../69b9cd4a-9c2a-4e37-a146-48c7e540b87e.json | 0
.../6b09c1df-5f7c-4103-af3c-aead33eafb00.json | 10 +
.../6e354901-7694-40e0-b03d-8c398cec7b05.json | 13 +
.../71d61764-9d93-43bd-a3d3-230f5ad78418.json | 10 +
.../7268da45-5b77-4583-a3cb-27e5ec7067b1.json | 0
.../74edc91b-042b-4e73-911c-286d0b38da45.json | 0
.../7f5e6922-8d0b-424a-b359-12bed3a4e315.json | 10 +
.../81845ded-27a8-43d8-9a56-d85a5515935b.json | 11 +
.../83ec71cf-db94-4110-ada8-ec7e730e5154.json | 10 +
.../8c133c4e-23e7-427f-b1b8-6d6a64dfd381.json | 11 +
.../9792c896-78d8-46ab-b194-6a52b7fd7cab.json | 10 +
.../97e7beeb-97e5-43a6-b238-065b42070969.json | 10 +
.../9b67dd0e-f11e-423e-be63-7e4d91f4dd82.json | 10 +
.../a780ce8a-a373-4c95-974f-0692af775ff6.json | 10 +
.../a860ce7a-5ecf-4f30-a3b9-5c22d1d914b9.json | 0
.../b53c5e20-2c6f-41da-a202-bcf5c7609938.json | 11 +
.../b5f28517-89c9-455d-a4b4-202608141940.json | 0
.../b7a5bee9-bddc-4a7a-9614-a49301c00cc8.json | 0
.../b7c0f9f6-c95d-413f-9bdd-6b6ad9cbcb91.json | 0
.../b935dad0-394c-435a-acc5-21df750c7e52.json | 11 +
.../bbf21714-0ef9-4c2f-942f-1b8d7e328ac8.json | 11 +
.../bcea44bc-5738-41b8-96f1-e96b1488ab29.json | 10 +
.../bd11cfe9-1627-425f-a8f7-e0e202b980a4.json | 10 +
.../c3622ee1-872f-4476-8b12-20e97057c5d5.json | 10 +
.../c3d91fce-52e5-41ed-8648-b2bf5e95b32c.json | 10 +
.../c5e84848-9a84-442e-a818-1b53df5693fa.json | 10 +
.../c63161f6-21b8-40ec-927c-684e22791066.json | 10 +
.../ce304701-1e01-4cfb-bf9c-202608141940.json | 0
.../d194f4ec-568c-4689-a411-22447c59fb53.json | 13 +
.../d226dce3-76a2-4ccc-9723-5e7ca03a6c5d.json | 10 +
.../d229e6b5-a31a-44a9-8a7b-536e7f8ccf50.json | 10 +
.../d2e60a94-b12a-4502-a8b9-3dc8406cc8c8.json | 13 +
.../d3b2fe49-3282-4756-9135-7c555dede447.json | 0
.../d52dbc3d-6759-4f6e-9089-24059830ed5a.json | 10 +
.../d656dcb5-3228-4ab8-b40c-b0377e63cb94.json | 10 +
.../d9a7e3fc-06e9-45ca-ab2a-202608141940.json | 0
.../dcb09280-0436-4651-a707-b0007e872d7b.json | 0
.../ddef5391-d476-417f-b0c8-662e44c54f8b.json | 10 +
.../ded27e2f-5c71-43b8-99dc-ffffa6294ba3.json | 0
.../e4a11465-348c-49e5-8a0a-202608141941.json | 0
.../e684a311-2a0d-4c21-ba18-13afde3b62f8.json | 13 +
.../ec6d0c23-2f19-4159-9c73-49bdc103b61e.json | 10 +
.../ef62d13b-6852-4a12-a1d3-4d7e22ec1232.json | 11 +
.../f3b63187-c295-4f6a-8ecd-602f348835c4.json | 10 +
.../f825f6b9-94ec-4af1-929c-202608141941.json | 0
.../f86a3002-5019-4ae4-93fb-d01a05a7bae6.json | 11 +
.../f9f40594-a816-45a8-954a-3fcecf6d5d05.json | 0
.../fbfe982f-cd2f-49c9-a94e-908a99efa6b8.json | 11 +
.../fc23f1ec-c597-4690-b256-2263ecf73c86.json | 0
.../fd42e1f9-4012-4296-b7c2-102c7d199738.json | 13 +
.../fd548180-f031-44d8-bd70-24c3b03c5f21.json | 10 +
.../e54f04f8-09bb-4887-b3e4-a5cd99958798.json | 10 +
docs/outstanding-issues.md | 153 ++--
.../plans/edge-ingestion-overhaul-3pr-plan.md | 260 ++++++
docs/pr-handoff-stop-cross-agent-gap.md | 95 +++
docs/pwa.md | 20 +-
docs/scripts-index.md | 3 +-
docs/search-chrome-behaviour.md | 29 +-
docs/site-map.md | 4 +-
package.json | 3 +-
scripts/archive/backfill-document-covers.mjs | 380 +++++++--
scripts/audit-merge-loss.mjs | 574 +++++++++++++
scripts/check-design-system-contract.mjs | 10 +-
scripts/check-ledger-write-discipline.mjs | 96 +++
scripts/check-outstanding-issues.mjs | 173 ++--
scripts/check-playwright-browser-revision.mjs | 202 ++++-
scripts/ci-change-scope.mjs | 13 +
scripts/design-system-contract-baseline.json | 43 +-
scripts/design-system-contract-utils.mjs | 147 ++++
scripts/generate-site-map.ts | 4 +-
scripts/guard-push.mjs | 41 +-
scripts/issue-id.mjs | 119 +++
scripts/issues-report.mjs | 6 +-
scripts/ledger-inbox.mjs | 96 ++-
scripts/outstanding-issues.mjs | 58 +-
scripts/run-playwright.mjs | 27 +
src/app/(search-app)/calculators/page.tsx | 39 +-
src/app/(search-app)/tools/page.tsx | 9 +-
src/app/api/documents/route.ts | 48 +-
src/app/api/ingestion/batches/route.ts | 3 +-
src/app/api/ingestion/jobs/route.ts | 3 +-
src/app/api/ingestion/quality/route.ts | 154 ++--
src/app/api/jobs/route.ts | 3 +-
src/app/api/search/universal/route.ts | 9 +-
src/app/globals.css | 372 +++++++--
.../accessible-table-browser-fixture/page.tsx | 27 +
src/components/ClinicalDashboard.tsx | 123 ++-
src/components/applications-launcher-page.tsx | 14 +
.../calculators/calculator-filters.ts | 94 +++
.../calculators/calculator-fixtures.ts | 10 +
.../calculators/calculator-sheet.tsx | 2 +-
src/components/calculators/home-page.tsx | 58 ++
src/components/calculators/index.ts | 1 +
src/components/calculators/search-page.tsx | 752 ++++++------------
.../clinical-dashboard/ClinicalSidebar.tsx | 2 +
.../account-setup-dialog.tsx | 24 +-
.../answer-evidence-preview.tsx | 67 ++
.../clinical-dashboard/answer-progress.ts | 10 +-
.../clinical-dashboard/answer-request.ts | 94 +++
.../clinical-dashboard/answer-status.tsx | 34 +-
.../clinical-dashboard-helpers.ts | 29 +
.../clinical-dashboard/dashboard-nav.tsx | 4 +-
.../clinical-dashboard/differentials-home.tsx | 253 +++---
.../favourites-command-library-page.tsx | 502 +++++++++---
.../favourites-library-nav.tsx | 529 ------------
.../global-search-shell.tsx | 33 +-
.../clinical-dashboard/guide-dialog.tsx | 106 ++-
.../master-search-header.tsx | 52 +-
.../medication-nav-header.tsx | 1 +
.../medication-prescribing-workspace.tsx | 41 +-
.../medication-record-page.tsx | 5 +-
.../mobile-composer-reserve.ts | 22 +-
.../clinical-dashboard/mode-action-popup.tsx | 12 +
.../clinical-dashboard/search-utils.ts | 106 ++-
.../universal-search-command-surface.tsx | 7 +-
src/components/forms/form-detail-page.tsx | 2 +-
.../in-page-nav/in-page-section-rail.tsx | 8 +-
src/components/pwa-lifecycle.tsx | 207 +++--
src/components/services/service-group-nav.tsx | 113 ---
.../services/services-navigator-page.tsx | 516 ++++++++----
.../tools-search-mode-mockup.tsx | 2 +-
.../tools/tools-search-results-page.tsx | 80 +-
src/components/ui/sheet.tsx | 33 +-
src/lib/api-list-response.ts | 31 +
src/lib/app-mode-icons.ts | 2 +
src/lib/app-modes.ts | 27 +
src/lib/client-env.ts | 7 +
src/lib/differential-search-composition.ts | 6 +
src/lib/mode-secondary-navigation.ts | 3 +-
src/lib/rag/rag-candidate-sources.ts | 68 +-
src/lib/rag/rag-row-contracts.ts | 201 +++++
src/lib/rag/rag.ts | 30 +-
src/lib/search-command-surface.ts | 17 +
src/lib/search-route-ownership.ts | 2 +
src/lib/search-shell-props.ts | 10 +-
src/lib/service-core-groups.ts | 31 +
src/lib/ui-copy.ts | 3 +
src/lib/universal-search-mode-context.ts | 3 +
src/lib/universal-search-stream.ts | 13 +-
tests/answer-activity-trace-css.test.ts | 24 +-
tests/answer-evidence-preview.dom.test.tsx | 49 ++
tests/answer-progress-ui-smoke.spec.ts | 34 +-
tests/answer-progress.test.ts | 211 ++++-
tests/answer-request.test.ts | 104 +++
tests/api-list-response.test.ts | 18 +
tests/api-validation-contract.test.ts | 175 ++++
tests/app-modes.test.ts | 20 +
.../audit-navigation-auth-regressions.test.ts | 51 +-
tests/calculators-mode.dom.test.tsx | 240 ++++++
.../check-playwright-browser-revision.test.ts | 332 +++++++-
tests/ci-cache-safety.test.ts | 6 +
tests/client-secret-surface.test.ts | 6 +-
tests/clinical-dashboard-helpers.test.ts | 31 +
tests/design-system-contract-utils.test.ts | 34 +
...fferentials-compare-selection.dom.test.tsx | 164 +++-
tests/differentials.test.ts | 17 +-
tests/document-cover-thumbnails.test.ts | 54 ++
tests/document-detail-performance.test.ts | 10 +-
tests/document-section-nav-contract.test.ts | 10 +-
tests/favourites-auth-gate.dom.test.tsx | 18 +-
tests/favourites-demo-boundary.test.ts | 13 +-
tests/guard-push.test.ts | 43 +
tests/guide-centre.dom.test.tsx | 56 ++
tests/header-scroll-hide-contract.test.ts | 12 +-
tests/helpers/phone-scroll.ts | 11 +-
tests/helpers/source-contract.ts | 129 +++
tests/helpers/style-contracts.ts | 31 +-
tests/in-page-nav-playwright-contract.test.ts | 18 +-
tests/in-page-nav-route-sections.dom.test.tsx | 18 +
tests/issues-report.test.ts | 7 +-
tests/ledger-inbox-cancellation.test.ts | 113 +++
tests/ledger-write-discipline.test.ts | 69 ++
tests/live-drift-workflow.test.ts | 311 ++++++++
...ication-prescribing-workspace.dom.test.tsx | 8 +
tests/merge-loss-audit.test.ts | 292 +++++++
tests/mobile-chrome-paint-contract.test.ts | 14 +-
tests/mobile-composer-reserve.test.ts | 46 +-
tests/mobile-sheet-safe-area-contract.test.ts | 31 +
tests/mode-menu-prefetch.dom.test.tsx | 109 +++
tests/mode-secondary-navigation.test.ts | 11 +-
tests/outstanding-issues-writer.test.ts | 41 +-
tests/phone-dock-addon-contract.test.ts | 6 +-
tests/pwa-lifecycle.dom.test.tsx | 40 +-
tests/rag-retrieval-row-contract.test.ts | 295 +++++++
tests/registry-service-facets.test.ts | 68 ++
tests/repo-hygiene.test.ts | 12 +-
tests/search-command-surface.test.ts | 7 +
tests/search-results-band-adoption.test.ts | 4 +-
tests/search-route-ownership.test.ts | 37 +-
tests/search-shell-props.test.ts | 17 +-
.../services-bookmark-readiness.dom.test.tsx | 145 ++++
tests/services-catalog.test.ts | 28 +-
...s-navigator-scope-empty-state.dom.test.tsx | 17 +
tests/shared-home-empty-state.dom.test.tsx | 5 +
tests/sheet.dom.test.tsx | 57 ++
tests/source-contract-helper.test.ts | 63 ++
...herapy-compass-responsive-contract.test.ts | 9 +-
tests/tools-search-directions-mockups.test.ts | 12 +-
tests/ui-forms-section-nav.spec.ts | 24 +
tests/ui-overlay-css-contract.test.ts | 2 +-
tests/ui-phone-scroll-page-owned.spec.ts | 394 +--------
tests/ui-pwa.spec.ts | 181 +++++
tests/ui-smoke.spec.ts | 109 ++-
tests/ui-stress.spec.ts | 26 +
tests/ui-style-contract.spec.ts | 153 ++++
tests/ui-tools-search-mode-mockup.spec.ts | 4 +-
tests/ui-tools-show-all.spec.ts | 39 +
tests/ui-tools.spec.ts | 296 +++++--
tests/ui-universal-search.spec.ts | 15 +
tests/universal-search-stream.test.ts | 20 +
tests/universal-search.test.ts | 18 +
vitest.config.mts | 19 +-
447 files changed, 11725 insertions(+), 3050 deletions(-)
create mode 100644 docs/branch-review-records/00d268a6cf6a1beeb904826b9f82a104ab62d03663c70e87ffdf0209fa2e5790.record.md
create mode 100644 docs/branch-review-records/01671f1a4ca2796caf84922f73bc373f30c8fad36ffc94a1bafd0d5ca55693a7.record.md
create mode 100644 docs/branch-review-records/023564085ea84fa8f81b78f3ec3e137053c64dbd30e5af948b0b041bd6ba537b.record.md
create mode 100644 docs/branch-review-records/05b6c633adabd9647962f315da24d8e079183c4c8cd7d6d8303dba20a80489f4.record.md
create mode 100644 docs/branch-review-records/06df711430759e1dddd2be8983c0188aae2c97681ffc7179731785beb78b5a6a.record.md
create mode 100644 docs/branch-review-records/09f7a6223d2cc9cf801d28f42c84347fb6e8fe8167098620126ddf8a61a1994e.record.md
create mode 100644 docs/branch-review-records/0ab0fabc55b3958783c42bcd3a18b865415668919f9bc7f081bedf9fe16aecdf.record.md
create mode 100644 docs/branch-review-records/0bd6e78104f1efb528b8a02e6ce07cb58545f45e9ac5efe70e8e97e97233dfa6.record.md
create mode 100644 docs/branch-review-records/0cf1eff09758f402a2e5b6d928c83a1455ccff9c97fc5f4a99286d566142b192.record.md
create mode 100644 docs/branch-review-records/115a1304ff998fd0eeaee128b93a1b624eceaa07712147fdfb1fd71dcf2603d5.record.md
create mode 100644 docs/branch-review-records/11809456723dae8154679a80157654f47f67b4c39e333654499b933d49b6b0f4.record.md
create mode 100644 docs/branch-review-records/123580c2767d327b59ab4f6cc62bb75263a92e5d288897225e5e48dfe6822ca8.record.md
create mode 100644 docs/branch-review-records/140eabfb61f0822b5fb955d0c1d8d7fd924563215dd96f29802abdb3f093fc41.record.md
create mode 100644 docs/branch-review-records/149dbe376e6d9fa6eac0edcdb578b65c526366619d6e858107ca0fe108f95382.record.md
create mode 100644 docs/branch-review-records/150c95562bf34c0fc9a79c97c63bbacb3bac3f9a436acc5b0336b62533ab1c54.record.md
create mode 100644 docs/branch-review-records/1750578822f17106f9029aa52fbe2ba972c2610971d057b366f68f12bc87baba.record.md
create mode 100644 docs/branch-review-records/1798e0af4644bdccaa00cfc3bd7fedeb56a5a019e93f3966580d3d41434e2a47.record.md
create mode 100644 docs/branch-review-records/180f5d9460a80283fbf5730d32a11b9a4d99c4075a36d42378e4fe7717a9b02f.record.md
create mode 100644 docs/branch-review-records/18503906b6f41b6151d7298f2a14ba993d7b2f39f39414b70103aab3a0a8fcc0.record.md
create mode 100644 docs/branch-review-records/192997fbab4a8e3383dccff432e693a8c22f231e8ebb30f3023eb4a5956ceef8.record.md
create mode 100644 docs/branch-review-records/19d9b5ccfa4a8c3a52744d24cfc3bb7906a309c9f0d6beb92203bdd5717f47b3.record.md
create mode 100644 docs/branch-review-records/1bcd7481c03879170cc5f4dc265e6b1e647dac6fb84d348f6b12fea7f87e7968.record.md
create mode 100644 docs/branch-review-records/1cd9399241d3cbac65652b1b8008514d5c4f4b2c2e82254fec86eb5c50ee6784.record.md
create mode 100644 docs/branch-review-records/1eb170403cacbc03de02adf5632f19f46b5c09228a76c7dcb950557c88123401.record.md
create mode 100644 docs/branch-review-records/1f2f64dc3b528b7149b664c65dc98e4b7e10477e73f22ca8c1ccfe02d4b84f50.record.md
create mode 100644 docs/branch-review-records/1f3d777e83828ea67eb00c77229eafceb41a6841e644b036b1b0f9f54b118f37.record.md
create mode 100644 docs/branch-review-records/2151c86f85ae9cbf8e2e8530ac02019ce737d1565612b12828818d2377162c38.record.md
create mode 100644 docs/branch-review-records/216a72e41232d90b9641c9a9cf0446c884067c3339f7a2f50cd5c5e642b9988e.record.md
create mode 100644 docs/branch-review-records/21c77c3c5582a1424f204ead318b9b780ef55dcb9d41bac400841a83eb4564f3.record.md
create mode 100644 docs/branch-review-records/23787765990717e03f13cc7032add47d5a8e7d5b869c94ad78c36a062211e4e5.record.md
create mode 100644 docs/branch-review-records/24336297cd7a192b04d348313e763ff4a51012c6de6ec22028f0f2b600adeaa7.record.md
create mode 100644 docs/branch-review-records/248b36b92b06adf7c5c774b595dbdd7338816418b90abb2584b88d3d49962c5d.record.md
create mode 100644 docs/branch-review-records/26cca9a8fb9d8d74d7f1ee7930cfbe94b1ad5125cb1551eb036da361229c79c6.record.md
create mode 100644 docs/branch-review-records/28051a48f8acb8c67da3f5d43e867ed46a9dbfa89fdd249cead35fa563bd9119.record.md
create mode 100644 docs/branch-review-records/2ac50f7ddcdaa1190c9965f50d2bd503aa45acffe5c1fd6c10a285564b8465e6.record.md
create mode 100644 docs/branch-review-records/2cdb103223cd78c8d29b3a26ffae52f385cd5e9fa87be7bbcb0fe5f75c369912.record.md
create mode 100644 docs/branch-review-records/2f102c68fe61b45d4dbfd9b43a1ca1d14a753cf9a1522a6298f9286d8835adfd.record.md
create mode 100644 docs/branch-review-records/2fed40a238cbd6e5803e25f6c4778648494337db0a6927d4b2f55c077e60c173.record.md
create mode 100644 docs/branch-review-records/332ea83963cbf2857a64df609c9722ca734364de32bf354d9092762d7a6e4786.record.md
create mode 100644 docs/branch-review-records/34ba441a8c53d4b7eaa2bb5afd846da9722498df625ff9e72b40ac86e0f75fe1.record.md
create mode 100644 docs/branch-review-records/3553393e685f32b5925dc037af832d38d293f56e299993ebe74b56b4ea329756.record.md
create mode 100644 docs/branch-review-records/35ae4a75db629a7a9ee8b0daf3b933bb51b159fedb9b0e5fce759cb470f06252.record.md
create mode 100644 docs/branch-review-records/365fa9a7353142f52f78e4498f1a4046cd3d1bfd81cd70b816831c3d166119de.record.md
create mode 100644 docs/branch-review-records/39058fcc89165e68d1e7359bb28e8b83ea9adacc348db610be6494d50d6bd842.record.md
create mode 100644 docs/branch-review-records/39296f14956e2712c76344bea1eb1d312c64370049420fc3dd6939b28780721b.record.md
create mode 100644 docs/branch-review-records/3c872a41535a5852133f97afa60a07d554e02ec2055fd40acb890720fbcdd8c3.record.md
create mode 100644 docs/branch-review-records/3d1e296045909c10383c715b1abaa9ee7348002139c4d9b8ead0b7bfb6c1c548.record.md
create mode 100644 docs/branch-review-records/3d45d96c0c8e97d835c1a3f6c12b320255c0164dc545dce172e67703b2be6fda.record.md
create mode 100644 docs/branch-review-records/3dc49fdd6e24d09e3e6830eb12934c340fc3a9008650b6c058d34bd4d87a2afe.record.md
create mode 100644 docs/branch-review-records/3e31711658b047a477e82af444f00d88be075d7400770fbb25654628610cda51.record.md
create mode 100644 docs/branch-review-records/3fbcef2b507598e6baa40944420519cc84a4cee33bf9c809091f21ed28f76192.record.md
create mode 100644 docs/branch-review-records/40b0c05db4e9b44c17bc78bb0246cd15d4f72e244027e5a389bee78924c450cf.record.md
create mode 100644 docs/branch-review-records/417c3d2bbb8346fc650dc4bed9db149912fc13abb7aaf5fc9d7e6f75a3db0fa1.record.md
create mode 100644 docs/branch-review-records/4405a36b7fedb006b4f8a9947a9e66aec8589e5a59de4871bbab616ad8a91c5c.record.md
create mode 100644 docs/branch-review-records/44c2668e0a184a3856e8f614a4358bb33d033ffc179a15ef4b69248c4df83669.record.md
create mode 100644 docs/branch-review-records/4575cff3b5b7591de309f5e375293bda952b5d8479ef56a45808b8fda27bba37.record.md
create mode 100644 docs/branch-review-records/4859907cc6069250fcef7f0156490f1e04d0fd60e25fab0edbf33408b720efa9.record.md
create mode 100644 docs/branch-review-records/497a7b26ad6568692b3dbc9e939c1e7d35a1a50108e2c0268cbf41ee612eaa76.record.md
create mode 100644 docs/branch-review-records/4a51a80a457f85c939048278f01e3a3059d5509bfd975096af94b63ef16e825a.record.md
create mode 100644 docs/branch-review-records/4a8002d2aa8743b62a8189f3bd3621768458290b624c6b506f6fd403ad8157c0.record.md
create mode 100644 docs/branch-review-records/4dbb7f7d041801dbdbfb1360d45e46027a5b3debdb029af744345900ca5acdc1.record.md
create mode 100644 docs/branch-review-records/4e9b4d92a67f8938115ff0ea2b99458078ba349cd9e9f625efb537215cbf1227.record.md
create mode 100644 docs/branch-review-records/51a91c30aac9b44f7a14db23c3b96cf23b0b76a4bfd1cd9b2c9052dca555bc08.record.md
create mode 100644 docs/branch-review-records/522436cc75e96c3d5ec24c4ed5206978ed6cc3c4e988daa2a9d1d5165c4a8e2e.record.md
create mode 100644 docs/branch-review-records/534a1703b8963c66fe43de4889cf3f33e6bc83a7ebc8734fba8c6c71148e0d6f.record.md
create mode 100644 docs/branch-review-records/55297ab0e355af3fbf69ae0321defbaa0a097a15f8fb74a52623abe427f21421.record.md
create mode 100644 docs/branch-review-records/5bffd23d66a7e2f1ef7b6b9a3b4188835f16432fe3243bb89a199885f6a09730.record.md
create mode 100644 docs/branch-review-records/5c0ac2f4e15f46fb39e8fd09c38c3cc169be8ad8f8459b70b86140a155a88967.record.md
create mode 100644 docs/branch-review-records/5dfd91a1c7b294fec5c2fca7834a9812e9c3055ed0b3a5f9f139a838dc8c1c2d.record.md
create mode 100644 docs/branch-review-records/5fb194b68baa840377fcf801664fdbe23fe39d02317237fbe8fe7ab43f8a459d.record.md
create mode 100644 docs/branch-review-records/60422ff1c15e4237b0b0d3028b47dde0cd7d2e44c4b79c2badd5c8be19153682.record.md
create mode 100644 docs/branch-review-records/60f458bc7e118a4c0f36e12b0294e651372309f02b547300fa7ca6426587d82c.record.md
create mode 100644 docs/branch-review-records/615deb9148ec106e31cf72902d4a1b2710987b3597aeef62b9a2fb964975dd5b.record.md
create mode 100644 docs/branch-review-records/61a53ca459551a7a2ca43dee60a4d50a4f04840076dfbb4f79fa55ab14605d71.record.md
create mode 100644 docs/branch-review-records/63bb22a3ea42c41966caaa63a61b73a2bba0026f0898a8f6e3afae6123075fce.record.md
create mode 100644 docs/branch-review-records/642a0ca61b346fbb0b4dd8bda07b9e763f3acdf9d7d26bff9e0017e1cdd58c60.record.md
create mode 100644 docs/branch-review-records/652d642c8900c600dd0d8e9f229c6c9f3d2e2d2709bee0f3d2e35384751e8358.record.md
create mode 100644 docs/branch-review-records/65bf63ffd245181d054f30ee9fc24f16ca83af0e52d784bb3860e470876e1e75.record.md
create mode 100644 docs/branch-review-records/667079dd07cd03821a2d3b2ec65a1d04508df0c95fc85014b6cc6546b765bf32.record.md
create mode 100644 docs/branch-review-records/6897c4836aee66827e7eec71bfa16917161e501d15805774b5446fb4c393d383.record.md
create mode 100644 docs/branch-review-records/68deea2b69f60f4b52bdea24ceb748ddac6c21d3d7912bc77caa5deda23aefea.record.md
create mode 100644 docs/branch-review-records/6c6404a8a018cff566a2b0f00c17f87c45206350cff5c6bf2f3b86690f27c5d7.record.md
create mode 100644 docs/branch-review-records/6edbc14cf38b74d61a02ebdd3bb7c5114b56cfb2c711ec548b6aeea715b05c9f.record.md
create mode 100644 docs/branch-review-records/6f2e5ab42932b76f6bc1f9e99c44558ad9edbfec91f1f75fd8ba007bdd90d979.record.md
create mode 100644 docs/branch-review-records/6fdbf4d3fb732b73a4c56c0bb3c09278fb142e1e4e1d4b8e8d787d6abf9ea62f.record.md
create mode 100644 docs/branch-review-records/7060c1fcf1c15570212c29f7afe5379d101d7e3ada1bb102dcd1631e83d7bf55.record.md
create mode 100644 docs/branch-review-records/70ed179206c9c4c492ee7a969f0a2c5bb8119ba24d916c6cd8b8f521347ffd23.record.md
create mode 100644 docs/branch-review-records/711ddbc0e2119fb166c1c4267644135f54ba5f04f0c8c06a38fc88ddc42c85e6.record.md
create mode 100644 docs/branch-review-records/719b4f9ab3ccc24a497b1f84a5262acd6e929cbbe76b46ab8d3a953de2b0883f.record.md
create mode 100644 docs/branch-review-records/71e026951e34c888a933c97c6f0f48f3825198aad8e34f32ecc8d6381b2ce5a2.record.md
create mode 100644 docs/branch-review-records/73e1ce27d354653c23fc961f40f9d63232cd9e2adbed6433ed8cb4e2e04eb3aa.record.md
create mode 100644 docs/branch-review-records/74e47bb0fd4e2b3ff3ec524606a00b573db356d6b17cf68b4829a19643b9b71a.record.md
create mode 100644 docs/branch-review-records/7620543101feadcebdc49427ad0395f1f4c8a0d304ec3a5251f1920d023b06c0.record.md
create mode 100644 docs/branch-review-records/771a9eb221c68c8d73f05d8831089a7b6744d11d10a1fee600ca1eac1d0354fe.record.md
create mode 100644 docs/branch-review-records/7a1bb8ea354bbff006a1deb9148167b6bfe7cd5a364f7fd8d8da5287aa2a4e38.record.md
create mode 100644 docs/branch-review-records/7b17944b9be99b8dfecf5a608e68fcee0660337191337c4097bc1831ccd34960.record.md
create mode 100644 docs/branch-review-records/7bd50bd9c4093cf764692231945db6e88a27e21ebb7545745fa66facf618d208.record.md
create mode 100644 docs/branch-review-records/7ce860ee652bd3f4e91c56cab26f002c8fd5e5b18eee189d01baaaa18ffd432c.record.md
create mode 100644 docs/branch-review-records/801656524b713b73ce558ee09425ea5e24d3c5d61ebd572a963c9495b3745731.record.md
create mode 100644 docs/branch-review-records/80cbe21a397bb239bbc43ceca3bf117412cf732bc2ad6e0bfc360a7a759102ed.record.md
create mode 100644 docs/branch-review-records/8145832620703718dd3e73fb75753072cb7b441b62d2ddf6230bbc962e48a76c.record.md
create mode 100644 docs/branch-review-records/8243bee1cb3db8072c44ead4c341496c2ac29c430dc0d2d9fc0930d314b14c9f.record.md
create mode 100644 docs/branch-review-records/87f8cf80747ffeca51cee65f24c1a612dbaa08024e096bbcc0201a7434bbf1f3.record.md
create mode 100644 docs/branch-review-records/887618b97bf3256125def037cd1b5e87659aaa9b1439015c6354eb96e19d0c46.record.md
create mode 100644 docs/branch-review-records/898e1bc7855d44ca3df03b0c0f9747960713a6a06b532505caa5548de80b814c.record.md
create mode 100644 docs/branch-review-records/8a26a9949fd0c9384acd0f0868d96374080dd7191777c1be29037b6edc8c3069.record.md
create mode 100644 docs/branch-review-records/8f593be414cd088768dc59074dcd77476f562cfdaabd4d2b23cd3a67336a02ff.record.md
create mode 100644 docs/branch-review-records/903f043f143538cff9e2ce0043a9d2fa6822d3be129f8d506cb93ac4bc3960a3.record.md
create mode 100644 docs/branch-review-records/91679c0f8d364c93cfbe6f9c54463ec90d9dcbbfa158d1876e0ed8744f2c0162.record.md
create mode 100644 docs/branch-review-records/99bf725572728b2e2a1e7b1ddcc5f08b3d10e50e1fa7091856c41a9fe03cde52.record.md
create mode 100644 docs/branch-review-records/9b89f9091c287b15d98bcce1bbf9c687061e0b75ff2d71b8610f6b5cfd49ae43.record.md
create mode 100644 docs/branch-review-records/9cb91634447e60affd610471e14ffdbacf8e042b608a2c3553c5ae303b34e92b.record.md
create mode 100644 docs/branch-review-records/a23d66df28dc33bad16d7d3883fb4129a9971399fe8906bfc771c3543c63b820.record.md
create mode 100644 docs/branch-review-records/a5309edd41a122ccf51a2dacea385abdd2b404d07061df6833f1ef1289d053f3.record.md
create mode 100644 docs/branch-review-records/a55dc77c0266823fc485b9f5e8b164e6f47b1ae95aae4517cd969e5cd9246fa6.record.md
create mode 100644 docs/branch-review-records/a9f750bbfb5bbb2857e2cdbb97a2dc446b1851cec993f8a91dd526fcbc750d25.record.md
create mode 100644 docs/branch-review-records/aa23b8cd5be8c299c1878de6b92a7b1a3256129ab978d51a792d14ad7c785d73.record.md
create mode 100644 docs/branch-review-records/ac537aead3881d4cf73e22512e83e1803a1c9ca11fa10969155f42bcdda2e75b.record.md
create mode 100644 docs/branch-review-records/b22a65eca447a754f2a971dae18a24a12fc5f3b7bb18a89e813bc2d9a11d1e12.record.md
create mode 100644 docs/branch-review-records/b2482dceb2ee840589af0dfbe5f66b5f406c49c01ccd942a2c3f16bca8ae8ade.record.md
create mode 100644 docs/branch-review-records/b3523668f8839bde68f1fae4de2e7e8275b5cabc1802d1b6511b30323adad6ad.record.md
create mode 100644 docs/branch-review-records/b50552bc27edf96d286fcb2c582831863c1893c66a80b3dc38988a8ef6ef5dc0.record.md
create mode 100644 docs/branch-review-records/badab2e50d140f081e049c934ff5e1c37b7415e4213102534a21b99bb97e87fe.record.md
create mode 100644 docs/branch-review-records/bb4cf300c0917336cbfb205dc3631242f4e32aab35d3d3bfe1d0654c41f7bf34.record.md
create mode 100644 docs/branch-review-records/bc83ff5f4c4f9421ec32cf4351708e95ce45c035738a63aaa40ea6ca6afcfa3d.record.md
create mode 100644 docs/branch-review-records/bde56718d14d5138e7a29a72d16402b4445bd109c6f2bfcffd686c6e436d8c74.record.md
create mode 100644 docs/branch-review-records/beb5fe80c053cc8851671deef0ce7cd98c6faddaa53896ff35345ca396b74fc6.record.md
create mode 100644 docs/branch-review-records/bef6e7b39ba0aa36284eab8596c7dc491e54c41d2868644d05d96de656d0fe06.record.md
create mode 100644 docs/branch-review-records/c0745ca069118cbdc5b5a01db696a7e7b68f83afb90f34c467a97b28ecf12fc0.record.md
create mode 100644 docs/branch-review-records/c0e02ee4e90a6401ef8316af58b1bf530d74e359a217e4d91d21eae705b7ab81.record.md
create mode 100644 docs/branch-review-records/c56fc20eb8b758bec749726901ef79ce50012974b924d01bcc5b55b6dc00d1ad.record.md
create mode 100644 docs/branch-review-records/c7a8273f16ecbd3771d5a703a01cb219557f400ee0e274af7e1ce61963db465b.record.md
create mode 100644 docs/branch-review-records/c87cf33f8557b35b1edb08b1fc38f1a5a415ce87df2c2daba46045b0b84391ab.record.md
create mode 100644 docs/branch-review-records/c9661626e5c2a0e5f848b375b83006a00452994ad503349944c2fb345c8b42a1.record.md
create mode 100644 docs/branch-review-records/c9a0488b91b894d94e2d4e04dcafc9695eafe28d82fda3e3c9386541fb3aaec0.record.md
create mode 100644 docs/branch-review-records/cc0db6b399e9168bfe40fd9cdce6209b623eaa682ce4b9524e6eed48ee04a235.record.md
create mode 100644 docs/branch-review-records/ccf620aa5c3871b3787e29f50511d79a9a9ba43bc3591b8d0e1bd117ed930ea5.record.md
create mode 100644 docs/branch-review-records/cd495affb93b35a4c9c27292318bff9bf09cbe3e2cf670a084930b870cd6fed6.record.md
create mode 100644 docs/branch-review-records/cebd03715e584420f2fb63b757718fd8f04e9dfb00089261c37800f7d8edf694.record.md
create mode 100644 docs/branch-review-records/d05426d18a2ed15eb393d7bc70c57358211520ff473b1e56d7fa4d4551f1c5b3.record.md
create mode 100644 docs/branch-review-records/d50a877214261c376d150342864090de1d5f90e53c3187b03f4165df702e9b5d.record.md
create mode 100644 docs/branch-review-records/d545333169b6e7645c813d4f760bcc8d901cef851b57bccb7874d8d6ff114f54.record.md
create mode 100644 docs/branch-review-records/d566ba015a558b6a48c81f5c8d59fd2b19edd41a2f38f86c05ae354673816ce5.record.md
create mode 100644 docs/branch-review-records/df5b100555e4f07ef667054d2a80ba9f10ada2f3ebe7fab5da0edc041142a1c1.record.md
create mode 100644 docs/branch-review-records/e28c56717b466a1206d6eea9b313f4a39e88a0195f76078511821ab44cc09456.record.md
create mode 100644 docs/branch-review-records/ec64a2232c6a292e1ca38a08fc425f5194177a6bbdef0d1c83cfdba62a110cd4.record.md
create mode 100644 docs/branch-review-records/eee79235c4e2d7ed08fd81dccf399317a3b8c870210d155da52c563fca1d97d9.record.md
create mode 100644 docs/branch-review-records/f0bc08ea7f5c5c924273de2608597dddb1e7c8c43197488836bb70a79c6d366b.record.md
create mode 100644 docs/branch-review-records/f11604766bd32807910a04f2bc52664b0d8615e08db6094e54733085c7427d0c.record.md
create mode 100644 docs/branch-review-records/f1fda63bd3854860481ab01a098aff859e2c8d4ea54160fe52e351afd389f9de.record.md
create mode 100644 docs/branch-review-records/f238bb27fa4754ee4948d68b3019e4fb8d9da4ee00a7b78131ef1396fca2dfc8.record.md
create mode 100644 docs/branch-review-records/f2f43e75cc44bf4d80d3e6bddb9f6844548e9f4d84b79b828a42a53505e3ff5c.record.md
create mode 100644 docs/branch-review-records/f4aa3dfaabe1e3f82d0b8e20729b1c40648e1632d2645016ce189113e6f4a1b3.record.md
create mode 100644 docs/branch-review-records/f502c5ed1c220bc23384ffbdff722ab7753e5c619599c803531d4bc36c6914ce.record.md
create mode 100644 docs/branch-review-records/f51d7e3693e266ab35c224b3c487b3173a90a7780810546df0674fb7b35b7d50.record.md
create mode 100644 docs/branch-review-records/f726c2e6e71b61720a0609b9fdfd96aac4292d00fcdac8e3629b2e8e1f3f4845.record.md
create mode 100644 docs/branch-review-records/f8f65adef944919407355aee8f60e939e4cc4398091af68728179d8b5b63e2e0.record.md
create mode 100644 docs/branch-review-records/fb53209f910afc80ba5fb207e1a2f36d30bc14b98d5c069c3e7fa8b7f89edee4.record.md
create mode 100644 docs/branch-review-records/fe8542d735a4d0a26e76906a700a861925da55131c0caacbaab18ac81507cd0d.record.md
create mode 100644 docs/branch-review-records/fec8d16693dafc5f5c400815e091e8d8565e99f53e2979f061dd3cc68c012315.record.md
create mode 100644 docs/ledger-id-scheme-proposal.md
create mode 100644 docs/medication-lexicon-review-worklist.md
create mode 100644 docs/no-unchecked-indexed-access-migration-plan.md
create mode 100644 docs/outstanding-issues-inbox/1d35d652-d833-4934-890c-84b6837581cd.json
create mode 100644 docs/outstanding-issues-inbox/314e5e31-7d15-46f2-adb0-c4d113bc589d.json
create mode 100644 docs/outstanding-issues-inbox/46750cbf-f4f4-4a00-ab93-bdac644afbde.json
create mode 100644 docs/outstanding-issues-inbox/55cb57e8-7e6e-42f8-bd79-81b81a01ef3a.json
create mode 100644 docs/outstanding-issues-inbox/55f0d5de-8642-487a-b063-44c1c0bc0921.json
create mode 100644 docs/outstanding-issues-inbox/739887b7-24d6-4ea8-9aad-e7700a537913.json
create mode 100644 docs/outstanding-issues-inbox/7ad31d10-aeef-4635-863d-d6ce9340d916.json
create mode 100644 docs/outstanding-issues-inbox/7e454b66-74ae-4e67-8669-1f1fdc2c018c.json
create mode 100644 docs/outstanding-issues-inbox/81fdf812-4dd6-4fd6-b2e8-f3b730affd8a.json
create mode 100644 docs/outstanding-issues-inbox/a81b68eb-6b26-46db-81fa-90279a599886.json
rename docs/outstanding-issues-inbox/{ => applied}/00428ff0-1b45-4066-9838-94216fa8b6eb.json (100%)
rename docs/outstanding-issues-inbox/{ => applied}/01580a63-502e-4ee9-bdf2-a5bf492f7dee.json (100%)
rename docs/outstanding-issues-inbox/{ => applied}/04a0b8d6-8af9-4779-8af8-8e3b6e9a3b2b.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/0948fcd2-2e51-47bc-8990-7ec002934e43.json
create mode 100644 docs/outstanding-issues-inbox/applied/0a052268-97e1-4d4a-9ad7-033003aa486c.json
create mode 100644 docs/outstanding-issues-inbox/applied/0b6a19d6-c586-4ea3-8fc6-fa8ee941d922.json
create mode 100644 docs/outstanding-issues-inbox/applied/0bbea6d5-4d5e-4e9a-bcba-bc129beeba3f.json
create mode 100644 docs/outstanding-issues-inbox/applied/0e5573e3-425d-4253-9b28-0c1c81a4f3fe.json
rename docs/outstanding-issues-inbox/{ => applied}/11e56221-8d46-4c9a-a89c-78621f18e754.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/1376cc64-a753-41a0-9c54-30a5cca7f896.json
rename docs/outstanding-issues-inbox/{ => applied}/17e1baf4-7d8f-4494-acd6-a845ade305ca.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/1860498b-2e89-41cf-85f1-e62dc3cca057.json
create mode 100644 docs/outstanding-issues-inbox/applied/19762e55-fa25-41de-a5a2-7f4932a545fe.json
create mode 100644 docs/outstanding-issues-inbox/applied/19fb70c0-1fd4-43a8-a4f4-efa9c31d16b1.json
rename docs/outstanding-issues-inbox/{ => applied}/1b483041-4f2e-4ccf-872e-f7657785cfb3.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/1da43f2b-4b52-4fb7-b39a-e5aa5bf7c7e7.json
rename docs/outstanding-issues-inbox/{ => applied}/1e598935-a21b-4aa5-9bd2-c667ce16ebbd.json (100%)
rename docs/outstanding-issues-inbox/{ => applied}/2194da1d-c445-47db-8b97-09774056ab42.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/21b6525a-dd2d-4dcc-95d5-c3c777420adf.json
create mode 100644 docs/outstanding-issues-inbox/applied/24408f86-38ff-4715-affa-55d6c7bc1bb7.json
create mode 100644 docs/outstanding-issues-inbox/applied/256e9f44-2c1d-4068-a3e6-74baf3de271d.json
rename docs/outstanding-issues-inbox/{ => applied}/25f6b53a-86e2-42e9-9b38-1c2daae28892.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/2b7856a5-fe32-49b8-9e3c-819d961784c6.json
create mode 100644 docs/outstanding-issues-inbox/applied/3156e1c9-82aa-46c3-84e6-0e119015acc6.json
rename docs/outstanding-issues-inbox/{ => applied}/33d68dca-16b7-4325-8c50-f046c2f71316.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/38c6095f-41f5-4925-b1ea-f5af5187885d.json
create mode 100644 docs/outstanding-issues-inbox/applied/397a3588-b8cf-404b-a3d4-6060b84f7d60.json
rename docs/outstanding-issues-inbox/{ => applied}/39b08439-bd16-4b6d-b218-f04ad0a9a8cd.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/3d0adf39-ec7a-4fa3-9309-057a193410de.json
create mode 100644 docs/outstanding-issues-inbox/applied/3d861de3-4402-4e40-8dec-8a84e10093c2.json
create mode 100644 docs/outstanding-issues-inbox/applied/3dda04ff-1ae9-4153-80ed-ad081931e396.json
create mode 100644 docs/outstanding-issues-inbox/applied/3f8797e0-dffa-4d26-8019-15147b9af397.json
rename docs/outstanding-issues-inbox/{ => applied}/413a0aec-0239-45b2-8880-d3ace65cfdaf.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/42dd600a-b032-45a5-8c53-cb185f08cf13.json
rename docs/outstanding-issues-inbox/{ => applied}/4b6930e6-fae2-4b4f-9f90-49bf0bcd548c.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/4b85e2d3-963d-46fe-a9c3-b234b4de14b0.json
create mode 100644 docs/outstanding-issues-inbox/applied/4bc449a1-ec81-426d-aadd-8a78abec21cf.json
create mode 100644 docs/outstanding-issues-inbox/applied/568597bd-fc9f-47d6-b582-443812115e67.json
create mode 100644 docs/outstanding-issues-inbox/applied/5cf082dd-60c3-42ef-95dc-82b9c255e9be.json
create mode 100644 docs/outstanding-issues-inbox/applied/5cf244c3-1b68-4214-8097-767b11a49e13.json
create mode 100644 docs/outstanding-issues-inbox/applied/5db479fa-07fc-4e9e-a377-93b4e27797ee.json
create mode 100644 docs/outstanding-issues-inbox/applied/606b1573-6217-457a-9183-7f8e550d3094.json
create mode 100644 docs/outstanding-issues-inbox/applied/60fea622-a448-4e8f-a5d3-0122ab08b2d0.json
rename docs/outstanding-issues-inbox/{ => applied}/63419f06-c12a-4a84-a684-6e177f527365.json (100%)
rename docs/outstanding-issues-inbox/{ => applied}/69b9cd4a-9c2a-4e37-a146-48c7e540b87e.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/6b09c1df-5f7c-4103-af3c-aead33eafb00.json
create mode 100644 docs/outstanding-issues-inbox/applied/6e354901-7694-40e0-b03d-8c398cec7b05.json
create mode 100644 docs/outstanding-issues-inbox/applied/71d61764-9d93-43bd-a3d3-230f5ad78418.json
rename docs/outstanding-issues-inbox/{ => applied}/7268da45-5b77-4583-a3cb-27e5ec7067b1.json (100%)
rename docs/outstanding-issues-inbox/{ => applied}/74edc91b-042b-4e73-911c-286d0b38da45.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/7f5e6922-8d0b-424a-b359-12bed3a4e315.json
create mode 100644 docs/outstanding-issues-inbox/applied/81845ded-27a8-43d8-9a56-d85a5515935b.json
create mode 100644 docs/outstanding-issues-inbox/applied/83ec71cf-db94-4110-ada8-ec7e730e5154.json
create mode 100644 docs/outstanding-issues-inbox/applied/8c133c4e-23e7-427f-b1b8-6d6a64dfd381.json
create mode 100644 docs/outstanding-issues-inbox/applied/9792c896-78d8-46ab-b194-6a52b7fd7cab.json
create mode 100644 docs/outstanding-issues-inbox/applied/97e7beeb-97e5-43a6-b238-065b42070969.json
create mode 100644 docs/outstanding-issues-inbox/applied/9b67dd0e-f11e-423e-be63-7e4d91f4dd82.json
create mode 100644 docs/outstanding-issues-inbox/applied/a780ce8a-a373-4c95-974f-0692af775ff6.json
rename docs/outstanding-issues-inbox/{ => applied}/a860ce7a-5ecf-4f30-a3b9-5c22d1d914b9.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/b53c5e20-2c6f-41da-a202-bcf5c7609938.json
rename docs/outstanding-issues-inbox/{ => applied}/b5f28517-89c9-455d-a4b4-202608141940.json (100%)
rename docs/outstanding-issues-inbox/{ => applied}/b7a5bee9-bddc-4a7a-9614-a49301c00cc8.json (100%)
rename docs/outstanding-issues-inbox/{ => applied}/b7c0f9f6-c95d-413f-9bdd-6b6ad9cbcb91.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/b935dad0-394c-435a-acc5-21df750c7e52.json
create mode 100644 docs/outstanding-issues-inbox/applied/bbf21714-0ef9-4c2f-942f-1b8d7e328ac8.json
create mode 100644 docs/outstanding-issues-inbox/applied/bcea44bc-5738-41b8-96f1-e96b1488ab29.json
create mode 100644 docs/outstanding-issues-inbox/applied/bd11cfe9-1627-425f-a8f7-e0e202b980a4.json
create mode 100644 docs/outstanding-issues-inbox/applied/c3622ee1-872f-4476-8b12-20e97057c5d5.json
create mode 100644 docs/outstanding-issues-inbox/applied/c3d91fce-52e5-41ed-8648-b2bf5e95b32c.json
create mode 100644 docs/outstanding-issues-inbox/applied/c5e84848-9a84-442e-a818-1b53df5693fa.json
create mode 100644 docs/outstanding-issues-inbox/applied/c63161f6-21b8-40ec-927c-684e22791066.json
rename docs/outstanding-issues-inbox/{ => applied}/ce304701-1e01-4cfb-bf9c-202608141940.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/d194f4ec-568c-4689-a411-22447c59fb53.json
create mode 100644 docs/outstanding-issues-inbox/applied/d226dce3-76a2-4ccc-9723-5e7ca03a6c5d.json
create mode 100644 docs/outstanding-issues-inbox/applied/d229e6b5-a31a-44a9-8a7b-536e7f8ccf50.json
create mode 100644 docs/outstanding-issues-inbox/applied/d2e60a94-b12a-4502-a8b9-3dc8406cc8c8.json
rename docs/outstanding-issues-inbox/{ => applied}/d3b2fe49-3282-4756-9135-7c555dede447.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/d52dbc3d-6759-4f6e-9089-24059830ed5a.json
create mode 100644 docs/outstanding-issues-inbox/applied/d656dcb5-3228-4ab8-b40c-b0377e63cb94.json
rename docs/outstanding-issues-inbox/{ => applied}/d9a7e3fc-06e9-45ca-ab2a-202608141940.json (100%)
rename docs/outstanding-issues-inbox/{ => applied}/dcb09280-0436-4651-a707-b0007e872d7b.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/ddef5391-d476-417f-b0c8-662e44c54f8b.json
rename docs/outstanding-issues-inbox/{ => applied}/ded27e2f-5c71-43b8-99dc-ffffa6294ba3.json (100%)
rename docs/outstanding-issues-inbox/{ => applied}/e4a11465-348c-49e5-8a0a-202608141941.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/e684a311-2a0d-4c21-ba18-13afde3b62f8.json
create mode 100644 docs/outstanding-issues-inbox/applied/ec6d0c23-2f19-4159-9c73-49bdc103b61e.json
create mode 100644 docs/outstanding-issues-inbox/applied/ef62d13b-6852-4a12-a1d3-4d7e22ec1232.json
create mode 100644 docs/outstanding-issues-inbox/applied/f3b63187-c295-4f6a-8ecd-602f348835c4.json
rename docs/outstanding-issues-inbox/{ => applied}/f825f6b9-94ec-4af1-929c-202608141941.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/f86a3002-5019-4ae4-93fb-d01a05a7bae6.json
rename docs/outstanding-issues-inbox/{ => applied}/f9f40594-a816-45a8-954a-3fcecf6d5d05.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/fbfe982f-cd2f-49c9-a94e-908a99efa6b8.json
rename docs/outstanding-issues-inbox/{ => applied}/fc23f1ec-c597-4690-b256-2263ecf73c86.json (100%)
create mode 100644 docs/outstanding-issues-inbox/applied/fd42e1f9-4012-4296-b7c2-102c7d199738.json
create mode 100644 docs/outstanding-issues-inbox/applied/fd548180-f031-44d8-bd70-24c3b03c5f21.json
create mode 100644 docs/outstanding-issues-inbox/e54f04f8-09bb-4887-b3e4-a5cd99958798.json
create mode 100644 docs/plans/edge-ingestion-overhaul-3pr-plan.md
create mode 100644 docs/pr-handoff-stop-cross-agent-gap.md
create mode 100644 scripts/audit-merge-loss.mjs
create mode 100644 scripts/issue-id.mjs
create mode 100644 src/app/mockups/accessible-table-browser-fixture/page.tsx
create mode 100644 src/components/calculators/calculator-filters.ts
create mode 100644 src/components/calculators/home-page.tsx
create mode 100644 src/components/clinical-dashboard/answer-evidence-preview.tsx
create mode 100644 src/components/clinical-dashboard/answer-request.ts
delete mode 100644 src/components/clinical-dashboard/favourites-library-nav.tsx
delete mode 100644 src/components/services/service-group-nav.tsx
create mode 100644 src/lib/rag/rag-row-contracts.ts
create mode 100644 tests/answer-evidence-preview.dom.test.tsx
create mode 100644 tests/answer-request.test.ts
create mode 100644 tests/api-list-response.test.ts
create mode 100644 tests/calculators-mode.dom.test.tsx
create mode 100644 tests/helpers/source-contract.ts
create mode 100644 tests/ledger-inbox-cancellation.test.ts
create mode 100644 tests/ledger-write-discipline.test.ts
create mode 100644 tests/live-drift-workflow.test.ts
create mode 100644 tests/merge-loss-audit.test.ts
create mode 100644 tests/mobile-sheet-safe-area-contract.test.ts
create mode 100644 tests/rag-retrieval-row-contract.test.ts
create mode 100644 tests/registry-service-facets.test.ts
create mode 100644 tests/services-bookmark-readiness.dom.test.tsx
create mode 100644 tests/source-contract-helper.test.ts
create mode 100644 tests/ui-tools-show-all.spec.ts
diff --git a/.claude/hooks/issues-surface.sh b/.claude/hooks/issues-surface.sh
index 933b801ce6..5206c40ec9 100755
--- a/.claude/hooks/issues-surface.sh
+++ b/.claude/hooks/issues-surface.sh
@@ -32,10 +32,11 @@ source_val="$(printf '%s' "$payload" \
rows="$(awk '
/^## Open items/ { inopen=1; next }
/^## / { if (inopen) inopen=0 }
- inopen && /^\| #[0-9]/ {
+ inopen && /^\| #[0-9A-HJKMNP-TV-Z]/ {
n=split($0, c, "|")
id=c[2]; pri=c[3]; typ=c[4]; sum=c[5]
gsub(/^[ \t]+|[ \t]+$/, "", id)
+ sub(/[ \t]+[ \t]*$/, "", id)
gsub(/^[ \t]+|[ \t]+$/, "", pri)
gsub(/^[ \t]+|[ \t]+$/, "", typ)
gsub(/^[ \t]+|[ \t]+$/, "", sum)
@@ -63,10 +64,11 @@ queue_rows="$(awk '
NR==FNR {
if ($0 ~ /^## Open items/) { inopen=1; next }
if ($0 ~ /^## /) { inopen=0 }
- if (inopen && $0 ~ /^\| #[0-9]/) {
+ if (inopen && $0 ~ /^\| #[0-9A-HJKMNP-TV-Z]/) {
split($0, oc, "|")
oid=oc[2]; odetail=oc[6]
gsub(/^[ \t]+|[ \t]+$/, "", oid)
+ sub(/[ \t]+[ \t]*$/, "", oid)
gsub(/^[ \t]+|[ \t]+$/, "", odetail)
detail[oid]=odetail
}
@@ -114,7 +116,7 @@ fi
# Keep the priority summary complementary to the queue instead of repeating
# the same recommended IDs in both sections.
-queued_ids=" $(printf '%s\n' "$queue_rows" | grep -oE '#[0-9]+' | tr '\n' ' ' || true)"
+queued_ids=" $(printf '%s\n' "$queue_rows" | grep -oE '#([0-9A-HJKMNP-TV-Z]{6,16}|[0-9]{3,})' | tr '\n' ' ' || true)"
unqueued_rows="$(printf '%s\n' "$rows" | awk -F'\t' -v queued="$queued_ids" '
index(queued, " " $2 " ") == 0
' || true)"
diff --git a/.claude/skills/handoff/SKILL.md b/.claude/skills/handoff/SKILL.md
index a78c5adddc..120f408d39 100644
--- a/.claude/skills/handoff/SKILL.md
+++ b/.claude/skills/handoff/SKILL.md
@@ -63,6 +63,14 @@ force-push, or discard work.
`head`, or another command that can mask its status. Confirm the remote tip equals local HEAD
with `git ls-remote` before reporting success. The pre-push guards run
(auto-merge sentinel, format, drift) — heed a block rather than overriding blindly.
+
+ **Restarting a branch whose PR already merged:** GitHub deletes the remote branch on merge,
+ so the local `origin/` ref is stale and `--force-with-lease` fails with `stale info`
+ before it ever reaches the remote. That is not a lease violation to override — run
+ `git remote prune origin` and push normally. There is nothing to force: the branch no longer
+ exists remotely, so the push creates it fresh. Observed 2026-08-14 restarting this branch
+ after PR #1944 merged.
+
6. **Open a PR** with `gh pr create --base main`, body ending with the Claude Code
attribution line. Write the body from `.github/pull_request_template.md` in full normal
prose — exact `## Summary` / `## Verification` / `## Risk and rollout` / (when clinical-risk
diff --git a/.claude/skills/issues/SKILL.md b/.claude/skills/issues/SKILL.md
index 9abfecc8d8..87d9e98847 100644
--- a/.claude/skills/issues/SKILL.md
+++ b/.claude/skills/issues/SKILL.md
@@ -118,6 +118,12 @@ report that the Markdown source is current and the visual artifact is stale. Sti
reconciliation handoff — a stale visual artifact must not invalidate a successful canonical
transaction.
+**This step is unavailable off the operator's Windows machine.** The script and the artifact are
+both absolute Windows paths, so a Linux, container, or cloud session cannot run it and cannot
+verify it — the artifact drifts silently from the moment such a session reconciles. Do not
+improvise a substitute renderer or write the HTML by hand; report the register as stale, name the
+reconciliation commit that made it so, and leave the refresh to the operator.
+
## Persist the memory (commit)
When the user explicitly asks for a commit, commit only the newly created request file(s), never
diff --git a/.claude/skills/newtask/SKILL.md b/.claude/skills/newtask/SKILL.md
index 45ae42b99c..4990c3d836 100644
--- a/.claude/skills/newtask/SKILL.md
+++ b/.claude/skills/newtask/SKILL.md
@@ -33,6 +33,14 @@ than opening a second branch. This is one GitHub read (`mcp__github__list_pull_r
boundary. If GitHub is unreachable, treat it as a warning and continue — an offline session
must still be able to start work. Recorded as `#292`.
+**If the PR-handoff stop hook has already armed in this session, that read is denied** — a
+session that opened its own PR and then picks up another queued item cannot call
+`list_pull_requests` or `gh pr list` at all (see `docs/pr-handoff-stop-cross-agent-gap.md`).
+Do not unlock the hook for this; fall back to `git ls-remote --heads origin`, which needs no
+provider tool and still answers the question, because a session building the same surface
+almost always has a pushed branch named after it. Report which check you used. Observed
+2026-08-14 on PR #1956.
+
## Steps
1. **Sync main.** `git fetch --quiet origin main`.
diff --git a/.design-sync/config.json b/.design-sync/config.json
index dac2e77d79..46df2b8d8a 100644
--- a/.design-sync/config.json
+++ b/.design-sync/config.json
@@ -59,7 +59,7 @@
"SearchField": "about?: string; accept?: string; accessKey?: string; alt?: string; \"aria-activedescendant\"?: string; \"aria-atomic\"?: (boolean | \"true\" | \"false\"); \"aria-autocomplete\"?: \"none\" | \"list\" | \"inline\" | \"both\"; \"aria-braillelabel\"?: string; \"aria-brailleroledescription\"?: string; \"aria-busy\"?: (boolean | \"true\" | \"false\"); \"aria-checked\"?: boolean | \"true\" | \"false\" | \"mixed\"; \"aria-colcount\"?: number; \"aria-colindex\"?: number; \"aria-colindextext\"?: string; \"aria-colspan\"?: number; \"aria-controls\"?: string; \"aria-current\"?: boolean | \"true\" | \"false\" | \"page\" | \"step\" | \"location\" | \"date\" | \"time\"; \"aria-describedby\"?: string; \"aria-description\"?: string; \"aria-details\"?: string; \"aria-disabled\"?: (boolean | \"true\" | \"false\"); \"aria-dropeffect\"?: \"none\" | \"link\" | \"copy\" | \"execute\" | \"move\" | \"popup\"; \"aria-errormessage\"?: string; \"aria-expanded\"?: (boolean | \"true\" | \"false\"); \"aria-flowto\"?: string; \"aria-grabbed\"?: (boolean | \"true\" | \"false\"); \"aria-haspopup\"?: boolean | \"true\" | \"false\" | \"dialog\" | \"grid\" | \"listbox\" | \"menu\" | \"tree\"; \"aria-hidden\"?: (boolean | \"true\" | \"false\"); \"aria-invalid\"?: boolean | \"true\" | \"false\" | \"grammar\" | \"spelling\"; \"aria-keyshortcuts\"?: string; \"aria-label\"?: string; \"aria-labelledby\"?: string; \"aria-level\"?: number; \"aria-live\"?: \"off\" | \"assertive\" | \"polite\"; \"aria-modal\"?: (boolean | \"true\" | \"false\"); \"aria-multiline\"?: (boolean | \"true\" | \"false\"); \"aria-multiselectable\"?: (boolean | \"true\" | \"false\"); \"aria-orientation\"?: \"horizontal\" | \"vertical\"; \"aria-owns\"?: string; \"aria-placeholder\"?: string; \"aria-posinset\"?: number; \"aria-pressed\"?: boolean | \"true\" | \"false\" | \"mixed\"; \"aria-readonly\"?: (boolean | \"true\" | \"false\"); \"aria-relevant\"?: \"text\" | \"additions\" | \"additions removals\" | \"additions text\" | \"all\" | \"removals\" | \"removals additions\" | \"removals text\" | \"text additions\" | \"text removals\"; \"aria-required\"?: (boolean | \"true\" | \"false\"); \"aria-roledescription\"?: string; \"aria-rowcount\"?: number; \"aria-rowindex\"?: number; \"aria-rowindextext\"?: string; \"aria-rowspan\"?: number; \"aria-selected\"?: (boolean | \"true\" | \"false\"); \"aria-setsize\"?: number; \"aria-sort\"?: \"none\" | \"ascending\" | \"descending\" | \"other\"; \"aria-valuemax\"?: number; \"aria-valuemin\"?: number; \"aria-valuenow\"?: number; \"aria-valuetext\"?: string; autoCapitalize?: \"off\" | \"none\" | \"on\" | \"sentences\" | \"words\" | \"characters\" | (string & {}); autoComplete?: import(\"react\").HTMLInputAutoCompleteAttribute; autoCorrect?: string; autoFocus?: boolean; autoSave?: string; capture?: boolean | \"user\" | \"environment\"; checked?: boolean; children?: import(\"react\").ReactNode; className?: string; clearLabel?: string; color?: string; content?: string; contentEditable?: (boolean | \"true\" | \"false\") | \"inherit\" | \"plaintext-only\"; contextMenu?: string; dangerouslySetInnerHTML?: { __html: string | TrustedHTML; }; datatype?: string; defaultChecked?: boolean; defaultValue?: string | number | readonly string[]; dir?: string; disabled?: boolean; draggable?: (boolean | \"true\" | \"false\"); enterKeyHint?: \"enter\" | \"done\" | \"go\" | \"next\" | \"previous\" | \"search\" | \"send\"; error?: string; exportparts?: string; fieldClassName?: string; form?: string; formAction?: string | ((formData: FormData) => void | Promise); formEncType?: string; formMethod?: string; formNoValidate?: boolean; formTarget?: string; height?: string | number; hidden?: boolean; hideLabel?: boolean; hint?: string; id?: string; inert?: boolean; inlist?: any; inputMode?: \"none\" | \"search\" | \"text\" | \"tel\" | \"url\" | \"email\" | \"numeric\" | \"decimal\"; is?: string; itemID?: string; itemProp?: string; itemRef?: string; itemScope?: boolean; itemType?: string; label: string; lang?: string; list?: string; max?: string | number; maxLength?: number; min?: string | number; minLength?: number; multiple?: boolean; name?: string; nonce?: string; onAbort?: import(\"react\").ReactEventHandler; onAbortCapture?: import(\"react\").ReactEventHandler; onAnimationEnd?: import(\"react\").AnimationEventHandler; onAnimationEndCapture?: import(\"react\").AnimationEventHandler; onAnimationIteration?: import(\"react\").AnimationEventHandler; onAnimationIterationCapture?: import(\"react\").AnimationEventHandler; onAnimationStart?: import(\"react\").AnimationEventHandler; onAnimationStartCapture?: import(\"react\").AnimationEventHandler; onAuxClick?: import(\"react\").MouseEventHandler; onAuxClickCapture?: import(\"react\").MouseEventHandler; onBeforeInput?: import(\"react\").InputEventHandler; onBeforeInputCapture?: import(\"react\").InputEventHandler; onBeforeToggle?: import(\"react\").ToggleEventHandler; onBlur?: import(\"react\").FocusEventHandler; onBlurCapture?: import(\"react\").FocusEventHandler; onCanPlay?: import(\"react\").ReactEventHandler; onCanPlayCapture?: import(\"react\").ReactEventHandler; onCanPlayThrough?: import(\"react\").ReactEventHandler; onCanPlayThroughCapture?: import(\"react\").ReactEventHandler; onChange?: import(\"react\").ChangeEventHandler; onChangeCapture?: import(\"react\").ChangeEventHandler; onClear?: (() => void); onClick?: import(\"react\").MouseEventHandler; onClickCapture?: import(\"react\").MouseEventHandler; onCompositionEnd?: import(\"react\").CompositionEventHandler; onCompositionEndCapture?: import(\"react\").CompositionEventHandler; onCompositionStart?: import(\"react\").CompositionEventHandler; onCompositionStartCapture?: import(\"react\").CompositionEventHandler; onCompositionUpdate?: import(\"react\").CompositionEventHandler; onCompositionUpdateCapture?: import(\"react\").CompositionEventHandler; onContextMenu?: import(\"react\").MouseEventHandler; onContextMenuCapture?: import(\"react\").MouseEventHandler; onCopy?: import(\"react\").ClipboardEventHandler; onCopyCapture?: import(\"react\").ClipboardEventHandler; onCut?: import(\"react\").ClipboardEventHandler; onCutCapture?: import(\"react\").ClipboardEventHandler; onDoubleClick?: import(\"react\").MouseEventHandler; onDoubleClickCapture?: import(\"react\").MouseEventHandler; onDrag?: import(\"react\").DragEventHandler; onDragCapture?: import(\"react\").DragEventHandler; onDragEnd?: import(\"react\").DragEventHandler; onDragEndCapture?: import(\"react\").DragEventHandler; onDragEnter?: import(\"react\").DragEventHandler; onDragEnterCapture?: import(\"react\").DragEventHandler; onDragExit?: import(\"react\").DragEventHandler; onDragExitCapture?: import(\"react\").DragEventHandler; onDragLeave?: import(\"react\").DragEventHandler; onDragLeaveCapture?: import(\"react\").DragEventHandler; onDragOver?: import(\"react\").DragEventHandler; onDragOverCapture?: import(\"react\").DragEventHandler; onDragStart?: import(\"react\").DragEventHandler; onDragStartCapture?: import(\"react\").DragEventHandler; onDrop?: import(\"react\").DragEventHandler; onDropCapture?: import(\"react\").DragEventHandler; onDurationChange?: import(\"react\").ReactEventHandler; onDurationChangeCapture?: import(\"react\").ReactEventHandler; onEmptied?: import(\"react\").ReactEventHandler; onEmptiedCapture?: import(\"react\").ReactEventHandler; onEncrypted?: import(\"react\").ReactEventHandler; onEncryptedCapture?: import(\"react\").ReactEventHandler; onEnded?: import(\"react\").ReactEventHandler; onEndedCapture?: import(\"react\").ReactEventHandler; onError?: import(\"react\").ReactEventHandler; onErrorCapture?: import(\"react\").ReactEventHandler; onFocus?: import(\"react\").FocusEventHandler; onFocusCapture?: import(\"react\").FocusEventHandler; onGotPointerCapture?: import(\"react\").PointerEventHandler; onGotPointerCaptureCapture?: import(\"react\").PointerEventHandler; onInput?: import(\"react\").InputEventHandler; onInputCapture?: import(\"react\").InputEventHandler; onInvalid?: import(\"react\").ReactEventHandler; onInvalidCapture?: import(\"react\").ReactEventHandler; onKeyDown?: import(\"react\").KeyboardEventHandler; onKeyDownCapture?: import(\"react\").KeyboardEventHandler; onKeyPress?: import(\"react\").KeyboardEventHandler; onKeyPressCapture?: import(\"react\").KeyboardEventHandler; onKeyUp?: import(\"react\").KeyboardEventHandler; onKeyUpCapture?: import(\"react\").KeyboardEventHandler; onLoad?: import(\"react\").ReactEventHandler; onLoadCapture?: import(\"react\").ReactEventHandler; onLoadedData?: import(\"react\").ReactEventHandler; onLoadedDataCapture?: import(\"react\").ReactEventHandler; onLoadedMetadata?: import(\"react\").ReactEventHandler; onLoadedMetadataCapture?: import(\"react\").ReactEventHandler; onLoadStart?: import(\"react\").ReactEventHandler; onLoadStartCapture?: import(\"react\").ReactEventHandler; onLostPointerCapture?: import(\"react\").PointerEventHandler; onLostPointerCaptureCapture?: import(\"react\").PointerEventHandler; onMouseDown?: import(\"react\").MouseEventHandler; onMouseDownCapture?: import(\"react\").MouseEventHandler; onMouseEnter?: import(\"react\").MouseEventHandler; onMouseLeave?: import(\"react\").MouseEventHandler; onMouseMove?: import(\"react\").MouseEventHandler; onMouseMoveCapture?: import(\"react\").MouseEventHandler; onMouseOut?: import(\"react\").MouseEventHandler; onMouseOutCapture?: import(\"react\").MouseEventHandler; onMouseOver?: import(\"react\").MouseEventHandler; onMouseOverCapture?: import(\"react\").MouseEventHandler; onMouseUp?: import(\"react\").MouseEventHandler; onMouseUpCapture?: import(\"react\").MouseEventHandler; onPaste?: import(\"react\").ClipboardEventHandler; onPasteCapture?: import(\"react\").ClipboardEventHandler; onPause?: import(\"react\").ReactEventHandler; onPauseCapture?: import(\"react\").ReactEventHandler; onPlay?: import(\"react\").ReactEventHandler; onPlayCapture?: import(\"react\").ReactEventHandler; onPlaying?: import(\"react\").ReactEventHandler; onPlayingCapture?: import(\"react\").ReactEventHandler; onPointerCancel?: import(\"react\").PointerEventHandler; onPointerCancelCapture?: import(\"react\").PointerEventHandler; onPointerDown?: import(\"react\").PointerEventHandler; onPointerDownCapture?: import(\"react\").PointerEventHandler; onPointerEnter?: import(\"react\").PointerEventHandler; onPointerLeave?: import(\"react\").PointerEventHandler; onPointerMove?: import(\"react\").PointerEventHandler; onPointerMoveCapture?: import(\"react\").PointerEventHandler; onPointerOut?: import(\"react\").PointerEventHandler; onPointerOutCapture?: import(\"react\").PointerEventHandler; onPointerOver?: import(\"react\").PointerEventHandler; onPointerOverCapture?: import(\"react\").PointerEventHandler; onPointerUp?: import(\"react\").PointerEventHandler; onPointerUpCapture?: import(\"react\").PointerEventHandler; onProgress?: import(\"react\").ReactEventHandler; onProgressCapture?: import(\"react\").ReactEventHandler; onRateChange?: import(\"react\").ReactEventHandler; onRateChangeCapture?: import(\"react\").ReactEventHandler; onReset?: import(\"react\").ReactEventHandler; onResetCapture?: import(\"react\").ReactEventHandler; onScroll?: import(\"react\").UIEventHandler; onScrollCapture?: import(\"react\").UIEventHandler; onScrollEnd?: import(\"react\").UIEventHandler; onScrollEndCapture?: import(\"react\").UIEventHandler; onSeeked?: import(\"react\").ReactEventHandler; onSeekedCapture?: import(\"react\").ReactEventHandler; onSeeking?: import(\"react\").ReactEventHandler; onSeekingCapture?: import(\"react\").ReactEventHandler; onSelect?: import(\"react\").ReactEventHandler; onSelectCapture?: import(\"react\").ReactEventHandler; onStalled?: import(\"react\").ReactEventHandler; onStalledCapture?: import(\"react\").ReactEventHandler; onSubmit?: import(\"react\").SubmitEventHandler; onSubmitCapture?: import(\"react\").SubmitEventHandler; onSuspend?: import(\"react\").ReactEventHandler; onSuspendCapture?: import(\"react\").ReactEventHandler; onTimeUpdate?: import(\"react\").ReactEventHandler; onTimeUpdateCapture?: import(\"react\").ReactEventHandler; onToggle?: import(\"react\").ToggleEventHandler; onTouchCancel?: import(\"react\").TouchEventHandler; onTouchCancelCapture?: import(\"react\").TouchEventHandler; onTouchEnd?: import(\"react\").TouchEventHandler; onTouchEndCapture?: import(\"react\").TouchEventHandler; onTouchMove?: import(\"react\").TouchEventHandler; onTouchMoveCapture?: import(\"react\").TouchEventHandler; onTouchStart?: import(\"react\").TouchEventHandler; onTouchStartCapture?: import(\"react\").TouchEventHandler; onTransitionCancel?: import(\"react\").TransitionEventHandler; onTransitionCancelCapture?: import(\"react\").TransitionEventHandler; onTransitionEnd?: import(\"react\").TransitionEventHandler; onTransitionEndCapture?: import(\"react\").TransitionEventHandler; onTransitionRun?: import(\"react\").TransitionEventHandler; onTransitionRunCapture?: import(\"react\").TransitionEventHandler; onTransitionStart?: import(\"react\").TransitionEventHandler; onTransitionStartCapture?: import(\"react\").TransitionEventHandler; onVolumeChange?: import(\"react\").ReactEventHandler; onVolumeChangeCapture?: import(\"react\").ReactEventHandler; onWaiting?: import(\"react\").ReactEventHandler; onWaitingCapture?: import(\"react\").ReactEventHandler; onWheel?: import(\"react\").WheelEventHandler; onWheelCapture?: import(\"react\").WheelEventHandler; part?: string; pattern?: string; placeholder?: string; popover?: \"\" | \"auto\" | \"manual\" | \"hint\"; popoverTarget?: string; popoverTargetAction?: \"toggle\" | \"show\" | \"hide\"; prefix?: string; property?: string; radioGroup?: string; readOnly?: boolean; ref?: Ref; rel?: string; required?: boolean; resource?: string; results?: number; rev?: string; role?: import(\"react\").AriaRole; security?: string; size?: number; slot?: string; spellCheck?: (boolean | \"true\" | \"false\"); src?: string; step?: string | number; style?: import(\"react\").CSSProperties; suppressContentEditableWarning?: boolean; suppressHydrationWarning?: boolean; tabIndex?: number; title?: string; translate?: \"yes\" | \"no\"; typeof?: string; unselectable?: \"off\" | \"on\"; value?: string | number | readonly string[]; vocab?: string; width?: string | number;",
"SegmentedControl": "ariaControls?: string; ariaDescribedBy?: string; ariaLabelledBy?: string; className?: string; label?: string; layout?: \"fit\" | \"equal\"; onChange: (value: string) => void; options: readonly SegmentedControlOption[]; value: string;",
"Select": "about?: string; accessKey?: string; \"aria-activedescendant\"?: string; \"aria-atomic\"?: (boolean | \"true\" | \"false\"); \"aria-autocomplete\"?: \"none\" | \"list\" | \"inline\" | \"both\"; \"aria-braillelabel\"?: string; \"aria-brailleroledescription\"?: string; \"aria-busy\"?: (boolean | \"true\" | \"false\"); \"aria-checked\"?: boolean | \"true\" | \"false\" | \"mixed\"; \"aria-colcount\"?: number; \"aria-colindex\"?: number; \"aria-colindextext\"?: string; \"aria-colspan\"?: number; \"aria-controls\"?: string; \"aria-current\"?: boolean | \"true\" | \"false\" | \"page\" | \"step\" | \"location\" | \"date\" | \"time\"; \"aria-describedby\"?: string; \"aria-description\"?: string; \"aria-details\"?: string; \"aria-disabled\"?: (boolean | \"true\" | \"false\"); \"aria-dropeffect\"?: \"none\" | \"link\" | \"copy\" | \"execute\" | \"move\" | \"popup\"; \"aria-errormessage\"?: string; \"aria-expanded\"?: (boolean | \"true\" | \"false\"); \"aria-flowto\"?: string; \"aria-grabbed\"?: (boolean | \"true\" | \"false\"); \"aria-haspopup\"?: boolean | \"true\" | \"false\" | \"dialog\" | \"grid\" | \"listbox\" | \"menu\" | \"tree\"; \"aria-hidden\"?: (boolean | \"true\" | \"false\"); \"aria-invalid\"?: boolean | \"true\" | \"false\" | \"grammar\" | \"spelling\"; \"aria-keyshortcuts\"?: string; \"aria-label\"?: string; \"aria-labelledby\"?: string; \"aria-level\"?: number; \"aria-live\"?: \"off\" | \"assertive\" | \"polite\"; \"aria-modal\"?: (boolean | \"true\" | \"false\"); \"aria-multiline\"?: (boolean | \"true\" | \"false\"); \"aria-multiselectable\"?: (boolean | \"true\" | \"false\"); \"aria-orientation\"?: \"horizontal\" | \"vertical\"; \"aria-owns\"?: string; \"aria-placeholder\"?: string; \"aria-posinset\"?: number; \"aria-pressed\"?: boolean | \"true\" | \"false\" | \"mixed\"; \"aria-readonly\"?: (boolean | \"true\" | \"false\"); \"aria-relevant\"?: \"text\" | \"additions\" | \"additions removals\" | \"additions text\" | \"all\" | \"removals\" | \"removals additions\" | \"removals text\" | \"text additions\" | \"text removals\"; \"aria-required\"?: (boolean | \"true\" | \"false\"); \"aria-roledescription\"?: string; \"aria-rowcount\"?: number; \"aria-rowindex\"?: number; \"aria-rowindextext\"?: string; \"aria-rowspan\"?: number; \"aria-selected\"?: (boolean | \"true\" | \"false\"); \"aria-setsize\"?: number; \"aria-sort\"?: \"none\" | \"ascending\" | \"descending\" | \"other\"; \"aria-valuemax\"?: number; \"aria-valuemin\"?: number; \"aria-valuenow\"?: number; \"aria-valuetext\"?: string; autoCapitalize?: \"off\" | \"none\" | \"on\" | \"sentences\" | \"words\" | \"characters\" | (string & {}); autoComplete?: string; autoCorrect?: string; autoFocus?: boolean; autoSave?: string; className?: string; color?: string; content?: string; contentEditable?: (boolean | \"true\" | \"false\") | \"inherit\" | \"plaintext-only\"; contextMenu?: string; dangerouslySetInnerHTML?: { __html: string | TrustedHTML; }; datatype?: string; defaultChecked?: boolean; defaultValue?: string | number | readonly string[]; dir?: string; disabled?: boolean; draggable?: (boolean | \"true\" | \"false\"); enterKeyHint?: \"enter\" | \"done\" | \"go\" | \"next\" | \"previous\" | \"search\" | \"send\"; error?: string; exportparts?: string; fieldClassName?: string; form?: string; hidden?: boolean; hideLabel?: boolean; hint?: string; id?: string; inert?: boolean; inlist?: any; inputMode?: \"none\" | \"search\" | \"text\" | \"tel\" | \"url\" | \"email\" | \"numeric\" | \"decimal\"; is?: string; itemID?: string; itemProp?: string; itemRef?: string; itemScope?: boolean; itemType?: string; label: string; lang?: string; multiple?: boolean; name?: string; nonce?: string; onAbort?: import(\"react\").ReactEventHandler; onAbortCapture?: import(\"react\").ReactEventHandler; onAnimationEnd?: import(\"react\").AnimationEventHandler; onAnimationEndCapture?: import(\"react\").AnimationEventHandler; onAnimationIteration?: import(\"react\").AnimationEventHandler; onAnimationIterationCapture?: import(\"react\").AnimationEventHandler; onAnimationStart?: import(\"react\").AnimationEventHandler; onAnimationStartCapture?: import(\"react\").AnimationEventHandler; onAuxClick?: import(\"react\").MouseEventHandler; onAuxClickCapture?: import(\"react\").MouseEventHandler; onBeforeInput?: import(\"react\").InputEventHandler; onBeforeInputCapture?: import(\"react\").InputEventHandler; onBeforeToggle?: import(\"react\").ToggleEventHandler; onBlur?: import(\"react\").FocusEventHandler; onBlurCapture?: import(\"react\").FocusEventHandler; onCanPlay?: import(\"react\").ReactEventHandler; onCanPlayCapture?: import(\"react\").ReactEventHandler; onCanPlayThrough?: import(\"react\").ReactEventHandler; onCanPlayThroughCapture?: import(\"react\").ReactEventHandler; onChange?: import(\"react\").ChangeEventHandler; onChangeCapture?: import(\"react\").ChangeEventHandler; onClick?: import(\"react\").MouseEventHandler; onClickCapture?: import(\"react\").MouseEventHandler; onCompositionEnd?: import(\"react\").CompositionEventHandler; onCompositionEndCapture?: import(\"react\").CompositionEventHandler; onCompositionStart?: import(\"react\").CompositionEventHandler; onCompositionStartCapture?: import(\"react\").CompositionEventHandler; onCompositionUpdate?: import(\"react\").CompositionEventHandler; onCompositionUpdateCapture?: import(\"react\").CompositionEventHandler; onContextMenu?: import(\"react\").MouseEventHandler; onContextMenuCapture?: import(\"react\").MouseEventHandler; onCopy?: import(\"react\").ClipboardEventHandler; onCopyCapture?: import(\"react\").ClipboardEventHandler; onCut?: import(\"react\").ClipboardEventHandler; onCutCapture?: import(\"react\").ClipboardEventHandler; onDoubleClick?: import(\"react\").MouseEventHandler; onDoubleClickCapture?: import(\"react\").MouseEventHandler; onDrag?: import(\"react\").DragEventHandler; onDragCapture?: import(\"react\").DragEventHandler; onDragEnd?: import(\"react\").DragEventHandler; onDragEndCapture?: import(\"react\").DragEventHandler; onDragEnter?: import(\"react\").DragEventHandler; onDragEnterCapture?: import(\"react\").DragEventHandler; onDragExit?: import(\"react\").DragEventHandler; onDragExitCapture?: import(\"react\").DragEventHandler; onDragLeave?: import(\"react\").DragEventHandler; onDragLeaveCapture?: import(\"react\").DragEventHandler; onDragOver?: import(\"react\").DragEventHandler; onDragOverCapture?: import(\"react\").DragEventHandler; onDragStart?: import(\"react\").DragEventHandler; onDragStartCapture?: import(\"react\").DragEventHandler; onDrop?: import(\"react\").DragEventHandler; onDropCapture?: import(\"react\").DragEventHandler; onDurationChange?: import(\"react\").ReactEventHandler; onDurationChangeCapture?: import(\"react\").ReactEventHandler; onEmptied?: import(\"react\").ReactEventHandler; onEmptiedCapture?: import(\"react\").ReactEventHandler; onEncrypted?: import(\"react\").ReactEventHandler; onEncryptedCapture?: import(\"react\").ReactEventHandler; onEnded?: import(\"react\").ReactEventHandler; onEndedCapture?: import(\"react\").ReactEventHandler; onError?: import(\"react\").ReactEventHandler; onErrorCapture?: import(\"react\").ReactEventHandler; onFocus?: import(\"react\").FocusEventHandler; onFocusCapture?: import(\"react\").FocusEventHandler; onGotPointerCapture?: import(\"react\").PointerEventHandler; onGotPointerCaptureCapture?: import(\"react\").PointerEventHandler; onInput?: import(\"react\").InputEventHandler; onInputCapture?: import(\"react\").InputEventHandler; onInvalid?: import(\"react\").ReactEventHandler; onInvalidCapture?: import(\"react\").ReactEventHandler; onKeyDown?: import(\"react\").KeyboardEventHandler; onKeyDownCapture?: import(\"react\").KeyboardEventHandler; onKeyPress?: import(\"react\").KeyboardEventHandler; onKeyPressCapture?: import(\"react\").KeyboardEventHandler; onKeyUp?: import(\"react\").KeyboardEventHandler; onKeyUpCapture?: import(\"react\").KeyboardEventHandler