From 5696d1142ab8c16334703d4e6b74ddfd224d376e Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 25 Jul 2026 14:11:36 +0000 Subject: [PATCH 1/5] fix(formulation): clarify disabled builder controls Co-authored-by: BigSimmo --- .../formulation/formulation-builder-page.tsx | 4 +- tests/ui-formulation.spec.ts | 40 +++++++++++++++---- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/src/components/formulation/formulation-builder-page.tsx b/src/components/formulation/formulation-builder-page.tsx index 8728bd205..ae41a4aaf 100644 --- a/src/components/formulation/formulation-builder-page.tsx +++ b/src/components/formulation/formulation-builder-page.tsx @@ -678,7 +678,7 @@ export function FormulationBuilderPage({ type="button" onClick={() => move(-1)} disabled={activeIndex === 0} - className="inline-flex min-h-tap items-center gap-2 rounded-lg border border-[color:var(--border-strong)] bg-[color:var(--surface)] px-4 text-sm font-bold text-[color:var(--text-muted)] disabled:opacity-40" + className="inline-flex min-h-tap items-center gap-2 rounded-lg border border-[color:var(--border-strong)] bg-[color:var(--surface)] px-4 text-sm font-bold text-[color:var(--text-muted)] disabled:cursor-not-allowed disabled:border-[color:var(--border)] disabled:bg-[color:var(--surface-inset)]" > Previous @@ -688,7 +688,7 @@ export function FormulationBuilderPage({ type="button" onClick={() => move(1)} disabled={activeStep === "select" && selectedMechanisms.length === 0} - className="inline-flex min-h-tap items-center gap-2 rounded-lg bg-[color:var(--command)] px-4 text-sm font-bold text-[color:var(--command-contrast)] shadow-[var(--shadow-tight)] disabled:cursor-not-allowed disabled:opacity-45" + className="inline-flex min-h-tap items-center gap-2 rounded-lg border border-transparent bg-[color:var(--command)] px-4 text-sm font-bold text-[color:var(--command-contrast)] shadow-[var(--shadow-tight)] disabled:cursor-not-allowed disabled:border-[color:var(--border)] disabled:bg-[color:var(--surface-inset)] disabled:text-[color:var(--text-muted)] disabled:shadow-none" > {activeStep === "select" ? "Continue to framework" diff --git a/tests/ui-formulation.spec.ts b/tests/ui-formulation.spec.ts index 9ae2f4c7f..1b2f35147 100644 --- a/tests/ui-formulation.spec.ts +++ b/tests/ui-formulation.spec.ts @@ -138,13 +138,42 @@ test("keeps long mobile formulation pages inside the app scrollport", async ({ p expect(geometry.mainScrollHeight).toBeGreaterThan(geometry.mainClientHeight + 40); }); +test("keeps unavailable builder navigation natively disabled without fading its text", async ({ page }, testInfo) => { + await gotoApp(page, "/formulation/builder?template=5Ps"); + + const previousStep = page.getByRole("button", { name: "Previous", exact: true }); + const continueStep = page.getByRole("button", { name: "Continue to framework", exact: true }); + + await expect(previousStep).toBeDisabled(); + await expect(continueStep).toBeDisabled(); + await expect(previousStep).toHaveCSS("opacity", "1"); + await expect(continueStep).toHaveCSS("opacity", "1"); + + const disabledControlsAcceptedFocus = await page.evaluate(() => { + const controls = Array.from(document.querySelectorAll("button:disabled")).filter((button) => + ["Previous", "Continue to framework"].includes(button.textContent?.trim() ?? ""), + ); + return controls.map((control) => { + control.focus(); + return document.activeElement === control; + }); + }); + expect(disabledControlsAcceptedFocus).toEqual([false, false]); + await expectNoBlockingAxeViolations(page, testInfo); +}); + test("moves a selected mechanism through framework, quality review, and an editable draft", async ({ page, }, testInfo) => { await gotoApp(page, "/formulation/builder?mechanism=rumination&template=5Ps"); await expect(page.getByRole("checkbox", { name: /Rumination/ })).toBeChecked(); - await page.getByRole("button", { name: /Continue to framework/ }).click(); + const previousStep = page.getByRole("button", { name: "Previous", exact: true }); + const continueStep = page.getByRole("button", { name: "Continue to framework", exact: true }); + await expect(previousStep).toBeDisabled(); + await expect(previousStep).toHaveCSS("opacity", "1"); + await expect(continueStep).toBeEnabled(); + await continueStep.click(); await expect(page.getByTestId("formulation-builder-structure")).toBeVisible(); const cbtCycle = page.getByRole("radio", { name: /CBT cycle/ }); await page.getByText("CBT cycle", { exact: true }).click(); @@ -173,12 +202,9 @@ test("moves a selected mechanism through framework, quality review, and an edita await expect(draft).not.toHaveValue("Stale edited draft"); await expect(draft).toHaveValue(/Select mechanisms and add case evidence/); await expectNoHorizontalOverflow(page); - // WebKit can serve a stale :disabled computed style (opacity .4) for the step-nav - // Previous button after the select->draft transition re-enables it; axe folds that - // opacity into the glyph color and reports a phantom color-contrast violation for a - // state WCAG 1.4.3 exempts anyway (matrix run 4012). Poll the computed style so axe - // measures the live enabled state; a failure HERE is direct proof of the stale style. - const previousStep = page.getByRole("button", { name: "Previous", exact: true }); + // Regression guard for matrix run 4012: the old disabled opacity utility could + // remain stale in WebKit after this button re-enabled, which made axe measure a + // phantom low-contrast enabled state. Keep the live state explicit before scanning. await expect(previousStep).toBeEnabled(); await expect(previousStep).toHaveCSS("opacity", "1"); await expectNoBlockingAxeViolations(page, testInfo); From 1621a67facd64d7bb9a39fff1f7d7669cd598c06 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 25 Jul 2026 14:36:41 +0000 Subject: [PATCH 2/5] docs: defer formulation patch pending source proof Co-authored-by: BigSimmo --- docs/branch-review-ledger.md | 1 + docs/outstanding-issues.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/branch-review-ledger.md b/docs/branch-review-ledger.md index 250735a6f..bddd4cc94 100644 --- a/docs/branch-review-ledger.md +++ b/docs/branch-review-ledger.md @@ -872,3 +872,4 @@ This file is append-only. Never rewrite or delete an existing review record; app | 2026-07-25 | open-pr-babysit-continuation-20260725 | multipass | Babysit continuation after 14 merges: #1177 landed; #1174/#1178/#1153 in progress; drafts #1187/#1192 skipped; large cluster #1162/#1185/#1186/#1188/#1190 content-conflicted (skip). | merge-tree inventory; no provider-backed checks. | | 2026-07-25 | audit-remediation (PR #1153) | 5a731df5c25fed9b07fd2321a0ad4b6519471f4b | PR babysit: CodeRabbit thread fixes + merge | Before: MERGEABLE/BLOCKED on required_review_thread_resolution + pending CI; 6 CodeRabbit threads. After: fixed sync-skills pad/YAML escape, PDF temp cleanup, squash-aware rollback wording; dispositioned ledger mid-table + retained false-positive; approved CI; merged to main `191b17d2f` (merge commit); branch deleted; tip is ancestor of main. | Hosted CI green on tip; no provider-backed checks. | | 2026-07-25 | cursor/local-presence-054-7cf3 (PR #1178) | 9135891bfd194394549cb480a7ec86de12b23ee7 | PR babysit: local-presence + /tools + CI/UI fixes + squash merge | Before: flaky Safety audit on package.json scripts, Production UI Sources autofocus flake, CodeRabbit short-env duplicate thread. After: ci-change-scope lockfile-only; strip stale short env keys; sheet open-focus retries + skip focus=1 reclaim under modal; squash-merged `d08ec2e8e`; branch deleted; key-file content-diff empty. | Hosted PR required SUCCESS (Production UI green on tip); focused local-presence vitest; no provider-backed checks. | +| 2026-07-25 | cursor/formulation-contrast-reconcile-14d4 | 5696d11416f5752b2cbb7ef0331fa29427b12d5c | #064 clean-room formulation disabled-state reconciliation and local review | No P0/P1 findings. Native `disabled` semantics remain intact; opacity-only styling was replaced by explicit disabled surfaces, and focused coverage proves disabled/focus/enabled-transition/axe behavior. Historical `agent/formulation-disabled-contrast` source remains untouched but unavailable, so the issue is deferred rather than claimed landed. Residual verification blocker is environment-only: system Chrome reports PWA `in-incognito`, and managed WebKit is absent. | Focused Chromium 2/2; full formulation Chromium 7/7; `verify:cheap` 3,377/3,377; `verify:ui` 271/272 with unrelated PWA installability environment failure; manual desktop/390px flow passed. No provider-backed checks. | diff --git a/docs/outstanding-issues.md b/docs/outstanding-issues.md index 1d424f49e..8096ae0b3 100644 --- a/docs/outstanding-issues.md +++ b/docs/outstanding-issues.md @@ -99,7 +99,7 @@ removed after current-main verification; it is not missing recommended work. | ID | Pri | Type | Summary | Detail / next action | Source | Added | | ---- | --- | ----- | --------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ---------- | | #059 | P1 | task | Verify containment of every credential reported exposed in chat | **Outcome:** every reported exposed credential is rejected or retired. **Next:** in approved security windows, verify and revoke or rotate the GitHub token, OpenAI key, Supabase service-role JWT, database password, and E2E credential; create replacements only when required and update only intended secret stores. **Success:** provider evidence confirms the old credentials cannot authenticate, replacements are distinct and minimally scoped, presence/readiness checks pass, and secret scans remain clean. **Stop:** no provider or secret-store action without approval; never print or paste values into Git, logs, issues, or chat. | session 2026-07-24 security reconciliation; AI Agent Target Manifest | 2026-07-24 | -| #064 | P2 | task | Reconcile the preserved browser and contrast patch | **Outcome:** the isolated dirty formulation/contrast patch is safely landed or explicitly dispositioned. **Next:** rebase its intent against current `main` without overwriting the worktree, then run focused Playwright coverage and `verify:ui`. **Success:** intended disabled/contrast behavior is accessible, browser assertions remain meaningful, and unrelated work is preserved. **Stop:** do not discard or auto-merge the dirty worktree; pause on ambiguous ownership or scope. | `agent/formulation-disabled-contrast`; session 2026-07-24 | 2026-07-24 | +| #064 | P2 | task | Reconcile the preserved browser and contrast patch | **Deferred 2026-07-25:** clean-room commit `5696d114` fixes opacity-dependent disabled styling and adds native-disabled/focus/axe coverage; the unavailable historical worktree remains untouched. Focused Chromium and `verify:cheap` pass; `verify:ui` is 271/272 because system Chrome reports unrelated PWA `in-incognito`, and managed WebKit is unavailable. **Next:** owner-compare the preserved patch, then rerun managed Chromium/WebKit and clean `verify:ui` before handoff. **Stop:** do not claim landed, push, merge, download browsers, weaken PWA/access-control assertions, or alter the historical worktree without authorization. | `agent/formulation-disabled-contrast`; `cursor/formulation-contrast-reconcile-14d4`; session 2026-07-25 | 2026-07-24 | | #065 | P2 | task | Complete the paused compact document source-text accordion | **Outcome:** the document viewer uses compact nested disclosures while retaining complete text, citation/search navigation, print behavior, and composer clearance. **Next:** only when the user explicitly resumes, reconcile `codex/chat-document-text-accordion-7cb4` with current `main` and complete the focused 320/390/1280 px tests. **Success:** default disclosures are closed; deep links and search open only the active passage; printing expands/restores state; no overflow. **Verify:** focused document-viewer Playwright, `verify:cheap`, `verify:ui`, and static production-readiness. **Stop:** remain paused until explicit user return; no provider calls. | paused document-viewer task; `codex/chat-document-text-accordion-7cb4` | 2026-07-24 | | #066 | P2 | task | Land and prove the streamlined six-item sidebar | **Landed/proven on feature branch (not yet on `main`).** PR #1174 tip; current `origin/main` was merged into the feature branch. Six-item rail: Answer, Documents, Services, Medications, Factsheets, Tools (Favourites in Your library). **Remaining:** merge PR #1174 and prove the exact content SHA is on `origin/main`. **Stop:** do not merge without explicit ask; no provider calls. | feature `cursor/sidebar-six-item-land-cfa0`; PR #1174; session 2026-07-25 | 2026-07-24 | | #067 | P2 | issue | Reconciliation preflight test times out under full-suite load | **Outcome:** the reconciliation preflight subprocess test is deterministic under the repository's serialized heavy-test workflow. During PR #1119 validation, the 30-second test timeout occurred twice under loaded full-suite execution, while the isolated file passed 5/5 and a separate `verify:cheap` full suite passed. **Next:** reproduce with timing around subprocess startup, output and teardown, then fix the smallest proven harness lifecycle cause. **Success:** repeated focused and full-suite runs complete without extending the global timeout. **Stop:** do not hide the cause by raising broad timeouts, adding retries, or bypassing the shared test lock. | `tests/reconciliation-preflight.test.ts`; PR #1119 validation; session 2026-07-24 | 2026-07-24 | From 45fe534031c077fa462d5da339c9e500e7613ef6 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 25 Jul 2026 15:09:34 +0000 Subject: [PATCH 3/5] docs: record formulation PR readiness Co-authored-by: BigSimmo --- docs/branch-review-ledger.md | 1 + docs/outstanding-issues.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/branch-review-ledger.md b/docs/branch-review-ledger.md index 1f48c22e5..4d40d5fcb 100644 --- a/docs/branch-review-ledger.md +++ b/docs/branch-review-ledger.md @@ -958,3 +958,4 @@ This file is append-only. Never rewrite or delete an existing review record; app | 2026-07-25 | execute-audit-code-remediation (PR #1162) | 1de1b32f562c0a972997750a5dc97a02ab1a9c15 | Production UI fix | Fixed ui-tools services referral header test (H1/quick-filters contract). Prior tip 09c6eb2d had Static/Safety/Unit/Migration green; only Production UI failed. | Local Playwright chromium services referral test PASS; no provider-backed checks. | | 2026-07-25 | execute-audit-code-remediation (PR #1162) | b9b56c140eb14cbba5a2c2230e3fa28d3a791add | CI unblock after bot sync | Tip 96188eca had PR required SUCCESS (Static/Safety/Unit/Build/Migration/Production UI). Hosted pr-branch-sync then merged main (a420b86b/b9b56c14), leaving CI action_required for bot-authored runs. Pushing agent commit to re-trigger non-bot CI. | Prior tip 96188eca hosted CI green; local services referral Playwright PASS; no provider-backed checks. | | 2026-07-25 | `cursor/ledger-066-067-519b` | f04392a408eceee14215c15169cbd6b70ac2041c | Close stale ledger #066/#067 (+ drop resolved #030/#075 from queue) | READY. #066 proven on main via #1174; #067 already fixed in #1191 in-process preflight. Docs-only ledger sync; no code change. | Local proof: `git show`/`log` for #1174/#1191; preflight test already in-process on main; ledger integrity asserts. No providers. | +| 2026-07-25 | cursor/formulation-contrast-reconcile-14d4 | c22c028e4b60900b8c2e5d114f5ed6ba501dcf6a | #064 post-main-sync PR-readiness review | No P0-P2 findings from independent frontend/accessibility and regression reviews. Unique diff remains four files; native disabled semantics, design tokens, forced-colors behavior, and enabled transitions are preserved. Historical `agent/formulation-disabled-contrast` remains untouched and unavailable. Branch is locally PR-ready subject to clean managed-browser CI. | Post-merge focused Chromium 2/2; formulation Chromium 7/7; `verify:cheap` 3,401/3,401; `verify:ui` 272/273 with only system-Chrome PWA `in-incognito`; two independent reviews; no provider-backed checks. | diff --git a/docs/outstanding-issues.md b/docs/outstanding-issues.md index b4e29aadf..da1591de7 100644 --- a/docs/outstanding-issues.md +++ b/docs/outstanding-issues.md @@ -96,7 +96,7 @@ removed after current-main verification; it is not missing recommended work. | ID | Pri | Type | Summary | Detail / next action | Source | Added | | ---- | --- | ----- | --------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ---------- | | #059 | P1 | task | Verify containment of every credential reported exposed in chat | **Outcome:** every reported exposed credential is rejected or retired. **Next:** in approved security windows, verify and revoke or rotate the GitHub token, OpenAI key, Supabase service-role JWT, database password, and E2E credential; create replacements only when required and update only intended secret stores. **Success:** provider evidence confirms the old credentials cannot authenticate, replacements are distinct and minimally scoped, presence/readiness checks pass, and secret scans remain clean. **Stop:** no provider or secret-store action without approval; never print or paste values into Git, logs, issues, or chat. | session 2026-07-24 security reconciliation; AI Agent Target Manifest | 2026-07-24 | -| #064 | P2 | task | Reconcile the preserved browser and contrast patch | **Deferred 2026-07-25:** clean-room commit `5696d114` fixes opacity-dependent disabled styling and adds native-disabled/focus/axe coverage; the unavailable historical worktree remains untouched. Focused Chromium and `verify:cheap` pass; `verify:ui` is 271/272 because system Chrome reports unrelated PWA `in-incognito`, and managed WebKit is unavailable. **Next:** owner-compare the preserved patch, then rerun managed Chromium/WebKit and clean `verify:ui` before handoff. **Stop:** do not claim landed, push, merge, download browsers, weaken PWA/access-control assertions, or alter the historical worktree without authorization. | `agent/formulation-disabled-contrast`; `cursor/formulation-contrast-reconcile-14d4`; session 2026-07-25 | 2026-07-24 | +| #064 | P2 | task | Reconcile the preserved browser and contrast patch | **Prepared for PR 2026-07-25:** current `origin/main` is merged at `c22c028e`; two independent reviews found no P0-P2 issue. Clean-room commit `5696d114` replaces opacity-dependent disabled styling and adds native-disabled/focus/axe coverage; the unavailable historical worktree remains untouched. Post-merge focused Chromium passes 2/2, all formulation journeys pass 7/7, and `verify:cheap` passes 3,401 tests. `verify:ui` is 272/273 because system Chrome reports the unrelated PWA `in-incognito`; managed WebKit remains unavailable locally. **Next:** open the PR and require clean managed-browser CI before merge. **Stop:** do not merge with required UI checks red, weaken PWA/access-control assertions, or alter the historical worktree without authorization. | `agent/formulation-disabled-contrast`; `cursor/formulation-contrast-reconcile-14d4`; commits `5696d114`, `c22c028e`; session 2026-07-25 | 2026-07-24 | | #065 | P2 | task | Complete the paused compact document source-text accordion | **Outcome:** the document viewer uses compact nested disclosures while retaining complete text, citation/search navigation, print behavior, and composer clearance. **Next:** only when the user explicitly resumes, reconcile `codex/chat-document-text-accordion-7cb4` with current `main` and complete the focused 320/390/1280 px tests. **Success:** default disclosures are closed; deep links and search open only the active passage; printing expands/restores state; no overflow. **Verify:** focused document-viewer Playwright, `verify:cheap`, `verify:ui`, and static production-readiness. **Stop:** remain paused until explicit user return; no provider calls. | paused document-viewer task; `codex/chat-document-text-accordion-7cb4` | 2026-07-24 | | #051 | P2 | task | Stabilise the live answer-quality canary before more RAG tuning | Diagnostics landed in PR #1095: structured JSON/Markdown artifacts now record the actual checked-out SHA, run identity and latency context, and the offline trend tool separates content, provider-route and latency outcomes. First validating run `30018289898` recorded the expected tree and cost, with 36/36 retrieval green, but one report cannot establish variability; PR #1097 prevents a single failure being mislabeled as repeated. Next: compare the scheduled 2026-07-26 structured report with this run. Do not spend on an immediate retry or reapply the archived lithium guard before that comparison. | PR #1095; run `30018289898`; PR #1097; archive ref `refs/archive/rejected-rag/20260723/monitoring-subject-gate` | 2026-07-23 | | #001 | P2 | task | Semantic reranking still gated off | `RAG_SEMANTIC_RERANK_ENABLED=false` from PR #901. Do not enable until the provider-backed 36/36 retrieval-quality gate **and** an ambiguity-focused canary are explicitly approved and recorded. | `docs/process-hardening.md` (Semantic reranking rollout debt); PR #901 | 2026-07-21 | From f760e8221b9e1fa540ec707a00d310cb68923473 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 25 Jul 2026 15:31:20 +0000 Subject: [PATCH 4/5] docs: record final formulation readiness Co-authored-by: BigSimmo --- docs/branch-review-ledger.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/branch-review-ledger.md b/docs/branch-review-ledger.md index fe6e5036e..89746d2de 100644 --- a/docs/branch-review-ledger.md +++ b/docs/branch-review-ledger.md @@ -964,3 +964,4 @@ This file is append-only. Never rewrite or delete an existing review record; app | 2026-07-25 | cursor/formulation-contrast-reconcile-14d4 | c22c028e4b60900b8c2e5d114f5ed6ba501dcf6a | #064 post-main-sync PR-readiness review | No P0-P2 findings from independent frontend/accessibility and regression reviews. Unique diff remains four files; native disabled semantics, design tokens, forced-colors behavior, and enabled transitions are preserved. Historical `agent/formulation-disabled-contrast` remains untouched and unavailable. Branch is locally PR-ready subject to clean managed-browser CI. | Post-merge focused Chromium 2/2; formulation Chromium 7/7; `verify:cheap` 3,401/3,401; `verify:ui` 272/273 with only system-Chrome PWA `in-incognito`; two independent reviews; no provider-backed checks. | | 2026-07-25 | execute-audit-remediation-plan (PR #1188) | 8b8639113925601e1687bfe4f1f29c44a4308b61 | Bugbot/diff-review: maintainability remediation tip | BLOCK: tip tree carries unresolved conflict markers (answer/upload APIs, clinical-dashboard, services, tests); invalid `async export function sha256Hex` in indexing-v3 utils; ClinicalDashboard still calls removed `renderSystemNotice`; merge-tree vs main conflicts in check-github-action-pins.mjs + ui-primitives.tsx. Intended notices extraction/dynamic imports look mostly sound; search-scope/migration not in three-dot product delta. | `git grep` conflict markers on tip (none on origin/main); `git show` for ClinicalDashboard:3824 + utils.ts:191; `git merge-tree --write-tree origin/main 8b8639113`; no provider-backed checks. | | 2026-07-25 | PR #1209 / `cursor/pr1186-audit-remediation-c94c` | `4cb22e45dfe46b1975fa15ddd028c7e14ceb5fab` | Close #1186 + babysit #1209 CI | DONE. Closed #1186 as superseded. Synced origin/main (MERGEABLE/CLEAN). Fixed PR-policy RAG impact line. Hosted PR required SUCCESS (Static/Safety/Unit/Build/Production UI/Advisory UI/containers) on pre-ledger tip; docs-only follow-up pushed. Ready to merge; auto-merge not enabled. | gh pr checks; local policy ok; no provider/eval runs. | +| 2026-07-25 | cursor/formulation-contrast-reconcile-14d4 | 50bed6ebe8e23cfceb802c3181658208d904d168 | #064 final fetched-main readiness confirmation | Fresh `origin/main` merged without changing the four-file unique diff. Prior independent reviews remain applicable with no P0-P2 findings; branch is ready to open and must not merge until hosted required checks are green. | Focused Chromium 2/2; `verify:cheap` 3,419/3,419; `verify:pr-local` passed with build, client-secret scan, and offline RAG fixtures; no provider-backed checks. | From acc39d0132419f02e42d51f9d601e0d049c48e73 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 25 Jul 2026 15:39:55 +0000 Subject: [PATCH 5/5] chore: retrigger CI after branch sync Co-authored-by: BigSimmo