Skip to content

Fix verify typecheck regressions in scratch/catalog access and smart-index metadata - #141

Merged
BigSimmo merged 4 commits into
mainfrom
copilot/fix-verify-github-actions-job
Jul 2, 2026
Merged

Fix verify typecheck regressions in scratch/catalog access and smart-index metadata#141
BigSimmo merged 4 commits into
mainfrom
copilot/fix-verify-github-actions-job

Conversation

CopilotAI commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Summary

  • verify was failing in CI typecheck on two script paths: a scratch pg_indexes probe that fell outside generated Supabase relation types, and the smart-index backfill path passing raw Json metadata into helpers expecting record-shaped clinical metadata.
  • Catalog access shim
    • route scratch/check-indexes.ts through a narrow string-based reader shim for pg_indexes access without widening generated table unions
  • Metadata normalization
    • normalize documents.metadata in scripts/backfill-smart-index.ts before calling enrichment / deep-memory helpers so the selected row matches ClinicalDocument["metadata"]
  • Result
    • removes the two CI-reported type errors without changing application behavior or widening unrelated typing

Verification

  • npm run verify:cheap
  • npm run verify:ui when UI, routing, styling, browser behavior, reduced-motion, or forced-colors behavior changed
  • npm run verify:release before release or handoff confidence claims
  • npm run format:check
  • npm run check:production-readiness when clinical workflow, privacy, environment, Supabase, source governance, or deployment behavior changed
  • npm run check:deployment-readiness when deployment startup, hosting, or rollout behavior changed

Clinical Governance Preflight

Complete this section when the change touches ingestion, answer generation, search/ranking, source rendering, document access, privacy, production env, or clinical output.

  • Source-backed claims still require linked source verification before clinical use
  • No patient-identifiable document workflow was introduced or expanded without explicit governance approval
  • Supabase target remains Clinical KB Database (sjrfecxgysukkwxsowpy)
  • Service-role keys and private document access remain server-only
  • Demo/synthetic content remains clearly separated from real clinical sources
  • Source metadata, review status, and outdated/unknown-source behavior remain conservative
  • Deployment classification/TGA SaMD impact was checked when clinical decision-support behavior changed

Notes

  • Example of the narrowing applied in the smart-index path:
constindexingDocument={
...document,metadata: metadataRecord(document.metadata),};
  • verify:cheap was re-run after the fix; the original two failures are cleared, but the branch still has unrelated pre-existing typecheck errors in other scripts.

CopilotAI changed the title [WIP] Fix failing GitHub Actions job verifyFix verify typecheck regressions in scratch/catalog access and smart-index metadataJul 2, 2026
CopilotAI requested a review from BigSimmoJuly 2, 2026 08:19
@BigSimmo

Copy link
Copy Markdown
Owner

@copilot resolve the merge conflicts in this pull request

@BigSimmo
BigSimmo marked this pull request as ready for review July 2, 2026 10:33
@BigSimmo
BigSimmo enabled auto-merge July 2, 2026 10:33
@BigSimmo

Copy link
Copy Markdown
Owner

@copilot resolve the merge conflicts in this pull request

auto-merge was automatically disabled July 2, 2026 10:36

Head branch was pushed to by a user without write access

CopilotAI commented Jul 2, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot resolve the merge conflicts in this pull request

Resolved in 6d7b849. I merged the current main into this branch, accepted the scratch probe deletion from main, kept the smart-index metadata normalization, and re-ran typecheck successfully under the repo’s Node 24 / npm 11 toolchain.

@BigSimmo
BigSimmo enabled auto-merge July 2, 2026 10:44
@BigSimmo
BigSimmo merged commit c5b3ab4 into mainJul 2, 2026
4 checks passed

CopilotAI commented Jul 2, 2026

Copy link
Copy Markdown
ContributorAuthor

@copilot resolve the merge conflicts in this pull request

Addressed in c28e092.

@BigSimmo
BigSimmo deleted the copilot/fix-verify-github-actions-job branch July 2, 2026 16:31
BigSimmo pushed a commit that referenced this pull request Jul 30, 2026
…ild-skip gate gap
Records three items that surfaced during the /mockups/warning-consolidation
study (PR #1437) and were not tracked anywhere:
#141 P2 task — adopt a consolidated answer-home notice block; the study
landed but nothing adopts it, and adoption moves the single
site-wide APP-5 line across three composers
#142 P2 issue — answer mode ships no verify-before-use caveat while every
other clinical mode does
#143 P2 issue — verify:pr-local exits 0 when guard-next-build refuses to run,
reporting green with the build never executed
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NPyFcMfn1jMmphr6AqiWBg
BigSimmo pushed a commit that referenced this pull request Jul 30, 2026
The merge of origin into this branch hit exactly the damage #133/#140
describe: merge=union concatenated both sides of the ledger rather than
merging it.
Two collisions, both repaired without dropping either side's rows:
- Another agent had already allocated #141-#144 on main for different
items while this branch used #141-#143. The incoming rows renumber, per
the ledger rule, so the capture becomes #145 (adopt a consolidated
answer-home notice block), #146 (answer mode ships no verify-before-use
caveat) and #147 (verify:pr-local exits 0 when its build step refuses to
run). Their cross-references were updated to match, and the two
duplicated next-id markers collapse to one at 148.
- #140 appeared in both tables: it was closed on main as a duplicate of
#133 (PR #1444) while this branch still carried it open. The resolution
is honoured — the stale open row goes, the archive row stays.
check:outstanding-issues: 145 rows (72 open, 73 archived), unique ids,
next-id=148 above the highest, no merge driver.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NPyFcMfn1jMmphr6AqiWBg
BigSimmo pushed a commit that referenced this pull request Jul 30, 2026
Resolves the one conflicted file, docs/outstanding-issues.md. With
merge=union removed by #1444 the ledger now conflicts honestly instead of
silently doubling, so this is a real resolution rather than a repair.
main had allocated #145 for "a branch sync during in-flight CI cancels a
near-complete run" while this branch used #145-#147 for the answer-home
notice capture. Per the ledger's own rule the incoming rows renumber: main's
#141-#145 are kept verbatim and the capture becomes #146 (adopt a
consolidated answer-home notice block), #147 (answer mode ships no
verify-before-use caveat) and #148 (verify:pr-local exits 0 when its build
step refuses to run), with their cross-references updated to match and the
marker lifted to 149. No row was dropped from either side — main's #141-#145
each appear exactly once, verified against origin/main.
check:outstanding-issues: 146 rows (73 open, 73 archived), unique ids,
next-id=149 above the highest, no merge driver.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NPyFcMfn1jMmphr6AqiWBg
BigSimmo pushed a commit that referenced this pull request Jul 30, 2026
Third ledger collision in a row, same shape as the last two: main allocated
#146 for the `ui-phone-scroll` Services anchor issue while this branch used
#146-#148 for the answer-home notice capture. Main's row is kept and the
incoming rows renumber to #147 (adopt a consolidated answer-home notice
block), #148 (answer mode ships no verify-before-use caveat) and #149
(verify:pr-local exits 0 when its build step refuses to run), with their
cross-references and the marker (150) following.
Verified against origin/main that #141-#146 each still appear exactly once;
nothing was taken wholesale from either side.
check:outstanding-issues: 147 rows (74 open, 73 archived), unique ids,
next-id=150 above the highest, no merge driver.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NPyFcMfn1jMmphr6AqiWBg
BigSimmo pushed a commit that referenced this pull request Jul 30, 2026
The three captured rows are dropped from docs/outstanding-issues.md, leaving
it byte-identical to origin/main. They will be re-landed as their own
single-file change once this PR merges.
AGENTS.md recommends bundling append-only ledger rows because they are
normally zero-risk, but that assumes a quiet file. Right now it is the
hottest file in the repo: bundling them here cost three ID collisions and
three full CI restarts in about thirty minutes (main took #141-#144, then
#145, then #146, while this branch needed #145-#149 in turn). #133 already
records that this file conflicts on nearly every main advance.
The mockups diff itself touches four uncontended files and has not conflicted
once today, so removing the ledger rows takes this PR out of a race it has no
reason to be in. No content is lost: the row text is preserved verbatim and
re-applied against a fresh main with clean ids.
check:outstanding-issues: 144 rows (70 open, 74 archived), unique ids,
next-id=147 above the highest, no merge driver.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NPyFcMfn1jMmphr6AqiWBg
BigSimmo added a commit that referenced this pull request Jul 30, 2026
The id this branch allocated was taken by main three times running (#135 ->
#141 -> #145 -> #147), and the third merge conflicted as one hunk covering the
entire open-items table, so main's table was taken wholesale and the branch's
deltas re-applied by script.
Two further findings: the GitHub Update-branch button auto-merged this file into
duplicate #141 rows with the marker left below main's highest id, a head that
would have failed check:outstanding-issues; and removing merge=union did not
reduce collision frequency, it converted silent duplication into loud conflicts.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
BigSimmo added a commit that referenced this pull request Jul 30, 2026
…equisite (#1465)
* issues: record fresh #133 evidence and the un-pad fix's Prettier prerequisite
#133 tracks ledger conflict frequency after `merge=union` was removed. Two
things learned today that the row did not yet capture.
Removal did not reduce the pain. PR #1451 conflicted on
`docs/outstanding-issues.md`; its session resolved the conflict by renumbering a
colliding row, and `git merge-tree` showed the branch conflicting again minutes
later, because four further `main` commits each touched the table. Both sides had
concurrently allocated `#141` from the same marker, so a duplicate id reached a
pushed tip and failed `check:outstanding-issues` there independently of the
conflict — the read-modify-write allocation race this row already predicts,
observed rather than theorised.
The row's proposed fix ("stop padding this table") also has an unstated
prerequisite: Prettier enforces padded markdown tables under `docs/`. Verified by
checking byte-identical ragged content in a Prettier-ignored path (passes) and
under `docs/` (fails), so the first result alone would have been a false green.
Un-padding therefore needs `docs/outstanding-issues.md` added to
`.prettierignore`, exactly as its sibling `docs/branch-review-ledger.md` already
is at line 23.
Evidence only — no behaviour change, and deliberately not the un-pad itself:
that rewrites every open row and would conflict with every in-flight ledger edit,
so it wants a quiet queue.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* docs: record PR 1465 review
---------
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
BigSimmo added a commit that referenced this pull request Jul 31, 2026
#141 closed on the production defect, but --primary-hover and --success-hover
are still undefined on main (referenced at favourites-library-redesign-page.tsx
:203 and :217, zero definitions in the stylesheet). Impact is low — mockups are
gate-exempt design scratch — but with #141 archived nothing in the ledger owned
them, and .design-sync/NOTES.md is prose in a tooling file, not a tracked item.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
BigSimmo added a commit that referenced this pull request Jul 31, 2026
* issues: capture the unreadable-CI token, at-risk worktree work, and the unpushed hook fix
Three findings from the 2026-07-30 organisation session that were recorded
nowhere durable:
- #149 the session GitHub PAT lacks Checks: Read, so no agent can confirm a PR
is green. The endpoint that does work returns an empty result rather than an
error, so it reads like an absence of checks rather than an absence of
permission.
- #150 four worktrees on already-merged branches hold uncommitted work that
exists in no branch and no PR, the largest being +395/-200 across 19 files
including CI config.
- #151 the pre-commit fail-open for #143 lives only on a never-pushed local
branch, which is also 17 behind main and conflicts on the file whose count
sentence main's new docs:update generator now owns.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* docs(ledger): record the session-followup capture review for PR #1490
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* docs(ledger): record #143/#151/#149 reconciliation for PR #1490
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
* docs(ledger): supersede PR #1490 reconciliation after remote sync
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
* issues: record the worktree snapshots and redirect #151 to PR #1494#150 — the four at-risk worktrees were snapshotted onto their own already-merged
branches (748ef018f, 5dbd9f965, b7eae51a4, d949859c3), so the work survives a
worktree reclaim. All four are clean now. None is pushed or reviewed; the next
action is per-snapshot promote-or-reset.
#151 — the never-pushed branch is superseded rather than salvageable: its script
and hook reached main by other routes, so the fail-open guard was applied to
main's committed hook in PR #1494 instead.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* docs: remove credential metadata and correct audit dates
* docs: consolidate session follow-up findings
* docs: record consolidated follow-up review
* issues: record that #101 hydration shipped
PR #1463 merged as dba7356, so #86's "Next X3 unit — rag-hydration.ts" is
now stale. The row records the extraction as shipped and keeps the corrected
boundary: hydration re-homed only two of prepareCoverageGateResults's five
rag.ts-only dependencies, so it did not unblock that function — exactly as the
Codex review on PR #1461 predicted.
This row was deliberately dropped from #1463 itself (commit 6290d02) after
docs/outstanding-issues.md conflicted on five consecutive main syncs. Recording
it separately here is the same pattern used for #1454 via #1461.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GGEBHp4Seoh1jK1vGTNtYS
* docs(ledger): record the landed X3 hydration review
Appended with npm run ledger:append (never hand-written), keyed to the squash
commit dba7356 so ledger:lookup can resolve it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GGEBHp4Seoh1jK1vGTNtYS
* docs: fix the #101 mislabel and key the ledger row to a resolvable ref
Both defects were raised by Codex on PR #1495 and both are real; verified
against the files before accepting.
1. #101 is NOT this extraction. docs/outstanding-issues.md:138 shows #101 is
"Canary-gated retrieval parallelisation candidates" (P3, rec) — a separate,
still-open recommendation gated on a live canary pair. Calling the hydration
extraction "#101" marked that unrelated work as shipped and could have caused
the live-evaluation work to be skipped. The label came from the original task
brief and was propagated without checking it against the ledger. Both the
#86 row and the X3 work-order entry now identify the change as the X3
hydration unit (PR #1463) instead. #101's own row is untouched and still open.
2. The ledger row did not resolve. `npm run ledger:lookup --
dba7356` returned NOT REVIEWED, because the
ref cell held only the slash-form branch token and that branch no longer
resolves locally, so the throttling record could not prevent a repeat review.
Appended a superseding record keyed to the landed SHA; the same lookup now
returns ALREADY REVIEWED. The original row is retained, per the ledger's
append-only rule.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GGEBHp4Seoh1jK1vGTNtYS
* docs: record consolidated PR reviews
* docs: record ingestion recovery review
* docs(visual): document the platform-scoped baseline layout and how to seed it
`playwright.visual.config.ts` records snapshots under
`__screenshots__/{platform}/`, so a baseline taken on Windows lands in `win32/`
and is never consulted by the `ubuntu-24.04` CI job, which reads `linux/`.
Nothing said so, and committing `win32/` images looks like protection while
providing none.
Records the constraint, names the CI artifact as the supported recorder for
`linux/` baselines, and notes that comparison stays advisory until the jobs come
off `continue-on-error`. Also creates the tracked directory `.gitignore` already
claims exists, which sets `ui_changed=true` (`scripts/ci-change-scope.mjs`) so
the visual job can run and produce that first artifact.
No baselines are added here — they cannot be produced on this platform.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* docs: correct visual baseline adoption steps
* docs: record visual baseline guidance review
* fix(ui): repair mockup accent token references
* docs: record token-reference repair review
* docs: archive advisory UI scoping task
* docs: record advisory UI closure review
* issues: archive #151 after #1494 and mark #143 fully resolved
PR #1494 landed the fail-open guard on main, so close the open salvage
row and update the #143 archive from PARTIAL to resolved across #1442
and #1494. Also carries the merge of origin/main that cleared the
GitHub DIRTY mergeability state.
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
* docs(ledger): record PR #1490 main-sync and #151 closeout
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
* docs(ledger): record #1496 id-collision renumber for PR #1490
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
* issues: record the withdrawn live-region finding as #151 so it is not re-filed
Archive-only row. There is no defect and no work to do — the row exists purely
as a guard rail against repeating a misreading that already happened once.
search-results-header-band.tsx sets aria-live={faulted ? "off" : "polite"} on
its count/status span, which reads like a silenced failure announcement. It is
not: the band mounts a separate fault panel with role="alert" carrying the
failure title, body and Retry, and the mute is deliberate so the two do not both
speak. The reasoning is in a comment directly above the attribute, and
tests/search-results-header-band.dom.test.tsx pins it with singular role queries
that throw on duplicates.
During session 2026-07-30 (PR #1481) this was filed as a real P2 defect on the
strength of the attribute alone, and the proposed fix — escalating the count span
to role="alert"/aria-live="assertive" — would have produced a duplicate
announcement and a red test, making it worse than no change. Codex caught it.
An earlier withdrawal row was then lost to the squash that merged #1481, which
is the row-deletion shape #148 now guards against.
Also records that the mockup's escalation is correct in the mockup and must not
be ported: search-refine-adaptive-mockups.tsx has no fault panel, so there the
count span is the only announcement channel.
#148 needed no work — the merge-base deletion check landed on main
independently, and its output now reports the base it compared against.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JdPa3mHCX5ZQZZvU5GHU3r
* docs(rag): record refuted lexical probe collapse (#98)
* issues: capture the residual id-allocation hazard as #151#133 is resolved: #1444 removed merge=union and #1479 excluded the ledger from
Prettier, which together fixed conflict frequency. Neither changes id
allocation, which is still read-modify-write against the next-id marker, so
concurrent branches still claim the same number.
Measured on PR #1451: one row was renumbered #135 -> #141 -> #145 -> #147 ->
#149 across four sync cycles. The sharper finding is that GitHub's Update-branch
button resolved one such collision into duplicate #141 rows with the marker left
below main's highest id — git reported success and only
check:outstanding-issues caught it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* docs(issues): attribute the mobile CLS breach — a 128px reserve round trip
#147 asked which elements shift. Driving Chromium against the same
offline production build with a PerformanceObserver on layout-shift
(Lighthouse mobile emulation, reading entry.sources[].node) gives one
dominant cause on all four breaching routes: the entire main content
region moves down 128px and straight back up 128px within 15-60ms. Both
moves score, so it is pure cost with zero net movement — 100% of
/documents/search's 0.220 and about 75% of /dsm's.
The shifting element is the max-sm:pt-[var(--phone-overlay-chrome-h)]
wrapper around <main>. A MutationObserver timeline on the root style
attribute pins the mechanism rather than inferring it: the property goes
CSS seed -> 200px -> 72px, and the 200px is written when the header
stack ALREADY measures 72px (t=1552ms reserve=200px stack=72, corrected
at t=1612ms). usePhoneOverlayChromeReserve reads stack.offsetHeight
while the stack is transiently tall, publishes a value that is stale by
the time it lands, and its ResizeObserver then corrects it.
The CSS seed at globals.css:375 is correct for the settled stack, which
corrects the mechanism recorded on the now-archived #130 — that framed
the defect as the seed under-reserving by 0-8px. Measured, the driver is
a 128px transient over-reserve written by the hook, not the seed. / is
the control: it never writes the property and is the one clean route.
Variance is stated rather than smoothed: /dsm measured 0.363 and 0.219
across two runs, and this harness has no network throttling so /forms
and /therapy-compass run high locally. Only /dsm, /documents/search and
/ reproduced the live dispatch exactly.
Also recorded: attaching a MutationObserver to document.documentElement
inside a Playwright addInitScript throws before the document element
exists, silently killing the CLS observer and reporting a uniform
CLS=0.000 — a false clean bill that voided one run of this harness.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01361jh3eYVjJCzXWjAhdZiF
* docs(ledger): record the #151 capture review for PR #1506
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* docs(review): clarify snapshot branch state
* docs(ledger): record PR #1490 main sync after snapshot wording
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
* docs: archive rendered style contract task
* docs: record style contract closure review
* docs: record synced style contract review
* docs: record post-121 style closure review
* docs: normalize style review ledger after sync
* docs: record post-1490 style closure review
* docs: record consolidated PR 1490 review
* docs: record replacement consolidation review
* docs: record reconciled consolidation review
* docs: record post-1511 consolidation review
* docs: normalize PR 1510 ledger after main sync
* docs: record PR 1510 post-sync review
* docs: correct false #98 canary evidence and NOTES triage
Remove the incorrect probe-collapse canary attribution from #98 and
point the unread --med-accent-soft note at #157 without breaking the
seven-token TOKENS_MISSING accounting.
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
* docs(ledger): record PR #1510 evidence-correction review
Supersede the prior approve-with-no-findings row after correcting the
false #98 canary attribution and NOTES triage drift.
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
* docs: keep concurrency note inside issue table
* docs: record post-1513 consolidation review
* docs: address CodeRabbit notes on PR #1510
Fix the computed-value-time wording in design-sync notes, give #33 a
unique recommended-queue order, and drop the duplicated #98 Done block.
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
* docs(ledger): record PR #1510 CodeRabbit fix review
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
---------
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@BigSimmo