fix(audit): apply safe audit remediation (AntiGravity) - #1295
Conversation
- Add prompt-perfector skill metadata (openai.yaml) - Update bundle budget thresholds - Add bundle-size, nightly-drift, and playwright CI workflows - Update check-github-action-pins script - Fix mode-home-template responsive breakpoints (sm: not lg:) - Update services pages and service-catalog-mapper - Improve worker/main.ts error handling - Update docs: audit plan, outstanding issues, search-chrome-behaviour - Update public/llms.txt description - Fix database-skills test counts for new skill - Fix privacy-ui test assertions to match current page copy - Increase reconciliation-preflight test timeout to 300s for large worktree environments RAG impact: no retrieval behaviour change — rag-query-guard.ts excluded from this PR
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughResponsive action styling now switches at the ChangesResponsive action layout
Branch review ledger
Estimated code review effort: 2 (Simple) | ~10 minutes 🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
Comment |
|
This pull request has been ignored for the connected project Preview Branches by Supabase. |
CI triageCI failed on this PR. Automated classification of the 2 failed job(s):
Compared with main CI run #6305 (success). Classification is evidence routing, not permission to ignore a failure. Exact quarantined Playwright identities remain governed by the flake ledger. |
|
@coderabbitai please run review and fix merge conflict and failing CI |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
repo="BigSimmo/Database"
pr_number="1295"
echo "== Pull request mergeability =="
gh pr view "$pr_number" --repo "$repo" \
--json url,headRefName,baseRefName,mergeable,mergeStateStatus \
--jq '{url, headRefName, baseRefName, mergeable, mergeStateStatus}'
echo
echo "== Check runs =="
gh pr checks "$pr_number" --repo "$repo" --required=false --watch=false || true
echo
echo "== Failed or cancelled check details =="
gh api "repos/$repo/commits/$(gh pr view "$pr_number" --repo "$repo" --json headRefOid --jq .headRefOid)/check-runs?per_page=100" \
--jq '.check_runs[]
| select(.conclusion == "failure" or .conclusion == "cancelled" or .conclusion == "timed_out" or .conclusion == "action_required")
| {name, status, conclusion, details_url, started_at, completed_at}'Length of output: 3643 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
repo="BigSimmo/Database"
pr_number="1295"
run_id="30322331618"
job_id="90160630652"
echo "== Unit coverage failure lines =="
gh run view "$run_id" --repo "$repo" --job "$job_id" --log-failed || true
echo
echo "== Workflow job metadata =="
gh api "repos/$repo/actions/jobs/$job_id" \
--jq '{name, conclusion, started_at, completed_at, steps: [.steps[] | {name, conclusion, number}]}'
echo
echo "== Files changed by this PR =="
gh pr diff "$pr_number" --repo "$repo" --name-only
echo
echo "== Candidate workflow and test files =="
fd -t f -E node_modules -E dist -E build \
| rg '(^|/)(.*(?:coverage|vitest|jest|playwright|reconciliation-preflight|database-skills|privacy-ui).*\.(?:[cm]?[jt]sx?|ya?ml)|.*\.github/workflows/.*\.ya?ml)$' \
| sortLength of output: 208686 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
echo "== PR head/base and merge base =="
head_sha="$(git rev-parse HEAD)"
base_ref="$(git remote show origin | sed -n '/HEAD branch/s/.*: //p')"
git fetch origin "$base_ref" --quiet
base_sha="$(git rev-parse "origin/$base_ref")"
merge_base="$(git merge-base "$head_sha" "$base_sha")"
printf 'head=%s\nbase=%s\nmerge_base=%s\n' "$head_sha" "$base_sha" "$merge_base"
echo
echo "== Files changed on both sides since merge base (potential conflict surface) =="
comm -12 \
<(git diff --name-only "$merge_base" "$head_sha" | sort) \
<(git diff --name-only "$merge_base" "$base_sha" | sort)
echo
echo "== Confirm deliberately excluded RAG guard has no PR diff =="
git diff --name-only "$merge_base" "$head_sha" | rg '(^|/)rag-query-guard\.ts$' && exit 1 || trueLength of output: 1410 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
echo "== Component outline =="
ast-grep outline src/components/mode-home-template.tsx --lang tsx --items all \
| sed -n '1,160p'
echo
echo "== Failing test contract (Lines 70-115) =="
sed -n '70,115p' tests/therapy-compass-responsive-contract.test.ts
echo
echo "== Action grid implementation matches =="
rg -n -C 5 \
'grid-cols-\[repeat\(auto-fit,minmax\(15rem,1fr\)\)\]|sm:flex-wrap' \
src/components/mode-home-template.tsx
echo
echo "== Current overlapping change surface against origin/main =="
head_sha="$(git rev-parse HEAD)"
base_sha="$(git rev-parse origin/main)"
merge_base="$(git merge-base "$head_sha" "$base_sha")"
head_files="$(mktemp)"
base_files="$(mktemp)"
trap 'rm -f "$head_files" "$base_files"' EXIT
git diff --name-only "$merge_base" "$head_sha" | sort >"$head_files"
git diff --name-only "$merge_base" "$base_sha" | sort >"$base_files"
comm -12 "$head_files" "$base_files"
echo
echo "== PR mergeability after conflict-resolution request =="
gh pr view 1295 --repo BigSimmo/Database \
--json mergeable,mergeStateStatus,headRefOid,baseRefOid \
--jq '{mergeable, mergeStateStatus, headRefOid, baseRefOid}'Length of output: 6845 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
head_sha="$(git rev-parse HEAD)"
base_sha="$(git rev-parse origin/main)"
merge_base="$(git merge-base "$head_sha" "$base_sha")"
file="docs/branch-review-ledger.md"
for label_sha in \
"MERGE_BASE:$merge_base" \
"PR_HEAD:$head_sha" \
"CURRENT_MAIN:$base_sha"; do
label="${label_sha%%:*}"
sha="${label_sha#*:}"
echo "== $label: $file =="
git show "$sha:$file" | nl -ba | sed -n '1,260p'
echo
done
echo "== Focused three-way diff =="
git diff --no-ext-diff --unified=5 "$merge_base" "$head_sha" -- "$file"
echo
git diff --no-ext-diff --unified=5 "$merge_base" "$base_sha" -- "$file"Length of output: 1029 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
head_sha="$(git rev-parse HEAD)"
base_sha="$(git rev-parse origin/main)"
merge_base="$(git merge-base "$head_sha" "$base_sha")"
file="docs/branch-review-ledger.md"
for label_sha in \
"MERGE_BASE:$merge_base" \
"PR_HEAD:$head_sha" \
"CURRENT_MAIN:$base_sha"; do
label="${label_sha%%:*}"
sha="${label_sha#*:}"
echo "== $label: $file =="
git show "$sha:$file" | awk '{printf "%6d\t%s\n", NR, $0}' | sed -n '1,300p'
echo
done
echo "== PR-head changes from merge base =="
git diff --no-ext-diff --unified=5 "$merge_base" "$head_sha" -- "$file"
echo
echo "== Current-main changes from merge base =="
git diff --no-ext-diff --unified=5 "$merge_base" "$base_sha" -- "$file"Length of output: 201226 🏁 Script executed: #!/usr/bin/env bash
set -euo pipefail
node scripts/run-vitest.mjs run tests/therapy-compass-responsive-contract.test.ts
gh pr checks 1295 --repo BigSimmo/Database --required --watchLength of output: 1256
The CI and conflict fixes remain unverified until the planned changes are applied and pushed. Please rerun the focused test in a dependency-ready checkout, then confirm that Unit coverage, PR required, and mergeability are green. |
|
@cursoragent please resolve all CI failing tests after understanding the issue. Please also fix any comments and resolve them and also ensure that you fix with smallest required fix with best coding practice and u derstabding the fix rather than simple patch. Please fix any merge conflicts and ensure any issues are found. Please resolve any issues you find. Please also run bugbot. Please mark comments resolved also once you resolve them. |
|
CI is green on the original failure path, merge conflicts are cleared, and all review threads are resolved. Root cause: Unit coverage failed because Fixes (tip
Reviews: Bugbot had 0 findings. All 9 Codex/CodeRabbit threads replied + resolved. Hosted CI on tip: Unit coverage, Build, Static PR, Safety, Guard Bundle Budget all pass. PR is |
|
@codex PR review |
Clear GitHub DIRTY/CONFLICTING stale base (30 commits behind). Ledger overlap is append-only union; content merge is clean. Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
The mode-home action grid intentionally uses sm:grid-cols auto-fit so tablet widths get a multi-column layout before lg. Update the therapy compass responsive contract to assert sm instead of the stale lg token. Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Append-only closeout for the mode-home sm breakpoint contract fix, main sync that cleared DIRTY/CONFLICTING, and zero Bugbot findings. Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: aecfdcbfe4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@codex resolve actionable Codex review findings for this pull request and current head using the repository instructions. This is the pull request's single automatic repair pass: do not perform a fresh review, create new standalone findings, or request another review. Work only the existing unresolved Codex threads on the current head. Always fix P0 and P1 findings. For P2 and lower findings, fix only clear, scoped, low-risk issues; otherwise disposition them with a concise reason. After fixing or dispositioning a thread, reply in that thread with as the first line, followed by a concise summary; that marker authorizes the workflow to close that exact thread. If human input or new authorization is required, do not use the marker and leave the thread open with the blocker. Finish only after every actionable thread is fixed or dispositioned and closed, or explicitly left open for a human decision. Do not update the branch from main, address unrelated reviews, broaden scope, or create more than one scoped fix commit. Do not use external APIs, paid services, credentials, dependency changes, or broad refactors unless explicitly authorized. Add targeted tests where behavior changes and run the narrowest relevant validation. |
|
Codex Review: Didn't find any major issues. Keep it up! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
After moving the action auto-fit grid to sm, unconditional border-t on non-first actions double-stroked lg card chrome. Limit separators to max-sm so they only apply in the phone stack, and lock that pairing in the therapy-compass responsive contract. Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Append-only note that mode-home stack separators now match the sm grid breakpoint after the CI contract fix. Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
CI / conflict / Bugbot closeout (
|
setup-ui-e2e only installs Chromium, so firefox/webkit matrix jobs would fail missing browsers. Install the selected matrix.project (and its system deps) with a per-browser cache key, matching the release matrix pattern in ci.yml. Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Append-only closeout for the Codex P1 on cross-browser Playwright setup. Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
There was a problem hiding this comment.
Actionable comments posted: 7
🧹 Nitpick comments (2)
tests/therapy-compass-responsive-contract.test.ts (1)
97-99: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winCover the changed separator contract.
This assertion verifies only the breakpoint transition. Add a focused expectation for the new
border-t border-[color:var(--border)]behavior so future changes cannot silently remove or alter the action separators.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@tests/therapy-compass-responsive-contract.test.ts` around lines 97 - 99, Add a focused assertion in the mode-home template checks alongside the existing grid breakpoint expectation, verifying that action tiles include the exact `border-t border-[color:var(--border)]` class sequence. Preserve the current breakpoint assertion and avoid broadening the test beyond this separator contract..github/workflows/playwright.yml (1)
41-49: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick winDo not silently ignore missing failure artifacts.
if-no-files-found: ignoreallows a failed browser run to finish without any diagnostics and hides a broken artifact path or setup regression. Usewarnat minimum, orerrorif artifact presence is part of the workflow contract, and confirm thatrun-playwright.mjswrites both directories.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/playwright.yml around lines 41 - 49, Update the “Upload browser diagnostics” step to stop silently ignoring missing artifacts by changing if-no-files-found to warn at minimum, or error if diagnostics are required; verify run-playwright.mjs produces both test-results/ and playwright-report/ directories on failed runs.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/bundle-size.yml:
- Around line 6-12: Add "data/**" to the workflow paths filter so pull requests
changing build-input data trigger the bundle audit consistently with the cache
key. Update the paths list near the existing source and configuration entries
without changing unrelated triggers.
- Around line 18-20: Remove the pull-requests: write permission from the
workflow permissions block, retaining only contents: read so the bundle budget
job remains read-only. Do not modify the existing bundle check; any future
PR-commenting logic should run in a separate trusted job.
In @.github/workflows/nightly-drift.yml:
- Around line 15-20: Remove SUPABASE_SERVICE_ROLE_KEY from the job-level env
block in the nightly drift workflow, and add it only to the env blocks of the
three Supabase validation/check steps, preferably using the protected GitHub
Environment configuration. Keep the key unavailable to checkout, dependency
installation, tests, parity checks, and other unrelated steps.
- Around line 3-6: Restrict the secret-backed Supabase steps in the nightly
drift workflow to the default branch or a protected environment requiring
approval, while keeping workflow_dispatch available for offline checks. Update
the relevant Supabase step conditions or job environment protection without
gating non-secret checks.
In `@docs/audit/repo-wide-review-remediation-plan-2026-07-23.md`:
- Around line 118-120: Update the Batch 2 action list around the workflow-branch
and check-github-action-pins items so it explicitly continues discovery of both
workflow and composite-action paths; remove the unrelated Next.js guide
instruction from this list or move it to the appropriate framework-change
section, and reference the document’s canonical action list if that is the
intended source.
- Around line 262-264: Update the “Approval-required follow-up gates” section to
remove the local self-test item and restore the actual provider-backed
operations that require approval. Keep the unpinned external uses self-test
listed with the Batch 2 local verification steps, not behind an approval gate.
In `@src/components/mode-home-template.tsx`:
- Around line 290-291: Update the class construction for the action cards in the
mode-home template so the top border applies only in the stacked layout.
Preserve the existing index > 0 condition, but override or remove the border at
the sm grid breakpoint using the responsive border utility, preventing dividers
between side-by-side cards.
---
Nitpick comments:
In @.github/workflows/playwright.yml:
- Around line 41-49: Update the “Upload browser diagnostics” step to stop
silently ignoring missing artifacts by changing if-no-files-found to warn at
minimum, or error if diagnostics are required; verify run-playwright.mjs
produces both test-results/ and playwright-report/ directories on failed runs.
In `@tests/therapy-compass-responsive-contract.test.ts`:
- Around line 97-99: Add a focused assertion in the mode-home template checks
alongside the existing grid breakpoint expectation, verifying that action tiles
include the exact `border-t border-[color:var(--border)]` class sequence.
Preserve the current breakpoint assertion and avoid broadening the test beyond
this separator contract.
🪄 Autofix (Beta)
❌ Autofix failed (check again to retry)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: c2084abd-983e-4ce8-ad97-6973d70feddf
📒 Files selected for processing (9)
.agents/skills/prompt-perfector/agents/openai.yaml.github/workflows/bundle-size.yml.github/workflows/nightly-drift.yml.github/workflows/playwright.ymlbundle-budget.jsondocs/audit/repo-wide-review-remediation-plan-2026-07-23.mddocs/branch-review-ledger.mdsrc/components/mode-home-template.tsxtests/therapy-compass-responsive-contract.test.ts
Address CodeRabbit findings on the audit-remediation workflows: - bundle-size: include data/** path trigger; drop unused pull-requests:write - nightly-drift: keep SERVICE_ROLE_KEY off job env; inject only on live Supabase steps; skip those steps outside refs/heads/main - guard-next-build: warn-only under GITHUB_ACTIONS for the <10GiB RAM check so standard hosted runners (~7–8GiB) are not flaky - audit plan: restore Batch 2 discovery list and approval-gate section Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Append-only closeout for bundle-size, nightly-drift, RAM-guard, and audit-plan fixes from the CodeRabbit review pass. Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Closeout update (
|
| Source | Finding | Disposition |
|---|---|---|
| Codex P1 | Playwright matrix missing firefox/webkit install | Fixed — install ${{ matrix.project }} + deps |
| Codex P1 | Contract still asserted lg: grid |
Fixed — contract asserts sm: + max-sm separators |
| CodeRabbit | bundle-size missing data/** path |
Fixed |
| CodeRabbit | unused pull-requests: write |
Fixed |
| CodeRabbit | nightly-drift secret on feature-branch dispatch | Fixed — live steps main-only |
| CodeRabbit | service-role key job-wide | Fixed — step-scoped |
| CodeRabbit | audit-plan Batch 2 / approval-gate text | Fixed |
| CodeRabbit | mode-home stack border in multi-col grid | Already fixed via max-sm:border-t |
| Bugbot | — | Zero findings |
Also: merged origin/main (DIRTY was stale; merge-tree clean), and guard-next-build RAM check is warn-only under GITHUB_ACTIONS so the new bundle-size workflow isn’t flaky on ~7–8 GiB hosted runners.
Local: verify:cheap PASS earlier; focused therapy-compass 10/10; check:github-actions + ledger guard PASS. Hosted required checks re-running on this tip.
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
src/components/mode-home-template.tsx (2)
304-309: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winDo not render an enabled no-op button.
Because
onClickis optional, an action withouthreforonClickbecomes an enabled button that cannot perform an action. Enforce the action contract or use the required disabled/“Coming soon” placeholder pattern.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/components/mode-home-template.tsx` around lines 304 - 309, Update the action rendering in the mode home template so actions without both href and onClick cannot render as enabled no-op buttons. Enforce the action contract by requiring a valid interaction, or render the existing disabled “Coming soon” placeholder pattern for unavailable actions; preserve normal behavior for actions with href or onClick.Source: Coding guidelines
296-300: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winHonor
disabledfor link actions.When an action has both
hrefanddisabled, this branch still renders a navigableLink; thedisabled:*classes also do not apply to anchors. Render a non-interactive disabled placeholder, or prevent navigation and exposearia-disabled.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/components/mode-home-template.tsx` around lines 296 - 300, Update the href branch in the mode-home action renderer to honor disabled actions: when action.disabled is true, avoid rendering a navigable Link, or prevent navigation while exposing aria-disabled and applying the disabled styling. Preserve the existing Link behavior for enabled actions and use the existing actionClassName/content flow.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/components/mode-home-template.tsx`:
- Around line 304-309: Update the action rendering in the mode home template so
actions without both href and onClick cannot render as enabled no-op buttons.
Enforce the action contract by requiring a valid interaction, or render the
existing disabled “Coming soon” placeholder pattern for unavailable actions;
preserve normal behavior for actions with href or onClick.
- Around line 296-300: Update the href branch in the mode-home action renderer
to honor disabled actions: when action.disabled is true, avoid rendering a
navigable Link, or prevent navigation while exposing aria-disabled and applying
the disabled styling. Preserve the existing Link behavior for enabled actions
and use the existing actionClassName/content flow.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 6ccd2377-c5c8-4fdb-bee9-b07adbb53298
📒 Files selected for processing (4)
.github/workflows/playwright.ymldocs/branch-review-ledger.mdsrc/components/mode-home-template.tsxtests/therapy-compass-responsive-contract.test.ts
🚧 Files skipped from review as they are similar to previous changes (1)
- tests/therapy-compass-responsive-contract.test.ts
|
Note Autofix is a beta feature. Expect some limitations and changes as we gather feedback and continue to improve it. Autofix skipped. No unresolved CodeRabbit review comments with fix instructions found. |
|
Note Autofix is a beta feature. Expect some limitations and changes as we gather feedback and continue to improve it. Autofix skipped. No unresolved CodeRabbit review comments with fix instructions found. |
|
@cursoragent please resolve merge conflicts and also resolve CI failing tests. |
|
Merge conflicts and the failing CI path are resolved on tip Merge conflicts: Branch was 9 behind Container images failure: Docker Hosted CI on tip: Unit coverage, Build, Static PR, Safety, Guard Bundle Budget all pass. Unresolved review threads: 0. Still |
Resolve CONFLICTING/DIRTY vs advanced main. Take main's Docker/CI low-RAM build guard (ALLOW_LOW_RAM_BUILD + evaluateNextBuildRamGuard) so container-images can build on ~7–8 GiB buildx runners; ledger union-merged. Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Append-only closeout for merging main's ALLOW_LOW_RAM_BUILD path that unblocks Docker image builds on GitHub buildx runners. Co-authored-by: BigSimmo <BigSimmo@users.noreply.github.com>
Merge conflict + container-images fix (
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e3ac9ddf7a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".


This PR creates a fresh, clean branch from the tip of \main\ to apply the safe, non-conflicting changes from the previous audit remediation PR (#1261) which was closed due to a stale base and clinical/RAG surface conflicts.
Specifically, this PR includes:
ightly-drift, and \playwright\ CI workflows
econciliation-preflight\ test timeout to 300s to handle environments with many worktrees
RAG impact: no retrieval behaviour change —
ag-query-guard.ts\ is deliberately excluded from this PR.
Summary by CodeRabbit
Style
Bug Fixes
Tests