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; 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; options: SelectOption[]; part?: string; placeholder?: string; popover?: \"\" | \"auto\" | \"manual\" | \"hint\"; popoverTarget?: string; popoverTargetAction?: \"toggle\" | \"show\" | \"hide\"; prefix?: string; property?: string; radioGroup?: string; 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\"); 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;", - "Sheet": "ariaLabel?: string; bodyClassName?: string; children: ReactNode; closeButtonClassName?: string; closeLabel?: string; contentClassName?: string; contentStyle?: CSSProperties; description?: string; descriptionContent?: ReactNode; desktopBackdropClassName?: string; footer?: ReactNode; headerActions?: ReactNode; headerClassName?: string; headerLeading?: ReactNode; id?: string; initialFocusRef?: RefObject; labelledBy?: string; mobilePlacement?: \"bottom\" | \"top\" | \"fullscreen\"; mobileSize?: SheetMobileSize; onClose: () => void; open: boolean; placement?: \"default\" | \"left\"; portal?: boolean; resolveReturnFocusTarget?: (() => HTMLElement | null); returnFocusRef?: RefObject; testId?: string; title?: string; titleAccessory?: ReactNode; titleClassName?: string;", + "Sheet": "ariaLabel?: string; bodyClassName?: string; bodyRef?: RefObject; children: ReactNode; closeButtonClassName?: string; closeLabel?: string; contentClassName?: string; contentStyle?: CSSProperties; description?: string; descriptionContent?: ReactNode; desktopBackdropClassName?: string; footer?: ReactNode; footerClassName?: string; headerActions?: ReactNode; headerClassName?: string; headerLeading?: ReactNode; id?: string; initialFocusRef?: RefObject; labelledBy?: string; mobileHeaderSafeArea?: SheetMobileHeaderSafeArea; mobilePlacement?: \"bottom\" | \"top\" | \"fullscreen\"; mobileSize?: SheetMobileSize; onBodyScroll?: UIEventHandler; onClose: () => void; open: boolean; placement?: \"default\" | \"left\"; portal?: boolean; resolveReturnFocusTarget?: (() => HTMLElement | null); returnFocusRef?: RefObject; testId?: string; title?: string; titleAccessory?: ReactNode; titleClassName?: string;", "Skeleton": "about?: string; accessKey?: string; animationDelay?: 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 & {}); autoCorrect?: string; autoFocus?: boolean; autoSave?: string; children?: ReactNode; 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; draggable?: (boolean | \"true\" | \"false\"); enterKeyHint?: \"enter\" | \"done\" | \"go\" | \"next\" | \"previous\" | \"search\" | \"send\"; exportparts?: string; hidden?: boolean; 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; lang?: 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; 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; popover?: \"\" | \"auto\" | \"manual\" | \"hint\"; popoverTarget?: string; popoverTargetAction?: \"toggle\" | \"show\" | \"hide\"; prefix?: string; property?: string; radioGroup?: string; rel?: string; resource?: string; results?: number; rev?: string; role?: import(\"react\").AriaRole; security?: string; slot?: string; spellCheck?: (boolean | \"true\" | \"false\"); style?: import(\"react\").CSSProperties; suppressContentEditableWarning?: boolean; suppressHydrationWarning?: boolean; tabIndex?: number; title?: string; translate?: \"yes\" | \"no\"; typeof?: string; unselectable?: \"off\" | \"on\"; vocab?: string;", "SourceDesignationBadge": "className?: string; metadata?: SourceMetadataInput;", "SourceProvenance": "metadata?: SourceMetadataInput;", diff --git a/.env.example b/.env.example index 1f32a51988..ffe8b0b352 100644 --- a/.env.example +++ b/.env.example @@ -145,6 +145,9 @@ SENTRY_ENVIRONMENT=production # on the answer stream. Server emission flag; client rendering ships separately. Keep false # until the offline contract proof has landed and enablement is deliberately staged. RAG_INCREMENTAL_EVIDENCE_PREVIEW=false +# #100 Phase 1 client rendering gate. This NEXT_PUBLIC value is inlined at build time; +# keep it off until focused browser, accessibility, and clinical-governance proof is accepted. +#NEXT_PUBLIC_RAG_INCREMENTAL_EVIDENCE_PREVIEW_RENDER=false # Ambiguity-only structured semantic reranking. Keep false until the retrieval canary is approved. RAG_SEMANTIC_RERANK_ENABLED=false # Append OR-relaxed recall behind weak-but-nonzero strict text matches (P8b extension). diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ad4aa2ba01..5e76a606ee 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -188,6 +188,14 @@ jobs: if: needs.changes.outputs.static_heavy_changed == 'true' run: npm run check:upload-limit-parity + # The generated lexicon review is a clinical-facing artefact. It was in the + # local verify:pr-local chain but in no CI job, so it rotted on main and + # failed every local preflight while every required check stayed green + # (#333). Same static-heavy condition verify-pr-local.mjs already uses. + - name: Medication lexicon report freshness + if: needs.changes.outputs.static_heavy_changed == 'true' + run: npm run check:medication-lexicon-report + - name: GitHub Actions pin check if: needs.changes.outputs.workflow_changed == 'true' run: npm run check:github-actions diff --git a/docs/README.md b/docs/README.md index 34779ed651..98666d3134 100644 --- a/docs/README.md +++ b/docs/README.md @@ -93,6 +93,9 @@ npm run docs:check-links ## Plans and workstreams (living) - [maturity-backlog-workorders.md](maturity-backlog-workorders.md) — actionable work orders tracking the repository-maturity audit backlog +- [no-unchecked-indexed-access-migration-plan.md](no-unchecked-indexed-access-migration-plan.md) — staged multi-PR rollout for the `noUncheckedIndexedAccess` TypeScript flag (ledger `#211`) +- [ledger-id-scheme-proposal.md](ledger-id-scheme-proposal.md) — design for collision-free outstanding-issue ids so concurrent sessions stop contending on `issues:next-id` (ledger `#168`) +- [pr-handoff-stop-cross-agent-gap.md](pr-handoff-stop-cross-agent-gap.md) — why the PR-handoff stop rule is hook-enforced for Claude Code but prose-only for Codex and Cursor, and what parity would require (ledger `#258`) - [framework-dependency-modernization-checklist.md](framework-dependency-modernization-checklist.md) — ordered Next.js 16, runtime, dependency, Turbopack, and verification migration program - [search-rag-master-plan.md](search-rag-master-plan.md) / [search-rag-master-context.md](search-rag-master-context.md) — search/RAG roadmap and shared context - [rag-improvement/README.md](rag-improvement/README.md) — reviewed/updated RAG improvement programme: answer-quality track (intent-aware related information, length) + corrected eval/safety infra track diff --git a/docs/audit/live-drift-forensics-2026-08.md b/docs/audit/live-drift-forensics-2026-08.md index 19e0317ca4..6005d58299 100644 --- a/docs/audit/live-drift-forensics-2026-08.md +++ b/docs/audit/live-drift-forensics-2026-08.md @@ -27,33 +27,188 @@ runs on pushes to `main` touching `supabase/migrations/**` or `supabase/schema.s `workflow_dispatch`, the secret preflight, and `concurrency.cancel-in-progress: false` were kept unchanged. No hosted Supabase call was made. -Outstanding for the operator: dispatch `live-drift` once to confirm a real failure produces the -pinned issue (provider-backed — not run from the authoring session), and add -`SUPABASE_ACCESS_TOKEN` to environment secrets per plan step 0.3 and ledger `#183`. +_2026-08-14, forced-dispatch proof (owner-authorized)._ `live-drift` dispatched on `main` +(Actions run `31813064485`). The definition-of-done behaviour was observed end-to-end: + +- `live-drift` job **failed** at `Compare live schema drift`, as intended for this proof. +- `Capture drift and migration-history findings` still ran (`if: always()`), and + `Align migration history for Supabase Preview` correctly **skipped** after the failing step. +- The separate `drift-routing` job then ran (`if: ${{ !cancelled() }}`) and **succeeded**, + creating issue **#1963 "Live drift check failing"** with label `live-drift-failure`, the run + URL, `Job result: failure`, `Trigger: workflow_dispatch`, and the full findings block. + +That run also supersedes the stale 2026-08-09 figures this file was opened with. Measured +2026-08-14, `UNEXPECTED DRIFT (32)`: + +| Category | 2026-08-09 | 2026-08-14 | +| ---------------------------------------- | ---------- | ------------------ | +| `match_*` function `def_hash` mismatches | 10 | **10 — unchanged** | +| `missing_live` indexes | 21 | **20** | +| `unexpected_live` indexes | 2 | **2 — unchanged** | + +`documents_title_trgm_idx` and `document_chunks_content_trgm_idx` are absent from the missing +list, independently corroborating the Phase 4 restoration below (verified separately by +read-only query against `sjrfecxgysukkwxsowpy`: both `indisvalid`/`indisready`, 648 kB and +68 MB). The 10 RPC mismatches are untouched, so **Phase 3 remains entirely outstanding** and is +the next step per the plan's ordering. + +Routing is also covered offline by `tests/live-drift-workflow.test.ts` (mutation-verified), so a +future regression fails a test rather than waiting for a live failure to be mishandled. + +Outstanding for the operator: add `SUPABASE_ACCESS_TOKEN` to environment secrets per plan step +0.3 and ledger `#183` (dashboard work; names only, never values). ## Phase 1 — Read-only forensics -_Not yet run. Requires an approved read-only production window._ +_Partially run 2026-08-14 in an owner-authorized incident window, then extended the same day in a +read-only connector session. 1.2 is enumerated and noise-separated but its per-function diff hunks, +the remaining index sizing, and the dashboard audit-history pairing remain pending._ ### 1.1 Migration-history fingerprint -_Pending._ Record every `statements IS NULL` version with its name, and state explicitly whether -`20260705180000` carries that signal — then pair it with audit history to distinguish a -mark-applied/repair history from indexes that were created and later dropped. Do not close `#248` -on the fingerprint alone. +_2026-08-14 (owner-authorized Supabase connector session, incident-driven partial run)._ +Full `schema_migrations` fingerprint captured. Decisive rows: + +- `20260705180000 reconcile_search_health_indexes` — `no_statements = false`, **stmt_count 14**. + It does **not** carry the mark-applied signal: its DDL was recorded as executed. +- `20260804110240 restore_rag_search_health_indexes` (the guard) — applied with its statement on + 2026-08-04. Note (per PR #1960 review): that guard validates four **other** indexes and never + checks this pair, so its application gives **no** existence bound for + `documents_title_trgm_idx` / `document_chunks_content_trgm_idx`. +- Rows with the mark-applied signal (`statements IS NULL` or empty): the 2026-07-01…07-02 cluster + (`fix_chunks_hybrid_perf_and_ambiguity`, `fix_remaining_hybrid_perf_and_ambiguity`, + `schema_health_hybrid_execution_smoke`, `drop_dead_drifted_hybrid_variants`, + `clinical_query_term_trgm_correction`, `commit_generation_preserve_legacy_artifacts`, + `add_claim_ingestion_jobs_comment`, `drop_redundant_indexes`, `rag_retrieval_logs_retention`, + `storage_cleanup_jobs_document_fk`, `fix_reset_document_index_duplicate`, + `documents_owner_covering_index`, `fix_invoke_agent_url_to_guc`, + `promote_index_generation_id_columns`) and the 2026-07-12 reconciliation batch + (`reconcile_ingestion_index_shapes` … `add_legacy_index_health_batch_repair`, stmt_count 0). + +**Conclusion for the two retrieval-critical indexes:** their creation was recorded as executed on +2026-07-05 (`20260705180000`, 14 statements), and both were reported missing by the live-drift +runs of 2026-08-02 (Actions 30763871562) and 2026-08-09 (31330856982), with the weekly check red +since 2026-07-26 — so the drop happened **between 2026-07-05 and 2026-08-02** (likely by +2026-07-26). No app/worker/edge-function code issues `DROP INDEX` (repo grep, this session), so a +manual/dashboard action — e.g. an accepted "unused index" advisor suggestion — is the leading +**inference, not an established attribution**; pairing with the dashboard audit/query history for +that window remains **pending** (owner action). `#248` stays open. ### 1.2 RPC divergence dossier -_Pending._ One entry per mismatched `match_*` function, each classified **live-ahead**, -**repo-ahead**, **normalization noise**, or **UNCLASSIFIED**, quoting the decisive diff hunk. -Protected RAG surface: an ambiguous diff is recorded as UNCLASSIFIED and escalated, never guessed. +One entry per mismatched `match_*` function, each classified **live-ahead**, **repo-ahead**, +**normalization noise**, or **UNCLASSIFIED**, quoting the decisive diff hunk. Protected RAG +surface: an ambiguous diff is recorded as UNCLASSIFIED and escalated, never guessed. + +_2026-08-14 (owner-authorized read-only connector session) — enumeration and noise-separation +complete; per-function diff hunks still pending._ + +All 93 `public` functions were compared by the manifest's own rule (`pg_get_functiondef`, block +and line comments stripped, whitespace stripped, md5) against `supabase/drift-manifest.json`. +Result: **0 missing on live, 0 extra on live, 16 hash mismatches** — every one a `match_document_*` +retrieval RPC. + +**Six of the sixteen are normalization noise and are now closed.** A live session renders +`regprocedure` and body types unqualified (`vector`), while the manifest was generated where they +render schema-qualified (`extensions.vector`). Re-qualifying `vector` → `extensions.vector` before +hashing reproduces the manifest hash **exactly** for these six, so their bodies are byte-identical +to the repo: + +| Function | Classification | Evidence | +| ------------------------------------------------------------------ | ------------------- | -------------------------------------------------------------------- | +| `match_document_chunks(vector,integer,double precision,uuid,uuid)` | normalization noise | re-qualified hash `cdf9d685c98bc8ff731a0422c29a47a4` = manifest hash | +| `match_document_chunks_v2(vector,…,boolean)` | normalization noise | re-qualified hash matches manifest | +| `match_document_chunks_hybrid_v2(vector,…,boolean)` | normalization noise | re-qualified hash matches manifest | +| `match_document_embedding_fields_hybrid_v2(vector,…,boolean)` | normalization noise | re-qualified hash matches manifest | +| `match_document_index_units_hybrid_scoped(vector,…,boolean)` | normalization noise | re-qualified hash matches manifest | +| `match_document_memory_cards_hybrid_v3(vector,…,boolean)` | normalization noise | re-qualified hash matches manifest | + +**The remaining ten are unresolved hash mismatches and are UNCLASSIFIED.** They do not match the +manifest under the raw hash, the `extensions.`-stripped hash, or the re-qualified hash. That rules +out the tested `extensions.vector` rendering variants, but does not establish a body difference: +`pg_get_functiondef` also carries declarations and attributes, and other normalization differences +remain possible. Per the rule above they are recorded UNCLASSIFIED rather than guessed — deciding +whether there is a body difference, and then live-ahead vs repo-ahead, needs the decisive hunk: + +`match_document_chunks_text`, `match_document_chunks_text_v2`, `match_document_chunks_hybrid`, +`match_document_embedding_fields_hybrid`, `match_document_index_units_hybrid`, +`match_document_index_units_hybrid_v2`, `match_document_lookup_chunks_text`, +`match_document_memory_cards_hybrid`, `match_document_memory_cards_hybrid_v2`, +`match_document_table_facts_text`. + +This confirms ten unresolved retrieval-RPC hash mismatches after excluding the six proven +qualification artefacts. It does **not** yet confirm that ten RPC bodies diverge. + +**Method trap, recorded so the next run does not repeat it.** Joining manifest signatures to live +`p.oid::regprocedure::text` directly reports **all 93** functions as simultaneously missing _and_ +extra, because the manifest stores `public.fn(extensions.vector,…)` and the live session renders +`fn(vector,…)`. That is a join failure, not a finding. Normalize both sides (strip the `public.` +prefix, fold `extensions.vector` → `vector`) before comparing, then test each surviving mismatch +against the qualification variants before calling it divergence. ### 1.3 Index inventory, sizing, and EXPLAIN baselines -_Pending._ Owning-table `pg_relation_size` for the 21 missing and 2 unexpected indexes, plus -`EXPLAIN (ANALYZE, BUFFERS)` baselines for the `documents` title ILIKE query, the `document_chunks` -content search, and the `rag_retrieval_logs` miss scan. These are the before-measurements for -Phases 4 and 5. +_2026-08-14 (partial — retrieval-critical scope only)._ Live inventory of the ten +`20260705180000` indexes: **exactly two missing** — `documents_title_trgm_idx` and +`document_chunks_content_trgm_idx`; the other eight present (labels/summaries trgm, table-facts, +index-units, pages, sections, both `rag_retrieval_logs` indexes). Owning tables at repair time: +`document_chunks` 1562 MB / 70,120 live rows; `documents` 18 MB / 3,301 rows. + +Before-measurements came from live production probes rather than raw EXPLAIN (the incident was +end-to-end visible): `/api/search` semantic query 2026-08-14 → total 37.7 s, +`supabase_rpc_latency_ms` **31,610**; a second semantic probe 29.9 s / 21,757. The remaining +missing-index sizing and the `rag_retrieval_logs` miss-scan baseline are **pending**. + +**Whole-schema inventory — 2026-08-14, after the repair above (owner-authorized read-only +connector session).** The scope above is the ten `20260705180000` indexes; this is the full +`public` schema, and it is **additive to the incident, not a restatement of it**. Both repaired +indexes (`documents_title_trgm_idx`, `document_chunks_content_trgm_idx`) are confirmed **present** +on live now. + +| Side | Count | Source | +| -----------------------------: | -----: | --------------------------------------------------------------------------- | +| Repo-defined | 210 | `supabase/drift-manifest.json` `snapshot.indexes` | +| Live | 192 | `pg_indexes`, schema `public` | +| **Absent from live** | **20** | full outer join by name | +| Orphaned on live (not in repo) | 2 | `document_table_facts_document_id_idx`, `storage_cleanup_jobs_owner_id_idx` | + +210 − 20 + 2 = 192, so neither side is a partial read. The 20 absent, retrieval-relevant ones +first: + +`document_chunks_anchor_idx`, `document_index_units_heading_path_idx`, `rag_aliases_type_enabled_idx`, +`rag_queries_source_chunk_ids_gin_idx`, `rag_query_misses_aliases_idx`, +`documents_registry_projection_lookup_idx`, `document_images_structured_profile_gin_idx`, +`image_caption_cache_owner_hash_idx`, `api_rate_limits_bucket_updated_idx`, +`audit_logs_action_created_idx`, `audit_logs_owner_created_idx`, `document_images_hash_idx`, +`document_images_visual_intelligence_version_idx`, `document_index_quality_owner_score_idx`, +`document_publication_approvals_document_idx`, `document_summaries_owner_idx`, +`indexing_v3_agent_jobs_locked_at_idx`, `ingestion_job_stages_job_stage_started_idx`, +`medication_records_owner_category_idx`, `storage_cleanup_jobs_owner_status_idx`. + +**None is invalid-but-present.** `pg_index` filtered on `indisvalid = false or indisready = false` +returns **zero rows** across the whole `public` schema, so the failed-`CREATE INDEX CONCURRENTLY` +class documented in `docs/database-drift-detection.md` explains none of the 20. The objects are +absent, not broken. + +**Five covered creating migrations recorded executed DDL.** Extending the §1.1 fingerprint to the +four further migrations in this sampled set found that none carries the mark-applied signal: + +| Migration | `stmt_count` | Mark-applied? | +| ------------------------------------------------------ | -----------: | ------------- | +| `20260528007000 database_hardening_before_import` | 32 | no | +| `20260608001000 index_accuracy_usability_improvements` | 36 | no | +| `20260705180000 reconcile_search_health_indexes` | 14 | no (per §1.1) | +| `20260712165211 reconcile_missing_operational_indexes` | 27 | no | +| `20260717170000 registry_projection_cleanup` | 11 | no | + +This establishes recorded-executed-but-absent evidence across five migrations from 2026-05-28 to +2026-07-17, including one named `reconcile_missing_operational_indexes`; it does **not** cover the +creating migrations for `document_publication_approvals_document_idx`, +`indexing_v3_agent_jobs_locked_at_idx`, or `medication_records_owner_category_idx`. Fingerprint +those histories before classifying those three absences as created-then-dropped. **Root cause +remains unestablished** — §1.1's manual/dashboard-drop inference is the leading hypothesis and the +dashboard audit-history pairing is still the owner action that would confirm or refute it. This +inventory widens what that pairing has to explain; it does not by itself attribute anything. ## Phase 2 — Staging parity rehearsal @@ -73,17 +228,49 @@ behaviour-changing deploy. ## Phase 4 — Index restoration -_Not yet run. Requires an approved off-peak production window._ +_2026-08-14 (partial, incident-driven: the two retrieval-critical indexes only, owner-approved +"i authorise" in-session)._ Executed via the owner-authorized Supabase connector: -_Pending._ PITR restore point, per-index `CREATE INDEX CONCURRENTLY` result with its -`indisvalid`/`indisready` verification, disposition of the 2 unexpected live indexes with reasons, -the guard migrations landed, and the green live-drift dispatch output. +- `create index concurrently if not exists documents_title_trgm_idx …` — definition verbatim from + `20260705180000`. Result: `indisvalid = true`, `indisready = true`, 648 kB. +- `create index concurrently if not exists document_chunks_content_trgm_idx …` — same source. + Result: `indisvalid = true`, `indisready = true`, 68 MB. +- `ANALYZE public.documents; ANALYZE public.document_chunks;` after both builds. +- Canonical-shape validation (per PR #1960 review — `IF NOT EXISTS` could otherwise no-op on a + same-named index; here the prior inventory proved both absent, and post-build `pg_indexes` + returns the canonical normalized definitions verbatim): + `CREATE INDEX document_chunks_content_trgm_idx ON public.document_chunks USING gin (lower(((COALESCE(section_heading, ''::text) || ' '::text) || COALESCE(content, ''::text))) gin_trgm_ops)` and + `CREATE INDEX documents_title_trgm_idx ON public.documents USING gin (lower(((COALESCE(title, ''::text) || ' '::text) || COALESCE(file_name, ''::text))) gin_trgm_ops)` — + both matching `20260705180000` / `schema.sql`. + +Deviation from the phase template, recorded honestly: no PITR restore point was captured first — +the operation was additive index creation with a one-statement rollback +(`drop index concurrently`), no data-loss surface. No migration was added in the incident window: +the definitions are already codified in `20260705180000` + `schema.sql`, and this was the +documented operator prebuild for a drifted hosted target. **Outstanding phase debt (PR #1960 +review):** plan phase 4.4 still requires a fail-fast reconcile/guard migration for this repaired +pair (the `20260804110240` pattern names four other indexes only), so a later replay cannot +silently proceed if either index disappears again — queued as follow-up work for the full Phase 4 +batch, deliberately not bundled into this docs-only PR because migrations are an operational-risk +surface with their own replay gates. The other 19 drift findings, the 2 unexpected live indexes, +and the green live-drift dispatch also remain **pending** for the full phase. ## Phase 5 — Measure and close the loop -_Not yet run. Requires a read-only production window (plus eval approval only if Phase 3 changed -behaviour)._ +_Partially run 2026-08-14 (incident scope); full close-out still requires the remaining phases._ + +_2026-08-14 (partial)._ Before/after production probes (identical endpoint and query style): + +| Measurement | Before | After restore + ANALYZE | +| ------------------------------------------------------------------- | -------------------- | ----------------------- | +| Semantic query, text fast path — total / `supabase_rpc_latency_ms` | 37.7 s / 31,610 | 4.8 s / **1,535** | +| Semantic query, hybrid strategy — total / `supabase_rpc_latency_ms` | 29.9 s / 21,757 | 17.2 s / 8,519 | +| `match_document_chunks_text_v2` single call | (dominated the 31 s) | 14 ms | -_Pending._ Before/after `EXPLAIN` table against the Phase 1.3 baselines showing plan flips and -timings, the evidence-backed verdict on ledger `#231`'s 25 s fast-route budget, and the -`check:production-readiness` output. +**#231 verdict from this evidence:** the 25 s fast-route budget was being consumed by retrieval +itself while the two trigram indexes were missing — pre-generation latency was the binding cause +of semantic-query source-only fallbacks in this window (README §A1 ladder rung 2, now measured). +The A1/S1 packet must re-verify `generation_quality_gate:*` dominance on healthy latency before +choosing any code mitigation. Residual: hybrid fan-out still costs ~8.5 s worst-observed — owned +by the remaining remediation phases, not a route-budget change (`#231`'s stop condition stands). +`check:production-readiness` on the final state is **pending**. diff --git a/docs/branch-review-records/00d268a6cf6a1beeb904826b9f82a104ab62d03663c70e87ffdf0209fa2e5790.record.md b/docs/branch-review-records/00d268a6cf6a1beeb904826b9f82a104ab62d03663c70e87ffdf0209fa2e5790.record.md new file mode 100644 index 0000000000..d4986d1661 --- /dev/null +++ b/docs/branch-review-records/00d268a6cf6a1beeb904826b9f82a104ab62d03663c70e87ffdf0209fa2e5790.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/ledger-review-triage-yi63ao | 02d2e7fc839cf370b512f66b255d5f9e9b42f377 | required base sync through main 17402395 | Approved — required main update merged; previous ledger issue-closure verification remains applicable with no PR-path conflict | git diff --check; ci-change-scope self-test; ledger/inbox/outstanding/discipline guards passed | diff --git a/docs/branch-review-records/01671f1a4ca2796caf84922f73bc373f30c8fad36ffc94a1bafd0d5ca55693a7.record.md b/docs/branch-review-records/01671f1a4ca2796caf84922f73bc373f30c8fad36ffc94a1bafd0d5ca55693a7.record.md new file mode 100644 index 0000000000..ffd59fa430 --- /dev/null +++ b/docs/branch-review-records/01671f1a4ca2796caf84922f73bc373f30c8fad36ffc94a1bafd0d5ca55693a7.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/differential-results-ui-20260814 | 8bba4d60586c102a8d42e208c7bd73fb0b52046b | Differentials results evidence-state, clinical-cue, and ranking presentation | Fixed three validated P2 findings: evidence-gated best-match success styling, clinical-cue-only labels, and A–Z display rank. | git diff --check; direct Node source-contract assertions; targeted Vitest attempted but unavailable because this isolated worktree has no node_modules/vitest | diff --git a/docs/branch-review-records/023564085ea84fa8f81b78f3ec3e137053c64dbd30e5af948b0b041bd6ba537b.record.md b/docs/branch-review-records/023564085ea84fa8f81b78f3ec3e137053c64dbd30e5af948b0b041bd6ba537b.record.md new file mode 100644 index 0000000000..0343aa24eb --- /dev/null +++ b/docs/branch-review-records/023564085ea84fa8f81b78f3ec3e137053c64dbd30e5af948b0b041bd6ba537b.record.md @@ -0,0 +1 @@ +| 2026-08-14 | PR-1964 | 1dfc0c9b984152f6518060712ab050311f3f77c9 | vitest.config.mts, docs/maturity-backlog-workorders.md (ledger #192 / maturity X6 coverage floors) | APPROVED — coverage-threshold re-ratchet, no RAG/clinical behaviour change; verify:pr-local green except pre-existing unrelated check:medication-lexicon-report staleness | test:coverage,verify:pr-local | diff --git a/docs/branch-review-records/05b6c633adabd9647962f315da24d8e079183c4c8cd7d6d8303dba20a80489f4.record.md b/docs/branch-review-records/05b6c633adabd9647962f315da24d8e079183c4c8cd7d6d8303dba20a80489f4.record.md new file mode 100644 index 0000000000..7648ec0f91 --- /dev/null +++ b/docs/branch-review-records/05b6c633adabd9647962f315da24d8e079183c4c8cd7d6d8303dba20a80489f4.record.md @@ -0,0 +1 @@ +| 2026-08-14 | codex/improve-guide-layout-and-fix-bugs | c577a4b47c22ee6734e18af0da41d757d374aaca | PR #1948 review-and-fix | fixed confirmed mobile footer keyboard-accessibility and hidden padding defects; merged latest main | offline: Prettier changed files; git diff --check; check:maintainability-budgets; check:base-freshness; targeted Vitest unavailable (isolated worktree has no node_modules); browser smoke covered in CI | diff --git a/docs/branch-review-records/06df711430759e1dddd2be8983c0188aae2c97681ffc7179731785beb78b5a6a.record.md b/docs/branch-review-records/06df711430759e1dddd2be8983c0188aae2c97681ffc7179731785beb78b5a6a.record.md new file mode 100644 index 0000000000..8aae9d2953 --- /dev/null +++ b/docs/branch-review-records/06df711430759e1dddd2be8983c0188aae2c97681ffc7179731785beb78b5a6a.record.md @@ -0,0 +1 @@ +| 2026-08-14 | PR-1955 | 752d1af54f0cbfdef70390af913693671fbf95b7 | PR #1955 full review, design-system fix, and required base sync | fixed CI-blocking design-system contract regressions; merged latest main | git diff --check; native design-system remediation assertion; node scripts/check-docs-links.mjs; node scripts/ledger-inbox.mjs check; node scripts/check-ledger-write-discipline.mjs --self-test; full design-system/Vitest/UI checks unavailable (node_modules absent) | diff --git a/docs/branch-review-records/09f7a6223d2cc9cf801d28f42c84347fb6e8fe8167098620126ddf8a61a1994e.record.md b/docs/branch-review-records/09f7a6223d2cc9cf801d28f42c84347fb6e8fe8167098620126ddf8a61a1994e.record.md new file mode 100644 index 0000000000..98b0809764 --- /dev/null +++ b/docs/branch-review-records/09f7a6223d2cc9cf801d28f42c84347fb6e8fe8167098620126ddf8a61a1994e.record.md @@ -0,0 +1 @@ +| 2026-08-17 | 2018 | a4338471f29c12c4f98b5abf4910aaf6f461d992 | merge-conflict resolution + review fixes for PR #2009 (docs/filter-contract.md, scripts/check-outstanding-issues.mjs, scripts/ledger-inbox.mjs, src/components/clinical-dashboard/account-setup-dialog.tsx, tests/ui-smoke.spec.ts, tests/ui-tools.spec.ts) | reviewed and fixed: resolved 6-file merge conflict against main, fixed 2 CodeRabbit findings (fingerprint case-sensitivity, URL regex boundary), left 2 findings unaddressed (fingerprint-mandatory migration risk, design-token nitpick) | check-outstanding-issues self-test, ledger-inbox self-test, check:outstanding-issues, check-ledger-write-discipline, focused vitest (outstanding-issues-writer, repo-hygiene, ledger-inbox-cancellation, favourites-auth-gate), prettier --check, typecheck, eslint | diff --git a/docs/branch-review-records/0ab0fabc55b3958783c42bcd3a18b865415668919f9bc7f081bedf9fe16aecdf.record.md b/docs/branch-review-records/0ab0fabc55b3958783c42bcd3a18b865415668919f9bc7f081bedf9fe16aecdf.record.md new file mode 100644 index 0000000000..dba4be1fb9 --- /dev/null +++ b/docs/branch-review-records/0ab0fabc55b3958783c42bcd3a18b865415668919f9bc7f081bedf9fe16aecdf.record.md @@ -0,0 +1 @@ +| 2026-08-14 | PR-1951 | 7d70c74cc5449d577df3895aa766ad31f3204045 | tests/live-drift-workflow.test.ts; docs/outstanding-issues-inbox; docs/branch-review-records | preserved prior test fixes; merged latest main; cancelled superseded #331/#333 ledger mutations to restore deterministic queue application | manual adversarial review; current thread verification; docs links passed; ledger inbox passed; ledger guards passed; git merge-tree; git diff --check; focused Vitest unavailable (node_modules absent) | diff --git a/docs/branch-review-records/0bd6e78104f1efb528b8a02e6ce07cb58545f45e9ac5efe70e8e97e97233dfa6.record.md b/docs/branch-review-records/0bd6e78104f1efb528b8a02e6ce07cb58545f45e9ac5efe70e8e97e97233dfa6.record.md new file mode 100644 index 0000000000..a95e83b072 --- /dev/null +++ b/docs/branch-review-records/0bd6e78104f1efb528b8a02e6ce07cb58545f45e9ac5efe70e8e97e97233dfa6.record.md @@ -0,0 +1 @@ +| 2026-08-15 | PR #1966 / claude/ledger-review-triage-yi63ao | fd8e0fd55dd1a49e98039bd0057fb9221e644a93 | unblocking PR review-and-fix | No confirmed PR-introduced P0-P2 defect. Merged current main cleanly; prior ledger-closure concerns are superseded by current-main evidence. | ledger-inbox check PASS; outstanding-issues PASS; branch-review-ledger PASS; JSON parse 11/11; current-main claim probes PASS; diff --check PASS; npm setup unavailable (npm cache sandbox). | diff --git a/docs/branch-review-records/0cf1eff09758f402a2e5b6d928c83a1455ccff9c97fc5f4a99286d566142b192.record.md b/docs/branch-review-records/0cf1eff09758f402a2e5b6d928c83a1455ccff9c97fc5f4a99286d566142b192.record.md new file mode 100644 index 0000000000..2c92a3970a --- /dev/null +++ b/docs/branch-review-records/0cf1eff09758f402a2e5b6d928c83a1455ccff9c97fc5f4a99286d566142b192.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/rag-zod-hardening-tranche2 | f4bc9033d5482922de60681d764eb5e6c6ebb73f | rag-candidate-sources.ts signal-row Zod contracts (ledger #212 tranche 2) + 2 ledger captures | Approved — 3 unchecked RPC-result casts replaced with validated assertions; similarity_origin item deliberately excluded as a clinical-output behaviour change; no ranking/ordering/scoring logic touched | verify:pr-local all 18 steps green, zero failures; contract + rag-imputation-contract pins 21 passed; typecheck exit 0 | diff --git a/docs/branch-review-records/115a1304ff998fd0eeaee128b93a1b624eceaa07712147fdfb1fd71dcf2603d5.record.md b/docs/branch-review-records/115a1304ff998fd0eeaee128b93a1b624eceaa07712147fdfb1fd71dcf2603d5.record.md new file mode 100644 index 0000000000..9dc6569ae8 --- /dev/null +++ b/docs/branch-review-records/115a1304ff998fd0eeaee128b93a1b624eceaa07712147fdfb1fd71dcf2603d5.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/differential-results-ui-20260814 | d12e0217c4adc057e27ad92fb5dad144ba38995a | Differentials formatter blocker remediation (supersedes 2026-08-15) | Supersedes immutable record 74e47bb0fd4e2b3ff3ec524606a00b573db356d6b17cf68b4829a19643b9b71a: factored the preceding non-best count into a Prettier-stable expression after exact-head CI rejected both wrapped and one-line forms. | git diff --check b7d2bbcc75f8e3aadf498575b2ae4c44ebd3cc79; node scripts/ledger-inbox.mjs check; node scripts/check-outstanding-issues.mjs; node scripts/check-branch-review-ledger.mjs; node scripts/check-ledger-write-discipline.mjs 6f7b7deefaf7e0cd062b748f18fc6ca8988093f6 HEAD; node scripts/ci-change-scope.mjs --self-test; exact-head static failure reviewed | diff --git a/docs/branch-review-records/11809456723dae8154679a80157654f47f67b4c39e333654499b933d49b6b0f4.record.md b/docs/branch-review-records/11809456723dae8154679a80157654f47f67b4c39e333654499b933d49b6b0f4.record.md new file mode 100644 index 0000000000..18872a1390 --- /dev/null +++ b/docs/branch-review-records/11809456723dae8154679a80157654f47f67b4c39e333654499b933d49b6b0f4.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/capture-drift-phase1-evidence | 00f5612ccf982441cf98ec6ca1c51d68ba2add6a | docs/audit/live-drift-forensics-2026-08.md + inbox — Phase 1.2/1.3 evidence capture | Filled 1.2 (was Pending): 93 functions compared, 0 missing/0 extra/16 mismatches, 6 proven normalization noise, 10 real and UNCLASSIFIED, confirming #316's figure of 10. Extended 1.3: 210 repo vs 192 live indexes, 20 still absent after the incident repair, zero invalid indexes, all five creating migrations recorded executed DDL. Root cause left unestablished. #316/#248 queued as inbox requests. Read-only throughout; no writes to the database. | verify:pr-local (11 completed, 0 failed) | diff --git a/docs/branch-review-records/123580c2767d327b59ab4f6cc62bb75263a92e5d288897225e5e48dfe6822ca8.record.md b/docs/branch-review-records/123580c2767d327b59ab4f6cc62bb75263a92e5d288897225e5e48dfe6822ca8.record.md new file mode 100644 index 0000000000..30b17fe1f4 --- /dev/null +++ b/docs/branch-review-records/123580c2767d327b59ab4f6cc62bb75263a92e5d288897225e5e48dfe6822ca8.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/fix-cover-repair | 316018b41177e34612f08339bf4baf37055abf00 | cover repair script formatter follow-up | Formatted the stale-candidate guard reported by the changed-file formatter. Verified syntax with node --check; live Supabase execution intentionally not run. | node --check scripts/archive/backfill-document-covers.mjs; git diff --check; ledger-inbox; outstanding-issues; branch-review-ledger; ledger-write-discipline; ci-change-scope --self-test | diff --git a/docs/branch-review-records/140eabfb61f0822b5fb955d0c1d8d7fd924563215dd96f29802abdb3f093fc41.record.md b/docs/branch-review-records/140eabfb61f0822b5fb955d0c1d8d7fd924563215dd96f29802abdb3f093fc41.record.md new file mode 100644 index 0000000000..480a1e7e14 --- /dev/null +++ b/docs/branch-review-records/140eabfb61f0822b5fb955d0c1d8d7fd924563215dd96f29802abdb3f093fc41.record.md @@ -0,0 +1 @@ +| 2026-08-16 | codex/chat-service-facets-317-service-facets-317 | c957fc16e36381d775ce2fa068ec7cada68b4810 | PR #2004 registry service facet contract test | P2 false-negative contract guard fixed: compare restored tags with the raw fixture payload so a parser regression cannot agree with itself; no runtime defects found | Manual mutation proof reproduced the false negative; c957fc16 exact-head CI, static checks, unit coverage, safety/config, SAST, and secret scan passed; fix committed with ledger for exact-head CI rerun | diff --git a/docs/branch-review-records/149dbe376e6d9fa6eac0edcdb578b65c526366619d6e858107ca0fe108f95382.record.md b/docs/branch-review-records/149dbe376e6d9fa6eac0edcdb578b65c526366619d6e858107ca0fe108f95382.record.md new file mode 100644 index 0000000000..e87cf17b6c --- /dev/null +++ b/docs/branch-review-records/149dbe376e6d9fa6eac0edcdb578b65c526366619d6e858107ca0fe108f95382.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/differential-results-ui-20260814 | d12e0217c4adc057e27ad92fb5dad144ba38995a | PR #1971 base sync | Merged main 6f7b7deefaf7e0cd062b748f18fc6ca8988093f6 into the reviewed PR head; merge tree was clean. | git merge-tree --write-tree exact-head main: clean; git diff --check; ledger guards. | diff --git a/docs/branch-review-records/150c95562bf34c0fc9a79c97c63bbacb3bac3f9a436acc5b0336b62533ab1c54.record.md b/docs/branch-review-records/150c95562bf34c0fc9a79c97c63bbacb3bac3f9a436acc5b0336b62533ab1c54.record.md new file mode 100644 index 0000000000..c9aa58217a --- /dev/null +++ b/docs/branch-review-records/150c95562bf34c0fc9a79c97c63bbacb3bac3f9a436acc5b0336b62533ab1c54.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/rag-zod-hardening-tranche2 | 690204f669db3be9995b6c658ad2eb35befbdace | PR #1981 base sync | Merged main 6f7b7deefaf7e0cd062b748f18fc6ca8988093f6 into the reviewed PR head; merge tree was clean. | git merge-tree --write-tree exact-head main: clean; git diff --check; ledger guards. | diff --git a/docs/branch-review-records/1750578822f17106f9029aa52fbe2ba972c2610971d057b366f68f12bc87baba.record.md b/docs/branch-review-records/1750578822f17106f9029aa52fbe2ba972c2610971d057b366f68f12bc87baba.record.md new file mode 100644 index 0000000000..6025d3ff54 --- /dev/null +++ b/docs/branch-review-records/1750578822f17106f9029aa52fbe2ba972c2610971d057b366f68f12bc87baba.record.md @@ -0,0 +1 @@ +| 2026-08-15 | PR #1991 | 18a5f42dad73695f95301574a3bb08c1341d025f | docs/medication-lexicon-review-worklist.md + one #318 inbox request (46750cbf); no lexicon, catalogue or sign-off change | Authored handoff. Worklist prepared for the #318 clinician pass; row stays OPEN and UNREVIEWED. Verified two of the row's three cited defects are already closed (ARB/Carbapenem guarded; lithium reachable) and only the Warfarin split remains, with zero interaction rows in common between the two records. Three new findings not surfaced by the sheet: tcas selects dead slug dothiepin so Dosulepin (FATAL in OD) fires none of 20 severe rows; nsaids subclass match excludes Celecoxib/Parecoxib from 38 severe rows; maois subclass match excludes Moclobemide (RIMA) from 17 severe rows. Also found two blind spots in the review instrument itself - missedClassMembers() skips sub-4-char stems so the check cannot fire for tcas or arbs, and it never reads tag - so the sheet's 'checks ran clean' line is overstated for two terms. One near-miss corrected before publication: Omeprazole was not a catalogue record, it was a substring hit inside Esomeprazole. | verify:pr-local low-risk docs route, 11 checks completed, failed: (none); check:ledger-write-discipline passed 806918834b43..HEAD; check:outstanding-issues passed 341 rows; medications:lexicon-report regenerated byte-identical. verify:ui NOT run - Playwright chromium-1194 vs pinned 1234 (#255/#312) fails closed in this container; no browser coverage claimed. | diff --git a/docs/branch-review-records/1798e0af4644bdccaa00cfc3bd7fedeb56a5a019e93f3966580d3d41434e2a47.record.md b/docs/branch-review-records/1798e0af4644bdccaa00cfc3bd7fedeb56a5a019e93f3966580d3d41434e2a47.record.md new file mode 100644 index 0000000000..88903cd3a0 --- /dev/null +++ b/docs/branch-review-records/1798e0af4644bdccaa00cfc3bd7fedeb56a5a019e93f3966580d3d41434e2a47.record.md @@ -0,0 +1 @@ +| 2026-08-16 | PR-1993 | 0df502749540c4e4de789bfad12837726b1944d8 | PR #1993 Tools phone footer search review | Fixed: preserved the tappable standalone-home suggestion ticker while retaining the Tools phone shared-footer placement. | Static phone-home truth table passed; exact one-line fix diff verified; prior exact-head CI isolated to the audit assertion; distinct manual adversarial pass found no additional high-confidence defects. | diff --git a/docs/branch-review-records/180f5d9460a80283fbf5730d32a11b9a4d99c4075a36d42378e4fe7717a9b02f.record.md b/docs/branch-review-records/180f5d9460a80283fbf5730d32a11b9a4d99c4075a36d42378e4fe7717a9b02f.record.md new file mode 100644 index 0000000000..f4c90b06ab --- /dev/null +++ b/docs/branch-review-records/180f5d9460a80283fbf5730d32a11b9a4d99c4075a36d42378e4fe7717a9b02f.record.md @@ -0,0 +1 @@ +| 2026-08-14 | PR-1961 | ed6ad9a0f81b079568534db78283fec93b956c67 | PR #1961 base-preserving reconciliation sync | Required base sync retained the current canonical ledger: all 35 reconciliation records and the #310 correction were already present upstream; preserved only the branch’s new pending Prettier-version-trap request. | docs link check passed: 1775 repo path references resolve; Ledger inbox check passed: 23 pending request(s), 138 applied; branch-review-ledger self-test passed; Branch review ledger guard passed: 880 live table records + 1206 archived + 99 immutable; verify:pr-local unavailable: tsx/cli absent from isolated worktree (Node v24.14.0). | diff --git a/docs/branch-review-records/18503906b6f41b6151d7298f2a14ba993d7b2f39f39414b70103aab3a0a8fcc0.record.md b/docs/branch-review-records/18503906b6f41b6151d7298f2a14ba993d7b2f39f39414b70103aab3a0a8fcc0.record.md new file mode 100644 index 0000000000..b174725707 --- /dev/null +++ b/docs/branch-review-records/18503906b6f41b6151d7298f2a14ba993d7b2f39f39414b70103aab3a0a8fcc0.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/calculators-mode | 1e3d9278fbddda7d36d12e5645429b33d2a374ce | Calculators first-class mode | Resolved the current-base documentation conflict; prior P2 local-search and options-menu corrections remain present; no further confirmed P0-P2 findings. | git diff --check; ledger inbox/outstanding-issues/branch-ledger/discipline guards; calculator static contracts; focused Vitest attempted but unavailable because the isolated worktree has no node_modules | diff --git a/docs/branch-review-records/192997fbab4a8e3383dccff432e693a8c22f231e8ebb30f3023eb4a5956ceef8.record.md b/docs/branch-review-records/192997fbab4a8e3383dccff432e693a8c22f231e8ebb30f3023eb4a5956ceef8.record.md new file mode 100644 index 0000000000..8ae3d108d2 --- /dev/null +++ b/docs/branch-review-records/192997fbab4a8e3383dccff432e693a8c22f231e8ebb30f3023eb4a5956ceef8.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/rag-zod-hardening-tranche2 | 87a8886f1f761bdab92324e0d5ea5e11d3111bb9 | review-and-fix | P1 CI blocker fixed: formatted retrieval row contract test; no additional P0-P2 findings in adversarial review; merged latest main | targeted Vitest 134 pass; RAG fixtures 36 pass; offline RAG 579 pass; issue and ledger guards pass; Prettier pass | diff --git a/docs/branch-review-records/19d9b5ccfa4a8c3a52744d24cfc3bb7906a309c9f0d6beb92203bdd5717f47b3.record.md b/docs/branch-review-records/19d9b5ccfa4a8c3a52744d24cfc3bb7906a309c9f0d6beb92203bdd5717f47b3.record.md new file mode 100644 index 0000000000..e15e14f0b1 --- /dev/null +++ b/docs/branch-review-records/19d9b5ccfa4a8c3a52744d24cfc3bb7906a309c9f0d6beb92203bdd5717f47b3.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/ds-ratchet-tighten | 41a1bd73749564954d7bf11143fd6541402f7691 | Tighten seven design-system ratchets to measured values after the #1982-#1986 merges | 17 units of stale headroom removed; no metric relaxed | check:design-system-contract passed at the tightened values (sub-floor min-heights 40, edge conflicts 19, legacy shadow aliases 114); mutation-verified — min-h-9 on the shortlist Clear button now fails 'increased from 40 to 41' plus the per-path line, which the old pin of 43 allowed silently; check:gate-manifest OK; verify:pr-local 17 gates, unit suite 611 files / 6647 passed | diff --git a/docs/branch-review-records/1bcd7481c03879170cc5f4dc265e6b1e647dac6fb84d348f6b12fea7f87e7968.record.md b/docs/branch-review-records/1bcd7481c03879170cc5f4dc265e6b1e647dac6fb84d348f6b12fea7f87e7968.record.md new file mode 100644 index 0000000000..ce510798d3 --- /dev/null +++ b/docs/branch-review-records/1bcd7481c03879170cc5f4dc265e6b1e647dac6fb84d348f6b12fea7f87e7968.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/calculators-mode | 1938a6bc5f1845c67c85584ded78b3be1c8a961a | Calculators first-class mode | Merged the latest required base after the final freshness check; calculator local-search and action-menu P2 corrections remain intact. | git diff --check; ledger inbox/outstanding-issues/branch-ledger/discipline guards; reconciled search-chrome contract assertion; focused Vitest remains unavailable because this isolated worktree has no node_modules | diff --git a/docs/branch-review-records/1cd9399241d3cbac65652b1b8008514d5c4f4b2c2e82254fec86eb5c50ee6784.record.md b/docs/branch-review-records/1cd9399241d3cbac65652b1b8008514d5c4f4b2c2e82254fec86eb5c50ee6784.record.md new file mode 100644 index 0000000000..94e188293b --- /dev/null +++ b/docs/branch-review-records/1cd9399241d3cbac65652b1b8008514d5c4f4b2c2e82254fec86eb5c50ee6784.record.md @@ -0,0 +1 @@ +| 2026-08-14 | PR #1965 (claude/playwright-browser-revision-check) | 24e8fd040949564e2c07fccfe6d243e386815b6e | scripts/check-playwright-browser-revision.mjs, tests/check-playwright-browser-revision.test.ts — ledger #312 fix | authored — verified real Chromium binary presence check on disk; reproduced original false-OK bug live against this session's /opt/pw-browsers container (chromium-1194 present, pinned revision 1234 missing) | verify:pr-local (runtime, lock-parity, format, lint, typecheck, test 602 files/6518 passed/4 skipped, rag:fixtures, medication-interactions PASS; medication-lexicon-report pre-existing unrelated FAIL); focused vitest check-playwright-browser-revision.test.ts 10/10, playwright-browser-preflight.test.ts 12/12 | diff --git a/docs/branch-review-records/1eb170403cacbc03de02adf5632f19f46b5c09228a76c7dcb950557c88123401.record.md b/docs/branch-review-records/1eb170403cacbc03de02adf5632f19f46b5c09228a76c7dcb950557c88123401.record.md new file mode 100644 index 0000000000..e4df4ab962 --- /dev/null +++ b/docs/branch-review-records/1eb170403cacbc03de02adf5632f19f46b5c09228a76c7dcb950557c88123401.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/live-drift-routing-lnhvja | 61b53680ad49196a392dea91e1a4a7345d88c522 | live-drift workflow failure routing + post-migration trigger (#316 phase 0) | PR #1939 open | check:github-actions pass; verify:pr-local failed:(none); test:ci-workflows pass | diff --git a/docs/branch-review-records/1f2f64dc3b528b7149b664c65dc98e4b7e10477e73f22ca8c1ccfe02d4b84f50.record.md b/docs/branch-review-records/1f2f64dc3b528b7149b664c65dc98e4b7e10477e73f22ca8c1ccfe02d4b84f50.record.md new file mode 100644 index 0000000000..3022e100c7 --- /dev/null +++ b/docs/branch-review-records/1f2f64dc3b528b7149b664c65dc98e4b7e10477e73f22ca8c1ccfe02d4b84f50.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/calculators-mode | bbf2207102a0b40b5ba048e8e9a04f37add9bf2c | required base sync through main 3824095 | Approved — required main update merged after calculator command follow-ups; no PR-path conflict | git diff --check; ci-change-scope self-test; ledger/inbox/outstanding/discipline guards passed | diff --git a/docs/branch-review-records/1f3d777e83828ea67eb00c77229eafceb41a6841e644b036b1b0f9f54b118f37.record.md b/docs/branch-review-records/1f3d777e83828ea67eb00c77229eafceb41a6841e644b036b1b0f9f54b118f37.record.md new file mode 100644 index 0000000000..99a0e40663 --- /dev/null +++ b/docs/branch-review-records/1f3d777e83828ea67eb00c77229eafceb41a6841e644b036b1b0f9f54b118f37.record.md @@ -0,0 +1 @@ +| 2026-08-15 | 1975 | c18199dec009ff252d4c6ed895d6b401685b897c | review-and-fix | Fixed fail-open cover probes, concurrent metadata clobber, ambiguous rollback deletion, and duplicate-cover recovery; merged latest main. | Focused Vitest 10/10, format, lint, typecheck passed. verify:pr-local partial: 6583 passed, 6 known origin/main Windows/tooling baseline failures; later fixture stages not reached. production-readiness environment-gated: 2 pass, 5 warn, 2 missing-config failures; no live provider calls. | diff --git a/docs/branch-review-records/2151c86f85ae9cbf8e2e8530ac02019ce737d1565612b12828818d2377162c38.record.md b/docs/branch-review-records/2151c86f85ae9cbf8e2e8530ac02019ce737d1565612b12828818d2377162c38.record.md new file mode 100644 index 0000000000..a648f6f38c --- /dev/null +++ b/docs/branch-review-records/2151c86f85ae9cbf8e2e8530ac02019ce737d1565612b12828818d2377162c38.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/ledger-reconcile-batch-2 | af68b3271922656ef97312dae513a3f6906aec76 | docs/outstanding-issues.md + inbox — second serial reconciliation of 35 queued requests | Applied 25 active mutations (13 done, 6 add, 6 update) plus 5 cancellation decisions. Ledger 106 open/222 archived -> 99/235; inbox 0 pending/129 applied. Three closures queued in PR #1940 (#235 #237 #238) were cancelled by review and stay open: each asked for visual or browser proof and had been closed on executable evidence. Zero live same-target collisions verified before applying. | issues:reconcile --dry-run; verify:pr-local (11 completed, 0 failed); check:ledger-write-discipline | diff --git a/docs/branch-review-records/216a72e41232d90b9641c9a9cf0446c884067c3339f7a2f50cd5c5e642b9988e.record.md b/docs/branch-review-records/216a72e41232d90b9641c9a9cf0446c884067c3339f7a2f50cd5c5e642b9988e.record.md new file mode 100644 index 0000000000..1a42fed151 --- /dev/null +++ b/docs/branch-review-records/216a72e41232d90b9641c9a9cf0446c884067c3339f7a2f50cd5c5e642b9988e.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/services-search-redesign-163 | 720e7027a9f08e518eb6344e74dfde35d78d5981 | Fix service bookmark readiness and mutation race; merge current main | fixed | git diff --check; focused DOM test blocked without node_modules; ledger and issue guards | diff --git a/docs/branch-review-records/21c77c3c5582a1424f204ead318b9b780ef55dcb9d41bac400841a83eb4564f3.record.md b/docs/branch-review-records/21c77c3c5582a1424f204ead318b9b780ef55dcb9d41bac400841a83eb4564f3.record.md new file mode 100644 index 0000000000..a0675df92d --- /dev/null +++ b/docs/branch-review-records/21c77c3c5582a1424f204ead318b9b780ef55dcb9d41bac400841a83eb4564f3.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/db-remediation-phase-0-wfaiyl | 20228faa6002da009e290bc398345a47d2cd7a02 | PR #1951 review-and-fix | reviewed live-drift routing workflow contract and Phase 0 records; fixed no PR-introduced defect; merged latest main | offline: routing-script stub exercise; check-outstanding-issues; ledger-inbox check; Prettier changed files; check:github-actions; check:gate-manifest; check:verification-plan; maintainability budgets; targeted Vitest unavailable (isolated worktree has no node_modules); manual adversarial pass | diff --git a/docs/branch-review-records/23787765990717e03f13cc7032add47d5a8e7d5b869c94ad78c36a062211e4e5.record.md b/docs/branch-review-records/23787765990717e03f13cc7032add47d5a8e7d5b869c94ad78c36a062211e4e5.record.md new file mode 100644 index 0000000000..cb84bc9742 --- /dev/null +++ b/docs/branch-review-records/23787765990717e03f13cc7032add47d5a8e7d5b869c94ad78c36a062211e4e5.record.md @@ -0,0 +1 @@ +| 2026-08-17 | 2014 | 1c88ada9c023918764dcf2a01914829e3b93e902 | PR #2014 review-and-fix | High-confidence defects fixed; review threads resolved | audit-merge-loss --self-test + --since; prettier check; npm run check:branch-review-ledger; npm run check-outstanding-issues; required CI SUCCESS | diff --git a/docs/branch-review-records/24336297cd7a192b04d348313e763ff4a51012c6de6ec22028f0f2b600adeaa7.record.md b/docs/branch-review-records/24336297cd7a192b04d348313e763ff4a51012c6de6ec22028f0f2b600adeaa7.record.md new file mode 100644 index 0000000000..bd396c8cb4 --- /dev/null +++ b/docs/branch-review-records/24336297cd7a192b04d348313e763ff4a51012c6de6ec22028f0f2b600adeaa7.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/calculators-mode | 3b896be3f5f6ea67df10c991257aeb05b41af619 | Fix calculator regression tests from exact-head CI and merge main d301d8f4 | fixed | git diff --check; static ledger guards; focused tests blocked without node_modules | diff --git a/docs/branch-review-records/248b36b92b06adf7c5c774b595dbdd7338816418b90abb2584b88d3d49962c5d.record.md b/docs/branch-review-records/248b36b92b06adf7c5c774b595dbdd7338816418b90abb2584b88d3d49962c5d.record.md new file mode 100644 index 0000000000..5577d0b845 --- /dev/null +++ b/docs/branch-review-records/248b36b92b06adf7c5c774b595dbdd7338816418b90abb2584b88d3d49962c5d.record.md @@ -0,0 +1 @@ +| 2026-08-14 | PR-1951 | 4c55ec05875dcf063555e71021adb9d1f1a42f5c | PR #1951 full review and unblock | fixed | workflow permission-map parser; GitHub Issue API owner/repo assertions; node scripts/check-docs-links.mjs; node scripts/ledger-inbox.mjs check; node scripts/check-ledger-write-discipline.mjs --self-test; Vitest unavailable: node_modules absent | diff --git a/docs/branch-review-records/26cca9a8fb9d8d74d7f1ee7930cfbe94b1ad5125cb1551eb036da361229c79c6.record.md b/docs/branch-review-records/26cca9a8fb9d8d74d7f1ee7930cfbe94b1ad5125cb1551eb036da361229c79c6.record.md new file mode 100644 index 0000000000..2537fe48c1 --- /dev/null +++ b/docs/branch-review-records/26cca9a8fb9d8d74d7f1ee7930cfbe94b1ad5125cb1551eb036da361229c79c6.record.md @@ -0,0 +1 @@ +| 2026-08-14 | PR-1956 | 40be0b6fd37beb39f2cd10599d5455a4ed74ceef | ledger reconciliation review, current-main merge, and duplicate-follow-up queueing | FIXED: merged current main cleanly; preserved canonical-ledger discipline; queued the two confirmed duplicate consolidations with immutable cancellation records for later serial reconciliation. | offline: ledger write-discipline; outstanding-issues; branch-review-ledger; docs links; skills; pr-policy; ci-scope; merge-loss self-test; manual adversarial review | diff --git a/docs/branch-review-records/28051a48f8acb8c67da3f5d43e867ed46a9dbfa89fdd249cead35fa563bd9119.record.md b/docs/branch-review-records/28051a48f8acb8c67da3f5d43e867ed46a9dbfa89fdd249cead35fa563bd9119.record.md new file mode 100644 index 0000000000..c775fff880 --- /dev/null +++ b/docs/branch-review-records/28051a48f8acb8c67da3f5d43e867ed46a9dbfa89fdd249cead35fa563bd9119.record.md @@ -0,0 +1 @@ +| 2026-08-14 | PR-1951 | 809c50bf4ca8ede8c2c0ec49df9371cd4d56c517 | PR #1951 CI format repair | fixed the exact-head Changed-file format check failure in live-drift workflow coverage | Prettier 3.9.6; All matched files use Prettier code style!; Tests 15 passed (15); git diff --check passed; docs link check passed: 1775 repo path references resolve.; Ledger inbox check passed: 22 pending request(s), 138 applied.; ledger write discipline self-test passed.; Branch review ledger guard passed: 880 live table records + 1206 archived + 91 immutable | diff --git a/docs/branch-review-records/2ac50f7ddcdaa1190c9965f50d2bd503aa45acffe5c1fd6c10a285564b8465e6.record.md b/docs/branch-review-records/2ac50f7ddcdaa1190c9965f50d2bd503aa45acffe5c1fd6c10a285564b8465e6.record.md new file mode 100644 index 0000000000..a6cfb879d8 --- /dev/null +++ b/docs/branch-review-records/2ac50f7ddcdaa1190c9965f50d2bd503aa45acffe5c1fd6c10a285564b8465e6.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/differential-results-ui-20260814 | b19ade499d7fa77b9f8c6b540f9baaf088284b4a | Required base sync through main d301d8f4 | approved | git diff --check; CI scope self-test; ledger and issue guards | diff --git a/docs/branch-review-records/2cdb103223cd78c8d29b3a26ffae52f385cd5e9fa87be7bbcb0fe5f75c369912.record.md b/docs/branch-review-records/2cdb103223cd78c8d29b3a26ffae52f385cd5e9fa87be7bbcb0fe5f75c369912.record.md new file mode 100644 index 0000000000..d30dd131a1 --- /dev/null +++ b/docs/branch-review-records/2cdb103223cd78c8d29b3a26ffae52f385cd5e9fa87be7bbcb0fe5f75c369912.record.md @@ -0,0 +1 @@ +| 2026-08-14 | PR-1959 | 428fa8772198817e17ef6330c63f7f5e47e090b0 | PR #1959 base-preserving reconciliation review | Required base sync resolved the sole ledger conflict with main: all four inbox requests were already applied upstream; preserved main’s newer #231 evidence and retained the existing immutable historical record. | docs link check passed: 1776 repo path references resolve; Ledger inbox check passed: 12 pending request(s), 138 applied; branch-review-ledger self-test passed; Branch review ledger guard passed: 880 live table records + 1206 archived + 92 immutable; verify:pr-local unavailable: tsx/cli absent from isolated worktree (Node v24.14.0). | diff --git a/docs/branch-review-records/2f102c68fe61b45d4dbfd9b43a1ca1d14a753cf9a1522a6298f9286d8835adfd.record.md b/docs/branch-review-records/2f102c68fe61b45d4dbfd9b43a1ca1d14a753cf9a1522a6298f9286d8835adfd.record.md new file mode 100644 index 0000000000..e3d39922ce --- /dev/null +++ b/docs/branch-review-records/2f102c68fe61b45d4dbfd9b43a1ca1d14a753cf9a1522a6298f9286d8835adfd.record.md @@ -0,0 +1 @@ +| 2026-08-16 | codex/chat-search-error-342-search-error-342 | 019281ae9c8a6883737691438feba82117335e14 | PR #2002 universal NDJSON stream error propagation review | Fixed reproducible P2: structured error rejection now cancels an open response body so upstream stream work is released; no P0/P1 findings | Manual adversarial pass; consumer Web Streams harness 4/4; server stream harness 3/3; pre-fix exact-head unit coverage, static checks, SAST and secret scan passed | diff --git a/docs/branch-review-records/2fed40a238cbd6e5803e25f6c4778648494337db0a6927d4b2f55c077e60c173.record.md b/docs/branch-review-records/2fed40a238cbd6e5803e25f6c4778648494337db0a6927d4b2f55c077e60c173.record.md new file mode 100644 index 0000000000..306888f4ff --- /dev/null +++ b/docs/branch-review-records/2fed40a238cbd6e5803e25f6c4778648494337db0a6927d4b2f55c077e60c173.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/pwa-install-polish-20260815 | 6a1ef9ef020ff41165a9d02245367052a68bd7b3 | PWA mobile root CLS budget remediation | Narrowed install-sheet root-content repositioning from all phone widths to the documented <=359px compact layout, preserving the 320px overflow safeguard while avoiding the confirmed mobile-root shift. | git diff --check; Lighthouse CI log diagnosis: mobile-root CLS +0.105 confirmed in 3/3 samples; local Lighthouse intentionally not run | diff --git a/docs/branch-review-records/332ea83963cbf2857a64df609c9722ca734364de32bf354d9092762d7a6e4786.record.md b/docs/branch-review-records/332ea83963cbf2857a64df609c9722ca734364de32bf354d9092762d7a6e4786.record.md new file mode 100644 index 0000000000..f159c6f610 --- /dev/null +++ b/docs/branch-review-records/332ea83963cbf2857a64df609c9722ca734364de32bf354d9092762d7a6e4786.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/ledger-reconcile-batch-3 | be94fbbb31843f4593783b9ca388ee0526b74e84 | docs/outstanding-issues.md + inbox — reconcile the four rejected-closure corrections | Applied 4 update requests from PR #1957, no cancellations, zero live collisions. #235/#237/#238 now carry the rejected closure, its reason and a Stop rule naming the evidence class; #231 records the probe script and the #1861 adjudication. Row counts unchanged at 99 open/235 archived by design — detail rewrites, not archives. Inbox 0 pending/133 applied. | issues:reconcile --dry-run; verify:pr-local (11 completed, 0 failed); check:ledger-write-discipline | diff --git a/docs/branch-review-records/34ba441a8c53d4b7eaa2bb5afd846da9722498df625ff9e72b40ac86e0f75fe1.record.md b/docs/branch-review-records/34ba441a8c53d4b7eaa2bb5afd846da9722498df625ff9e72b40ac86e0f75fe1.record.md new file mode 100644 index 0000000000..fbc7c1149d --- /dev/null +++ b/docs/branch-review-records/34ba441a8c53d4b7eaa2bb5afd846da9722498df625ff9e72b40ac86e0f75fe1.record.md @@ -0,0 +1 @@ +| 2026-08-16 | codex/finalize-tooling-follow-through-documentation | d60649bbc14bfcba72d9f9a2fc65e3eff189bb41 | PR #1994 unblocking review and scope repair | P1 accidental 1035-file scope and stale-base conflict removed; invalid Context7 4.0.2 and nonexistent checklist changes dropped; current ingestion plan retained with safer execution rules; distinct manual adversarial pass completed | GitHub exact-head/tree/compare and contract inspection; official package metadata check; static Markdown and immutable-record validation; local npm gates unavailable without a checkout, deferred to exact-head CI | diff --git a/docs/branch-review-records/3553393e685f32b5925dc037af832d38d293f56e299993ebe74b56b4ea329756.record.md b/docs/branch-review-records/3553393e685f32b5925dc037af832d38d293f56e299993ebe74b56b4ea329756.record.md new file mode 100644 index 0000000000..d58f51d417 --- /dev/null +++ b/docs/branch-review-records/3553393e685f32b5925dc037af832d38d293f56e299993ebe74b56b4ea329756.record.md @@ -0,0 +1 @@ +| 2026-08-15 | PR #1977 | 4a94fb625c305159425366a7d9f59de4bd96425b | review-and-fix | Verified issue-inbox requests; #293 closure is supported by merged PR #1962, #312 correctly remains open after PR #1965; no new defect; merged latest main | check:outstanding-issues; check:branch-review-ledger; check:ledger-write-discipline; diff-check; manual adversarial review (CodeRabbit rate-limited) | diff --git a/docs/branch-review-records/35ae4a75db629a7a9ee8b0daf3b933bb51b159fedb9b0e5fce759cb470f06252.record.md b/docs/branch-review-records/35ae4a75db629a7a9ee8b0daf3b933bb51b159fedb9b0e5fce759cb470f06252.record.md new file mode 100644 index 0000000000..0a36ee596e --- /dev/null +++ b/docs/branch-review-records/35ae4a75db629a7a9ee8b0daf3b933bb51b159fedb9b0e5fce759cb470f06252.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/calculators-mode | 1ec9eb1028bf29ac633857846fe69c91249a64c7 | calculator suggestion regression test accessibility and formatting follow-up | Fixed the focused calculator suggestion test to match the full accessible option label; corrected formatter-required nested ternary indentation. Targeted Vitest unavailable because this isolated worktree has no node_modules/vitest. | git diff --check; ledger-inbox; outstanding-issues; branch-review-ledger; ledger-write-discipline; ci-change-scope --self-test | diff --git a/docs/branch-review-records/365fa9a7353142f52f78e4498f1a4046cd3d1bfd81cd70b816831c3d166119de.record.md b/docs/branch-review-records/365fa9a7353142f52f78e4498f1a4046cd3d1bfd81cd70b816831c3d166119de.record.md new file mode 100644 index 0000000000..aafb013038 --- /dev/null +++ b/docs/branch-review-records/365fa9a7353142f52f78e4498f1a4046cd3d1bfd81cd70b816831c3d166119de.record.md @@ -0,0 +1 @@ +| 2026-08-14 | PR-1962 | c646bcff8d8f5e6fe6bbdd410c5d87471d77ad36 | PR #1962 registry-ready Gate 2 audit fix | Fixed the Gate 2 audit to wait for the Forms tasks region so carrier enumeration cannot stabilise on the loading shell; merged latest main cleanly. | All matched files use Prettier code style; source contract confirms FormsHomePage labels the ready-only region Forms tasks; docs link check passed: 1775 repo path references resolve; Ledger inbox check passed: 23 pending request(s), 138 applied; branch-review-ledger self-test passed; Branch review ledger guard passed: 880 live table records + 1206 archived + 100 immutable; verify:pr-local unavailable: tsx/cli absent from isolated worktree (Node v24.14.0). | diff --git a/docs/branch-review-records/39058fcc89165e68d1e7359bb28e8b83ea9adacc348db610be6494d50d6bd842.record.md b/docs/branch-review-records/39058fcc89165e68d1e7359bb28e8b83ea9adacc348db610be6494d50d6bd842.record.md new file mode 100644 index 0000000000..ebbccb96c3 --- /dev/null +++ b/docs/branch-review-records/39058fcc89165e68d1e7359bb28e8b83ea9adacc348db610be6494d50d6bd842.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/ledger-process-tooling-50uqfc | d36914a79fa4304273429aab0d7f271010f3bb96 | ledger process tooling bundle (#313 dirty-tree gate, 829597d4 merge-loss detector, #211/#168/#258 plans) | PR #1944 — five separate commits, each independently revertible. Two code items: check-ledger-write-discipline.mjs now refuses a verdict while a governed ledger path is dirty (gated on default HEAD so guard-push.mjs explicit --head and clean CI are unaffected); new scripts/audit-merge-loss.mjs advisory blob-comparison sweep, exits 0 and asks for human confirmation, not wired into CI or verify:cheap by design. Three docs-only plans. Found and fixed during build: the shared git() helper trim() was corrupting porcelain status parsing, and JSDoc types were needed to stop TS inferring never[] for the classifier landings parameter. Noted: classifyPullRequestFiles reports operationalRisk true solely from the package.json script entry. | npm run verify:pr-local — 18 gates completed, 1 failed: check:medication-lexicon-report, reproduced identically in a clean detached worktree at origin/main d47aa6d so pre-existing and not caused here; tests/ledger-write-discipline.test.ts 9 passed; tests/merge-loss-audit.test.ts 14 passed; both script self-tests passed; audit:merge-loss --since 6 independently rediscovered the acf78bf casualties #1803/#1800/#1804/#1796/#1811 | diff --git a/docs/branch-review-records/39296f14956e2712c76344bea1eb1d312c64370049420fc3dd6939b28780721b.record.md b/docs/branch-review-records/39296f14956e2712c76344bea1eb1d312c64370049420fc3dd6939b28780721b.record.md new file mode 100644 index 0000000000..93f5c28cfb --- /dev/null +++ b/docs/branch-review-records/39296f14956e2712c76344bea1eb1d312c64370049420fc3dd6939b28780721b.record.md @@ -0,0 +1 @@ +| 2026-08-14 | PR-1953 | 5f6ecbd554f91a692965f7f876807d4e9e9c2c26 | PR #1953 full review and required base sync | no PR-introduced P0-P2 defect; existing P2 verified-correct; merged latest main | manual adversarial review; current thread verification; git merge-tree; git diff --check; base-sync native ledger/docs checks; focused Playwright/Next build not run (node_modules absent) | diff --git a/docs/branch-review-records/3c872a41535a5852133f97afa60a07d554e02ec2055fd40acb890720fbcdd8c3.record.md b/docs/branch-review-records/3c872a41535a5852133f97afa60a07d554e02ec2055fd40acb890720fbcdd8c3.record.md new file mode 100644 index 0000000000..5d0c4169bd --- /dev/null +++ b/docs/branch-review-records/3c872a41535a5852133f97afa60a07d554e02ec2055fd40acb890720fbcdd8c3.record.md @@ -0,0 +1 @@ +| 2026-08-14 | codex/calculators-mode | 8e7c9d65463ab37bc6e6cd658ec8091b4260db18 | calculators first-class mode | Clean after resolving local-only typeahead and legacy URL normalization | 20/20 focused unit/DOM; typecheck; lint; prior verify:ui 433/433; targeted browser request-interception queued then not run due coordinator contention | diff --git a/docs/branch-review-records/3d1e296045909c10383c715b1abaa9ee7348002139c4d9b8ead0b7bfb6c1c548.record.md b/docs/branch-review-records/3d1e296045909c10383c715b1abaa9ee7348002139c4d9b8ead0b7bfb6c1c548.record.md new file mode 100644 index 0000000000..07e2616ff7 --- /dev/null +++ b/docs/branch-review-records/3d1e296045909c10383c715b1abaa9ee7348002139c4d9b8ead0b7bfb6c1c548.record.md @@ -0,0 +1 @@ +| 2026-08-14 | codex/visual-layout-polish | 63195ba3f145a08691151ed4e86c69f5d05db486 | PR #1949 review-and-fix | reviewed PWA decoding hint and desktop CLS attribution; no PR-introduced defect found; merged latest main | offline: git diff --check; check-outstanding-issues; ledger-inbox check; ledger-write-discipline; Prettier changed files; targeted Vitest unavailable (isolated worktree has no node_modules); independent manual adversarial pass | diff --git a/docs/branch-review-records/3d45d96c0c8e97d835c1a3f6c12b320255c0164dc545dce172e67703b2be6fda.record.md b/docs/branch-review-records/3d45d96c0c8e97d835c1a3f6c12b320255c0164dc545dce172e67703b2be6fda.record.md new file mode 100644 index 0000000000..9a3057fb96 --- /dev/null +++ b/docs/branch-review-records/3d45d96c0c8e97d835c1a3f6c12b320255c0164dc545dce172e67703b2be6fda.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/rag-zod-hardening-tranche1 | 1fb98a174e815ce2d7e105d9339d766d3f54b02b | PR #1946 review-and-fix | fixed PR-introduced maintainability blocker; strengthened retrieval provenance and visual shape validation; merged latest main | offline: git diff --check; Prettier changed files; check:maintainability-budgets; branch-review-ledger; ledger-write-discipline; docs:check-links; CI pending | diff --git a/docs/branch-review-records/3dc49fdd6e24d09e3e6830eb12934c340fc3a9008650b6c058d34bd4d87a2afe.record.md b/docs/branch-review-records/3dc49fdd6e24d09e3e6830eb12934c340fc3a9008650b6c058d34bd4d87a2afe.record.md new file mode 100644 index 0000000000..ff090cc29d --- /dev/null +++ b/docs/branch-review-records/3dc49fdd6e24d09e3e6830eb12934c340fc3a9008650b6c058d34bd4d87a2afe.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/fix-ecg-animation-on-mobile-devices | 4c789e7449613bbae0701610414214586fee177a | ECG SVG repaint on Mobile WebKit | Confirmed the focused WebKit paint-containment correction; no additional P0-P2 findings. Merged the latest required base. | git diff --check; ledger inbox/outstanding-issues/branch-ledger/discipline guards; direct ECG CSS regression assertion; focused Vitest attempted but unavailable because the isolated worktree has no node_modules | diff --git a/docs/branch-review-records/3e31711658b047a477e82af444f00d88be075d7400770fbb25654628610cda51.record.md b/docs/branch-review-records/3e31711658b047a477e82af444f00d88be075d7400770fbb25654628610cda51.record.md new file mode 100644 index 0000000000..8d6801530c --- /dev/null +++ b/docs/branch-review-records/3e31711658b047a477e82af444f00d88be075d7400770fbb25654628610cda51.record.md @@ -0,0 +1 @@ +| 2026-08-14 | codex/medication-info-header-20260814 | 4525fe42f74b7f16bb762d953d82e1ce7540bb76 | medication information header expansion and desktop polish | No P0-P2 findings; ready for PR handoff | DOM 38/38 and focused Chromium 1/1 passed; PR-local runtime, lock parity, formatting, and lint passed; remaining aggregate stages blocked by shared test-run contention | diff --git a/docs/branch-review-records/3fbcef2b507598e6baa40944420519cc84a4cee33bf9c809091f21ed28f76192.record.md b/docs/branch-review-records/3fbcef2b507598e6baa40944420519cc84a4cee33bf9c809091f21ed28f76192.record.md new file mode 100644 index 0000000000..2ab488d9f5 --- /dev/null +++ b/docs/branch-review-records/3fbcef2b507598e6baa40944420519cc84a4cee33bf9c809091f21ed28f76192.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/services-search-redesign-163 | f9391318605f4a2cf743cc7a6b3448b61a8296d4 | Services search results: progressive referral rail, compact rows, favourites bookmark (#163) | Shipped; row re-measured as half-stale before building — no P0-P2 findings | verify:pr-local all 10 selected gates passed (runtime, lock parity, format:changed, lint, typecheck, test, build, rag fixtures, medication interactions, lexicon report); focused vitest 22/22 across services scope-empty-state, services regressions audit, band adoption, route reachability; check:design-system-contract passed at 25 edge conflicts unchanged; UI delegated to CI Production UI — chromium-1194 vs pinned 1234 (#255/#312) | diff --git a/docs/branch-review-records/40b0c05db4e9b44c17bc78bb0246cd15d4f72e244027e5a389bee78924c450cf.record.md b/docs/branch-review-records/40b0c05db4e9b44c17bc78bb0246cd15d4f72e244027e5a389bee78924c450cf.record.md new file mode 100644 index 0000000000..97d483cf69 --- /dev/null +++ b/docs/branch-review-records/40b0c05db4e9b44c17bc78bb0246cd15d4f72e244027e5a389bee78924c450cf.record.md @@ -0,0 +1 @@ +| 2026-08-14 | PR-1953 | 98b7458ba7ef4cecc5b5f5747deccf6adbab0480 | scripts/run-playwright.mjs; docs/branch-review-records | no PR-introduced P0-P2 defect; corrected prior local-only merge record and merged latest main | manual adversarial review; current thread verification; git merge-tree; git diff --check; docs links; ledger inbox; ledger guards; focused Playwright/Next build unavailable (node_modules absent) | diff --git a/docs/branch-review-records/417c3d2bbb8346fc650dc4bed9db149912fc13abb7aaf5fc9d7e6f75a3db0fa1.record.md b/docs/branch-review-records/417c3d2bbb8346fc650dc4bed9db149912fc13abb7aaf5fc9d7e6f75a3db0fa1.record.md new file mode 100644 index 0000000000..a09aba63e7 --- /dev/null +++ b/docs/branch-review-records/417c3d2bbb8346fc650dc4bed9db149912fc13abb7aaf5fc9d7e6f75a3db0fa1.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/fix-ecg-animation-on-mobile-devices | d4662baa81ba738b2278f624f213db416fde95a5 | review-and-fix | Merged latest main, resolved the CSS-test conflict, and fixed the WebKit late-notice test race | Focused Vitest 2/2; design-system contract; changed-file ESLint; typecheck; Prettier; branch-review, outstanding-issues, ledger-discipline and final-merge audit. Browser/provider gates not run locally. | diff --git a/docs/branch-review-records/4405a36b7fedb006b4f8a9947a9e66aec8589e5a59de4871bbab616ad8a91c5c.record.md b/docs/branch-review-records/4405a36b7fedb006b4f8a9947a9e66aec8589e5a59de4871bbab616ad8a91c5c.record.md new file mode 100644 index 0000000000..fd098b9254 --- /dev/null +++ b/docs/branch-review-records/4405a36b7fedb006b4f8a9947a9e66aec8589e5a59de4871bbab616ad8a91c5c.record.md @@ -0,0 +1 @@ +| 2026-08-17 | PR (branch claude/p1-ledger-324-318-316-xag5sy, #324 follow-up) | 91d3ccfcef79f02c140141eb560f941626039443 | scripts/audit-merge-loss.mjs + tests/merge-loss-audit.test.ts + one #324 inbox request (1d35d652); advisory only, no CI wiring, no schedule, exit code behaviour unchanged | Authored handoff, owner-approved scope (tab fix + mechanism classifier only). Fixed a defect that had disabled the reconciliation exemption since it was written: treeEntryReader split ls-tree on a literal backslash-t instead of a tab, keeping the path on the entry, so the cross-path inbox-to-applied comparison could never match. 14-day window before/after: 51 findings / 255 flagged files / filesExempted 0 -> 11 findings / 66 flagged / 189 exempted. Escaped originally because all tests injected entryAt directly; closed by extracting parseTreeEntry and testing it against real ls-tree output. Added classifyRemoval, which blames the oldest commit whose tree entry already matches the pre-landing entry and reports merge-resolution vs deliberate-commit vs unknown, sorting merge-resolution first. Over the window 14 of 66 flagged files were merge-resolution (13 from acf78bf) and all 52 others had explanatory single-parent subjects. Re-verified three genuine unrepaired losses against current main: #1800 (wiring and all three tests gone), #1804 (also-matches back in forms, guards reverted, apparently untracked), #1796 (Node 26 allowance gone, apparently untracked). The (a) schedule, (b) triage-owner and (c) one-tool-vs-two decisions remain OPEN and were deliberately not implemented; nothing was made blocking and no finding is auto-closed. | verify:pr-local executable scope, 9 checks completed, failed: (none) - lint, typecheck, full unit suite, check:rag:fixtures, check:medication-interactions, check:medication-lexicon-report. Focused tests/merge-loss-audit.test.ts 29 passed (was 16). Mutation-verified three ways: backslash-t reintroduction fails 3 tests + self-test; newest-first walk fails the blame-the-oldest test; unknown-as-deliberate fails 2 tests. verify:ui NOT run - Playwright chromium-1194 vs pinned 1234 (#255/#312) fails closed in this container; no browser coverage claimed and none needed for a non-UI script. | diff --git a/docs/branch-review-records/44c2668e0a184a3856e8f614a4358bb33d033ffc179a15ef4b69248c4df83669.record.md b/docs/branch-review-records/44c2668e0a184a3856e8f614a4358bb33d033ffc179a15ef4b69248c4df83669.record.md new file mode 100644 index 0000000000..c391fcd9bb --- /dev/null +++ b/docs/branch-review-records/44c2668e0a184a3856e8f614a4358bb33d033ffc179a15ef4b69248c4df83669.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/db-remediation-phase-0-wfaiyl | f390d6cd5faddd8b30320f60a082374688dc1f71 | Ledger reconciliation and push guard: final current-base merge | Verified parallel-cancellation and rewritten-history handling with isolated Git reproductions; merged latest required base with no conflicts or new P0-P2 findings | git diff --check; ledger-inbox self-test; ineffective-cancellation assertion; rewritten-history guard assertion; ledger-inbox; outstanding-issues; branch-review-ledger; ledger-write-discipline | diff --git a/docs/branch-review-records/4575cff3b5b7591de309f5e375293bda952b5d8479ef56a45808b8fda27bba37.record.md b/docs/branch-review-records/4575cff3b5b7591de309f5e375293bda952b5d8479ef56a45808b8fda27bba37.record.md new file mode 100644 index 0000000000..aeba78275e --- /dev/null +++ b/docs/branch-review-records/4575cff3b5b7591de309f5e375293bda952b5d8479ef56a45808b8fda27bba37.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/ledger-process-tooling-50uqfc | d7adf35c18f6f23d9585d9442a0da99e7c90192b | PR #1944 review-and-fix | Fixed five validated P2 findings | audit self-test, targeted classifier probes, JSON parse, ledger and docs guards; Vitest unavailable: npm ci package downloads corrupted | diff --git a/docs/branch-review-records/4859907cc6069250fcef7f0156490f1e04d0fd60e25fab0edbf33408b720efa9.record.md b/docs/branch-review-records/4859907cc6069250fcef7f0156490f1e04d0fd60e25fab0edbf33408b720efa9.record.md new file mode 100644 index 0000000000..f1e78ee19b --- /dev/null +++ b/docs/branch-review-records/4859907cc6069250fcef7f0156490f1e04d0fd60e25fab0edbf33408b720efa9.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/correct-rejected-closures | e4372b5b4e1e382ec28b79e326a0ae1f2a9901ba | docs/outstanding-issues-inbox — corrections for rejected closures and stale #231 | Queued 4 update requests. #235/#237/#238 record the rejected closure, its reason, and a Stop rule naming the evidence class that must not be reused; all three drop the stale IN FLIGHT prefix (PRs #1841/#1842 merged). #231 records that scripts/probe-generation-quality.ts now exists (a3bc4da) and PR #1861 was adjudicated superseded for phase 1, so the row no longer asks for an instrument that exists. | verify:pr-local (11 completed, 0 failed; first run correctly failed check:ledger-write-discipline on uncommitted edits) | diff --git a/docs/branch-review-records/497a7b26ad6568692b3dbc9e939c1e7d35a1a50108e2c0268cbf41ee612eaa76.record.md b/docs/branch-review-records/497a7b26ad6568692b3dbc9e939c1e7d35a1a50108e2c0268cbf41ee612eaa76.record.md new file mode 100644 index 0000000000..015bde1bc4 --- /dev/null +++ b/docs/branch-review-records/497a7b26ad6568692b3dbc9e939c1e7d35a1a50108e2c0268cbf41ee612eaa76.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/pwa-install-polish-20260815 | c6d8c2829ddd2fc52441a3696aed56fbd0262917 | required base sync through main 17402395 | Approved — required main update merged; prior PWA lifecycle review and style-inventory repair remain applicable with no PR-path conflict | git diff --check; ci-change-scope self-test; ledger/inbox/outstanding/discipline guards passed | diff --git a/docs/branch-review-records/4a51a80a457f85c939048278f01e3a3059d5509bfd975096af94b63ef16e825a.record.md b/docs/branch-review-records/4a51a80a457f85c939048278f01e3a3059d5509bfd975096af94b63ef16e825a.record.md new file mode 100644 index 0000000000..1812f5505d --- /dev/null +++ b/docs/branch-review-records/4a51a80a457f85c939048278f01e3a3059d5509bfd975096af94b63ef16e825a.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/pwa-install-polish-20260815 | 80fd6c04afdfa30e92c1cdf2ea5ba9d3d32a02c6 | PWA style-contract formatter follow-up | Formatted the PWA style-contract exemption entries reported by changed-file formatting. Targeted registry test unavailable because this isolated worktree has no node_modules/vitest; Lighthouse was not run locally by instruction. | node --check tests/helpers/style-contracts.ts; git diff --check; ledger-inbox; outstanding-issues; branch-review-ledger; ledger-write-discipline; ci-change-scope --self-test | diff --git a/docs/branch-review-records/4a8002d2aa8743b62a8189f3bd3621768458290b624c6b506f6fd403ad8157c0.record.md b/docs/branch-review-records/4a8002d2aa8743b62a8189f3bd3621768458290b624c6b506f6fd403ad8157c0.record.md new file mode 100644 index 0000000000..bb31036135 --- /dev/null +++ b/docs/branch-review-records/4a8002d2aa8743b62a8189f3bd3621768458290b624c6b506f6fd403ad8157c0.record.md @@ -0,0 +1 @@ +| 2026-08-16 | codex/account-setup-polish-20260814 | 25a7a7ba980aaf1f99a22969d74971a496373d98 | PR #1997 Services quick-search removal | P1 scope contamination and conflicts confirmed; intended quick-search removal was already superseded by merged PR #1996; branch reconciled to latest main without retaining obsolete UI regressions | Exact-head static and build checks passed; production UI shards and unit coverage exposed stale cross-feature regressions; merged PR #1996 had 69/69 focused units, 4/4 focused Chromium scenarios, typecheck and build passing; final code tree matched main | diff --git a/docs/branch-review-records/4dbb7f7d041801dbdbfb1360d45e46027a5b3debdb029af744345900ca5acdc1.record.md b/docs/branch-review-records/4dbb7f7d041801dbdbfb1360d45e46027a5b3debdb029af744345900ca5acdc1.record.md new file mode 100644 index 0000000000..4fa0ca2682 --- /dev/null +++ b/docs/branch-review-records/4dbb7f7d041801dbdbfb1360d45e46027a5b3debdb029af744345900ca5acdc1.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/calculators-mode | d8fde21e65ce010b72bc56f1e57334cdfac764c5 | required base sync through main 17402395 | Approved — required main update merged; prior calculator-mode review remains applicable with no PR-path conflict | git diff --check; ci-change-scope self-test; ledger/inbox/outstanding/discipline guards passed | diff --git a/docs/branch-review-records/4e9b4d92a67f8938115ff0ea2b99458078ba349cd9e9f625efb537215cbf1227.record.md b/docs/branch-review-records/4e9b4d92a67f8938115ff0ea2b99458078ba349cd9e9f625efb537215cbf1227.record.md new file mode 100644 index 0000000000..abb7f83e30 --- /dev/null +++ b/docs/branch-review-records/4e9b4d92a67f8938115ff0ea2b99458078ba349cd9e9f625efb537215cbf1227.record.md @@ -0,0 +1 @@ +| 2026-08-15 | PR #1968 / claude/ledger-reconcile-batch-4 | 31cd550141e66806e53ade04965151b960964c6d | unblocking PR review-and-fix | Merged the latest base and reconciled its complete ledger batch; retained the #316 headline correction as a valid next-transaction request. | ledger write discipline; ledger inbox dry-run/check; outstanding-issues; branch-review-ledger; diff --check | diff --git a/docs/branch-review-records/51a91c30aac9b44f7a14db23c3b96cf23b0b76a4bfd1cd9b2c9052dca555bc08.record.md b/docs/branch-review-records/51a91c30aac9b44f7a14db23c3b96cf23b0b76a4bfd1cd9b2c9052dca555bc08.record.md new file mode 100644 index 0000000000..e33b5fe1d8 --- /dev/null +++ b/docs/branch-review-records/51a91c30aac9b44f7a14db23c3b96cf23b0b76a4bfd1cd9b2c9052dca555bc08.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/fix-documents-without-live-images | 3aad3e221fc146560578c8d78135435550f73166 | Required base sync through main d301d8f4 | approved | git diff --check; script syntax; ledger and issue guards | diff --git a/docs/branch-review-records/522436cc75e96c3d5ec24c4ed5206978ed6cc3c4e988daa2a9d1d5165c4a8e2e.record.md b/docs/branch-review-records/522436cc75e96c3d5ec24c4ed5206978ed6cc3c4e988daa2a9d1d5165c4a8e2e.record.md new file mode 100644 index 0000000000..cd6ba3605e --- /dev/null +++ b/docs/branch-review-records/522436cc75e96c3d5ec24c4ed5206978ed6cc3c4e988daa2a9d1d5165c4a8e2e.record.md @@ -0,0 +1 @@ +| 2026-08-16 | PR-2008 / codex/tools-show-all-20260816 | 008093943c407a3caaac65d49d5c8e80de552ef0 | PR #2008 latest-base refresh after green exact-head CI | Merged main fb8c71c94f8a45028df36aa669e3653c4f75cd2a; its durable ULID/Crockford outstanding-issues tooling and related tests, docs, and hooks do not overlap this PR's launcher or focused UI regression; no new P0/P1/P2 defects confirmed | Exact-head PR required, static, build, unit, production UI, critical UI, advisory UI, CI-managed Lighthouse budget, SAST, and secret scans passed at 99592cad854c205b2626f4d5a001956ef6e13b8f; 3f33068da16ef8a3235359ff974c9314cf79d758-to-fb8c71c94f8a45028df36aa669e3653c4f75cd2a compare reviewed; clean non-overlapping merge-tree construction | diff --git a/docs/branch-review-records/534a1703b8963c66fe43de4889cf3f33e6bc83a7ebc8734fba8c6c71148e0d6f.record.md b/docs/branch-review-records/534a1703b8963c66fe43de4889cf3f33e6bc83a7ebc8734fba8c6c71148e0d6f.record.md new file mode 100644 index 0000000000..1d9d2361b4 --- /dev/null +++ b/docs/branch-review-records/534a1703b8963c66fe43de4889cf3f33e6bc83a7ebc8734fba8c6c71148e0d6f.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/pwa-install-polish-20260815 | aa041fd15f902dce172ea0d2707f3f81cb8f160c | PWA install lifecycle: final current-base merge | Merged latest required base after validated PWA registry fix; no merge conflicts | git diff --check; ledger-inbox; outstanding-issues; branch-review-ledger; ledger-write-discipline; static PWA registry assertion | diff --git a/docs/branch-review-records/55297ab0e355af3fbf69ae0321defbaa0a097a15f8fb74a52623abe427f21421.record.md b/docs/branch-review-records/55297ab0e355af3fbf69ae0321defbaa0a097a15f8fb74a52623abe427f21421.record.md new file mode 100644 index 0000000000..8aca52a899 --- /dev/null +++ b/docs/branch-review-records/55297ab0e355af3fbf69ae0321defbaa0a097a15f8fb74a52623abe427f21421.record.md @@ -0,0 +1 @@ +| 2026-08-14 | PR #1966 | 5f5d4d141d07753b5c3882e65c0dea5de0a68804 | completed-PR ledger queue | fixed | Prettier JSON; ledger inbox check; outstanding-issues guard; ledger write discipline; independent Codex adversarial review: #098 false completion removed; stale #210/#215 corrections superseded | diff --git a/docs/branch-review-records/5bffd23d66a7e2f1ef7b6b9a3b4188835f16432fe3243bb89a199885f6a09730.record.md b/docs/branch-review-records/5bffd23d66a7e2f1ef7b6b9a3b4188835f16432fe3243bb89a199885f6a09730.record.md new file mode 100644 index 0000000000..18c329c702 --- /dev/null +++ b/docs/branch-review-records/5bffd23d66a7e2f1ef7b6b9a3b4188835f16432fe3243bb89a199885f6a09730.record.md @@ -0,0 +1 @@ +| 2026-08-15 | PR #1968 / claude/ledger-reconcile-batch-4 | 0a49842ccf12ea4508533b43bb0b7d7a2086eac6 | unblocking PR review-and-fix | Synced current main and reconciled the base inbox; queued the verified #316 headline correction for the next serialized transaction. | ledger inbox dry-run/check; outstanding-issues and ledger write-discipline checks; diff --check (npm setup blocked by sandbox cache) | diff --git a/docs/branch-review-records/5c0ac2f4e15f46fb39e8fd09c38c3cc169be8ad8f8459b70b86140a155a88967.record.md b/docs/branch-review-records/5c0ac2f4e15f46fb39e8fd09c38c3cc169be8ad8f8459b70b86140a155a88967.record.md new file mode 100644 index 0000000000..19f50bb0e6 --- /dev/null +++ b/docs/branch-review-records/5c0ac2f4e15f46fb39e8fd09c38c3cc169be8ad8f8459b70b86140a155a88967.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/calculators-mode | ff3dfa4e32e63ccf288438a6371608b42847c18e | calculator search-chrome documentation formatter follow-up | Aligned the search-chrome ownership table to the new longest mode label after the changed-file formatter reported Markdown table drift. | git diff --check; ledger-inbox; outstanding-issues; branch-review-ledger; ledger-write-discipline; ci-change-scope --self-test | diff --git a/docs/branch-review-records/5dfd91a1c7b294fec5c2fca7834a9812e9c3055ed0b3a5f9f139a838dc8c1c2d.record.md b/docs/branch-review-records/5dfd91a1c7b294fec5c2fca7834a9812e9c3055ed0b3a5f9f139a838dc8c1c2d.record.md new file mode 100644 index 0000000000..a08eb61655 --- /dev/null +++ b/docs/branch-review-records/5dfd91a1c7b294fec5c2fca7834a9812e9c3055ed0b3a5f9f139a838dc8c1c2d.record.md @@ -0,0 +1 @@ +| 2026-08-14 | PR-1958 | d74f208924b9b5ed3a5314b29018a727f1e84b69 | PR #1958 final current-base sync | Merged the current main after the Tools-directory review; preserved the combined shared-test resolution and left a clean merge tree. | docs link check passed: 1775 repo path references resolve; Ledger inbox check passed: 23 pending request(s), 138 applied; branch-review-ledger self-test passed; Branch review ledger guard passed: 880 live table records + 1206 archived + 102 immutable; prior exact-head CI was green; current exact-head CI is pending; dependency-backed local UI checks unavailable in isolated worktree. | diff --git a/docs/branch-review-records/5fb194b68baa840377fcf801664fdbe23fe39d02317237fbe8fe7ab43f8a459d.record.md b/docs/branch-review-records/5fb194b68baa840377fcf801664fdbe23fe39d02317237fbe8fe7ab43f8a459d.record.md new file mode 100644 index 0000000000..5912e5cd7a --- /dev/null +++ b/docs/branch-review-records/5fb194b68baa840377fcf801664fdbe23fe39d02317237fbe8fe7ab43f8a459d.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/capture-ongoing-drop-question | d40e89ebb7a77f589683a6a6244fdcb84ad4c4af | Withdraw unsupported index-loss P1 after exact Action-log set comparison; merge main | fixed | git diff --check; ledger and issue guards | diff --git a/docs/branch-review-records/60422ff1c15e4237b0b0d3028b47dde0cd7d2e44c4b79c2badd5c8be19153682.record.md b/docs/branch-review-records/60422ff1c15e4237b0b0d3028b47dde0cd7d2e44c4b79c2badd5c8be19153682.record.md new file mode 100644 index 0000000000..9c62fd4350 --- /dev/null +++ b/docs/branch-review-records/60422ff1c15e4237b0b0d3028b47dde0cd7d2e44c4b79c2badd5c8be19153682.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/services-search-redesign-163 | d007d4a11a0d7b52283fe0088583259ef27c0264 | Services bookmark readiness — correcting the 216a72e4 record | PRIOR RECORD WAS FALSE. Record 216a72e4 claimed 'Fix service bookmark readiness and mutation race' at head 720e7027a9f08e518eb6344e74dfde35d78d5981. That object does not exist in this repository (git cat-file fails; not an ancestor of the branch) and src/components/services/ was byte-identical between 285e12d3c939 and the then-remote tip 87e7fcc2 — no fix had landed. The named defect was real and is fixed here instead | git cat-file -t on the claimed head: object does not exist; git diff 285e12d..87e7fcc2 -- src/components/services/: empty; new DOM regression test mutation-verified (reverting the gate fails it); focused vitest 12/12; typecheck clean | diff --git a/docs/branch-review-records/60f458bc7e118a4c0f36e12b0294e651372309f02b547300fa7ca6426587d82c.record.md b/docs/branch-review-records/60f458bc7e118a4c0f36e12b0294e651372309f02b547300fa7ca6426587d82c.record.md new file mode 100644 index 0000000000..e037df2b02 --- /dev/null +++ b/docs/branch-review-records/60f458bc7e118a4c0f36e12b0294e651372309f02b547300fa7ca6426587d82c.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/rag-zod-hardening-tranche2 | 18253c2bc555d424e83f987712cf528dd3910e3f | Carry validated optional RAG signal degradation fix through main d301d8f4 | fixed | git diff --check; static RAG contract inspection; ledger and issue guards; tests blocked without node_modules | diff --git a/docs/branch-review-records/615deb9148ec106e31cf72902d4a1b2710987b3597aeef62b9a2fb964975dd5b.record.md b/docs/branch-review-records/615deb9148ec106e31cf72902d4a1b2710987b3597aeef62b9a2fb964975dd5b.record.md new file mode 100644 index 0000000000..6a5b00ae82 --- /dev/null +++ b/docs/branch-review-records/615deb9148ec106e31cf72902d4a1b2710987b3597aeef62b9a2fb964975dd5b.record.md @@ -0,0 +1 @@ +| 2026-08-15 | 1976 | 54327591bb89f6f9f25f6834fbefc277a9bff80b | review-and-fix | P2 fixed: native install prompt now avoids hero reflow, composer overlap, and prompt-induced CLS | pwa DOM 10/10; PWA Chromium 5/5; format; exact-head merge-tree | diff --git a/docs/branch-review-records/61a53ca459551a7a2ca43dee60a4d50a4f04840076dfbb4f79fa55ab14605d71.record.md b/docs/branch-review-records/61a53ca459551a7a2ca43dee60a4d50a4f04840076dfbb4f79fa55ab14605d71.record.md new file mode 100644 index 0000000000..5f4b04d53c --- /dev/null +++ b/docs/branch-review-records/61a53ca459551a7a2ca43dee60a4d50a4f04840076dfbb4f79fa55ab14605d71.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/capture-ongoing-drop-question | 367ef8e1414a3ebf81102884fa48298f16068093 | docs/outstanding-issues-inbox — capture the unreconciled drift count | Queued one P1 add request: check:drift reported missing_live 21 (2026-08-09) then 20 (2026-08-14) despite two indexes being restored between, so the expected figure was 19; the gap is consistent with an ongoing drop mechanism. Recorded as inference not fact. Carries a stop rule against beginning the restoration window until resolved. Filed as add rather than a #316 update to avoid colliding with the #316 update already queued in PR #1970. | verify:pr-local (11 completed, 0 failed) | diff --git a/docs/branch-review-records/63bb22a3ea42c41966caaa63a61b73a2bba0026f0898a8f6e3afae6123075fce.record.md b/docs/branch-review-records/63bb22a3ea42c41966caaa63a61b73a2bba0026f0898a8f6e3afae6123075fce.record.md new file mode 100644 index 0000000000..2162c854bd --- /dev/null +++ b/docs/branch-review-records/63bb22a3ea42c41966caaa63a61b73a2bba0026f0898a8f6e3afae6123075fce.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/pwa-install-polish-20260815 | 80fd6c04afdfa30e92c1cdf2ea5ba9d3d32a02c6 | PR #1976 PWA exemption formatter follow-up | Corrected two exemption descriptions that were under the 120-column formatter width and must remain single-line properties. | git diff --check; ledger/outstanding/branch-ledger/ledger-discipline guards; ci-change-scope self-test passed; npm test -- tests/style-contract-registry.test.ts unavailable: node_modules/vitest/vitest.mjs absent. | diff --git a/docs/branch-review-records/642a0ca61b346fbb0b4dd8bda07b9e763f3acdf9d7d26bff9e0017e1cdd58c60.record.md b/docs/branch-review-records/642a0ca61b346fbb0b4dd8bda07b9e763f3acdf9d7d26bff9e0017e1cdd58c60.record.md new file mode 100644 index 0000000000..9067dc948b --- /dev/null +++ b/docs/branch-review-records/642a0ca61b346fbb0b4dd8bda07b9e763f3acdf9d7d26bff9e0017e1cdd58c60.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/test-source-contract-hardening | 22aa7c627e4d3ce220c741d4246d998956249fd2 | Guarded source-slice test windows: shared helper plus three migrations (#1985) | Shipped; closes a silent-pass class in the contract tests, remainder queued | verify:pr-local all 9 selected gates passed — unit suite 6608 passed / 4 skipped; helper's own test pins the raw idiom returning out-of-window content; migrated files re-run green (17/17, 23/23) | diff --git a/docs/branch-review-records/652d642c8900c600dd0d8e9f229c6c9f3d2e2d2709bee0f3d2e35384751e8358.record.md b/docs/branch-review-records/652d642c8900c600dd0d8e9f229c6c9f3d2e2d2709bee0f3d2e35384751e8358.record.md new file mode 100644 index 0000000000..8966365449 --- /dev/null +++ b/docs/branch-review-records/652d642c8900c600dd0d8e9f229c6c9f3d2e2d2709bee0f3d2e35384751e8358.record.md @@ -0,0 +1 @@ +| 2026-08-15 | PR #1968 / claude/ledger-reconcile-batch-4 | 10beb5ea191043e3c425aa7ff32533e93e9f68de | unblocking PR review-and-fix | Fixed #316 forensic-bound and inventory correction through the serialized ledger queue; merged current main cleanly. | ledger-inbox and outstanding-issues self-tests plus checks; ledger write discipline; diff --check (npm 11.17 setup blocked by sandbox cache) | diff --git a/docs/branch-review-records/65bf63ffd245181d054f30ee9fc24f16ca83af0e52d784bb3860e470876e1e75.record.md b/docs/branch-review-records/65bf63ffd245181d054f30ee9fc24f16ca83af0e52d784bb3860e470876e1e75.record.md new file mode 100644 index 0000000000..56117f05a0 --- /dev/null +++ b/docs/branch-review-records/65bf63ffd245181d054f30ee9fc24f16ca83af0e52d784bb3860e470876e1e75.record.md @@ -0,0 +1 @@ +| 2026-08-16 | PR-2000 / codex/chat-ledger-programme-ledger-programme | 3b544399aa4129c03e3362a16123f9cc9dfc84a3 | PR #2000 post-fix base refresh review | Required base refresh to 27f6b60429ab56a0e4a779b5b16c35e9cce630db reviewed; the base delta added only two unrelated branch-review records, a registry service-facets test, and an edge-ingestion planning document, with no overlap with this PR's outstanding-issue requests; the #098 correction remains valid | PR required, SAST, and secret scan passed at 3b544399aa4129c03e3362a16123f9cc9dfc84a3; fd3a100b9ad0d4c806c7083d01cb3a0bed601646-to-27f6b60429ab56a0e4a779b5b16c35e9cce630db compare reviewed; merge-tree verification | diff --git a/docs/branch-review-records/667079dd07cd03821a2d3b2ec65a1d04508df0c95fc85014b6cc6546b765bf32.record.md b/docs/branch-review-records/667079dd07cd03821a2d3b2ec65a1d04508df0c95fc85014b6cc6546b765bf32.record.md new file mode 100644 index 0000000000..4e51427bb0 --- /dev/null +++ b/docs/branch-review-records/667079dd07cd03821a2d3b2ec65a1d04508df0c95fc85014b6cc6546b765bf32.record.md @@ -0,0 +1 @@ +| 2026-08-15 | PR #1969 / codex/medication-list-spacing-20260814 | 347125d4313a7517f051c1b26fc0873b7bff10f0 | unblocking PR review-and-fix | Fixed the 1024px desktop prescribing-grid clipping with a focused right-edge regression assertion; merged current main cleanly. | grid footprint contract (676px <= 876px); diff --check (Playwright unavailable: isolated worktree has no dependencies) | diff --git a/docs/branch-review-records/6897c4836aee66827e7eec71bfa16917161e501d15805774b5446fb4c393d383.record.md b/docs/branch-review-records/6897c4836aee66827e7eec71bfa16917161e501d15805774b5446fb4c393d383.record.md new file mode 100644 index 0000000000..fd6bdf63b3 --- /dev/null +++ b/docs/branch-review-records/6897c4836aee66827e7eec71bfa16917161e501d15805774b5446fb4c393d383.record.md @@ -0,0 +1 @@ +| 2026-08-16 | codex/chat-trust-boundaries-212-trust-boundaries-212 | f3b55e8555614bffff2eb335b95d342b40960b6c | PR #2003 unblocking review and base synchronization | No confirmed P0-P2 PR-introduced defects; fail-closed list parsing, generic public errors, ownership redaction, and JSON-shape contracts validated; latest main merged without conflicts; distinct manual adversarial pass completed | Exact-head f3b55e85 CI, PR required, static checks, unit coverage, build, lint, typecheck, safety/config, SAST, and secret scan passed; local npm gates unavailable without a checkout; final base-sync head requires CI rerun | diff --git a/docs/branch-review-records/68deea2b69f60f4b52bdea24ceb748ddac6c21d3d7912bc77caa5deda23aefea.record.md b/docs/branch-review-records/68deea2b69f60f4b52bdea24ceb748ddac6c21d3d7912bc77caa5deda23aefea.record.md new file mode 100644 index 0000000000..271ae6a0e0 --- /dev/null +++ b/docs/branch-review-records/68deea2b69f60f4b52bdea24ceb748ddac6c21d3d7912bc77caa5deda23aefea.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/ledger-review-triage-yi63ao | 6cd9a8547714543aee7b6864c2b7c427309bc4c2 | PR #1977 base sync | Merged main 6f7b7deefaf7e0cd062b748f18fc6ca8988093f6 into the reviewed PR head; merge tree was clean. | git merge-tree --write-tree exact-head main: clean; git diff --check; ledger guards. | diff --git a/docs/branch-review-records/6c6404a8a018cff566a2b0f00c17f87c45206350cff5c6bf2f3b86690f27c5d7.record.md b/docs/branch-review-records/6c6404a8a018cff566a2b0f00c17f87c45206350cff5c6bf2f3b86690f27c5d7.record.md new file mode 100644 index 0000000000..8beb6e1240 --- /dev/null +++ b/docs/branch-review-records/6c6404a8a018cff566a2b0f00c17f87c45206350cff5c6bf2f3b86690f27c5d7.record.md @@ -0,0 +1 @@ +| 2026-08-14 | codex/visual-layout-polish | 7490ac090fc1577c72bbf5db943126b1ceb47770 | PR #1949 CLS ledger corrective review and base-current verification | fixed the confirmed issue-update overwrite of canonical CLS measurement and stop conditions; no other high-confidence PR defect found | offline: JSON parse; ledger update semantic assertion; check-outstanding-issues; ledger-write-discipline self-test; git diff --check; manual adversarial pass | diff --git a/docs/branch-review-records/6edbc14cf38b74d61a02ebdd3bb7c5114b56cfb2c711ec548b6aeea715b05c9f.record.md b/docs/branch-review-records/6edbc14cf38b74d61a02ebdd3bb7c5114b56cfb2c711ec548b6aeea715b05c9f.record.md new file mode 100644 index 0000000000..bdf06e150b --- /dev/null +++ b/docs/branch-review-records/6edbc14cf38b74d61a02ebdd3bb7c5114b56cfb2c711ec548b6aeea715b05c9f.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/fix-documents-without-live-images | 31bf9b5855c0e7cc903a3e186f3bf785d41cc210 | Document cover audit and repair: final current-base merge | Merged latest required base after prior focused repair review; no conflicts or new confirmed P0-P2 findings | git diff --check; ledger-inbox; outstanding-issues; branch-review-ledger; ledger-write-discipline; archived cover-script syntax and generation-guard assertions | diff --git a/docs/branch-review-records/6f2e5ab42932b76f6bc1f9e99c44558ad9edbfec91f1f75fd8ba007bdd90d979.record.md b/docs/branch-review-records/6f2e5ab42932b76f6bc1f9e99c44558ad9edbfec91f1f75fd8ba007bdd90d979.record.md new file mode 100644 index 0000000000..fbf2dc4897 --- /dev/null +++ b/docs/branch-review-records/6f2e5ab42932b76f6bc1f9e99c44558ad9edbfec91f1f75fd8ba007bdd90d979.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/ledger-review-triage-yi63ao | f7fdb77a66a02b5678ad14d6f196c80c8d458571 | Outstanding-issues reconciliation for #293 and #312: final current-base merge | Verified cited landings, retained #312 browser-family acceptance gap, and merged current base with no conflicts or new P0-P2 findings | git diff --check; ledger-inbox; outstanding-issues; branch-review-ledger; ledger-write-discipline; landing and request-content assertions | diff --git a/docs/branch-review-records/6fdbf4d3fb732b73a4c56c0bb3c09278fb142e1e4e1d4b8e8d787d6abf9ea62f.record.md b/docs/branch-review-records/6fdbf4d3fb732b73a4c56c0bb3c09278fb142e1e4e1d4b8e8d787d6abf9ea62f.record.md new file mode 100644 index 0000000000..095a5459c7 --- /dev/null +++ b/docs/branch-review-records/6fdbf4d3fb732b73a4c56c0bb3c09278fb142e1e4e1d4b8e8d787d6abf9ea62f.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/rag-zod-hardening-tranche2 | 671b0b99f7fdd33e83e5fa55a29470690c9243f2 | RAG row-contract tranche 2 P2: unconstrained JSON provenance acceptance | Fixed P2 — index-unit source_span and metadata accept all JSON allowed by the database; non-object provenance is safely omitted from record-only downstream consumers | manual adversarial review; focused scalar/array contract regression added; git diff --check; ci-change-scope self-test; ledger/inbox/outstanding/discipline guards passed; targeted Vitest blocked: node_modules/vitest absent | diff --git a/docs/branch-review-records/7060c1fcf1c15570212c29f7afe5379d101d7e3ada1bb102dcd1631e83d7bf55.record.md b/docs/branch-review-records/7060c1fcf1c15570212c29f7afe5379d101d7e3ada1bb102dcd1631e83d7bf55.record.md new file mode 100644 index 0000000000..4ef15deaa1 --- /dev/null +++ b/docs/branch-review-records/7060c1fcf1c15570212c29f7afe5379d101d7e3ada1bb102dcd1631e83d7bf55.record.md @@ -0,0 +1 @@ +| 2026-08-14 | PR #1965 | a535862933966cede9c0f7f11734167a93b67c62 | Playwright browser-revision preflight | fixed | Prettier; 12 focused browser-check tests passed; test-runner safety covered by exact-head CI; full local suite blocked by incomplete cached dependencies; merged main | diff --git a/docs/branch-review-records/70ed179206c9c4c492ee7a969f0a2c5bb8119ba24d916c6cd8b8f521347ffd23.record.md b/docs/branch-review-records/70ed179206c9c4c492ee7a969f0a2c5bb8119ba24d916c6cd8b8f521347ffd23.record.md new file mode 100644 index 0000000000..4e2c237ddc --- /dev/null +++ b/docs/branch-review-records/70ed179206c9c4c492ee7a969f0a2c5bb8119ba24d916c6cd8b8f521347ffd23.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/differential-results-ui-20260814 | cc68da45cf37c5fbb6e588106e9d3bf8ab8004c3 | required base sync through main 17402395 | Approved — required main update merged; prior focused UI review remains applicable with no PR-path conflict | git diff --check; ci-change-scope self-test; ledger/inbox/outstanding/discipline guards passed | diff --git a/docs/branch-review-records/711ddbc0e2119fb166c1c4267644135f54ba5f04f0c8c06a38fc88ddc42c85e6.record.md b/docs/branch-review-records/711ddbc0e2119fb166c1c4267644135f54ba5f04f0c8c06a38fc88ddc42c85e6.record.md new file mode 100644 index 0000000000..8dc6e9d4ff --- /dev/null +++ b/docs/branch-review-records/711ddbc0e2119fb166c1c4267644135f54ba5f04f0c8c06a38fc88ddc42c85e6.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/calculators-mode | 39423d88bced6494ad2eed30f43fb859ab6abefb | Calculators mode: final current-base merge | Merged latest required base after prior focused review; no conflicts or new confirmed P0-P2 findings | git diff --check; ledger-inbox; outstanding-issues; branch-review-ledger; ledger-write-discipline; calculator registration assertion | diff --git a/docs/branch-review-records/719b4f9ab3ccc24a497b1f84a5262acd6e929cbbe76b46ab8d3a953de2b0883f.record.md b/docs/branch-review-records/719b4f9ab3ccc24a497b1f84a5262acd6e929cbbe76b46ab8d3a953de2b0883f.record.md new file mode 100644 index 0000000000..0fd7e1802e --- /dev/null +++ b/docs/branch-review-records/719b4f9ab3ccc24a497b1f84a5262acd6e929cbbe76b46ab8d3a953de2b0883f.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/rag-zod-hardening-tranche2 | 1a59ce0b128fbdabb9a24c3ea95c1123299693f3 | RAG row-contract CI follow-up: optional-signal assertion narrowing | Fixed P1 — explicit local mismatch catches preserve both logged optional-signal degradation and TypeScript row narrowing | CI typecheck failure reproduced from exact-head log; git diff --check; ci-change-scope self-test; ledger/inbox/outstanding/discipline guards passed; local Vitest unavailable because node_modules/vitest is absent | diff --git a/docs/branch-review-records/71e026951e34c888a933c97c6f0f48f3825198aad8e34f32ecc8d6381b2ce5a2.record.md b/docs/branch-review-records/71e026951e34c888a933c97c6f0f48f3825198aad8e34f32ecc8d6381b2ce5a2.record.md new file mode 100644 index 0000000000..f9bdc61bde --- /dev/null +++ b/docs/branch-review-records/71e026951e34c888a933c97c6f0f48f3825198aad8e34f32ecc8d6381b2ce5a2.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/live-drift-forensics-lnhvja | b9485d897dbec528b9141d3b93bbc7a067bfd010 | incident forensics + live index restore evidence (#316/#231) | PR #1960 open | verify:pr-local failed:(none) incl check:ledger-write-discipline | diff --git a/docs/branch-review-records/73e1ce27d354653c23fc961f40f9d63232cd9e2adbed6433ed8cb4e2e04eb3aa.record.md b/docs/branch-review-records/73e1ce27d354653c23fc961f40f9d63232cd9e2adbed6433ed8cb4e2e04eb3aa.record.md new file mode 100644 index 0000000000..430fc294f1 --- /dev/null +++ b/docs/branch-review-records/73e1ce27d354653c23fc961f40f9d63232cd9e2adbed6433ed8cb4e2e04eb3aa.record.md @@ -0,0 +1 @@ +| 2026-08-13 | work | a9e7331cd0b4f72b4cc7251ddf135c590d936256 | guide dialog UX, scrolling, answer verification preview, and mobile bottom action | Implemented focused fixes; no unresolved high-confidence defects in changed scope | guide DOM 9 passed; Chromium guide smoke passed; typecheck passed; manual 390x844 screenshot and scroll check passed | diff --git a/docs/branch-review-records/74e47bb0fd4e2b3ff3ec524606a00b573db356d6b17cf68b4829a19643b9b71a.record.md b/docs/branch-review-records/74e47bb0fd4e2b3ff3ec524606a00b573db356d6b17cf68b4829a19643b9b71a.record.md new file mode 100644 index 0000000000..f59a64c858 --- /dev/null +++ b/docs/branch-review-records/74e47bb0fd4e2b3ff3ec524606a00b573db356d6b17cf68b4829a19643b9b71a.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/differential-results-ui-20260814 | d12e0217c4adc057e27ad92fb5dad144ba38995a | Differentials changed-file formatter blocker | Restored the single 115-column mobile rank expression after exact-head CI showed the preceding wrapped form was not Prettier-valid. | git diff --check b7d2bbcc75f8e3aadf498575b2ae4c44ebd3cc79; node scripts/ledger-inbox.mjs check; node scripts/check-outstanding-issues.mjs; node scripts/check-branch-review-ledger.mjs; node scripts/check-ledger-write-discipline.mjs origin/main HEAD; node scripts/ci-change-scope.mjs --self-test; exact-head changed-file formatter failure reviewed | diff --git a/docs/branch-review-records/7620543101feadcebdc49427ad0395f1f4c8a0d304ec3a5251f1920d023b06c0.record.md b/docs/branch-review-records/7620543101feadcebdc49427ad0395f1f4c8a0d304ec3a5251f1920d023b06c0.record.md new file mode 100644 index 0000000000..2e9450f621 --- /dev/null +++ b/docs/branch-review-records/7620543101feadcebdc49427ad0395f1f4c8a0d304ec3a5251f1920d023b06c0.record.md @@ -0,0 +1 @@ +| 2026-08-15 | 1976 | 8bb76ce085f212d47a0918b9242cb412e8a9a3f7 | review-and-fix | fixed phone install-sheet overlap on current-base head | pwa regression 1/1; lifecycle DOM 10/10; verify:phone-chrome 437/437 UI | diff --git a/docs/branch-review-records/771a9eb221c68c8d73f05d8831089a7b6744d11d10a1fee600ca1eac1d0354fe.record.md b/docs/branch-review-records/771a9eb221c68c8d73f05d8831089a7b6744d11d10a1fee600ca1eac1d0354fe.record.md new file mode 100644 index 0000000000..87b3e4a96c --- /dev/null +++ b/docs/branch-review-records/771a9eb221c68c8d73f05d8831089a7b6744d11d10a1fee600ca1eac1d0354fe.record.md @@ -0,0 +1 @@ +| 2026-08-16 | codex/tools-show-all-20260816 | 6b67263c9d41a598bda3329e40846425071ddf20 | PR #2008 compact Show all tools launcher review and latest-main merge | No P0/P1/P2 defects confirmed; preserved the focused launcher-to-directory control and merged latest main without conflict; PR description placement wording is stale but not a proven code defect | Manual adversarial merged-tree review; targeted source-contract assertions passed; exact pre-sync head PR required wrapper, lint, typecheck, SAST and secret scan passed | diff --git a/docs/branch-review-records/7a1bb8ea354bbff006a1deb9148167b6bfe7cd5a364f7fd8d8da5287aa2a4e38.record.md b/docs/branch-review-records/7a1bb8ea354bbff006a1deb9148167b6bfe7cd5a364f7fd8d8da5287aa2a4e38.record.md new file mode 100644 index 0000000000..3993c5040d --- /dev/null +++ b/docs/branch-review-records/7a1bb8ea354bbff006a1deb9148167b6bfe7cd5a364f7fd8d8da5287aa2a4e38.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/ledger-process-tooling-50uqfc | 07b184df70e31c55e3637af875af077d2f12f129 | PR #1944 review-and-fix (supersedes 2026-08-14) | Corrected connector file encoding; retained five fixes | byte-verified blobs; audit self-test, targeted classifier probes, JSON parse, ledger and docs guards; Vitest unavailable: npm ci package downloads corrupted | diff --git a/docs/branch-review-records/7b17944b9be99b8dfecf5a608e68fcee0660337191337c4097bc1831ccd34960.record.md b/docs/branch-review-records/7b17944b9be99b8dfecf5a608e68fcee0660337191337c4097bc1831ccd34960.record.md new file mode 100644 index 0000000000..05625cdf94 --- /dev/null +++ b/docs/branch-review-records/7b17944b9be99b8dfecf5a608e68fcee0660337191337c4097bc1831ccd34960.record.md @@ -0,0 +1 @@ +| 2026-08-14 | codex/calculators-mode | 563ce4195512b9e623df6ba98762f4a3dc1b9e8e | calculators first-class mode | P1: calculator composer invokes universal-search API despite local-only boundary | source diff review; local verification evidence inspected; verify:pr-local dry-run; provider checks not run | diff --git a/docs/branch-review-records/7bd50bd9c4093cf764692231945db6e88a27e21ebb7545745fa66facf618d208.record.md b/docs/branch-review-records/7bd50bd9c4093cf764692231945db6e88a27e21ebb7545745fa66facf618d208.record.md new file mode 100644 index 0000000000..fe77034cc8 --- /dev/null +++ b/docs/branch-review-records/7bd50bd9c4093cf764692231945db6e88a27e21ebb7545745fa66facf618d208.record.md @@ -0,0 +1 @@ +| 2026-08-15 | PR #1978 | ef1bb2eac059d1c3ad0d4cae756bb069b5b8edb2 | review-and-fix | Fixed applied cancel-of-cancel acceptance and restored guard-push executable mode; verified rewritten-history and parallel-reconcile semantics; merged latest main | focused Vitest 39 passed, 1 Windows skip; guard self-tests; ledger and issue guards; format; manual adversarial review (CodeRabbit CLI unavailable) | diff --git a/docs/branch-review-records/7ce860ee652bd3f4e91c56cab26f002c8fd5e5b18eee189d01baaaa18ffd432c.record.md b/docs/branch-review-records/7ce860ee652bd3f4e91c56cab26f002c8fd5e5b18eee189d01baaaa18ffd432c.record.md new file mode 100644 index 0000000000..d2dc82c71f --- /dev/null +++ b/docs/branch-review-records/7ce860ee652bd3f4e91c56cab26f002c8fd5e5b18eee189d01baaaa18ffd432c.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/db-remediation-phase-0-wfaiyl | becdb68610b27e7c38e9607c8bb0210911107581 | PR #1978 base sync | Merged main 6f7b7deefaf7e0cd062b748f18fc6ca8988093f6 into the reviewed PR head; merge tree was clean. | git merge-tree --write-tree exact-head main: clean; git diff --check; ledger guards. | diff --git a/docs/branch-review-records/801656524b713b73ce558ee09425ea5e24d3c5d61ebd572a963c9495b3745731.record.md b/docs/branch-review-records/801656524b713b73ce558ee09425ea5e24d3c5d61ebd572a963c9495b3745731.record.md new file mode 100644 index 0000000000..62b04fc13b --- /dev/null +++ b/docs/branch-review-records/801656524b713b73ce558ee09425ea5e24d3c5d61ebd572a963c9495b3745731.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/ledger-review-triage-yi63ao | fa087d2aebaceb953029d7805bf2437e03de1cd7 | Required base sync through main d301d8f4 | approved | git diff --check; ledger and issue guards | diff --git a/docs/branch-review-records/80cbe21a397bb239bbc43ceca3bf117412cf732bc2ad6e0bfc360a7a759102ed.record.md b/docs/branch-review-records/80cbe21a397bb239bbc43ceca3bf117412cf732bc2ad6e0bfc360a7a759102ed.record.md new file mode 100644 index 0000000000..1a41f08087 --- /dev/null +++ b/docs/branch-review-records/80cbe21a397bb239bbc43ceca3bf117412cf732bc2ad6e0bfc360a7a759102ed.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/issues-reconcile-lnhvja | cabdd290b00ff81569955cdd4a1b6b6b9f8999de | serialized outstanding-issues reconciliation (9 requests, 2 cancels) | PR #1967 open | issues:reconcile applied 9; check:outstanding-issues pass; verify:pr-local failed:(none) | diff --git a/docs/branch-review-records/8145832620703718dd3e73fb75753072cb7b441b62d2ddf6230bbc962e48a76c.record.md b/docs/branch-review-records/8145832620703718dd3e73fb75753072cb7b441b62d2ddf6230bbc962e48a76c.record.md new file mode 100644 index 0000000000..6228813bf1 --- /dev/null +++ b/docs/branch-review-records/8145832620703718dd3e73fb75753072cb7b441b62d2ddf6230bbc962e48a76c.record.md @@ -0,0 +1 @@ +| 2026-08-16 | PR-2000 / codex/chat-ledger-programme-ledger-programme | b2cc119e622cce051a8c9551a839a5a93fbb45a3 | PR #2000 merged-base outstanding-issue request review | Confirmed premature closure of #098 and corrected it in the successor commit; the other seven requests were supported or appropriately left open | exact-head PR required passed at 270a0661e0812ccad0229db021cff26f4efb14a4; standalone JSON and request-schema validation; referenced commit and merged-PR audit; merge-tree verification; #237 and #238 browser evidence not independently rerun | diff --git a/docs/branch-review-records/8243bee1cb3db8072c44ead4c341496c2ac29c430dc0d2d9fc0930d314b14c9f.record.md b/docs/branch-review-records/8243bee1cb3db8072c44ead4c341496c2ac29c430dc0d2d9fc0930d314b14c9f.record.md new file mode 100644 index 0000000000..f93c173d5b --- /dev/null +++ b/docs/branch-review-records/8243bee1cb3db8072c44ead4c341496c2ac29c430dc0d2d9fc0930d314b14c9f.record.md @@ -0,0 +1 @@ +| 2026-08-14 | PR-1955 | 6daa3a56f5d5e20ca9f8b8fe35c33a2cc708ef60 | src/components/clinical-dashboard/account-setup-dialog.tsx; docs/branch-review-records | fixed design-system contract violations and merged latest main | manual adversarial review; source-token contract assertion; git merge-tree; git diff --check; docs links; ledger inbox; ledger guards; check-design-system-contract unavailable (node_modules absent) | diff --git a/docs/branch-review-records/87f8cf80747ffeca51cee65f24c1a612dbaa08024e096bbcc0201a7434bbf1f3.record.md b/docs/branch-review-records/87f8cf80747ffeca51cee65f24c1a612dbaa08024e096bbcc0201a7434bbf1f3.record.md new file mode 100644 index 0000000000..ea99615114 --- /dev/null +++ b/docs/branch-review-records/87f8cf80747ffeca51cee65f24c1a612dbaa08024e096bbcc0201a7434bbf1f3.record.md @@ -0,0 +1 @@ +| 2026-08-14 | PR-1955 | 6cdf22cb0ce058c827c489b512b47d5e6084da4e | PR #1955 CI repair and current-base sync (supersedes prior non-decisive review records) | fixed the CI-blocking legacy 44px brand-tile classes with the shared tap token; merged current main | account setup tap-token source contract passed; git diff --check passed; docs link check passed: 1776 repo path references resolve.; Ledger inbox check passed: 12 pending request(s), 138 applied.; ledger write discipline self-test passed.; Branch review ledger guard passed: 880 live table records + 1206 archived + 87 immutable; npm run format unavailable: prettier: not found (exit 127); check:design-system-contract unavailable locally: node_modules is absent; exact CI required | diff --git a/docs/branch-review-records/887618b97bf3256125def037cd1b5e87659aaa9b1439015c6354eb96e19d0c46.record.md b/docs/branch-review-records/887618b97bf3256125def037cd1b5e87659aaa9b1439015c6354eb96e19d0c46.record.md new file mode 100644 index 0000000000..3b89e21920 --- /dev/null +++ b/docs/branch-review-records/887618b97bf3256125def037cd1b5e87659aaa9b1439015c6354eb96e19d0c46.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/search-phone-animation-20260815 | ed29ba4b3effa6ad58f4a6ecc240b30a6a93fdd2 | Fresh phone browser and standalone-PWA loading animation defect hunt after physical-device failure report | Fixed: moved the ECG opacity pulse from an SVG path to a normal HTML compositor layer and added WebKit raster-difference coverage | CSS contract 3/3; focused production WebKit 2/2; design-system contract passed | diff --git a/docs/branch-review-records/898e1bc7855d44ca3df03b0c0f9747960713a6a06b532505caa5548de80b814c.record.md b/docs/branch-review-records/898e1bc7855d44ca3df03b0c0f9747960713a6a06b532505caa5548de80b814c.record.md new file mode 100644 index 0000000000..b6248747b3 --- /dev/null +++ b/docs/branch-review-records/898e1bc7855d44ca3df03b0c0f9747960713a6a06b532505caa5548de80b814c.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/differential-results-ui-20260814 | d12e0217c4adc057e27ad92fb5dad144ba38995a | differential clinical-cue regression and formatter follow-up | Aligned the focused result-row assertion with the displayed compact-cue normalization and formatted the mobile rank calculation reported by changed-file formatting. Targeted Vitest unavailable because this isolated worktree has no node_modules/vitest. | git diff --check; ledger-inbox; outstanding-issues; branch-review-ledger; ledger-write-discipline; ci-change-scope --self-test | diff --git a/docs/branch-review-records/8a26a9949fd0c9384acd0f0868d96374080dd7191777c1be29037b6edc8c3069.record.md b/docs/branch-review-records/8a26a9949fd0c9384acd0f0868d96374080dd7191777c1be29037b6edc8c3069.record.md new file mode 100644 index 0000000000..87795a4a56 --- /dev/null +++ b/docs/branch-review-records/8a26a9949fd0c9384acd0f0868d96374080dd7191777c1be29037b6edc8c3069.record.md @@ -0,0 +1 @@ +| 2026-08-15 | 1971 | 91fe143262fca184124b540ff06b2353aec8094f | review-and-fix | Fixed validated P2 evidence-semantics, sparse-panel, cue-deduplication, duplicate-key, and formatter blockers; immutable-record bot request dispositioned no-change. | focused Vitest 8/8 passed; format changed passed; lint passed; typecheck passed; ledger and docs guards passed; full unit gate partial with 6 Windows tooling failures reproduced identically on main; production readiness environment-gated (2 pass, 5 warn, 2 missing-config failures) | diff --git a/docs/branch-review-records/8f593be414cd088768dc59074dcd77476f562cfdaabd4d2b23cd3a67336a02ff.record.md b/docs/branch-review-records/8f593be414cd088768dc59074dcd77476f562cfdaabd4d2b23cd3a67336a02ff.record.md new file mode 100644 index 0000000000..594dc1b4c8 --- /dev/null +++ b/docs/branch-review-records/8f593be414cd088768dc59074dcd77476f562cfdaabd4d2b23cd3a67336a02ff.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/rag-zod-hardening-tranche2 | 690204f669db3be9995b6c658ad2eb35befbdace | PR #1981 retrieval row contract formatter follow-up | Collapsed a formatter-stable candidate-source import after the exact-head changed-file format gate failed; retained the validated row-shape assertions. | git diff --check; ledger/outstanding/branch-ledger/ledger-discipline guards; ci-change-scope self-test passed; npm test -- tests/rag-retrieval-row-contract.test.ts unavailable: node_modules/vitest/vitest.mjs absent. | diff --git a/docs/branch-review-records/903f043f143538cff9e2ce0043a9d2fa6822d3be129f8d506cb93ac4bc3960a3.record.md b/docs/branch-review-records/903f043f143538cff9e2ce0043a9d2fa6822d3be129f8d506cb93ac4bc3960a3.record.md new file mode 100644 index 0000000000..dfda5288be --- /dev/null +++ b/docs/branch-review-records/903f043f143538cff9e2ce0043a9d2fa6822d3be129f8d506cb93ac4bc3960a3.record.md @@ -0,0 +1 @@ +| 2026-08-16 | PR-2008 / codex/tools-show-all-20260816 | db72f545635c9e611da3c4f3bb70bbda991699a4 | PR #2008 latest-base refresh after green exact-head CI | Merged main 4b601e34f2a3398121a23e7db64a04690075ddd3; its default-off clinical answer evidence preview changes do not overlap the launcher component or dedicated Show all regression; no new P0/P1/P2 defects confirmed | Exact-head PR required, static, build, unit, production UI, critical UI, CI-managed Lighthouse budget, SAST, and secret scans passed at f34fad1f725410995fe90f1d356c7764de9b5a07; 54585e98df133c0b49cf32cc878473ea0beba46d-to-4b601e34f2a3398121a23e7db64a04690075ddd3 compare reviewed; clean non-overlapping merge-tree construction | diff --git a/docs/branch-review-records/91679c0f8d364c93cfbe6f9c54463ec90d9dcbbfa158d1876e0ed8744f2c0162.record.md b/docs/branch-review-records/91679c0f8d364c93cfbe6f9c54463ec90d9dcbbfa158d1876e0ed8744f2c0162.record.md new file mode 100644 index 0000000000..999a5c168f --- /dev/null +++ b/docs/branch-review-records/91679c0f8d364c93cfbe6f9c54463ec90d9dcbbfa158d1876e0ed8744f2c0162.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/playwright-browser-revision-check | 3447238f1c66154dca9b567924fb0a2f57a28c84 | PR #1965: Playwright browser revision check | fixed | prettier; targeted Vitest 5 passed; independent Codex adversarial review: 3 P2 fixed; full Vitest unavailable (cached runtime lacks playwright-core browsers.json) | diff --git a/docs/branch-review-records/99bf725572728b2e2a1e7b1ddcc5f08b3d10e50e1fa7091856c41a9fe03cde52.record.md b/docs/branch-review-records/99bf725572728b2e2a1e7b1ddcc5f08b3d10e50e1fa7091856c41a9fe03cde52.record.md new file mode 100644 index 0000000000..ffedd75e47 --- /dev/null +++ b/docs/branch-review-records/99bf725572728b2e2a1e7b1ddcc5f08b3d10e50e1fa7091856c41a9fe03cde52.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/differential-results-ui-20260814 | cc999ff537622d2bfa73df4d56be2b45b16c449a | Required base sync through main 3824095d8bf2 | approved | git diff --check; CI scope self-test; ledger and issue guards | diff --git a/docs/branch-review-records/9b89f9091c287b15d98bcce1bbf9c687061e0b75ff2d71b8610f6b5cfd49ae43.record.md b/docs/branch-review-records/9b89f9091c287b15d98bcce1bbf9c687061e0b75ff2d71b8610f6b5cfd49ae43.record.md new file mode 100644 index 0000000000..b61fca86ab --- /dev/null +++ b/docs/branch-review-records/9b89f9091c287b15d98bcce1bbf9c687061e0b75ff2d71b8610f6b5cfd49ae43.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/fix-documents-without-live-images | a42f45955ad8595ccd17ac4fea2ea0d6fd2c2f3f | required base sync through main 17402395 | Approved — required main update merged; prior document-cover repair review remains applicable with no PR-path conflict | git diff --check; ci-change-scope self-test; ledger/inbox/outstanding/discipline guards passed | diff --git a/docs/branch-review-records/9cb91634447e60affd610471e14ffdbacf8e042b608a2c3553c5ae303b34e92b.record.md b/docs/branch-review-records/9cb91634447e60affd610471e14ffdbacf8e042b608a2c3553c5ae303b34e92b.record.md new file mode 100644 index 0000000000..8cdd6530c8 --- /dev/null +++ b/docs/branch-review-records/9cb91634447e60affd610471e14ffdbacf8e042b608a2c3553c5ae303b34e92b.record.md @@ -0,0 +1 @@ +| 2026-08-14 | PR-1951 | 6ed1fb871c7e16e89ed111a9576d502d90a765b1 | PR #1951 final base sync after formatting fix | Merged the current main including the #1959 ledger reconciliation after the targeted Prettier repair; merge tree is clean and the run-scoped workflow regression suite remains green. | All matched files use Prettier code style; Test Files 1 passed; Tests 15 passed; docs link check passed: 1775 repo path references resolve; Ledger inbox check passed: 22 pending request(s), 138 applied; branch-review-ledger self-test passed; Branch review ledger guard passed: 880 live table records + 1206 archived + 98 immutable; verify:pr-local unavailable: tsx/cli absent from isolated worktree (Node v24.14.0). | diff --git a/docs/branch-review-records/a23d66df28dc33bad16d7d3883fb4129a9971399fe8906bfc771c3543c63b820.record.md b/docs/branch-review-records/a23d66df28dc33bad16d7d3883fb4129a9971399fe8906bfc771c3543c63b820.record.md new file mode 100644 index 0000000000..94ac8d0c39 --- /dev/null +++ b/docs/branch-review-records/a23d66df28dc33bad16d7d3883fb4129a9971399fe8906bfc771c3543c63b820.record.md @@ -0,0 +1 @@ +| 2026-08-16 | PR-2008 / codex/tools-show-all-20260816 | 75028ebb9d48ae06ccd99621b3f7881af50b91f4 | PR #2008 latest-base shared UI test merge after green exact-head CI | Merged main 54585e98df133c0b49cf32cc878473ea0beba46d; kept its low-confidence AccessibleTable 320px mockup journey in the shared suite and moved this PR's Show all launcher regression to dedicated tests/ui-tools-show-all.spec.ts; no new P0/P1/P2 defects confirmed | Exact-head PR required, static, build, unit, production UI, critical UI, advisory UI, CI-managed Lighthouse budget, SAST, and secret scans passed at 4db291a50e7aad2239fe85303b886ab248978c3f; fb8c71c94f8a45028df36aa669e3653c4f75cd2a-to-54585e98df133c0b49cf32cc878473ea0beba46d compare reviewed; merged source and test contracts reviewed | diff --git a/docs/branch-review-records/a5309edd41a122ccf51a2dacea385abdd2b404d07061df6833f1ef1289d053f3.record.md b/docs/branch-review-records/a5309edd41a122ccf51a2dacea385abdd2b404d07061df6833f1ef1289d053f3.record.md new file mode 100644 index 0000000000..d6e8d67258 --- /dev/null +++ b/docs/branch-review-records/a5309edd41a122ccf51a2dacea385abdd2b404d07061df6833f1ef1289d053f3.record.md @@ -0,0 +1 @@ +| 2026-08-15 | PR #1970 / claude/capture-drift-phase1-evidence | 6d977b02331c04398daf930acc773743355b68f5 | unblocking PR review-and-fix | Corrected four P2 forensic claims and cancelled the two unsafe queued ledger mutations; merged current main cleanly. | ledger write discipline; ledger-inbox check; forensic claim scan; diff --check | diff --git a/docs/branch-review-records/a55dc77c0266823fc485b9f5e8b164e6f47b1ae95aae4517cd969e5cd9246fa6.record.md b/docs/branch-review-records/a55dc77c0266823fc485b9f5e8b164e6f47b1ae95aae4517cd969e5cd9246fa6.record.md new file mode 100644 index 0000000000..803822f452 --- /dev/null +++ b/docs/branch-review-records/a55dc77c0266823fc485b9f5e8b164e6f47b1ae95aae4517cd969e5cd9246fa6.record.md @@ -0,0 +1 @@ +| 2026-08-14 | PR-1958 | 02c8d4601131b40291033eabaf4b3d2e132c248e | PR #1958 current-base sync | Merged the latest base, preserving the existing Tools-directory behavior and resolving shared account-setup test updates with the combined clean merge tree. | docs link check passed: 1776 repo path references resolve; Ledger inbox check passed: 12 pending request(s), 138 applied; branch-review-ledger self-test passed; Branch review ledger guard passed: 880 live table records + 1206 archived + 94 immutable; 17 non-jsdom targeted tests passed; jsdom targets unavailable because cached Vitest dependencies lack @testing-library/react and @testing-library/jest-dom; verify:pr-local unavailable: tsx/cli absent from isolated worktree (Node v24.14.0). | diff --git a/docs/branch-review-records/a9f750bbfb5bbb2857e2cdbb97a2dc446b1851cec993f8a91dd526fcbc750d25.record.md b/docs/branch-review-records/a9f750bbfb5bbb2857e2cdbb97a2dc446b1851cec993f8a91dd526fcbc750d25.record.md new file mode 100644 index 0000000000..2bb54b8f69 --- /dev/null +++ b/docs/branch-review-records/a9f750bbfb5bbb2857e2cdbb97a2dc446b1851cec993f8a91dd526fcbc750d25.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/pwa-install-polish-20260815 | dd687f20c2143466b40d51ce2831542130964af4 | PWA install lifecycle: style-contract registry and current-base merge | Fixed PR-introduced unregistered PWA visual classes; stale install-sheet exemption removed; merged current base | git diff --check; ledger-inbox; outstanding-issues; branch-review-ledger; ledger-write-discipline; static PWA registry assertion; targeted Vitest unavailable (node_modules absent) | diff --git a/docs/branch-review-records/aa23b8cd5be8c299c1878de6b92a7b1a3256129ab978d51a792d14ad7c785d73.record.md b/docs/branch-review-records/aa23b8cd5be8c299c1878de6b92a7b1a3256129ab978d51a792d14ad7c785d73.record.md new file mode 100644 index 0000000000..b0dca5cbc6 --- /dev/null +++ b/docs/branch-review-records/aa23b8cd5be8c299c1878de6b92a7b1a3256129ab978d51a792d14ad7c785d73.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/medication-info-header-20260814 | 9c1bfe7154eb36e890b4d4e8d61d83da7ba6c926 | required base sync through main 17402395 | Approved — required main update merged; prior focused medication-header review remains applicable with no PR-path conflict | git diff --check; ci-change-scope self-test; ledger/inbox/outstanding/discipline guards passed | diff --git a/docs/branch-review-records/ac537aead3881d4cf73e22512e83e1803a1c9ca11fa10969155f42bcdda2e75b.record.md b/docs/branch-review-records/ac537aead3881d4cf73e22512e83e1803a1c9ca11fa10969155f42bcdda2e75b.record.md new file mode 100644 index 0000000000..96475375a5 --- /dev/null +++ b/docs/branch-review-records/ac537aead3881d4cf73e22512e83e1803a1c9ca11fa10969155f42bcdda2e75b.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/fix-documents-without-live-images | 316018b41177e34612f08339bf4baf37055abf00 | PR #1975 base sync | Merged main 6f7b7deefaf7e0cd062b748f18fc6ca8988093f6 into the reviewed PR head; merge tree was clean. | git merge-tree --write-tree exact-head main: clean; git diff --check; ledger guards. | diff --git a/docs/branch-review-records/b22a65eca447a754f2a971dae18a24a12fc5f3b7bb18a89e813bc2d9a11d1e12.record.md b/docs/branch-review-records/b22a65eca447a754f2a971dae18a24a12fc5f3b7bb18a89e813bc2d9a11d1e12.record.md new file mode 100644 index 0000000000..da41f47c81 --- /dev/null +++ b/docs/branch-review-records/b22a65eca447a754f2a971dae18a24a12fc5f3b7bb18a89e813bc2d9a11d1e12.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/calculators-mode | 9dc3891ee8bc30a35fdb203607cdd984d3a24cc3 | calculator command-surface P1/P2 follow-up: suggestion submit and footer ownership docs | Fixed P1/P2 — selected calculator suggestions pass their exact text into navigation; chrome ownership docs no longer describe calculators as page-owned footers | manual control-flow review; focused DOM regression added; git diff --check; ci-change-scope self-test; ledger/inbox/outstanding/discipline guards passed; focused Vitest blocked: node_modules/vitest absent | diff --git a/docs/branch-review-records/b2482dceb2ee840589af0dfbe5f66b5f406c49c01ccd942a2c3f16bca8ae8ade.record.md b/docs/branch-review-records/b2482dceb2ee840589af0dfbe5f66b5f406c49c01ccd942a2c3f16bca8ae8ade.record.md new file mode 100644 index 0000000000..fd9e8eddb2 --- /dev/null +++ b/docs/branch-review-records/b2482dceb2ee840589af0dfbe5f66b5f406c49c01ccd942a2c3f16bca8ae8ade.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/db-remediation-phase-0-wfaiyl | 1a8f7ae02c2bd7aa22e51edfb3b4a7b249ede578 | required base sync through main 17402395 | Approved — required main update merged; prior ledger guard remediation review remains applicable with no PR-path conflict | git diff --check; ci-change-scope self-test; ledger/inbox/outstanding/discipline guards passed | diff --git a/docs/branch-review-records/b3523668f8839bde68f1fae4de2e7e8275b5cabc1802d1b6511b30323adad6ad.record.md b/docs/branch-review-records/b3523668f8839bde68f1fae4de2e7e8275b5cabc1802d1b6511b30323adad6ad.record.md new file mode 100644 index 0000000000..83b79fb206 --- /dev/null +++ b/docs/branch-review-records/b3523668f8839bde68f1fae4de2e7e8275b5cabc1802d1b6511b30323adad6ad.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/pwa-install-polish-20260815 | 80fd6c04afdfa30e92c1cdf2ea5ba9d3d32a02c6 | PR #1976 base sync | Merged main 6f7b7deefaf7e0cd062b748f18fc6ca8988093f6 into the reviewed PR head; merge tree was clean. | git merge-tree --write-tree exact-head main: clean; git diff --check; ledger guards. | diff --git a/docs/branch-review-records/b50552bc27edf96d286fcb2c582831863c1893c66a80b3dc38988a8ef6ef5dc0.record.md b/docs/branch-review-records/b50552bc27edf96d286fcb2c582831863c1893c66a80b3dc38988a8ef6ef5dc0.record.md new file mode 100644 index 0000000000..3125558c77 --- /dev/null +++ b/docs/branch-review-records/b50552bc27edf96d286fcb2c582831863c1893c66a80b3dc38988a8ef6ef5dc0.record.md @@ -0,0 +1 @@ +| 2026-08-16 | PR-2008 / codex/tools-show-all-20260816 | e40e375dfa5346614d5b0c143e9f2e8f0fe44bd8 | PR #2008 post-review base refresh | Required base refresh to 4c52fe1dbbc921be769c31b36efbcdba798ba11b reviewed; the base delta adds only unrelated branch-review records and outstanding-issue inbox updates, with no overlap with this PR's launcher or focused UI regression files; the original review disposition remains valid | Exact-head PR required, CI, SAST, and secret scan passed at b089bf262b1aff99f57b22e45cbd941e815175c1; a96dcbb6280ab6889c3b443be4d348950786a809-to-4c52fe1dbbc921be769c31b36efbcdba798ba11b compare reviewed; clean synthetic merge-tree verification | diff --git a/docs/branch-review-records/badab2e50d140f081e049c934ff5e1c37b7415e4213102534a21b99bb97e87fe.record.md b/docs/branch-review-records/badab2e50d140f081e049c934ff5e1c37b7415e4213102534a21b99bb97e87fe.record.md new file mode 100644 index 0000000000..4ade101f00 --- /dev/null +++ b/docs/branch-review-records/badab2e50d140f081e049c934ff5e1c37b7415e4213102534a21b99bb97e87fe.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/services-search-redesign-163 | 5c1befa6bc7947381b707efaa50daa6e86ca9a88 | review-and-fix | P2 fixes published: serialize result-row favourite mutations and keep failed loads state-neutral and unavailable | focused services DOM tests 8/8; typecheck; lint; format:changed; branch-review-ledger; outstanding-issues; git diff --check | diff --git a/docs/branch-review-records/bb4cf300c0917336cbfb205dc3631242f4e32aab35d3d3bfe1d0654c41f7bf34.record.md b/docs/branch-review-records/bb4cf300c0917336cbfb205dc3631242f4e32aab35d3d3bfe1d0654c41f7bf34.record.md new file mode 100644 index 0000000000..c0c42f5a5d --- /dev/null +++ b/docs/branch-review-records/bb4cf300c0917336cbfb205dc3631242f4e32aab35d3d3bfe1d0654c41f7bf34.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/rag-zod-hardening-tranche1 | 0fded0878b6f8e35ef50b8c97a63af6e78e1f716 | rag.ts retrieval RPC row Zod shape contract (ledger #212 tranche 1) | Approved — 4 unchecked as SearchResult[] casts on retrieval RPC rows replaced with assertRetrievalRows; no ranking/ordering/scoring logic touched | verify:pr-local (all steps green except pre-existing check:medication-lexicon-report staleness on main); test 602 files/6517 passed; typecheck exit 0; eval:rag:offline 36 golden cases 23 suites, 579 passed | diff --git a/docs/branch-review-records/bc83ff5f4c4f9421ec32cf4351708e95ce45c035738a63aaa40ea6ca6afcfa3d.record.md b/docs/branch-review-records/bc83ff5f4c4f9421ec32cf4351708e95ce45c035738a63aaa40ea6ca6afcfa3d.record.md new file mode 100644 index 0000000000..3637257188 --- /dev/null +++ b/docs/branch-review-records/bc83ff5f4c4f9421ec32cf4351708e95ce45c035738a63aaa40ea6ca6afcfa3d.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/issues-reconcile-2026-08-15 | 3381a69cba662c7dd4083c0fe8747aa04d7c9097 | Canonical ledger reconcile of 17 queued requests after the #1982/#1983/#1984/#1985 merges | Applied cleanly; inbox 0 pending / 189 applied | issues:reconcile applied 17 requests with 3 cancellation decisions; check:outstanding-issues 341 rows (97 open, 244 archived), unique ids, next-id 344 above highest, no ids deleted from base; check:ledger-write-discipline passed for 2e3ac494b8b7..HEAD (canonical diff equals the recorded transaction); verify:pr-local docs-scoped route, 11 gates, none failed | diff --git a/docs/branch-review-records/bde56718d14d5138e7a29a72d16402b4445bd109c6f2bfcffd686c6e436d8c74.record.md b/docs/branch-review-records/bde56718d14d5138e7a29a72d16402b4445bd109c6f2bfcffd686c6e436d8c74.record.md new file mode 100644 index 0000000000..21f4011c7a --- /dev/null +++ b/docs/branch-review-records/bde56718d14d5138e7a29a72d16402b4445bd109c6f2bfcffd686c6e436d8c74.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/pwa-install-polish-20260815 | 80eb8f6d1c332ee5c32a27da93eb026fb6d9b0d1 | PWA stylesheet design-token contract remediation | Replaced PR-introduced raw PWA motion, padding, radius, gap, and line-height declarations with scoped semantic roles and existing design tokens; preserved rendered values. | git diff --check; manual CSS-contract audit (no new raw guarded declarations); static gate unavailable locally: @typescript/typescript6 not installed | diff --git a/docs/branch-review-records/beb5fe80c053cc8851671deef0ce7cd98c6faddaa53896ff35345ca396b74fc6.record.md b/docs/branch-review-records/beb5fe80c053cc8851671deef0ce7cd98c6faddaa53896ff35345ca396b74fc6.record.md new file mode 100644 index 0000000000..3fc4349787 --- /dev/null +++ b/docs/branch-review-records/beb5fe80c053cc8851671deef0ce7cd98c6faddaa53896ff35345ca396b74fc6.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/fix-documents-without-live-images | 5a2530ee107a1c849dafb716deca462bcaca848e | Document cover thumbnail audit and repair | Preserved generation fences and storage cleanup P2 fixes while merging the latest base; reconciled the archived repair-script path and verified no new P0-P2 finding. | git diff --check; node --check archive script; ledger inbox/outstanding-issues/branch-ledger/discipline guards; cover repair/archive static contracts; focused Vitest attempted but unavailable because the isolated worktree has no node_modules | diff --git a/docs/branch-review-records/bef6e7b39ba0aa36284eab8596c7dc491e54c41d2868644d05d96de656d0fe06.record.md b/docs/branch-review-records/bef6e7b39ba0aa36284eab8596c7dc491e54c41d2868644d05d96de656d0fe06.record.md new file mode 100644 index 0000000000..67b783dabb --- /dev/null +++ b/docs/branch-review-records/bef6e7b39ba0aa36284eab8596c7dc491e54c41d2868644d05d96de656d0fe06.record.md @@ -0,0 +1 @@ +| 2026-08-16 | PR-2008 / codex/tools-show-all-20260816 | 74f618c8c6b3a5ec2099ab070cd198ddf70a3f1c | PR #2008 content-address repair and latest-base refresh | Corrected the malformed review-record filename to the repository-derived SHA-256 path without changing its row bytes; merged main 3f33068da16ef8a3235359ff974c9314cf79d758, whose API response-parsing changes and two review records do not overlap this PR's launcher or focused UI test; no new P0/P1/P2 defects confirmed | Exact-head CI reproduced the ledger guard failure; canonical path b50552bc27edf96d286fcb2c582831863c1893c66a80b3dc38988a8ef6ef5dc0 derived from reviewRecordPath; 4c52fe1dbbc921be769c31b36efbcdba798ba11b-to-3f33068da16ef8a3235359ff974c9314cf79d758 compare reviewed; prior b089bf262b1aff99f57b22e45cbd941e815175c1 exact-head required CI passed; final head requires rerun | diff --git a/docs/branch-review-records/c0745ca069118cbdc5b5a01db696a7e7b68f83afb90f34c467a97b28ecf12fc0.record.md b/docs/branch-review-records/c0745ca069118cbdc5b5a01db696a7e7b68f83afb90f34c467a97b28ecf12fc0.record.md new file mode 100644 index 0000000000..186074bfdc --- /dev/null +++ b/docs/branch-review-records/c0745ca069118cbdc5b5a01db696a7e7b68f83afb90f34c467a97b28ecf12fc0.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/differential-results-ui-20260814 | 80a00d0cb97194f62cb5c37170f6c30121d3b78c | Differentials mobile rank formatter correction | Restored Prettier canonical call-chain wrapping for the mobile rank calculation; no behavior change. | git diff --check; canonical formatter layout compared with retained repository review commit; focused tests unavailable locally: vitest is not installed | diff --git a/docs/branch-review-records/c0e02ee4e90a6401ef8316af58b1bf530d74e359a217e4d91d21eae705b7ab81.record.md b/docs/branch-review-records/c0e02ee4e90a6401ef8316af58b1bf530d74e359a217e4d91d21eae705b7ab81.record.md new file mode 100644 index 0000000000..36caa306c4 --- /dev/null +++ b/docs/branch-review-records/c0e02ee4e90a6401ef8316af58b1bf530d74e359a217e4d91d21eae705b7ab81.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/db-remediation-phase-0-wfaiyl | 08a49b316b505a5ef39d0e7fd514a7ece7993f8f | PR #1951 review-and-fix | fixed stale pending cancellation after base reconciliation; preserved only valid remaining queue mutations | offline: reproduced docs:check-links failure; docs:check-links pass after fix; check-outstanding-issues; ledger-inbox check; Prettier affected requests; git diff --check | diff --git a/docs/branch-review-records/c56fc20eb8b758bec749726901ef79ce50012974b924d01bcc5b55b6dc00d1ad.record.md b/docs/branch-review-records/c56fc20eb8b758bec749726901ef79ce50012974b924d01bcc5b55b6dc00d1ad.record.md new file mode 100644 index 0000000000..5487a026f4 --- /dev/null +++ b/docs/branch-review-records/c56fc20eb8b758bec749726901ef79ce50012974b924d01bcc5b55b6dc00d1ad.record.md @@ -0,0 +1 @@ +| 2026-08-15 | 1976 | 81c44aee0b788a5aa93522a09092cddcd12b0bf0 | review-and-fix | CI blocker fixed: register compact native-install CSS selectors in the unlayered style inventory | style-contract registry 15/15; PWA DOM 10/10; PWA Chromium 5/5; Lighthouse exact-head green | diff --git a/docs/branch-review-records/c7a8273f16ecbd3771d5a703a01cb219557f400ee0e274af7e1ce61963db465b.record.md b/docs/branch-review-records/c7a8273f16ecbd3771d5a703a01cb219557f400ee0e274af7e1ce61963db465b.record.md new file mode 100644 index 0000000000..f8313b307c --- /dev/null +++ b/docs/branch-review-records/c7a8273f16ecbd3771d5a703a01cb219557f400ee0e274af7e1ce61963db465b.record.md @@ -0,0 +1 @@ +| 2026-08-14 | PR-1958 | d5acb3e677556420df94a0adf8fbeba06ce5dc73 | Tools mode navigation; shared-home route contract; docs/branch-review-records | fixed Tools preference persistence and stale CI source-contract assertion; merged latest main | manual adversarial review; targeted source contracts; git merge-tree; git diff --check; docs links; ledger inbox; ledger guards; focused Vitest unavailable (node_modules absent) | diff --git a/docs/branch-review-records/c87cf33f8557b35b1edb08b1fc38f1a5a415ce87df2c2daba46045b0b84391ab.record.md b/docs/branch-review-records/c87cf33f8557b35b1edb08b1fc38f1a5a415ce87df2c2daba46045b0b84391ab.record.md new file mode 100644 index 0000000000..f5594b258e --- /dev/null +++ b/docs/branch-review-records/c87cf33f8557b35b1edb08b1fc38f1a5a415ce87df2c2daba46045b0b84391ab.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/rag-zod-hardening-tranche2 | 20304ddc703fdc6913e1b62ad532b552ff919dac | RAG row-contract tranche 2: optional signal shape-mismatch degradation; merged main | Approved with P1 fix — malformed optional embedding-field/index-unit rows are logged and degrade to no signal candidates, preserving chunk retrieval; no ranking, ordering, or clinical-output contract changed | manual adversarial control-flow review; git diff --check; ci-change-scope self-test; ledger/inbox/outstanding/discipline guards passed; targeted Vitest blocked: node_modules/vitest absent | diff --git a/docs/branch-review-records/c9661626e5c2a0e5f848b375b83006a00452994ad503349944c2fb345c8b42a1.record.md b/docs/branch-review-records/c9661626e5c2a0e5f848b375b83006a00452994ad503349944c2fb345c8b42a1.record.md new file mode 100644 index 0000000000..7aa89a6953 --- /dev/null +++ b/docs/branch-review-records/c9661626e5c2a0e5f848b375b83006a00452994ad503349944c2fb345c8b42a1.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/playwright-tsconfig-isolation | a5af47d083091a44cf515bed031d7cbd1bea3ea7 | scripts/run-playwright.mjs | FIXED - isolated child tsconfig given explicit include/exclude, empirically reproduced and verified | typecheck,verify:ui-focused-repro | diff --git a/docs/branch-review-records/c9a0488b91b894d94e2d4e04dcafc9695eafe28d82fda3e3c9386541fb3aaec0.record.md b/docs/branch-review-records/c9a0488b91b894d94e2d4e04dcafc9695eafe28d82fda3e3c9386541fb3aaec0.record.md new file mode 100644 index 0000000000..6fa577d821 --- /dev/null +++ b/docs/branch-review-records/c9a0488b91b894d94e2d4e04dcafc9695eafe28d82fda3e3c9386541fb3aaec0.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/medication-list-spacing-20260814 | f38d4da8bc54dbe37fae0de7602a71b4fcd1a6a6 | Medication prescribing desktop grid width and row overflow | Confirmed the prior P2 grid-width fix remains present and merged current main to keep the PR current. | git diff --check; ledger inbox/outstanding-issues/ledger-discipline guards; direct 1024px minimum-grid calculation; Playwright unavailable because this isolated worktree has no node_modules | diff --git a/docs/branch-review-records/cc0db6b399e9168bfe40fd9cdce6209b623eaa682ce4b9524e6eed48ee04a235.record.md b/docs/branch-review-records/cc0db6b399e9168bfe40fd9cdce6209b623eaa682ce4b9524e6eed48ee04a235.record.md new file mode 100644 index 0000000000..05cf676adc --- /dev/null +++ b/docs/branch-review-records/cc0db6b399e9168bfe40fd9cdce6209b623eaa682ce4b9524e6eed48ee04a235.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/ledger-process-tooling-50uqfc | 893f481005a66d6e2304396284e1aec63dbf3ae0 | PR #1944 CI-blocker fix | Removed cancellation targeting an already applied inbox request | docs:check-links, check:outstanding-issues, check:ledger-write-discipline | diff --git a/docs/branch-review-records/ccf620aa5c3871b3787e29f50511d79a9a9ba43bc3591b8d0e1bd117ed930ea5.record.md b/docs/branch-review-records/ccf620aa5c3871b3787e29f50511d79a9a9ba43bc3591b8d0e1bd117ed930ea5.record.md new file mode 100644 index 0000000000..07da5c66ee --- /dev/null +++ b/docs/branch-review-records/ccf620aa5c3871b3787e29f50511d79a9a9ba43bc3591b8d0e1bd117ed930ea5.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/favourites-hybrid-164 | 02672320db5a0b5b57b589e8d19d19c8c66483d4 | Favourites search-led workspace: retire marketing H1 and library nav, live in-place filter, dashboard band (#164) | Shipped; no P0-P2 findings | verify:pr-local all 10 selected gates passed — unit suite 607 files / 6584 passed, 4 skipped; check:design-system-contract passed with edgeOwnershipConflicts 25 to 24 from the deleted nav module; UI delegated to CI Production UI — chromium-1194 vs pinned 1234 (#255/#312) | diff --git a/docs/branch-review-records/cd495affb93b35a4c9c27292318bff9bf09cbe3e2cf670a084930b870cd6fed6.record.md b/docs/branch-review-records/cd495affb93b35a4c9c27292318bff9bf09cbe3e2cf670a084930b870cd6fed6.record.md new file mode 100644 index 0000000000..f3efa53446 --- /dev/null +++ b/docs/branch-review-records/cd495affb93b35a4c9c27292318bff9bf09cbe3e2cf670a084930b870cd6fed6.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/test-source-contract-hardening | 0c1459ca2985e409d330d290a6518fdf877d3255 | review-and-fix | Fixed two P2 fail-open cases in the new source-window helper: overlapping repeated starts and empty markers; merged latest main | focused Vitest 49/49; format:changed; changed-file ESLint; source typecheck; outstanding-issues and ledger guards | diff --git a/docs/branch-review-records/cebd03715e584420f2fb63b757718fd8f04e9dfb00089261c37800f7d8edf694.record.md b/docs/branch-review-records/cebd03715e584420f2fb63b757718fd8f04e9dfb00089261c37800f7d8edf694.record.md new file mode 100644 index 0000000000..e86692ee4a --- /dev/null +++ b/docs/branch-review-records/cebd03715e584420f2fb63b757718fd8f04e9dfb00089261c37800f7d8edf694.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/pwa-install-polish-20260815 | 80fd6c04afdfa30e92c1cdf2ea5ba9d3d32a02c6 | PWA phone install/composer overlap regression | Restored the shared phone composer reserve for mode-home install sheets after the exact-head production UI geometry test found a 390px overlap. | git diff --check 0dd4b7e9be293815ec3d06f3b57682a1578bafe4; node scripts/ledger-inbox.mjs check; node scripts/check-outstanding-issues.mjs; node scripts/ci-change-scope.mjs --self-test; exact-head production UI geometry failure reviewed | diff --git a/docs/branch-review-records/d05426d18a2ed15eb393d7bc70c57358211520ff473b1e56d7fa4d4551f1c5b3.record.md b/docs/branch-review-records/d05426d18a2ed15eb393d7bc70c57358211520ff473b1e56d7fa4d4551f1c5b3.record.md new file mode 100644 index 0000000000..422381ad83 --- /dev/null +++ b/docs/branch-review-records/d05426d18a2ed15eb393d7bc70c57358211520ff473b1e56d7fa4d4551f1c5b3.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/gate2-viewport-determinism | f3bcced51d533d28c965277b6ab6875ad947d9b7 | PR #1962: deterministic Gate 2 tap-carrier enumeration | fixed | Prettier; explicit source-contract review; independent Codex adversarial review; Playwright delegated to exact-head CI (isolated worktree lacks dependencies) | diff --git a/docs/branch-review-records/d50a877214261c376d150342864090de1d5f90e53c3187b03f4165df702e9b5d.record.md b/docs/branch-review-records/d50a877214261c376d150342864090de1d5f90e53c3187b03f4165df702e9b5d.record.md new file mode 100644 index 0000000000..a4f7f63491 --- /dev/null +++ b/docs/branch-review-records/d50a877214261c376d150342864090de1d5f90e53c3187b03f4165df702e9b5d.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/ledger-guard-ci-followups | 8fe2a50b9bce29e24710fdf72ce8b5f187c0569e | Lexicon-report CI freshness and database remediation sequencing | Fixed P1 prerequisite order and P2 generated-report scope gap; merged current base with no conflicts | git diff --check; ci-change-scope direct-report classification and self-test; GitHub Actions pin check; remediation-order/workflow-contract assertions; ledger-inbox; outstanding-issues; branch-review-ledger; ledger-write-discipline; focused Vitest unavailable (node_modules absent) | diff --git a/docs/branch-review-records/d545333169b6e7645c813d4f760bcc8d901cef851b57bccb7874d8d6ff114f54.record.md b/docs/branch-review-records/d545333169b6e7645c813d4f760bcc8d901cef851b57bccb7874d8d6ff114f54.record.md new file mode 100644 index 0000000000..abaf23f90b --- /dev/null +++ b/docs/branch-review-records/d545333169b6e7645c813d4f760bcc8d901cef851b57bccb7874d8d6ff114f54.record.md @@ -0,0 +1 @@ +| 2026-08-16 | codex/chat-browser-evidence-235-238-browser-evidence-235-238 | 2d0126d6dd3b3727e8a99549a5e0d3678039960c | PR #2006 AccessibleTable low-confidence 320px mockup journey | No high-confidence PR-introduced defects found; branch required a non-overlapping latest-main merge | Distinct manual adversarial source-contract pass and deterministic normalizer proof passed; exact-head PR required, static, build, unit coverage, Production UI, Advisory UI, SAST, and Secret Scan passed | diff --git a/docs/branch-review-records/d566ba015a558b6a48c81f5c8d59fd2b19edd41a2f38f86c05ae354673816ce5.record.md b/docs/branch-review-records/d566ba015a558b6a48c81f5c8d59fd2b19edd41a2f38f86c05ae354673816ce5.record.md new file mode 100644 index 0000000000..60a40dbbb8 --- /dev/null +++ b/docs/branch-review-records/d566ba015a558b6a48c81f5c8d59fd2b19edd41a2f38f86c05ae354673816ce5.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/services-search-redesign-163 | c6247862cb109e795f73b8aeeeb971436016c6c4 | PR #1982 base sync | Merged main 6f7b7deefaf7e0cd062b748f18fc6ca8988093f6 into the reviewed PR head; merge tree was clean. | git merge-tree --write-tree exact-head main: clean; git diff --check; ledger guards. | diff --git a/docs/branch-review-records/df5b100555e4f07ef667054d2a80ba9f10ada2f3ebe7fab5da0edc041142a1c1.record.md b/docs/branch-review-records/df5b100555e4f07ef667054d2a80ba9f10ada2f3ebe7fab5da0edc041142a1c1.record.md new file mode 100644 index 0000000000..63c6dcebfb --- /dev/null +++ b/docs/branch-review-records/df5b100555e4f07ef667054d2a80ba9f10ada2f3ebe7fab5da0edc041142a1c1.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/differential-results-ui-20260814 | d12e0217c4adc057e27ad92fb5dad144ba38995a | Differentials pinned formatter exception (supersedes 2026-08-15 remediation) | Supersedes the prior formatter-remediation record: documented a one-statement Prettier exclusion after exact-head CI rejected both equivalent wraps of the rank identity predicate; no runtime behaviour changed. | git diff --check b7d2bbcc75f8e3aadf498575b2ae4c44ebd3cc79; node scripts/ledger-inbox.mjs check; node scripts/check-outstanding-issues.mjs; node scripts/check-branch-review-ledger.mjs; node scripts/check-ledger-write-discipline.mjs 6f7b7deefaf7e0cd062b748f18fc6ca8988093f6 HEAD; node scripts/ci-change-scope.mjs --self-test; exact-head static failures reviewed | diff --git a/docs/branch-review-records/e28c56717b466a1206d6eea9b313f4a39e88a0195f76078511821ab44cc09456.record.md b/docs/branch-review-records/e28c56717b466a1206d6eea9b313f4a39e88a0195f76078511821ab44cc09456.record.md new file mode 100644 index 0000000000..bc56f2235c --- /dev/null +++ b/docs/branch-review-records/e28c56717b466a1206d6eea9b313f4a39e88a0195f76078511821ab44cc09456.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/rag-zod-hardening-tranche2 | 690204f669db3be9995b6c658ad2eb35befbdace | RAG signal-row formatter follow-up | Formatted the signal-row regression assertion reported by changed-file formatting. Targeted Vitest unavailable because this isolated worktree has no node_modules/vitest. | node --check tests/rag-retrieval-row-contract.test.ts; git diff --check; ledger-inbox; outstanding-issues; branch-review-ledger; ledger-write-discipline; ci-change-scope --self-test | diff --git a/docs/branch-review-records/ec64a2232c6a292e1ca38a08fc425f5194177a6bbdef0d1c83cfdba62a110cd4.record.md b/docs/branch-review-records/ec64a2232c6a292e1ca38a08fc425f5194177a6bbdef0d1c83cfdba62a110cd4.record.md new file mode 100644 index 0000000000..fe1e805f44 --- /dev/null +++ b/docs/branch-review-records/ec64a2232c6a292e1ca38a08fc425f5194177a6bbdef0d1c83cfdba62a110cd4.record.md @@ -0,0 +1 @@ +| 2026-08-14 | codex/medication-info-header-20260814 | 76a67c8cbd3e94f9a292dafeca7d17738ddee53b | medication information header expansion and desktop polish | Supersedes the pre-rebase review record; no P0-P2 findings and ready for PR handoff | DOM 38/38 and focused Chromium 1/1 passed; PR-local runtime, lock parity, formatting, and lint passed; remaining aggregate stages blocked by shared test-run contention | diff --git a/docs/branch-review-records/eee79235c4e2d7ed08fd81dccf399317a3b8c870210d155da52c563fca1d97d9.record.md b/docs/branch-review-records/eee79235c4e2d7ed08fd81dccf399317a3b8c870210d155da52c563fca1d97d9.record.md new file mode 100644 index 0000000000..ccad21b8ad --- /dev/null +++ b/docs/branch-review-records/eee79235c4e2d7ed08fd81dccf399317a3b8c870210d155da52c563fca1d97d9.record.md @@ -0,0 +1 @@ +| 2026-08-14 | work | 3d5cd7cb8b0d22fc95d3e04a495cfae8533bda17 | document search image availability and loading | Found and fixed cover audit skipping existing rows; live apply blocked by missing Supabase credentials | node --check; focused Vitest; format; live apply attempted (environment blocked) | diff --git a/docs/branch-review-records/f0bc08ea7f5c5c924273de2608597dddb1e7c8c43197488836bb70a79c6d366b.record.md b/docs/branch-review-records/f0bc08ea7f5c5c924273de2608597dddb1e7c8c43197488836bb70a79c6d366b.record.md new file mode 100644 index 0000000000..688e3f4f9d --- /dev/null +++ b/docs/branch-review-records/f0bc08ea7f5c5c924273de2608597dddb1e7c8c43197488836bb70a79c6d366b.record.md @@ -0,0 +1 @@ +| 2026-08-16 | codex/tools-universal-footer-search | 58821ca016b39933eaa9bf2a756672a71171923f | PR #1993 Tools phone footer ownership against main 0b95d063b44712ce409d9fbfe5bf8e706b10ccaf | Confirmed and fixed dashboard Tools phone composer ownership, aligned stale responsive contracts, removed the temporary repair workflow, and kept the branch current with main. | Prettier; ESLint on changed files; TypeScript; targeted Vitest; immutable ledger validation | diff --git a/docs/branch-review-records/f11604766bd32807910a04f2bc52664b0d8615e08db6094e54733085c7427d0c.record.md b/docs/branch-review-records/f11604766bd32807910a04f2bc52664b0d8615e08db6094e54733085c7427d0c.record.md new file mode 100644 index 0000000000..1e324c7d07 --- /dev/null +++ b/docs/branch-review-records/f11604766bd32807910a04f2bc52664b0d8615e08db6094e54733085c7427d0c.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/ds-gates-265 | a1e5c9e9926c59ea9a0a1875ca2ea5ba49c064f2 | review-and-fix | Fixed two P2 gate bypasses: comparable arbitrary min-heights and reachable conditional/composed branches now fail below 48px; merged latest main | focused Vitest 36/36; design-system contract; format:changed; changed-file ESLint; source typecheck; gate-manifest; outstanding-issues and ledger guards | diff --git a/docs/branch-review-records/f1fda63bd3854860481ab01a098aff859e2c8d4ea54160fe52e351afd389f9de.record.md b/docs/branch-review-records/f1fda63bd3854860481ab01a098aff859e2c8d4ea54160fe52e351afd389f9de.record.md new file mode 100644 index 0000000000..622fc7801c --- /dev/null +++ b/docs/branch-review-records/f1fda63bd3854860481ab01a098aff859e2c8d4ea54160fe52e351afd389f9de.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/ds-gates-265 | 6de09c409645cd854438c819250aa668b661568e | DS gate 2: interactiveTapFloorDeclarations ratchet closing the h-10 case, plus GATES.md figure corrections (#265) | Gate 2 closed for new use; gate 8 stopped deliberately with the reason recorded; gate 7 untouched | verify:pr-local all 17 selected gates passed — unit suite 607 files / 6585 passed, 4 skipped; check:design-system-contract mutation-verified (interactiveTapFloorDeclarations increased from 41 to 42 plus the per-path line); check:gate-manifest OK at 35 gates / 32 static; no Chromium available (chromium-1194 vs pinned 1234, #255/#312) so no browser gate was claimed | diff --git a/docs/branch-review-records/f238bb27fa4754ee4948d68b3019e4fb8d9da4ee00a7b78131ef1396fca2dfc8.record.md b/docs/branch-review-records/f238bb27fa4754ee4948d68b3019e4fb8d9da4ee00a7b78131ef1396fca2dfc8.record.md new file mode 100644 index 0000000000..219b4a5c9d --- /dev/null +++ b/docs/branch-review-records/f238bb27fa4754ee4948d68b3019e4fb8d9da4ee00a7b78131ef1396fca2dfc8.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/medication-info-header-20260814 | 3a42e16a8d582174770740a9a8210f3eb2ae377b | Medication information navigation: final current-base merge | Merged latest required base after prior focused alias correction; no conflicts or new confirmed P0-P2 findings | git diff --check; ledger-inbox; outstanding-issues; branch-review-ledger; ledger-write-discipline; responsive shadow-alias assertion | diff --git a/docs/branch-review-records/f2f43e75cc44bf4d80d3e6bddb9f6844548e9f4d84b79b828a42a53505e3ff5c.record.md b/docs/branch-review-records/f2f43e75cc44bf4d80d3e6bddb9f6844548e9f4d84b79b828a42a53505e3ff5c.record.md new file mode 100644 index 0000000000..6cb89df155 --- /dev/null +++ b/docs/branch-review-records/f2f43e75cc44bf4d80d3e6bddb9f6844548e9f4d84b79b828a42a53505e3ff5c.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/ledger-process-tooling-50uqfc | 93365d6e4e496c233e629d85a572f3feb08513cf | outstanding-issues reconciliation of 35 queued requests (fresh base 0011a058) | PR #1956 — one serial reconciliation transaction from a fresh origin/main base, restarting the branch after its previous PR (#1944) merged as squash 372cb13f. 35 requests applied: 17 done, 7 add, 6 update, 5 cancel; ledger 328 to 334 rows, 115 to 99 open. Machine-generated and machine-verified end to end; no request or canonical row was hand-edited. Includes the five requests PR #1944 left pending: closes #313, carries #211 forward with a re-measured 1,445 errors while keeping its deprioritisation and P3 priority, records #168 and #258 without closing either, and opens #335. One request deliberately not re-filed: cancel a8783c79, whose target 0e47904b was already consumed by the reconcile in PR #1936, making it invalid; nothing lost because the surviving #211 update folds its text forward. Visual HTML register NOT refreshed — its PowerShell refresh script is a Windows path unavailable in this Linux container; Markdown source is current, artifact is stale. | npm run verify:pr-local — 11 gates completed, 0 failed; npm run check:ledger-write-discipline printed "Ledger write discipline passed for 0011a058fd1d..HEAD", independently recomputing the transaction; check:outstanding-issues 334 rows (99 open, 235 archived), unique ids, next-id=337 above the highest, 0 pending requests, 129 applied; the pre-existing check:medication-lexicon-report failure seen on PR #1944 is gone, confirming PR #1941 fixed it at source. Note: run before committing, check:ledger-write-discipline correctly REFUSED to report a verdict and named every uncommitted request file — the guard PR #1944 shipped, working on the first real reconciliation after it landed. | diff --git a/docs/branch-review-records/f4aa3dfaabe1e3f82d0b8e20729b1c40648e1632d2645016ce189113e6f4a1b3.record.md b/docs/branch-review-records/f4aa3dfaabe1e3f82d0b8e20729b1c40648e1632d2645016ce189113e6f4a1b3.record.md new file mode 100644 index 0000000000..522cdea0c9 --- /dev/null +++ b/docs/branch-review-records/f4aa3dfaabe1e3f82d0b8e20729b1c40648e1632d2645016ce189113e6f4a1b3.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/differential-results-ui-20260814 | d12e0217c4adc057e27ad92fb5dad144ba38995a | PR #1971 differential result formatter follow-up | Reverted a manual binary-expression wrap: the exact line is 115 columns and must remain inline under the repository 120-column Prettier contract. | git diff --check; ledger/outstanding/branch-ledger/ledger-discipline guards; ci-change-scope self-test passed; npm test -- tests/differentials-compare-selection.dom.test.tsx unavailable: node_modules/vitest/vitest.mjs absent. | diff --git a/docs/branch-review-records/f502c5ed1c220bc23384ffbdff722ab7753e5c619599c803531d4bc36c6914ce.record.md b/docs/branch-review-records/f502c5ed1c220bc23384ffbdff722ab7753e5c619599c803531d4bc36c6914ce.record.md new file mode 100644 index 0000000000..02eecd4138 --- /dev/null +++ b/docs/branch-review-records/f502c5ed1c220bc23384ffbdff722ab7753e5c619599c803531d4bc36c6914ce.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/medication-info-header-20260814 | 815bebba630ee808b4e3a5710fdb78a8433690a6 | Medication information navigation header | Fixed the PR-introduced retired shadow alias that failed the exact-head design-system contract, then merged current main. | git diff --check; ledger inbox/outstanding-issues/ledger-discipline guards; direct replacement assertion; design-system gate attempted but unavailable because this isolated worktree has no node_modules | diff --git a/docs/branch-review-records/f51d7e3693e266ab35c224b3c487b3173a90a7780810546df0674fb7b35b7d50.record.md b/docs/branch-review-records/f51d7e3693e266ab35c224b3c487b3173a90a7780810546df0674fb7b35b7d50.record.md new file mode 100644 index 0000000000..1ea3827a26 --- /dev/null +++ b/docs/branch-review-records/f51d7e3693e266ab35c224b3c487b3173a90a7780810546df0674fb7b35b7d50.record.md @@ -0,0 +1 @@ +| 2026-08-16 | codex/chat-trust-boundaries-212-trust-boundaries-212 | 89181a5c1f5a74ac08628a750c51d8e3819512c7 | PR #2003 post-review nullish list payload fix | Confirmed CodeRabbit finding: parseListRows coerced null and undefined dependency payloads to successful empty arrays; changed validation to reject nullish values and added focused null, undefined, and explicit empty-array regression coverage | Exact-head 89181a5c PR required, unit coverage, build, static checks, lint, typecheck, safety/config, ingestion SAST, CI-managed Lighthouse, SAST, and secret scan passed before the fix; final fix head requires CI rerun; local npm gates unavailable without a checkout | diff --git a/docs/branch-review-records/f726c2e6e71b61720a0609b9fdfd96aac4292d00fcdac8e3629b2e8e1f3f4845.record.md b/docs/branch-review-records/f726c2e6e71b61720a0609b9fdfd96aac4292d00fcdac8e3629b2e8e1f3f4845.record.md new file mode 100644 index 0000000000..9ad8dffd57 --- /dev/null +++ b/docs/branch-review-records/f726c2e6e71b61720a0609b9fdfd96aac4292d00fcdac8e3629b2e8e1f3f4845.record.md @@ -0,0 +1 @@ +| 2026-08-14 | claude/ledger-process-tooling-50uqfc | 58c4a3d5294ded839f7ff78c4bc18d6ece7522eb | PR #1944 CI format fix | Formatted two merge-loss review files | Prettier 3.9.6; audit self-test; JSON parse; docs:check-links | diff --git a/docs/branch-review-records/f8f65adef944919407355aee8f60e939e4cc4398091af68728179d8b5b63e2e0.record.md b/docs/branch-review-records/f8f65adef944919407355aee8f60e939e4cc4398091af68728179d8b5b63e2e0.record.md new file mode 100644 index 0000000000..fe9151ddb2 --- /dev/null +++ b/docs/branch-review-records/f8f65adef944919407355aee8f60e939e4cc4398091af68728179d8b5b63e2e0.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/capture-ongoing-drop-question | 8aead5c4fa3ed588f63860b3dc96f54ba415da44 | required base sync through main 17402395 | Approved — required main update merged; prior drift-inference review remains applicable with no PR-path conflict | git diff --check; ci-change-scope self-test; ledger/inbox/outstanding/discipline guards passed | diff --git a/docs/branch-review-records/fb53209f910afc80ba5fb207e1a2f36d30bc14b98d5c069c3e7fa8b7f89edee4.record.md b/docs/branch-review-records/fb53209f910afc80ba5fb207e1a2f36d30bc14b98d5c069c3e7fa8b7f89edee4.record.md new file mode 100644 index 0000000000..9b39d22d9e --- /dev/null +++ b/docs/branch-review-records/fb53209f910afc80ba5fb207e1a2f36d30bc14b98d5c069c3e7fa8b7f89edee4.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/db-remediation-phase-0-wfaiyl | b55f7a4b5c02c8a0ca8e59fd2d9edfb7eaac0234 | Required base sync through main d301d8f4 | approved | git diff --check; guard self-test; ledger and issue guards | diff --git a/docs/branch-review-records/fe8542d735a4d0a26e76906a700a861925da55131c0caacbaab18ac81507cd0d.record.md b/docs/branch-review-records/fe8542d735a4d0a26e76906a700a861925da55131c0caacbaab18ac81507cd0d.record.md new file mode 100644 index 0000000000..2dfcd8bcfc --- /dev/null +++ b/docs/branch-review-records/fe8542d735a4d0a26e76906a700a861925da55131c0caacbaab18ac81507cd0d.record.md @@ -0,0 +1 @@ +| 2026-08-15 | codex/pwa-install-polish-20260815 | 233047f36f210f0e9ea4846183b2368ca67fa338 | Required base sync through main d301d8f4 | approved | git diff --check; CI scope self-test; ledger and issue guards | diff --git a/docs/branch-review-records/fec8d16693dafc5f5c400815e091e8d8565e99f53e2979f061dd3cc68c012315.record.md b/docs/branch-review-records/fec8d16693dafc5f5c400815e091e8d8565e99f53e2979f061dd3cc68c012315.record.md new file mode 100644 index 0000000000..992b15ca07 --- /dev/null +++ b/docs/branch-review-records/fec8d16693dafc5f5c400815e091e8d8565e99f53e2979f061dd3cc68c012315.record.md @@ -0,0 +1 @@ +| 2026-08-15 | claude/issues-reconcile-2026-08-15 | 2c0ca2c5c65065b2d39ab5465fce50c50eec5bb2 | review-and-fix | Found P2 stale #265 measurements in the reconciliation; queued an immutable correction with current 40/16 tap-floor and 19/10 edge-conflict counts; merged latest main | design-system contract; outstanding-issues and ledger-write-discipline guards; branch-review ledger; format; docs links | diff --git a/docs/database-remediation-plan.md b/docs/database-remediation-plan.md index 9bb9a18561..277b07e09c 100644 --- a/docs/database-remediation-plan.md +++ b/docs/database-remediation-plan.md @@ -3,14 +3,36 @@ Owner: operator (Josh) + specialist session. Source findings: open ledger `#248` (whose causal conclusion awaits a read-only history and audit check) and the queued P1 live-drift follow-up. Companion evidence: live-drift Actions runs -`30763871562` (2026-08-02) and -`31330856982` (2026-08-09), PR #1614, `supabase/migrations/20260804110240_restore_rag_search_health_indexes.sql`. - -**Scope.** Fixes, in dependency order: the live-vs-repo schema gap (21 missing indexes, 2 -unexpected indexes, 10 diverged `match_*` RPC bodies), the unresolved cause of the affected -migration history, drift-detection routing, and the surrounding database debt (`#102`, `#011`, `#036`, -`#022`, `#025`, `#056`/`#057`, `#183`, `#188`/`#196`–`#200`, `#191`, `#098`/`#099`). Ends with -standing protections so unverified history repairs remain visible and cannot silently mask drift. +`30763871562` (2026-08-02), `31330856982` (2026-08-09) and +`31813064485` (2026-08-14, the current measurement), PR #1614, +`supabase/migrations/20260804110240_restore_rag_search_health_indexes.sql`. + +> **Status as of 2026-08-14.** Phase 0 is **complete** (routing, post-migration trigger, evidence +> file, and the forced-dispatch proof — which auto-created issue **#1963**). Phase 1 is **partial**: +> 1.1 and 1.3 were run in an owner-authorised incident window, but **1.2, the RPC divergence +> dossier, is outstanding and is the gate for Phase 3**. Phase 4 is **partial**: the two +> retrieval-critical trigram indexes were restored, ~20 remain. +> +> **Next step is Phase 1.2, not Phase 3.** Complete and review the RPC divergence dossier first, +> then run the Phase 2 staging-parity rehearsal. Only after both prerequisites are complete may an +> appropriately approved Phase 3 reconciliation proceed. Before starting any phase, check the +> open-PR list for the surface first (`#292`): Phase 0 was independently built twice on 2026-08-14, +> and Phases 3 and 4 spend approved production windows and eval-canary budget rather than just tokens. + +**Scope.** Fixes, in dependency order: the live-vs-repo schema gap, the unresolved cause of the +affected migration history, drift-detection routing, and the surrounding database debt (`#102`, +`#011`, `#036`, `#022`, `#025`, `#056`/`#057`, `#183`, `#188`/`#196`–`#200`, `#191`, `#098`/`#099`). +Ends with standing protections so unverified history repairs remain visible and cannot silently mask +drift. + +The schema gap, measured 2026-08-14 (superseding the 2026-08-09 figures this plan was written +against): + +| Category | 2026-08-09 | 2026-08-14 | +| ----------------------------- | ---------- | ------------------ | +| diverged `match_*` RPC bodies | 10 | **10 — unchanged** | +| `missing_live` indexes | 21 | **20** | +| `unexpected_live` indexes | 2 | **2 — unchanged** | **Standing rules for every phase.** No hosted mutation without explicit approval for that phase. Never raw-SQL a drift fix — every live change is codified (migration + `schema.sql` mirror + @@ -63,7 +85,7 @@ hypothesis into a named, evidence-backed conclusion. noise** (whitespace/qualifier only). No edits. This is the highest-stakes unknown in the whole plan — live retrieval behaviour may currently depend on bodies the repo does not contain. -1.3 **Index inventory & sizing.** For the 21 missing and 2 unexpected indexes: owning-table +1.3 **Index inventory & sizing.** For the 20 missing and 2 unexpected indexes: owning-table `pg_relation_size`, and `EXPLAIN (ANALYZE, BUFFERS)` for the known hot queries (`documents` title ILIKE, `document_chunks` content search, `rag_retrieval_logs` miss scan). These are the before-measurements for Phase 4, including the `#231` latency hypothesis. diff --git a/docs/database-remediation-playbook.md b/docs/database-remediation-playbook.md index d9d089aac1..0c8deceb92 100644 --- a/docs/database-remediation-playbook.md +++ b/docs/database-remediation-playbook.md @@ -19,19 +19,32 @@ migrations show that history advanced, but neither point distinguishes skipped D history from indexes that were created and later dropped. The Phase 1 read-only history and audit check must establish that cause before the row is closed or remediation is attributed to it. -**Current live state** (from scheduled `live-drift.yml` Actions run `31330856982`, 2026-08-09): +**Current live state** (from `live-drift.yml` Actions run `31813064485`, 2026-08-14 — this +supersedes the 2026-08-09 run `31330856982` the plan was originally written against): -- 21 `missing_live` indexes across many migrations — tables: `audit_logs` (2), `api_rate_limits`, - `document_chunks` (2, incl. `document_chunks_content_trgm_idx`), `document_images` (3), - `document_index_quality`, `document_index_units`, `document_publication_approvals`, - `document_summaries`, `documents` (2, incl. `documents_title_trgm_idx`), +- 20 `missing_live` indexes across many migrations — tables: `audit_logs` (2), `api_rate_limits`, + `document_chunks`, `document_images` (3), `document_index_quality`, `document_index_units`, + `document_publication_approvals`, `document_summaries`, `documents`, `image_caption_cache`, `indexing_v3_agent_jobs`, `ingestion_job_stages`, `medication_records`, `rag_aliases`, `rag_queries`, `rag_query_misses`, `storage_cleanup_jobs`. + **`documents_title_trgm_idx` and `document_chunks_content_trgm_idx` are no longer among them** — + both were restored in the 2026-08-14 incident window and re-verified `indisvalid`/`indisready`. - 2 `unexpected_live` indexes: `document_table_facts_document_id_idx`, `storage_cleanup_jobs_owner_id_idx`. -- `def_hash` mismatches on 10 `match_*` retrieval RPCs (protected RAG surface; live bodies vs - repo — direction unknown until diffed). -- The weekly `live-drift` run has been red since 2026-07-26 with no notification routing. +- `def_hash` mismatches on 10 `match_*` retrieval RPCs — **unchanged, and entirely outstanding** + (protected RAG surface; live bodies vs repo — direction unknown until diffed). This is now the + highest-stakes remaining unknown and the reason Phase 1.2 comes next. +- Drift-failure routing is **live**: a failed run creates or updates the pinned issue + "Live drift check failing" (currently **#1963**) and a green run closes it. + +**Phase status.** Phase 0 complete. Phase 1 partial — 1.1 and 1.3 done in the owner-authorised +incident window, **1.2 (RPC dossier) outstanding and gating Phase 3**. Phase 4 partial — two +indexes restored, ~20 remain. **Next: complete Phase 1.2, then the Phase 2 staging-parity +rehearsal; only then may an appropriately approved Phase 3 proceed.** + +**Before starting any phase, check the open-PR list for the surface** (`#292`). Phase 0 was built +twice independently on 2026-08-14; a duplicate in Phase 3 or 4 wastes an approved production window +and eval-canary budget, not just tokens. **Prior repair to imitate.** PR #1614 / migration `20260804110240_restore_rag_search_health_indexes.sql` is the approved pattern: operator prebuilds indexes with `CREATE INDEX CONCURRENTLY` outside any @@ -70,7 +83,10 @@ mistakes. Opus is sufficient for Phases 0, 2, 4, 5, 7 — execution against this --- -## Phase 0 — Enablement (repo-only; no approval window needed) · Opus · 2–4 h +## Phase 0 — Enablement (repo-only; no approval window needed) · Opus · 2–4 h — **COMPLETE 2026-08-14** + +Delivered in PRs #1938, #1939 and #1951; the forced-dispatch proof is Actions run `31813064485`, +which auto-created issue #1963. The prompt below is retained as history. Deliverables: drift-failure routing, post-migration drift trigger, evidence file scaffold. Definition of done: PR merged; `check:github-actions` and `verify:pr-local` green; a forced @@ -119,7 +135,7 @@ conclusion for `#248`; no writes performed. > classify each as live-ahead, repo-ahead, or normalization noise, quoting the decisive diff hunks > — this is a protected RAG surface, so classification accuracy matters more than speed, and any > ambiguous diff is recorded as UNCLASSIFIED with the ambiguity explained, never guessed; (3) for -> the 21 missing and 2 unexpected indexes, record owning-table pg_relation_size and run EXPLAIN +> the 20 missing and 2 unexpected indexes, record owning-table pg_relation_size and run EXPLAIN > (ANALYZE, BUFFERS) for the documents title ILIKE query, the document_chunks content search, and > the rag_retrieval_logs miss scan as before-baselines. Write all evidence with dates and run IDs > into docs/audit/live-drift-forensics-2026-08.md, update the live-drift tracking item, commit, push, PR (docs-only; @@ -169,7 +185,8 @@ allowlist entries); eval evidence attached for any behaviour-changing deploy. ## Phase 4 — Index restoration (approved off-peak production window) · Opus · 2–3 h active -Prerequisites: Phases 1–3. Deliverables: 21 indexes restored + validated, 2 unexpected indexes +Prerequisites: Phases 1–3. Deliverables: the ~20 still-missing indexes restored + validated (the two +trigram indexes were already restored on 2026-08-14), 2 unexpected indexes dispositioned, guard migrations landed, live-drift green. Definition of done: green live-drift dispatch output pasted; `search_schema_health()` still `ok: true`. diff --git a/docs/design-system/COMPONENTS.md b/docs/design-system/COMPONENTS.md index e2eea76857..6e0d103d0e 100644 --- a/docs/design-system/COMPONENTS.md +++ b/docs/design-system/COMPONENTS.md @@ -1001,7 +1001,7 @@ This generated snapshot is a local source-derived inventory. It does not assert | `SearchField` | controls | yes | yes | no | yes | no | 0 | | `SegmentedControl` | controls | yes | yes | inherited-global-root | yes | no | 10 | | `Select` | controls | yes | yes | inherited-global-root | yes | no | 2 | -| `Sheet` | layout | yes | yes | inherited-global-root | yes | no | 26 | +| `Sheet` | layout | yes | yes | inherited-global-root | yes | no | 25 | | `Skeleton` | feedback | yes | yes | inherited-global-root | yes | no | 6 | | `SourceDesignationBadge` | source | yes | yes | inherited-global-root | yes | no | 1 | | `SourceProvenance` | source | yes | yes | inherited-global-root | yes | no | 1 | diff --git a/docs/design-system/GATES.md b/docs/design-system/GATES.md index 202fb362d1..9bb942a670 100644 --- a/docs/design-system/GATES.md +++ b/docs/design-system/GATES.md @@ -70,20 +70,20 @@ because it contributed nothing. ## 2 · The twelve system gates, labelled -| # | Gate | Status | Evidence / path to blocking | -| --- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 1 | Contrast ≥4.5:1 for every text/background pair, both themes, live **and** v2; `--decoration-soft` asserted below 4.5 and never on a text node | **implemented-blocking** | v2 pairs + `--text-placeholder` + `--decoration-soft` tier + recipe AST (`decoration-on-text.contract.test.ts`); live full matrix remains follow-on. | -| 2 | Tap targets ≥48px interactive (token + declared carriers today; fixed-height `h-10` controls and full interactive enumeration not yet blocked); static pills never carry `min-h-tap`; no production target reduced | **implemented-partial** | Enforced today: `--spacing-tap` is 48px and pinned from both sides (`ckb-v2-token-contract` asserts the `@theme` knob is ≥48 and that `--tap-min` is its alias), `ui-style-contract` measures the rendered floor for declared `min-height` carriers in Chromium, and the legacy-class / literal ratchets still run. **Still open for the `h-10` case, and 9 Aug 2026 measured why.** An enumeration of _rendered interactive_ elements was written, shown to find genuine defects, and then **reverted rather than landed**: it is not deterministic on this route. Six runs against one production build returned 6, 5, 4, 3, 3 and 9 distinct sub-floor shapes, largely disjoint — one run saw the answer-suggestion chips and a sort band, another the settled results list. `waitForLoadState("networkidle")` plus deduplication to distinct shapes did not fix it, and two consecutive agreeing runs turned out to be coincidence. This spec runs in the required `Production UI` job, so an intermittent version of it would block every merge in the repo; that is a worse outcome than the gap it closes. Path to blocking: give the audit a deterministic surface — a static route or a fixed seeded state — before re-attempting it. **What the enumeration did establish, in every one of the six runs, is a live defect:** controls that carry `min-h-tap` compute `min-height: 0px` and render at 16–36px, six distinct shapes in total. The declared-carrier audit cannot report them by construction — it only measures elements already computing at or above the floor, so a floor overridden downward is skipped rather than flagged. Tracked as `#293`. **Correction, same date — "`test:e2e:style-contract` is not part of `verify:cheap`" was true and badly misleading, and it sent one session looking for a wiring bug that does not exist.** The npm script is only a convenience alias for running this one spec; the spec matches `productionSpecPattern` in `playwright.config.ts` and is listed explicitly in `scripts/playwright-pr-shards.mjs`, so it already runs in the `Production UI` job that `pr-required` demands on any UI-scoped PR. It must **not** be added to `verify:cheap:internal`: `check:gate-manifest` requires every gate in that chain to also run in `static-pr`, which has no browser and no server. Per-surface geometry stays in the held visual harness. | -| 3 | Focus outline present, `--focus`, no companion ring | **planned** | Corrected 6 Aug 2026: the previous evidence ("`--focus` is referenced nowhere in the DS export", finding N3) was false — **[verified: grep]** 4 declarations (2 theme, 2 forced-colours) against **273** `var(--focus)` consumers, 260 of them in `.tsx`. The token is adopted; the check is what is missing. Path to blocking: assert a visible focus outline on every interactive role and reject a `ring-*` companion on the same node. A row that understates shipped work costs the document its authority as surely as one that overstates it, and nobody files a bug against pessimism. | -| 4 | Non-colour encoding on every status indicator | **implemented-partial** | Blocked today by `ui-v2-answer-safety.dom.test.tsx`: an overdue `DoseLine` row is asserted to carry all three channels (amber inset rule **plus** the words "Source review overdue" **plus** a `StatusMark` shape), `MissingValue` is asserted never to contract to a dash at any density, `FieldError` is asserted to pair its text with an icon, and `RetrievalStateBanner` is asserted to carry its state in the headline text rather than the tone alone. Off-vocabulary status still degrades to a phrase (`source-badges-off-vocab.dom.test.tsx`, Gate 6). **Not blocked today:** there is no repository-wide enumeration of status indicators, so a _new_ colour-only indicator elsewhere in `src/components/**` — the bare `statusDot*` recipes are the obvious candidates — would not fail anything. **Closed 9 Aug 2026 — the repository-wide enumeration now ships.** `colourOnlyStatusIndicators` (`check:design-system-contract`) flags a status hue on a box that says nothing: no children, no `aria-label`/`aria-labelledby`/`title` on it or any ancestor, no text sibling, and not a `StatusMark`. It also flags shared _swatch recipes_ — a status hue plus a tiny round box and no text utility — because the analyzer is per-file and cannot follow an imported `statusDotReady` to its call sites, so the recipe is where the defect is catchable. Ratcheted at **4** with per-path pins: the two bare `statusDot*` recipes GATES.md named, plus a calculator risk band and a therapy meter fill. A _new_ colour-only indicator anywhere in `src/**` now fails. Still partial: those 4 recorded sites, and `--decoration-soft` is deliberately out of scope (it carries no state). | -| 5 | Tables: semantic caption, associated headers, `aria-controls` on the expander | **implemented-blocking** | `AccessibleTableProps.caption` is required; DOM and alignment tests prove the semantic ``, associated headers, and expander relationship. | -| 6 | Enum resilience — neutral fallback, never throws | **implemented-blocking** | `source-badges-off-vocab.dom.test.tsx`. | -| 7 | Elevation monotonicity — no child heavier than its parent | **implemented-partial** | Token-ramp monotonicity is tested; the per-surface child/parent rule is planned (needs a render-tree check). | -| 8 | Edge ownership — no `border-*` + `ring-*` on one surface; no 1px spread in a drop shadow | **implemented-partial** | Corrected 9 Aug 2026: the previous evidence — "the per-surface co-occurrence lint and spread-term check are planned (PR 9)" — was **false**, and had been since before this row was written. Both ship. `edgeOwnershipConflicts` is an AST co-occurrence check over resolved class roots (`BORDER_WIDTH_UTILITY` × `RING_WIDTH_UTILITY`), and `onePixelShadowSpreads` reads the fourth length of every `box-shadow` layer. Both ratchet **per path**, so a new conflict on any surface fails today. What is partial is the recorded debt, not the check: 27 conflicts across 15 files, and 2 spreads in `globals.css`. Path to blocking: retire that debt and pin both at zero. The spread form was chosen _because_ it is mechanically lintable, and it duly was. | -| 9 | No layout-property animation; no hardcoded durations | **implemented-partial** | Corrected 9 Aug 2026: "a layout-property lint is still planned" was **false**, and leaving it would have preserved the exact contradiction this pass exists to remove. `layoutTransitionExceptions` ships and ratchets **per path** against `SAFE_TRANSITION_PROPERTIES`, so a new layout-property transition in any file fails today; the phone chrome's intentional `grid-template-rows` / `height` / `padding-bottom` are among the 12 recorded exceptions rather than a gap. The Tailwind duration form is a **hard zero** (`hardcodedMotionClasses`), on top of PR-Arch tokenising production `duration-*`/`ease-*` literals onto `--duration-*` / `--ease-*` (Gate 10). What stays partial is recorded debt, not a missing check: 12 layout transitions and 42 CSS `hardcodedCssMotionDurations`. Path to blocking: retire those and pin both at zero. | -| 10 | Named z and motion tokens have real consumers; no unapproved `z-` value | **implemented-blocking** | PR-Arch: off-ladder `z-50` retired; toast at `--z-toast` (`z-[110]`, lint allowlist); motion literals map to named duration/ease tokens including phone-chrome hide/reveal pair. Dead `OverlayProvider` deleted. | -| 11 | Published-type conformance — every `dtsPropsFor` entry exactly matches source props | **implemented-blocking** | `generate-design-sync-contract.mjs` uses the TypeScript checker to derive every public property from the exported source `*Props` type; `--check` and `check-design-sync-contract.mjs` reject drift, missing named types, or machine-specific declarations. Zero-prop visual roots are explicit. | -| 12 | Publication coverage — every registered visual component has source, export, preview, prop contract and direct publication test | **implemented-blocking** | Registry/map/props parity and all 53 direct component rows are pinned by the design-sync contract and `design-sync-visual-exports.test.ts`. Behavioural, full visual-state, print, and browser acceptance remain separate gates; `DocumentFrame` is built shell-only in product but not yet among the 53 registered visual exports (print primitives remain specified-not-built). | +| # | Gate | Status | Evidence / path to blocking | +| --- | --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 1 | Contrast ≥4.5:1 for every text/background pair, both themes, live **and** v2; `--decoration-soft` asserted below 4.5 and never on a text node | **implemented-blocking** | v2 pairs + `--text-placeholder` + `--decoration-soft` tier + recipe AST (`decoration-on-text.contract.test.ts`); live full matrix remains follow-on. | +| 2 | Tap targets ≥48px interactive; static pills never carry `min-h-tap`; no production target reduced | **implemented-blocking for new use** | Enforced today: `--spacing-tap` is 48px and pinned from both sides (`ckb-v2-token-contract` asserts the `@theme` knob is ≥48 and that `--tap-min` is its alias), `ui-style-contract` measures the rendered floor for declared `min-height` carriers in Chromium, and the legacy-class / literal ratchets still run. **Still open for the `h-10` case, and 9 Aug 2026 measured why.** An enumeration of _rendered interactive_ elements was written, shown to find genuine defects, and then **reverted rather than landed**: it is not deterministic on this route. Six runs against one production build returned 6, 5, 4, 3, 3 and 9 distinct sub-floor shapes, largely disjoint — one run saw the answer-suggestion chips and a sort band, another the settled results list. `waitForLoadState("networkidle")` plus deduplication to distinct shapes did not fix it, and two consecutive agreeing runs turned out to be coincidence. This spec runs in the required `Production UI` job, so an intermittent version of it would block every merge in the repo; that is a worse outcome than the gap it closes. Path to blocking: give the audit a deterministic surface — a static route or a fixed seeded state — before re-attempting it. **What the enumeration did establish, in every one of the six runs, is a live defect:** controls that carry `min-h-tap` compute `min-height: 0px` and render at 16–36px, six distinct shapes in total. The declared-carrier audit cannot report them by construction — it only measures elements already computing at or above the floor, so a floor overridden downward is skipped rather than flagged. Tracked as `#293`. **Correction, same date — "`test:e2e:style-contract` is not part of `verify:cheap`" was true and badly misleading, and it sent one session looking for a wiring bug that does not exist.** The npm script is only a convenience alias for running this one spec; the spec matches `productionSpecPattern` in `playwright.config.ts` and is listed explicitly in `scripts/playwright-pr-shards.mjs`, so it already runs in the `Production UI` job that `pr-required` demands on any UI-scoped PR. It must **not** be added to `verify:cheap:internal`: `check:gate-manifest` requires every gate in that chain to also run in `static-pr`, which has no browser and no server. Per-surface geometry stays in the held visual harness. **Both named gaps are now closed, 15 Aug 2026.** The rendered enumeration landed first: `885c613` (PR #1962) added the deterministic phone-viewport `min-h-tap` audit this row was waiting on — `/forms`'s fixed-array home rather than a live-search route, polled until three consecutive reads agree, explicitly sorted, and asserted identical across three full navigate-and-enumerate cycles. The `h-10` case is closed here by `interactiveTapFloorDeclarations` in `check:design-system-contract`: an interactive element (`a`, `button`, `input`, `select`, `summary`, `textarea`) declaring its own **unprefixed** `min-h-*` below the 48px token. Comparable arbitrary lengths and mutually exclusive/composed class branches are evaluated independently, so one safe branch cannot hide a sub-floor runtime path. Ratcheted at **40** across 16 files with per-path pins, so a new sub-floor control anywhere in `src/**` fails today. Mutation-verified: lowering one shortlist button to `min-h-9` produces both the total and matching per-path regression. **Deliberately scoped to `min-h-*`, not `h-*`/`size-*`:** a short `h-4` on an interactive element is routinely the visible box of a control whose hit area is owned by a tap-sized wrapper (`SelectionCheckbox` in `differentials-home.tsx`, whose label `ui-smoke` asserts still meets the floor), so flagging those would pad the baseline with non-defects — the §5 failure mode. **One known limit, recorded rather than hidden:** the walker sees intrinsic lowercase tags only, so a floor declared on `` or another component wrapper is invisible to it (the pre-existing `legacyTapClasses` check has the same blind spot). The 40 recorded sites are real debt still owed, tracked in `#265`. | +| 3 | Focus outline present, `--focus`, no companion ring | **planned** | Corrected 6 Aug 2026: the previous evidence ("`--focus` is referenced nowhere in the DS export", finding N3) was false — **[verified: grep]** 4 declarations (2 theme, 2 forced-colours) against **273** `var(--focus)` consumers, 260 of them in `.tsx`. The token is adopted; the check is what is missing. Path to blocking: assert a visible focus outline on every interactive role and reject a `ring-*` companion on the same node. A row that understates shipped work costs the document its authority as surely as one that overstates it, and nobody files a bug against pessimism. | +| 4 | Non-colour encoding on every status indicator | **implemented-blocking for new use** | Blocked today by `ui-v2-answer-safety.dom.test.tsx`: an overdue `DoseLine` row is asserted to carry all three channels (amber inset rule **plus** the words "Source review overdue" **plus** a `StatusMark` shape), `MissingValue` is asserted never to contract to a dash at any density, `FieldError` is asserted to pair its text with an icon, and `RetrievalStateBanner` is asserted to carry its state in the headline text rather than the tone alone. Off-vocabulary status still degrades to a phrase (`source-badges-off-vocab.dom.test.tsx`, Gate 6). **Not blocked today:** there is no repository-wide enumeration of status indicators, so a _new_ colour-only indicator elsewhere in `src/components/**` — the bare `statusDot*` recipes are the obvious candidates — would not fail anything. **Closed 9 Aug 2026 — the repository-wide enumeration now ships.** `colourOnlyStatusIndicators` (`check:design-system-contract`) flags a status hue on a box that says nothing: no children, no `aria-label`/`aria-labelledby`/`title` on it or any ancestor, no text sibling, and not a `StatusMark`. It also flags shared _swatch recipes_ — a status hue plus a tiny round box and no text utility — because the analyzer is per-file and cannot follow an imported `statusDotReady` to its call sites, so the recipe is where the defect is catchable. Ratcheted at **4** with per-path pins: the two bare `statusDot*` recipes GATES.md named, plus a calculator risk band and a therapy meter fill. A _new_ colour-only indicator anywhere in `src/**` now fails. Still partial: those 4 recorded sites, and `--decoration-soft` is deliberately out of scope (it carries no state). | +| 5 | Tables: semantic caption, associated headers, `aria-controls` on the expander | **implemented-blocking** | `AccessibleTableProps.caption` is required; DOM and alignment tests prove the semantic ``, associated headers, and expander relationship. | +| 6 | Enum resilience — neutral fallback, never throws | **implemented-blocking** | `source-badges-off-vocab.dom.test.tsx`. | +| 7 | Elevation monotonicity — no child heavier than its parent | **implemented-partial** | Token-ramp monotonicity is tested; the per-surface child/parent rule is planned (needs a render-tree check). | +| 8 | Edge ownership — no `border-*` + `ring-*` on one surface; no 1px spread in a drop shadow | **implemented-partial** | Corrected 9 Aug 2026: the previous evidence — "the per-surface co-occurrence lint and spread-term check are planned (PR 9)" — was **false**, and had been since before this row was written. Both ship. `edgeOwnershipConflicts` is an AST co-occurrence check over resolved class roots (`BORDER_WIDTH_UTILITY` × `RING_WIDTH_UTILITY`), and `onePixelShadowSpreads` reads the fourth length of every `box-shadow` layer. Both ratchet **per path**, so a new conflict on any surface fails today. What is partial is the recorded debt, not the check: **19 conflicts across 10 files**, and 2 spreads in `globals.css`. (Corrected 15 Aug 2026 — this cell said 27 across 15, which PR #1942 had already paid down to 25 across 12 without updating the prose. The §3 row below and `scripts/design-system-contract-baseline.json` both already said 25, and per `docs/design-system/README.md` the baseline outranks this document, so the prose was the defect. Ledger `#265` carried the same stale figure.) Path to blocking: retire that debt and pin both at zero. The spread form was chosen _because_ it is mechanically lintable, and it duly was. | +| 9 | No layout-property animation; no hardcoded durations | **implemented-partial** | Corrected 9 Aug 2026: "a layout-property lint is still planned" was **false**, and leaving it would have preserved the exact contradiction this pass exists to remove. `layoutTransitionExceptions` ships and ratchets **per path** against `SAFE_TRANSITION_PROPERTIES`, so a new layout-property transition in any file fails today; the phone chrome's intentional `grid-template-rows` / `height` / `padding-bottom` are among the 12 recorded exceptions rather than a gap. The Tailwind duration form is a **hard zero** (`hardcodedMotionClasses`), on top of PR-Arch tokenising production `duration-*`/`ease-*` literals onto `--duration-*` / `--ease-*` (Gate 10). What stays partial is recorded debt, not a missing check: 12 layout transitions and 42 CSS `hardcodedCssMotionDurations`. Path to blocking: retire those and pin both at zero. | +| 10 | Named z and motion tokens have real consumers; no unapproved `z-` value | **implemented-blocking** | PR-Arch: off-ladder `z-50` retired; toast at `--z-toast` (`z-[110]`, lint allowlist); motion literals map to named duration/ease tokens including phone-chrome hide/reveal pair. Dead `OverlayProvider` deleted. | +| 11 | Published-type conformance — every `dtsPropsFor` entry exactly matches source props | **implemented-blocking** | `generate-design-sync-contract.mjs` uses the TypeScript checker to derive every public property from the exported source `*Props` type; `--check` and `check-design-sync-contract.mjs` reject drift, missing named types, or machine-specific declarations. Zero-prop visual roots are explicit. | +| 12 | Publication coverage — every registered visual component has source, export, preview, prop contract and direct publication test | **implemented-blocking** | Registry/map/props parity and all 53 direct component rows are pinned by the design-sync contract and `design-sync-visual-exports.test.ts`. Behavioural, full visual-state, print, and browser acceptance remain separate gates; `DocumentFrame` is built shell-only in product but not yet among the 53 registered visual exports (print primitives remain specified-not-built). | **Computed-style suites (planned, PR 1–2):** Tailwind conflict order · v2 cascade, ancestor **and** same-node forms · HCM remapping under all three v2 selectors · z-index · target @@ -103,33 +103,33 @@ theme-list parity, and remote design-project publication remain separate concern ## 3 · The prohibition table -| Never do this | Gate | Status | -| -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Reintroduce `.ckb-v2:not(.dark)` | Cascade computed-style test (PR 1) + contract-test selector filter update | implemented-blocking — landed #1538; contract parser + dark-ink regression guard | -| Add `prefers-color-scheme` rules to the v2 layer | — (users pin a theme against OS preference) | **manual** | -| Paint a numeral with a status colour; use amber/red decoratively | `check:design-system-contract` — `statusColouredNumerals` + `colourOnlyStatusIndicators` | **implemented-blocking** (9 Aug 2026) — ratcheted at 2 and 4 with per-path pins; see §5 | -| Put `--decoration-soft`/`--text-soft` on a text node | Tier pinned both sides in the token contract; recipe AST (`decoration-on-text.contract.test.ts`) | implemented-blocking (recipes); broader AST follow-on | -| Uppercase a dose unit | `Quantity` pins `normal-case` + unit test | implemented-blocking (branch) | -| Invert a PDF, diagram or clinical image in any theme | `check:design-system-contract` — `imageInversions`, pinned at **zero**, not ratcheted | **implemented-blocking** (9 Aug 2026) — CSS `filter`/`backdrop-filter` plus the Tailwind `invert`/`hue-rotate` utilities; see §5 | -| Border **and** ring on one surface, or a 1px spread in a drop shadow | `check:design-system-contract` — `edgeOwnershipConflicts` (25) + `onePixelShadowSpreads` (2) | **implemented-blocking for new use** — AST/CSS ratchets with per-path pins; the recorded debt itself is Gate 8's remaining half | -| A child shadow heavier than its parent's | Gate 7 | implemented-partial | -| Use `--shadow-tight`/any alias in new code | `check:design-system-contract` — `legacyShadowAliases`, ratcheted at 119 with per-path pins | **implemented-blocking for new use** — a new alias in any file fails. `--shadow-tight` itself is retired onto `--e1` and additionally pinned by a tracked-tree sweep in `tests/design-token-contract.test.ts` (it was silently reverted once by the `acf78bf` merge); the remaining 119 are the other six aliases, still `#262` | -| Raw pixel size, padding, radius, gap or line-height in markup | `check:design-system-contract` — `rawPaddingLiterals` (63), `rawRadiusLiterals` (24), `rawGapLiterals` (32), `rawLineHeightLiterals` (3) | **implemented-blocking for new use** (9 Aug 2026) — per-path ratchets over both the utility and the CSS-declaration spelling, so a literal cannot move into `globals.css` to escape. Values containing a CSS function (`env(`, `clamp(`, `max(`, `calc(`) are sanctioned computed forms and exempt. Raw _size_ is still covered only for tap/shadow/colour | -| Animate `width`, `height`, `grid-template-*`, `top`, `left`, `gap` | `check:design-system-contract` — `layoutTransitionExceptions`, ratcheted at 11 with per-path pins | **implemented-blocking for new use** — `SAFE_TRANSITION_PROPERTIES` carries the compositor-only allowlist; phone chrome's deliberate `grid-template-rows` is in the recorded 11 | -| Hardcode a transition duration | `check:design-system-contract` — `hardcodedMotionClasses` (**zero**) + `hardcodedCssMotionDurations` (42) | **implemented-blocking** for the Tailwind `duration-*`/`delay-*`/`transition-all` form; the CSS form is a ratchet, so its 42 are debt | -| A `z-` value outside the named rungs | `require-z-index-ladder` (ESLint) | implemented-blocking | -| Ship a registered component without a direct publication test | Gate 12 | implemented-blocking | -| Lower a production tap target below 48px | Gate 2 + `ui-smoke` flake history + held visual probe | implemented-partial — token floor + declared carriers only; fixed `h-10` interactive controls and the unwired Chromium audit are not blocked | -| Construct an enabled control with no action, destination or name | PR 4 discriminated unions + DOM contracts; `require-button-wiring` covers raw `