Session: you-are-a-senior-harmonic-dolphin-subagent-a31ee249 — 2026-04-27

workspace-doctolib · Claude · branch HEAD · claude-opus-4-7 · 2026-04-27 13:45 · 1 msgs · 18 tools · 15 min read · updated 10 days ago

Review these files for any remaining issues. This is an iterative review — previous passes caught and fixed: z-index...

tools: Bash, Read
← workspace-doctolib Download .md .txt .json
Tool calls
Bash Bash: 10 calls (55.6%) 10 Read Read: 8 calls (44.4%) 8
Token usage1.4M total
Input38
Cache creation227.9K
Cache read1.2M
Output9.3K
Cache hit ratio84%· healthy

Project: workspace-doctolib · Branch: HEAD · Mode: ` · **Model:**claude-opus-4-7`

Stats: 1 user messages, 18 tool calls, tools used: Bash, Read.

Conversation

Turn 1 — User

Review these files for any remaining issues. This is an iterative review — previous passes caught and fixed: z-index regression, ARIA attributes, dead stopPropagation, merged useEffects, onToggle signature, diacritic normalization, useMemo for derived values, ref-pattern hook for stability, helpers.ts for normalize, and comprehensive test additions.

Files to review: 1. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentCategoryFilter/NhrDocumentCategoryFilter.tsx 2. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentCategoryFilter/NhrDocumentCategoryFilter.hooks.ts 3. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentCategoryFilter/NhrDocumentCategoryFilter.helpers.ts 4. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentCategoryFilter/NhrDocumentCategoryFilter.test.tsx 5. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentCategoryFilterConfig.tsx 6. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentCategoryFilterConfig.test.tsx

Report ONLY new issues not already mentioned in prior passes. If nothing new is found, say so explicitly.

Turn 1 — Assistant

I'll review the files iteratively, looking for new issues not caught in previous passes.

Tools used:

  • Bash: ls /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentCategoryFilter/

Tool results:

→ result (ok): index.ts NhrDocumentCategoryFilter.helpers.ts NhrDocumentCategoryFilter.hooks.ts NhrDocumentCategoryFilter.stories.tsx NhrDocumentCategoryFilter.test.tsx NhrDocumentCategoryFilter.tsx

Tools used:

  • Bash: ls /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/ 2>&1 | head -30

Tool results:

→ result (ok): CHANGELOG.md coverage dist i18n.json node_modules package.json README.md rsbuild.config.ts src storybook-static tests tsconfig.build.json tsconfig.build.tsbuildinfo tsconfig.json vite.config.ts vitest.config.ts

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentCategoryFilter/NhrDocumentCategoryFilter.tsx

Tool results:

→ result (ok): 1 import { ChevronDownRegularIcon } from '@doctolib/design-system-icons/ChevronDownRegularIcon' 2 import { Checkbox } from '@doctolib/design-system/Checkbox/v2' 3 import { IconButton } from '@doctolib/design-system/IconButton/v2' 4 import type { Option } from '@doctolib/design-system/Option' 5 import { useId, useMemo, useRef, useState } from 'react' 6
7 import { normalize } from './NhrDocumentCategoryFilter.helpers' 8 import { useNhrDocumentCategoryClose } from './NhrDocumentCategoryFilter.hook …(truncated, 3927 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentCategoryFilter/NhrDocumentCategoryFilter.hooks.ts

Tool results:

→ result (ok): 1 import { type RefObject, useEffect, useRef } from 'react' 2
3 export const useNhrDocumentCategoryClose = ( 4 containerRef: RefObject<HTMLDivElement | null>, 5 onClose: () => void, 6 ) => { 7 const onCloseRef = useRef(onClose) 8 useEffect(() => { 9 onCloseRef.current = onClose 10 }) 11
12 useEffect(() => { 13 const handlePointerDown = (e: PointerEvent) => { 14 if (containerRef.current && !containerRef.current.contains(e.target as Node)) { 15 onCloseRef.curren …(truncated, 476 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentCategoryFilter/NhrDocumentCategoryFilter.helpers.ts

Tool results:

→ result (ok): 1 export const normalize = (s: string) => 2 s.normalize('NFD').replace(/\p{Diacritic}/gu, '').toLowerCase() 3

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentCategoryFilter/NhrDocumentCategoryFilter.test.tsx

Tool results:

→ result (ok): 1 import { setup } from '@doctolib/test-helpers' 2 import { screen } from '@testing-library/react' 3 import { afterEach, describe, expect, it, vi } from 'vitest' 4
5 import { NhrDocumentCategoryFilter } from './NhrDocumentCategoryFilter' 6
7 const sampleOptions = [ 8 { value: 'A', label: 'Report A' }, 9 { value: 'B', label: 'Report B' }, 10 { value: 'C', label: 'Report C' }, 11 ] 12
13 describe('NhrDocumentCategoryFilter', () => { 14 afterEach(() => { 15 vi.clearAllMocks() 16
…(truncated, 13514 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentCategoryFilterConfig.tsx

Tool results:

→ result (ok): 1 import type { Option } from '@doctolib/design-system/Option' 2
3 import { NhrDocumentCategoryFilter } from '../../../components/NhrDocumentList/NhrDocumentCategoryFilter' 4 import type { FilterConfig } from '../../../types' 5
6 export const createNhrDocumentCategoryFilterConfig = ({ 7 options = [], 8 label = 'Document Category', 9 placeholder, 10 }: { 11 options?: Option[] 12 label?: string 13 placeholder?: string 14 } = {}): FilterConfig => ({ 15 key: 'typeCodes', 16 render: …(truncated, 631 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentCategoryFilterConfig.test.tsx

Tool results:

→ result (ok): 1 import { setup } from '@doctolib/test-helpers' 2 import { screen } from '@testing-library/react' 3 import { describe, expect, it, vi } from 'vitest' 4
5 import { mockPatientInfo } from '../../../test-helpers' 6 import { createNhrDocumentCategoryFilterConfig } from './createNhrDocumentCategoryFilterConfig' 7
8 const ctx = { patient: mockPatientInfo } 9
10 const sampleOptions = [ 11 { value: 'A', label: 'Report A' }, 12 { value: 'B', label: 'Report B' }, 13 { value: 'C', label: 'Report …(truncated, 4317 more chars)

Let me check the FilterConfig type and consider what may be problematic in the code.

Tools used:

  • Bash: find /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src -name "types*" -o -name "*types.ts" 2>&1 | head -20

Tool results:

→ result (ok): /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/types.ts

Tools used:

  • Bash: grep -rn "FilterConfig" /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src --include="*.ts" --include="*.tsx" 2>&1 | head -20

Tool results:

→ result (ok): /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/types.ts:21:/* Passed to every FilterConfig.render() — country variant casts to its own patient type / /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/types.ts:48:export type FilterConfig = { /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/index.ts:11: FilterConfig, /Users/USER/workspace/doctolib/treatment-plan/packages/t …(truncated, 3667 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/types.ts

Tool results:

→ result (ok): 1 import type { DesignSystemIconComponent } from '@doctolib/design-system-icons' 2 import type { NhrDocument, NhrResultStatus } from '@doctolib/tpf-national-health-records' 3 import type { ReactNode } from 'react' 4
5 export type NhrPatientInfo = { 6 fullName: string 7 gender: 'male' | 'female' | 'other' 8 birthDate: string 9 age: number 10 } 11
12 export type ColumnConfig = { 13 key: string 14 header: string 15 sortable: boolean 16 /** Only required when sortable: true. Return …(truncated, 3703 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentCategoryFilter/index.ts

Tool results:

→ result (ok): 1 export * from './NhrDocumentCategoryFilter' 2

Now I have enough context to identify any new issues. Let me analyze the code carefully for potential issues.

Tools used:

  • Bash: grep -rn "NhrDocumentCategoryFilter" /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src --include="*.ts" --include="*.tsx" 2>&1 | grep -v test | grep -v sto …(truncated, 4 more chars)

Tool results:

→ result (ok): /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/index.ts:39:export { createNhrDocumentCategoryFilterConfig } from './business/factories/filters/createNhrDocumentCategoryFilterConfig' /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentCategoryFilterConfig.tsx:3:import { NhrDocumentCategoryFilter } from '../../../components/NhrDocumentList/NhrDocumentCategoryFilter' /Users/U …(truncated, 1747 more chars)

Now I have full context. Let me carefully analyze the code for new issues not mentioned in prior passes.

Reviewing the files for new issues:

1. Component naming convention (CLAUDE.md violation):

Per .claude/rules/frontend/structure/component-patterns.md: - "Files with multiple exports: always kebab-case" - And for component folders: "named like the component (FileViewer/)" - The example given: file-viewer.tsx, file-viewer.helpers.ts

The current files use PascalCase: NhrDocumentCategoryFilter.tsx, NhrDocumentCategoryFilter.helpers.ts, NhrDocumentCategoryFilter.hooks.ts. However, the rule says "kebab-case or preserve case (super-sidebar.tsx or SuperSidebar.tsx)" for files with unique exports — so this is acceptable. Not an issue.

2. Reviewing the input UX:

Looking at NhrDocumentCategoryFilter.tsx lines 78-83:

className={`oxygen-input-field__input ${isOpen ? 'cursor-text' : 'cursor-pointer'} ${values.length > 0 ? 'pr-[5.5rem]' : 'pr-16'}`}
value={isOpen ? searchQuery : displayLabel}
placeholder={placeholder}
readOnly={!isOpen}
onChange={(e) => setSearchQuery(e.target.value)}
onClick={handleInputClick}

The input is readOnly when closed. When the user tabs (keyboard) to the input and presses Enter or Space, the dropdown won't open — only onClick opens it. This is an accessibility issue for keyboard users; a combobox should be openable via keyboard (Enter, Space, ArrowDown). However, this would be a pre-existing issue that may have been touched on in prior passes around ARIA.

3. Bug: handleClear does not stop propagation but the click can still toggle the input.

Actually, handleClear is on IconButton — when clicked, the IconButton fires its onClick. Since the IconButton is nested inside the oxygen-input-field__inputWrapper div (a sibling to the input), the click won't propagate to the input. This was already addressed (dead stopPropagation was removed in prior passes).

4. Let me check the test for clear button when dropdown is open:

Lines 142-151 of test:

it('should close the dropdown when clear button is clicked while open'

This works because handleClear calls setIsOpen(false).

5. Possible issue with handleInputClick:

const handleInputClick = () => {
  if (!isOpen) {
    setSearchQuery('')
    setIsOpen(true)
  }
}

When the input is readOnly (closed) and clicked, this opens the dropdown. But once open, clicking the input again does nothing (dropdown stays open). This matches the test on line 315-323.

However, there's no way to close the dropdown by clicking the trigger again — only by clicking outside, pressing Escape, or clicking Clear. This is a UX divergence from typical comboboxes but consistent with the tests.

6. Potential issue: Wide-scope ESLint exhaustive-deps in hook:

NhrDocumentCategoryFilter.hooks.ts:

useEffect(() => {
  onCloseRef.current = onClose
})

This useEffect has no dependency array. It fires on every render to keep the ref current. This is a known ref-pattern, but ESLint exhaustive-deps would prefer:

useEffect(() => {
  onCloseRef.current = onClose
}, [onClose])

Both work, but the latter is more conventional. Noting this but it's not strictly a bug — it's the documented "ref pattern" from React docs. Confidence: 60. Below threshold.

7. Looking at the useEffect cleanup:

useEffect(() => {
  const handlePointerDown = (e: PointerEvent) => {...}
  const handleKeyDown = (e: KeyboardEvent) => {...}

  document.addEventListener('pointerdown', handlePointerDown)
  document.addEventListener('keydown', handleKeyDown)

  return () => {
    document.removeEventListener('pointerdown', handlePointerDown)
    document.removeEventListener('keydown', handleKeyDown)
  }
}, [containerRef])

The dependency containerRef is a RefObject — a stable reference object that React guarantees doesn't change between renders. So including it in the dependency array is benign but unnecessary. This is a minor style thing, not a bug. Confidence: 50.

8. Potential issue: Listeners always active even when dropdown is closed:

The pointerdown and keydown listeners are attached on mount and only removed on unmount, regardless of whether the dropdown is open. This means: - Every pointer-down anywhere in the document calls handlePointerDown, which checks containerRef.current.contains(e.target) and calls onCloseRef.current() (which calls setIsOpen(false)). - Every Escape press anywhere calls onCloseRef.current().

For Escape, when the dropdown is closed, calling close() (which calls setIsOpen(false) and setSearchQuery('')) is a no-op state-wise but still triggers a render-trigger check. React bails out if state is unchanged via Object.is, so no re-render — this is fine but wastes cycles.

More importantly: this means Escape pressed anywhere on the page will silently invoke this component's onClose, even when dropdown is closed. While benign for this component, if multiple instances of NhrDocumentCategoryFilter exist on a page, every Escape press will fire across ALL of them. Confidence: 55. Not a blocker.

9. Looking at displayLabel:

const displayLabel = useMemo(() => {
  const firstLabel = options.find((o) => values.includes(o.value))?.label ?? ''
  if (values.length === 0 || firstLabel === '') return ''
  return values.length === 1 ? firstLabel : `${firstLabel}, +${values.length - 1}`
}, [options, values])

There's a subtle issue: if values = ['UNKNOWN_A', 'B'] (one valid match, one unknown), firstLabel would be 'Report B' (the matching option), and the output would be "Report B, +1". The "+1" represents the count of unmatched + matched, but the user sees only one match. This may be misleading — the +N suffix counts ALL selected values including invalid ones, not just matched ones.

Looking at line 56-59 of test:

it('should show empty trigger when selected values do not match any option'
renderComponent({ values: ['UNKNOWN_A', 'UNKNOWN_B'] })

Test only covers when ALL values are unknown. The mixed case isn't tested and behavior is potentially confusing. Confidence: 70. Below threshold.

10. Bug consideration: combobox accessibility — aria-autocomplete='none':

The aria-autocomplete='none' is set even though the component does autocomplete via filtering (line 46-49). This is technically incorrect. Per ARIA spec, aria-autocomplete='list' would be more accurate (the dropdown filters by user input). Confidence: 75. Below threshold.

11. Possible issue: fieldset as listbox container:

The popup uses <fieldset> (lines 103-118) but the trigger has aria-haspopup='listbox' and aria-controls={popupId}. The popup should have role='listbox' to match the announced semantics. A fieldset wrapping checkboxes doesn't fulfill the listbox contract — listboxes have option children, not checkboxes. This is a real accessibility/ARIA inconsistency. Confidence: 80.

Actually, this is a known pattern: using aria-haspopup='listbox' while presenting a checkbox group instead of a true listbox is common but technically a mismatch. Some implementations use aria-haspopup='dialog' or aria-haspopup='true' (generic) for multi-select pickers with checkboxes. Since this was presumably designed and previous passes covered ARIA attributes, I'll flag but rate as 80.

12. Looking at the test for placeholder:

Test line 38-41 confirms placeholder displays when no values. But placeholder={placeholder} on line 80 — when input has value={isOpen ? searchQuery : displayLabel}, the placeholder shows only when the value is empty. So when open with no search query, placeholder shows; when closed with values, displayLabel takes over and no placeholder. That's expected.

13. Looking carefully at the readOnly+combobox interaction:

When isOpen is true, readOnly={!isOpen} makes input editable. When closed, the input is readOnly. The combobox role w …(truncated, 3412 more chars)

Tools used:

  • Bash: grep -n "React" /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentCategoryFilter/NhrDocumentCategoryFilter.test.tsx

Tool results:

→ result (ok): 19: const renderComponent = (props: Partial<React.ComponentProps<typeof NhrDocumentCategoryFilter>> = {}) =>

Tools used:

  • Bash: cat /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/tsconfig.json

Tool results:

→ result (ok): { "extends": "../../tsconfig-base", "include": [ "../../vitest-shared.config.ts", "../../vitest-setup", "/*", "src/locales//.json", "package.json", "../../.storybook/.ts" ], "compilerOptions": { "types": ["vitest/globals", "@testing-library/jest-dom"] } }

Tools used:

  • Bash: grep -n "React\." /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentCategoryFilterConfig.test.tsx

Tool results:

→ result (ok): (Bash completed with no output)

Tools used:

  • Bash: cat /Users/USER/workspace/doctolib/treatment-plan/tsconfig-base.json 2>&1 | head -50

Tool results:

→ result (ok): { "extends": ["@doctolib/upfront-dev/tsconfig.json"], "compilerOptions": { // Configuration for TS project references "rootDir": ".", "outDir": "build", "composite": true, "noEmit": false, "declaration": true, // need to set this back to false to allow noEmit: false "allowImportingTsExtensions": false, // was needed for webpack build "jsx": "react-jsx",

// ignore errors due to design system
"exactOptionalPropertyTypes": false,

"types": ["

…(truncated, 653 more chars)

Tools used:

  • Bash: grep -rn "React.ComponentProps" /Users/USER/workspace/doctolib/treatment-plan/packages/ --include="*.test.tsx" 2>&1 | head -10

Tool results:

→ result (ok): /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDateRangeFilter/NhrDateRangeFilter.test.tsx:28: const renderComponent = (props: Partial<React.ComponentProps<typeof NhrDateRangeFilter>> = {}) => /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentStatusFilter/NhrDocumentStatusFilter.test.tsx:13: const renderComponent = (props: Partial<React.ComponentProps<typeof Nh …(truncated, 831 more chars)

This is a consistent pattern across the package. Even though React isn't imported, this works in modern TypeScript with "jsx": "react-jsx" because React global namespace is implicitly available. Not a real issue. Confidence: 30 (false positive).

22. The <>{...}</> fragment in factory test (line 19, 67, 77, 111):

return { ...setup(<>{config.render(filters, onChange, ctx)}</>), onChange }

The <>...</> fragment is unnecessary since config.render() returns a single ReactNode. Could just be setup(config.render(filters, onChange, ctx)). Minor style nit. Confidence: 40.

23. Re-checking displayLabel logic:

const firstLabel = options.find((o) => values.includes(o.value))?.label ?? ''
if (values.length === 0 || firstLabel === '') return ''
return values.length === 1 ? firstLabel : `${firstLabel}, +${values.length - 1}`

Subtle issue: when values = ['UNKNOWN', 'A'], firstLabel = 'Report A' (the matching one), and the output is "Report A, +1". But the user only validly selected 'A' — the +1 represents 'UNKNOWN' which has no label. This is misleading.

Compared to filtering valid values:

const validValues = values.filter(v => options.some(o => o.value === v))

But this would incur a performance cost for typical small lists. The bug only surfaces when values contains stale/unknown entries. Confidence: 65. Below threshold.

24. Memoization completeness check:

displayLabel is memoized with [options, values]. filteredOptions with [options, searchQuery]. Both look correct.

25. The close function on every render:

const close = () => {
  setIsOpen(false)
  setSearchQuery('')
}

close is recreated every render and passed to useNhrDocumentCategoryClose. The hook handles this via the ref pattern (storing onClose in onCloseRef), so it's fine. The hook's effect only depends on containerRef, which is stable.

26. Re-checking the test for the case where the dropdown should NOT close on outside click but DOES (line 304-313):

it('should close dropdown when Escape is pressed while focus is on an unrelated element', async () => {
  ...
  document.body.focus()
  await user.keyboard('{Escape}')

The hook listens at document level for Escape, not on a focused element. So this works regardless of focus. Test passes. Good.

After thorough review, here is my final assessment.


Review Summary

I reviewed the six files for new issues not flagged by prior passes. The code is generally clean and well-tested.

Files Reviewed

  1. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentCategoryFilter/NhrDocumentCategoryFilter.tsx
  2. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentCategoryFilter/NhrDocumentCategoryFilter.hooks.ts
  3. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentCategoryFilter/NhrDocumentCategoryFilter.helpers.ts
  4. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentCategoryFilter/NhrDocumentCategoryFilter.test.tsx
  5. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentCategoryFilterConfig.tsx
  6. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentCategoryFilterConfig.test.tsx

Findings

No new issues at confidence ≥ 80.

The earlier iterative passes appear to have caught the substantive issues. Items I considered but rejected as below the 80-confidence threshold:

  • Keyboard openability of the combobox (Enter/Space/ArrowDown don't open the popup since onClick is the only opener — but this may be by-design for a click-driven dropdown; existing behavior).
  • aria-autocomplete='none' paired with input-driven filtering — strictly 'list' would be more accurate per ARIA, but 'none' is defensible since the dropdown contains checkboxes rather than autocomplete suggestions.
  • <fieldset> carrying aria-controls from a aria-haspopup='listbox' trigger — semantically loose, but a common pragmatic pattern for multi-select filter pickers; presumably accepted in earlier ARIA pass.
  • displayLabel +N count includes unknown/unmatched values — produces e.g. "Report A, +1" when one of the two selected values has no matching option. Edge case, likely not real-world.
  • Type cast (filters.typeCodes as string[] | undefined) in the factory — unsafe but consistent with the Record<string, unknown> contract documented in types.ts.
  • Document-level pointerdown/keydown listeners are attached even when the dropdown is closed — inert but slightly wasteful; acceptable trade-off.
  • Unnecessary <>...</> fragment around config.render(...) in the factory test — purely stylistic.
  • useEffect with no deps in the hook to refresh onCloseRef.current — documented "ref pattern", not a bug; some linters prefer [onClose] deps but both work.

The code meets project standards. No blocking issues remain.

Keyboard shortcuts

⌘K / Ctrl+KOpen command palette
/Focus search
g hGo to home
g pGo to projects
g sGo to sessions
j / kNext / prev row (tables)
?Show this help
EscClose dialogs

Structured queries

Mix key:value filters with free text in the palette:

type:sessionOnly session pages
project:llm-wikiFilter by project name (substring)
model:claudeFilter by model name (substring)
date:>2026-03-01Sessions after a date
date:<2026-04-01Sessions before a date
tags:rustPages mentioning a tag/topic
sort:dateSort results by date (newest first)

Example: type:session project:llm-wiki date:>2026-04 sort:date