Complete permission-aware native search indexing

This commit is contained in:
2026-08-04 03:05:03 +02:00
parent 912db10a8a
commit 1bb338117f
12 changed files with 680 additions and 26 deletions
+27
View File
@@ -0,0 +1,27 @@
import assert from "node:assert/strict";
import fs from "node:fs";
const page = fs.readFileSync("src/features/search/SearchPage.tsx", "utf8");
const overlay = fs.readFileSync("src/components/GlobalSearch.tsx", "utf8");
const admin = fs.readFileSync("src/features/search/SearchAdminPanel.tsx", "utf8");
const styles = fs.readFileSync("src/styles/search.css", "utf8");
for (const source of [page, overlay]) {
assert.ok(source.includes("DocumentationHelpLink"), "Search surfaces expose configured-system help");
assert.ok(source.includes("DismissibleAlert"), "Search failures use the shared alert contract");
assert.ok(!source.includes("window.alert("), "Search must not use browser alerts");
assert.ok(!/<(div|span|li|tr)\b[^>]*\bonClick\s*=/.test(source), "Search uses semantic interactive elements");
}
assert.ok(page.includes("PageScrollViewport"), "The full search route owns bounded result scrolling");
assert.ok(overlay.includes("<Dialog"), "The title-bar search uses the shared focus-contained dialog");
assert.ok(overlay.includes('role="listbox"'), "Overlay results expose listbox keyboard semantics");
assert.ok(overlay.includes('aria-keyshortcuts="F3 Control+K Meta+K"'), "Search announces its keyboard shortcuts");
assert.ok(styles.includes("@media (max-width: 900px)"), "Search retains a narrow-viewport layout");
assert.ok(admin.includes("AdminPageLayout"), "Search operations use the shared administration layout");
assert.ok(admin.includes("DataGrid"), "Search source coverage uses the shared data grid");
assert.ok(admin.includes("DismissibleAlert"), "Search operator failures use the shared alert contract");
assert.ok(admin.includes("DocumentationHelpLink"), "Search operators can open contextual documentation");
assert.ok(!admin.includes("window.alert("), "Search administration must not use browser alerts");
console.log("Search interface pattern contract passed.");