Skip to content

Reconcile Cloud setup ownership and coding-agent rules - #3597

Merged
gitar-bot[bot] merged 22 commits into
mainfrom
codex/cloud-cross-repo-hardening
Oct 17, 2026
Merged

gitar-bot[bot] merged 22 commits into
mainfrom
codex/cloud-cross-repo-hardening

Conversation

@BigSimmo

@BigSimmo BigSimmo commented Oct 17, 2026 •

Copy link
Copy Markdown
Owner

User description

Summary

Fixes Cloud bootstrap and installed-guidance failures: preserve runtime targets when replacing symlink shims, respect active config homes, validate/activate cached Python per session, and keep checkout-specific base state. Claude installs now reconcile an ownership manifest, preserve host edits and memory, and reject cross-checkout plugin mutations. Startup dependents execute sequentially. Bootstrap failures retain diagnostics and independent guidance; plugins-only setup requires persisted ownership, and legacy Codex profile migration requires explicit access-profile selection.

Aligns Claude/Cursor reviewers with canonical focused verification and current-host capabilities. The Semgrep workflow checks local capability before authorized network work and requires every approved scan/artifact pair to complete. New offline rule contracts cover routing, dependencies and scanner examples; activation guidance separates source, installed host and loaded context.

Browser checks now wait through the confirmed streamed canonical-redirect navigation without hiding other evaluation errors. The prescribing phone clearance test reissues its endpoint action against the live scroll range and brackets its geometry measurement with endpoint checks, retaining the existing dock visibility and clearance assertions.

Areas touched: Knowledge and records, Delivery and assurance, App experience

Verification

  • UI verification not run: full npm run verify:ui was deferred locally under the focused-verification policy; complete affected tools/hydration specs passed (107 tests), and all required hosted production browser partitions have now passed in CI39017019663. This is focused browser proof, not a claim that the full local UI gate passed.

  • Browser repair: 107 passed (3.1m) for the complete tools and hydration specs across Chromium/Chromium mockups on an isolated offline production build. Hydration behavioral/contract regressions: 16 passed (16). A controlled late 78px range expansion reproduces the original phone failure before the fix and passes afterward; the temporary diagnostic injection is absent from the patch.

  • Whole-tree formatting, changed-file lint, organisation placement, diff integrity and normal commit hooks pass. Independent review covers both fixes. The first local production run compiled but its TypeScript worker exhausted the default 4GB heap; the successful rerun used command-scoped NODE_OPTIONS=--max-old-space-size=8192, with typechecking and browser assertions enabled.

  • The concurrent external endpoint-repair commit is preserved in history. The merge's complete Git tree exactly matches the locally verified source tree. Hosted CI39017019663 and its PR required gate passed on exact head 6bfe9b9d5a093cf26a2bcd0a7ffb9d1f97ad6892 (observed 2026-10-17 08:46:37 UTC). All production UI partitions and critical UI, unit coverage, static/safety/build/container checks, SAST and Secret Scan passed.

  • Checks run: initial 18 focused suites, 902 tests passed; follow-up Codex policy (151), Claude lifecycle/setup (95), rule/scan (29), handoff-hook (28) and headroom/rule (41) runs passed. Counts are separate runs with overlap. Source typecheck and changed-file lint passed.

  • Instruction retirement/budgets, rule consistency (22 active sources), 35 canonical skills, gate manifest, diff integrity, documentation links/scripts/inventory, repository-awareness snapshot and formatting passed.

  • Synthetic homes/CLIs/listeners only; no actual home provisioning, scanners, memory calls or production/provider validation.

  • Hosted CI: 39017019663 passed on the exact published repair head, including the required gate and all applicable static, unit coverage, build, browser and container jobs. SAST, Secret Scan, PR Policy and mergeability checks also passed. Local focused proof remains distinct from the full local UI gate; no merge or deployment is claimed.

Risk and rollout

  • Risk: an older unmanaged or differently owned Claude config can now refuse installation instead of overwriting it. Use an isolated config home or inspect the documented identical-content adoption/uninstall flow. Retained Codex legacy setup stays explicitly selected and needs isolated HOME/CODEX_HOME for separate installations.
  • Rollback: revert the change through the normal reviewed workflow; preserve installed host edits and personal memory.
  • Provider or production effects: no live service, clinical behavior, database, deployment or credentials changed. Merging/source publication does not activate or purge existing managed environments/chats.

Notes

Browser changes are test-harness repairs only; no application source changed. They remain on this PR to repair its reported CI failures; the operational source changes and browser-repair commit remain independently revertible.

Independent reviews and isolated regressions covered the setup defects, stale instruction routes, temp-file/permission safety, wrong-owner plugin mutation and partial scan completion. Shared master rules and historical evidence remain unchanged.

Summary by CodeRabbit

  • New Features

    • Cloud setup now tracks ownership of installed files and settings, preserving host changes and personal content. Profiles can be checked, updated, or removed without deleting modified or unowned content.
    • Security scans validate completion and result files before reporting success; incomplete scans no longer count as successful.
    • A new consistency check flags conflicting or outdated verification and scanning guidance.
  • Improvements

    • Verification guidance better distinguishes focused checks from full UI and production-readiness checks.
    • Session setup follows a single sequence and reports when steps cannot be completed.
    • Cloud command tools and cached configuration are isolated by checkout to reduce unintended cross-checkout changes.
    • New guidance explains how to verify that cloud instructions are installed and active.

CodeAnt-AI Description

Protect Cloud configuration across checkouts and report incomplete setup or scans

What Changed

  • Claude profile updates now preserve host edits, unrelated settings, and personal memory. Conflicting files or another checkout’s configuration are left untouched; users can preview changes and remove only unchanged, owned content.
  • Cloud session setup now runs dependent steps in order. If bootstrap fails, provisioning is skipped, independent guidance still runs, and diagnostics are reported. Cached Python is checked and activated for each session.
  • The legacy Codex Cloud setup now uses the selected configuration folder and checkout-specific runtime and base caches. It refuses unmanaged or unsafe destinations, requires an explicit profile choice when migrating older profiles, and adds a read-only inventory of installed artifacts.
  • Agent guidance now routes routine checks through focused verification and checks current-host capabilities. Semgrep scans require approval for network actions and cannot be reported complete unless every scan and result file passes validation.
  • Browser checks retry hydration after streamed redirects and re-scroll when page content extends the results area, reducing false failures while retaining the dock-clearance check.

Impact

✅ Host edits and personal Claude memory survive profile updates
✅ Cloud checkouts keep separate configuration and base caches
✅ Incomplete Semgrep scans cannot pass as complete
✅ Fewer false browser failures after redirects or late page growth

💡 Usage Guide

Checking Your Pull Request

Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.

Talking to CodeAnt AI

Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:

@codeant-ai ask: Your question here

This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.

Example

@codeant-ai ask: Can you suggest a safer alternative to storing this secret?

Preserve Org Learnings with CodeAnt

You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:

@codeant-ai: Your feedback here

This helps CodeAnt AI learn and adapt to your team's coding style and standards.

Example

@codeant-ai: Do not flag unused imports.

Retrigger review

Ask CodeAnt AI to review the PR again, by typing:

@codeant-ai: review

Check Your Repository Health

To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.

@supabase

supabase Bot commented Oct 17, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project sjrfecxgysukkwxsowpy because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BigSimmo has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@codeant-ai

codeant-ai Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

🤖 CodeAnt AI — Review Status

Status Commit Started (UTC) Finished (UTC)
✅ Incremental review completed aae39fd Oct 17, 2026 · 10:47 10:52
✅ Incremental review completed af8d885 Oct 17, 2026 · 09:30 09:34
✅ Incremental review completed 6fb2665 Oct 17, 2026 · 08:10 08:16
✅ Incremental review completed ec8ad8f Oct 17, 2026 · 06:54 06:57
✅ Reviewed your PR 926d5f5 Oct 17, 2026 · 05:42 05:51

@codeant-ai

codeant-ai Bot commented Oct 17, 2026

Copy link
Copy Markdown

Thanks for using CodeAnt! 🎉

We're free for open-source projects. if you're enjoying it, help us grow by sharing.

Share on X ·
Reddit ·
LinkedIn

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-17T05:47:16.236017Z 926d5f5 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@claude

claude Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Claude encountered an error after 2s —— View job


I'll analyze this and get back to you.

@coderabbitai

coderabbitai Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Warning

Review limit reached

Your organization has reached its usage spending cap. Adjust your spending cap in the billing tab.

Next included review available in 29 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available. Your 112 included PR review attempts over the past 7 days set your current allowance at 1 review per hour.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Repository: BigSimmo/PsychSift/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Team
  • Run ID: e02cb119-9551-46c0-acda-755f0d291a3f
📥 Commits

Reviewing files that changed from the base of the PR and between 6bfe9b9 and 677ee34.

📒 Files selected for processing: 63
  • .agents/skills/prompt-perfector/SKILL.md
  • .claude/agents/frontend-ui-reviewer.md
  • .claude/agents/ingestion-worker-reviewer.md
  • .claude/agents/verification-router.md
  • .claude/cloud-profile/skills/prompt/SKILL.md
  • .claude/cloud-profile/skills/semgrep/SKILL.md
  • .claude/cloud-profile/skills/semgrep/references/rulesets.md
  • .claude/cloud-profile/skills/semgrep/references/scan-modes.md
  • .claude/cloud-profile/skills/semgrep/references/scanner-task-prompt.md
  • .claude/cloud-profile/skills/semgrep/scripts/scan-status.sh
  • .claude/cloud-profile/skills/semgrep/workflows/scan-workflow.md
  • .claude/hooks/pr-handoff-stop.sh
  • .claude/settings.json
  • .claude/skills/gates/SKILL.md
  • .claude/skills/prompt/SKILL.md
  • .cursor/skills/release-readiness-review/SKILL.md
  • .github/pull_request_template.md
  • .github/workflows/ci.yml
  • CLAUDE.md
  • README.md
  • data/repo-awareness-snapshot.json
  • docs/README.md
  • docs/agents/cloud-instruction-activation.md
  • docs/agents/codex-cloud-environment.md
  • docs/agents/codex-cloud-legacy-bootstrap.md
  • docs/agents/pull-request-workflow.md
  • docs/agents/verification-gates.md
  • docs/claude-cloud.md
  • docs/decisions/2026-10-17-cloud-installed-guidance-ownership.md
  • docs/organisation/README.md
  • docs/organisation/retired-rules.json
  • docs/organisation/systems/knowledge.json
  • docs/process-hardening.md
  • docs/scripts-index.md
  • docs/task-receipts.md
  • docs/testing.md
  • package.json
  • scripts/apply-claude-cloud-profile.mjs
  • scripts/audit-codex-cloud-artifacts.sh
  • scripts/check-codex-cloud-setup.mjs
  • scripts/claude-session-start.mjs
  • scripts/claude-session-start.sh
  • scripts/install-codex-cloud-command-shims.sh
  • scripts/lib/codex-cloud-paths.sh
  • scripts/maintain-codex-cloud.sh
  • scripts/organisation/check-retired-rules.mjs
  • scripts/organisation/check-rule-consistency.mjs
  • scripts/refresh-codex-cloud-base.sh
  • scripts/setup-claude-cloud.sh
  • scripts/setup-codex-cloud.sh
  • tests/browser-test-plan.test.ts
  • tests/claude-cloud-lifecycle.test.ts
  • tests/claude-cloud-profile.test.ts
  • tests/claude-cloud-write-safety.test.ts
  • tests/codex-cloud-policy-harness.test.ts
  • tests/codex-cloud-setup.test.ts
  • tests/organisation-hooks.test.ts
  • tests/organisation-instruction-guards.test.ts
  • tests/organisation-rule-consistency.test.ts
  • tests/playwright-hydration.test.ts
  • tests/playwright-settlement.ts
  • tests/pr-handoff-stop.test.ts
  • tests/ui-tools.spec.ts

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository: BigSimmo/PsychSift/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Team
  • Run ID: 023a2520-43a9-4017-8d4a-d93d467ea763
📥 Commits

Reviewing files that changed from the base of the PR and between 8b1af03 and 6bfe9b9.

📒 Files selected for processing: 10
  • .claude/cloud-profile/skills/semgrep/scripts/scan-status.sh
  • docs/agents/codex-cloud-legacy-bootstrap.md
  • docs/scripts-index.md
  • docs/testing.md
  • scripts/setup-codex-cloud.sh
  • tests/codex-cloud-setup.test.ts
  • tests/organisation-rule-consistency.test.ts
  • tests/playwright-hydration.test.ts
  • tests/playwright-settlement.ts
  • tests/ui-tools.spec.ts
🚧 Files skipped from review as they are similar to previous changes: 1
  • docs/scripts-index.md

Included review availability: This review used your included allowance. 0 included reviews remain after this review. Your included PR review attempts over the past 7 days set your current allowance at 1 review per hour.

📝 Walkthrough

The changes update agent guidance, add Semgrep scan-status validation and instruction consistency checks, revise Claude profile installation and SessionStart behavior, and make Codex Cloud setup checkout-specific. Browser tests also update hydration polling and endpoint-clearance checks.

Changes: Agent policy and verification

Layer / File(s) Summary
Prompt and verification routing
.agents/skills/prompt-perfector/SKILL.md, .claude/skills/prompt/SKILL.md, .claude/cloud-profile/skills/prompt/SKILL.md, .claude/agents/*, .claude/skills/gates/SKILL.md, .cursor/skills/release-readiness-review/SKILL.md, .github/pull_request_template.md, .claude/hooks/pr-handoff-stop.sh, docs/agents/pull-request-workflow.md, CLAUDE.md, README.md, docs/agents/verification-gates.md, docs/process-hardening.md
Prompt instructions clarify when prompts are refined or executed. Verification guidance updates gate selection for UI work and production readiness. Handoff guidance refers to supported CI waits and distinguishes publication from CI follow-up.
Authorized Semgrep scan workflow
.claude/cloud-profile/skills/semgrep/*
Semgrep instructions require exact-plan approval before execution, permit supported workers or bounded direct execution, and require tracked scan status plus valid JSON/SARIF outputs for every approved scan.
Instruction consistency enforcement
scripts/organisation/*, package.json, .github/workflows/ci.yml, docs/organisation/*, tests/organisation-*
A new checker validates active instruction and Semgrep contracts. The full verification script and CI run it. Tests cover the checker, scan-batch completion, and retired-rule detection.

Claude Cloud profile and session setup

Layer / File(s) Summary
Claude profile ownership reconciliation
scripts/apply-claude-cloud-profile.mjs, docs/claude-cloud.md, docs/decisions/*, tests/claude-cloud-lifecycle.test.ts, tests/claude-cloud-profile.test.ts, tests/claude-cloud-write-safety.test.ts
The profile applier tracks owned files and settings, supports dry-run, adoption, owner-check, and uninstall modes, and preserves modified or unmanaged content. Tests cover ownership, conflicts, lifecycle, and write safety.
Claude provisioning and SessionStart
.claude/settings.json, scripts/setup-claude-cloud.sh, scripts/claude-session-start.*, docs/claude-cloud.md, tests/claude-cloud-lifecycle.test.ts, tests/claude-cloud-profile.test.ts, tests/browser-test-plan.test.ts, tests/organisation-hooks.test.ts
Provisioning checks profile ownership, validates and activates cached Python, and uses the selected configuration home. A sequential SessionStart orchestrator collects context and reports setup failures.
Claude instruction activation guidance
docs/agents/cloud-instruction-activation.md, docs/task-receipts.md, docs/README.md, data/repo-awareness-snapshot.json
The new guide separates repository, installed-host, and active-session evidence, and describes session checks and completion reporting.

Codex Cloud checkout-bound setup

Layer / File(s) Summary
Checkout-bound Codex setup and runtime
scripts/lib/codex-cloud-paths.sh, scripts/setup-codex-cloud.sh, scripts/maintain-codex-cloud.sh, scripts/refresh-codex-cloud-base.sh, scripts/install-codex-cloud-command-shims.sh, scripts/check-codex-cloud-setup.mjs, tests/codex-cloud-policy-harness.test.ts, tests/codex-cloud-setup.test.ts
Codex setup validates active configuration paths and checkout ownership. Profiles and caches use checkout identity; shim targets are validated before atomic replacement. Tests cover checkout isolation, explicit cache pins, and shim behavior.
Codex artifact audit and bootstrap guidance
scripts/audit-codex-cloud-artifacts.sh, docs/agents/codex-cloud-legacy-bootstrap.md, docs/agents/codex-cloud-environment.md, docs/organisation/systems/knowledge.json, docs/scripts-index.md, data/repo-awareness-snapshot.json, tests/codex-cloud-policy-harness.test.ts
The audit inventories selected artifacts without modifying them. Documentation describes the opt-in legacy bootstrap, checkout-specific caches, and audit limits. Tests cover audit output and no-write behavior.

Browser test reliability

Layer / File(s) Summary
Hydration and layout validation
tests/playwright-settlement.ts, tests/playwright-hydration.test.ts, tests/ui-tools.spec.ts, docs/testing.md
Hydration checks retry navigation-context loss within the original timeout and continue to fail on other errors. The prescribing-search test repeats endpoint and clearance checks as one operation.

Priority: ⬇️ Low

Estimated code review effort: 5 (Critical) | ~90 minutes

Change: Bug fix

Suggested reviewers: claude

Merge Risk: ⚪ Minimal · up to 6bfe9

No confirmed issue blocks merging; the hydration check retains its intended timeout behavior.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 13.33% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 60 functions across 28 files. (3 skipped:… Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Title check Passed The title clearly summarizes the main changes to Cloud setup ownership and coding-agent rules.
Description check Passed The description includes the required Summary, Verification, Risk and rollout, and Notes sections. It provides affected areas, test evidence, risks, rollback, provider impact, and rollout context.
Full details: Docstring Coverage

Explanation

Docstring coverage is 13.33% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 60 functions across 28 files. (3 skipped: 3 unsupported.)

Resolution

Write docstrings for the functions missing them to satisfy the coverage threshold.

✨ Finishing Touches: 💡 1
📝 Generate docstrings: 💡
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@codeant-ai codeant-ai Bot added the size:XXL This PR changes 1000+ lines, ignoring generated files label Oct 17, 2026
@qodo-code-review

Copy link
Copy Markdown
Contributor

PR Summary by Qodo

Reconcile Cloud setup ownership and agent verification rules

🐞 Bug fix ✨ Enhancement 🧪 Tests 📝 Documentation ⚙️ Configuration changes 🕐 40+ Minutes

Grey Divider

AI Description

• Preserve host-owned Claude configuration and isolate Codex runtime state by checkout.
• Sequence Claude startup and validate cached Python before each session’s activation.
• Align agent verification and Semgrep guidance with host capabilities and approved scan plans.
Diagram

graph TD
  Source["Selected checkout"] --> Claude["Claude startup"] --> Profile["Profile reconciler"] --> Home[("Claude config home")]
  Source --> Codex["Codex bootstrap"] --> Cache[("Checkout base cache")]
  Source --> Rules["Rule consistency"] --> CI["Local and CI gates"]
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Require isolated homes without reconciliation
  • ➕ Simpler installer with fewer ownership transitions
  • ➖ Cannot safely update or retire existing managed guidance
  • ➖ Leaves legacy installs and host edits to manual handling

Recommendation: Keep manifest-based Claude reconciliation and checkout-scoped Codex state: they address existing installations without treating repository publication as permission to overwrite host data. Continue recommending isolated homes for separate checkouts; isolation alone does not solve safe updates or retirement.

Files changed (58) +2865 / -482

Enhancement (7) +519 / -0
scan-status.shValidate every Semgrep child and result pair +85/-0

Validate every Semgrep child and result pair

• Tracks launched processes and expected artifacts, rejecting missing jobs, failed children, stale paths, and invalid or incomplete outputs.

.claude/cloud-profile/skills/semgrep/scripts/scan-status.sh

audit-codex-cloud-artifacts.shInspect legacy Codex artifacts without mutation +49/-0

Inspect legacy Codex artifacts without mutation

• Reports bounded artifact states and hashes for manual review without sourcing runtimes or deleting files.

scripts/audit-codex-cloud-artifacts.sh

claude-session-start.mjsRun dependent Claude startup steps in order +45/-0

Run dependent Claude startup steps in order

• Executes setup and context hooks sequentially, collecting their output into one SessionStart context envelope.

scripts/claude-session-start.mjs

claude-session-start.shBootstrap sequential Claude startup +24/-0

Bootstrap sequential Claude startup

• Bootstraps the remote runtime before dependent hooks and reports bootstrap failure without failing the session.

scripts/claude-session-start.sh

codex-cloud-paths.shShare physical-checkout identity helpers +12/-0

Share physical-checkout identity helpers

• Provides checkout hashing and shell quoting for legacy Codex profile and cache paths.

scripts/lib/codex-cloud-paths.sh

check-retired-rules.mjsCover hook-emitted instruction sources +3/-0

Cover hook-emitted instruction sources

• Includes Claude hooks and settings in retired-rule checks so emitted guidance cannot revive retired wording.

scripts/organisation/check-retired-rules.mjs

check-rule-consistency.mjsCheck active agent-rule contracts offline +301/-0

Check active agent-rule contracts offline

• Checks canonical verification routes, prompt defaults, and Semgrep approval, command, and scanner-dependency examples.

scripts/organisation/check-rule-consistency.mjs

Bug fix (7) +569 / -249
pr-handoff-stop.shRefresh emitted PR-follow guidance +6/-6

Refresh emitted PR-follow guidance

• References current follow-CI policy and supported bounded waits instead of assuming specific host tools.

.claude/hooks/pr-handoff-stop.sh

apply-claude-cloud-profile.mjsReconcile checkout-owned Claude profile entries +327/-195

Reconcile checkout-owned Claude profile entries

• Adds manifest-backed ownership, identical-content adoption, and guarded uninstall. Preserves modified or unmanaged host content and copy-if-absent memory.

scripts/apply-claude-cloud-profile.mjs

install-codex-cloud-command-shims.shReplace Codex shims without changing runtime targets +84/-18

Replace Codex shims without changing runtime targets

• Preflights all commands, pins resolved executables, and atomically replaces shim paths. Dispatches unrelated checkouts to their external PATH commands.

scripts/install-codex-cloud-command-shims.sh

maintain-codex-cloud.shPreserve Codex maintenance ownership and pins +11/-0

Preserve Codex maintenance ownership and pins

• Rejects a runtime profile owned by another checkout and distinguishes inherited base pins from cache values loaded during maintenance.

scripts/maintain-codex-cloud.sh

refresh-codex-cloud-base.shScope expected base to physical checkout +5/-1

Scope expected base to physical checkout

• Stores the verified merge base beneath a checkout-derived cache key instead of one home-wide file.

scripts/refresh-codex-cloud-base.sh

setup-claude-cloud.shRespect Claude ownership and live runtime readiness +86/-20

Respect Claude ownership and live runtime readiness

• Checks config ownership before profile or plugin work, uses the active config home, and validates cached Python before each session’s activation.

scripts/setup-claude-cloud.sh

setup-codex-cloud.shBind legacy Codex setup to its checkout +50/-9

Bind legacy Codex setup to its checkout

• Guards managed profile and config destinations, writes the active CODEX_HOME policy, and preserves explicit expected-base pins.

scripts/setup-codex-cloud.sh

Tests (9) +1325 / -54
browser-test-plan.test.tsAssert orchestrated testing-policy registration +3/-2

Assert orchestrated testing-policy registration

• Updates hook registration expectations for the sequential SessionStart runner.

tests/browser-test-plan.test.ts

claude-cloud-lifecycle.test.tsExercise Claude profile and startup lifecycles +435/-0

Exercise Claude profile and startup lifecycles

• Uses synthetic homes to test ownership, adoption, retirement, plugin isolation, Python activation, and ordered hooks.

tests/claude-cloud-lifecycle.test.ts

claude-cloud-profile.test.tsUpdate profile tests for host preservation +43/-44

Update profile tests for host preservation

• Replaces overwrite expectations with collision refusal and tests first installation without a vendored skills tree.

tests/claude-cloud-profile.test.ts

claude-cloud-write-safety.test.tsTest private and atomic Claude writes +82/-0

Test private and atomic Claude writes

• Checks settings and manifest permissions, temporary-file collisions, and installed helper executability.

tests/claude-cloud-write-safety.test.ts

codex-cloud-policy-harness.test.tsTest checkout-bound Codex policy behavior +324/-2

Test checkout-bound Codex policy behavior

• Covers active config homes, unrelated checkouts, independent base caches, inherited pins, and read-only artifact auditing.

tests/codex-cloud-policy-harness.test.ts

codex-cloud-setup.test.tsRegress shim symlink and preflight failures +137/-4

Regress shim symlink and preflight failures

• Tests atomic replacement without runtime-target mutation and verifies no partial replacement after invalid targets or destinations.

tests/codex-cloud-setup.test.ts

organisation-hooks.test.tsAssert sequential organisation hook routing +5/-2

Assert sequential organisation hook routing

• Checks that the organisation session line is reached through the registered startup orchestrator.

tests/organisation-hooks.test.ts

organisation-instruction-guards.test.tsTest retired rules in emitted hook policy +22/-0

Test retired rules in emitted hook policy

• Covers Claude settings and hook scripts in working-tree and CI-range instruction checks.

tests/organisation-instruction-guards.test.ts

organisation-rule-consistency.test.tsRegress agent and scanner rule drift +274/-0

Regress agent and scanner rule drift

• Tests canonical routes, scanner examples, missing agents, and complete approved scan batches with synthetic outputs.

tests/organisation-rule-consistency.test.ts

Documentation (29) +397 / -150
SKILL.mdClarify refinement-only prompt default +4/-2

Clarify refinement-only prompt default

• Distinguishes prompt-perfector from Claude’s refine-and-execute prompt skill and preserves explicit user controls.

.agents/skills/prompt-perfector/SKILL.md

frontend-ui-reviewer.mdRoute UI reviews to focused verification +1/-1

Route UI reviews to focused verification

• Starts with the changed journey and reserves the full browser gate for shared foundations or required handoff checks.

.claude/agents/frontend-ui-reviewer.md

ingestion-worker-reviewer.mdCheck worker capabilities on the current host +1/-1

Check worker capabilities on the current host

• Replaces a blanket VM prohibition with capability-based offline checks while retaining live-provider approval boundaries.

.claude/agents/ingestion-worker-reviewer.md

verification-router.mdCorrect readiness and UI gate routing +3/-3

Correct readiness and UI gate routing

• Points routine checks to canonical gate selection and structural readiness, separating them from release-mode approval.

.claude/agents/verification-router.md

SKILL.mdClarify installed prompt skill behavior +2/-0

Clarify installed prompt skill behavior

• Makes the installed Claude skill’s refine-and-execute default explicit and distinguishes prompt-perfector.

.claude/cloud-profile/skills/prompt/SKILL.md

SKILL.mdMake Semgrep workflow capability- and approval-aware +27/-34

Make Semgrep workflow capability- and approval-aware

• Removes assumed scanner agents and premature Pro probes; requires an approved engine, supported execution path, and complete scan evidence.

.claude/cloud-profile/skills/semgrep/SKILL.md

rulesets.mdDefer registry verification until authorized +5/-5

Defer registry verification until authorized

• Keeps pre-approval selection local and places registry validation after explicit network authorization.

.claude/cloud-profile/skills/semgrep/references/rulesets.md

scan-modes.mdTrack important-only scan outputs +3/-1

Track important-only scan outputs

• Routes the scan example through the status helper so severity filtering does not bypass completion checks.

.claude/cloud-profile/skills/semgrep/references/scan-modes.md

scanner-task-prompt.mdRequire complete approved scan batches +42/-17

Require complete approved scan batches

• Defines authorized worker or direct execution and requires status plus fresh JSON/SARIF results for every approved ruleset.

.claude/cloud-profile/skills/semgrep/references/scanner-task-prompt.md

scan-workflow.mdSeparate local discovery from authorized scanning +30/-22

Separate local discovery from authorized scanning

• Uses current-host capabilities, an exact-plan approval gate, and complete batch results before merging scan output.

.claude/cloud-profile/skills/semgrep/workflows/scan-workflow.md

SKILL.mdAlign gate and authorization guidance +16/-13

Align gate and authorization guidance

• Removes stale gate counts and points shortcut authorization to the canonical provider boundary.

.claude/skills/gates/SKILL.md

SKILL.mdClarify Claude prompt execution default +2/-0

Clarify Claude prompt execution default

• States that this skill refines and executes within existing authority, unlike prompt-perfector.

.claude/skills/prompt/SKILL.md

SKILL.mdReserve release review for release scope +2/-2

Reserve release review for release scope

• Separates routine PR verification and structural readiness from production release approvals.

.cursor/skills/release-readiness-review/SKILL.md

pull_request_template.mdPoint PR verification to canonical selection +4/-4

Point PR verification to canonical selection

• Replaces routine broad-check instructions with focused proof and applicable handoff gates.

.github/pull_request_template.md

CLAUDE.mdCorrect Claude verification routes +6/-3

Correct Claude verification routes

• Updates the broad-gate count and distinguishes routine structural readiness from release-mode approval.

CLAUDE.md

README.mdUpdate broad-gate count +1/-1

Update broad-gate count

• Reflects the added static consistency gate in the verification overview.

README.md

repo-awareness-snapshot.jsonRefresh repository-awareness inventory +32/-1

Refresh repository-awareness inventory

• Catalogues new Cloud guidance and the decision record, and refreshes recorded repository evidence.

data/repo-awareness-snapshot.json

README.mdIndex new Cloud operating guides +2/-0

Index new Cloud operating guides

• Links the instruction-activation and retained Codex bootstrap guides.

docs/README.md

cloud-instruction-activation.mdDocument three instruction-activation states +56/-0

Document three instruction-activation states

• Separates repository source, installed host configuration, and freshly loaded session context as distinct evidence.

docs/agents/cloud-instruction-activation.md

codex-cloud-environment.mdLink current Cloud activation guidance +5/-0

Link current Cloud activation guidance

• Points operators to legacy bootstrap containment and three-state instruction verification.

docs/agents/codex-cloud-environment.md

codex-cloud-legacy-bootstrap.mdDocument explicit legacy bootstrap boundaries +78/-0

Document explicit legacy bootstrap boundaries

• Explains checkout-bound profiles and shims, active config homes, scoped base caches, and read-only artifact inspection.

docs/agents/codex-cloud-legacy-bootstrap.md

pull-request-workflow.mdUse host-supported CI wait mechanisms +2/-2

Use host-supported CI wait mechanisms

• Removes assumptions about named wait tools while retaining bounded PR-follow behavior.

docs/agents/pull-request-workflow.md

verification-gates.mdUpdate broad-gate inventory +1/-1

Update broad-gate inventory

• Reflects the additional static rule-consistency gate in canonical verification guidance.

docs/agents/verification-gates.md

claude-cloud.mdDocument ownership-aware Claude setup +55/-32

Document ownership-aware Claude setup

• Explains sequential startup, per-session Python activation, and manifest-based profile installation, adoption, and retirement.

docs/claude-cloud.md

2026-10-17-cloud-installed-guidance-ownership.mdRecord Cloud ownership decision +12/-0

Record Cloud ownership decision

• Records preservation of host content and retirement of the blanket worker-VM prohibition.

docs/decisions/2026-10-17-cloud-installed-guidance-ownership.md

README.mdDescribe active rule-consistency contracts +1/-1

Describe active rule-consistency contracts

• Documents the new companion check and its limits as a source contract rather than loading proof.

docs/organisation/README.md

process-hardening.mdRefresh broad static-gate accounting +2/-2

Refresh broad static-gate accounting

• Updates current gate totals while retaining the historical cheap/full split.

docs/process-hardening.md

scripts-index.mdRefresh script inventory counts +1/-1

Refresh script inventory counts

• Updates the curated index counts for scripts and package commands.

docs/scripts-index.md

task-receipts.mdClarify instruction activation evidence +1/-1

Clarify instruction activation evidence

• Separates checkout selection, host installation, and fresh-session loading rather than implying edits activate existing chats.

docs/task-receipts.md

Other (6) +55 / -29
settings.jsonRegister one sequential SessionStart hook +2/-27

Register one sequential SessionStart hook

• Replaces independently scheduled startup hooks with a single orchestrator and combined timeout.

.claude/settings.json

ci.ymlRun active agent-rule consistency in CI +4/-0

Run active agent-rule consistency in CI

• Adds the offline rule-consistency check to the static PR workflow.

.github/workflows/ci.yml

retired-rules.jsonRetire obsolete worker-VM instruction +8/-0

Retire obsolete worker-VM instruction

• Adds the historical universal VM prohibition to the instruction-retirement inventory.

docs/organisation/retired-rules.json

knowledge.jsonRegister new Cloud scripts in system inventory +4/-0

Register new Cloud scripts in system inventory

• Associates artifact auditing, session orchestration, and checkout path helpers with the knowledge system.

docs/organisation/systems/knowledge.json

package.jsonAdd rule consistency to full verification +2/-1

Add rule consistency to full verification

• Defines the rule-consistency command and includes it in the broad offline verification chain.

package.json

check-codex-cloud-setup.mjsGuard checkout-scoped Codex setup contracts +35/-1

Guard checkout-scoped Codex setup contracts

• Checks shim preflight and atomic replacement, active CODEX_HOME selection, and explicit base-pin preservation.

scripts/check-codex-cloud-setup.mjs

@codeant-ai

codeant-ai Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

🏁 CodeAnt Quality Gate Results

Commit: 677ee34c
Scan Time: 2026-10-17 11:35:50 UTC

✅ Overall Status: PASSED

Quality Gate Details

Quality Gate Status Details
Secrets ✅ PASSED 0 secrets found
Duplicate Code ✅ PASSED 0.0% duplicated
SAST ✅ PASSED No security issues
Bugs ✅ PASSED Rating S: No bugs
IAC ✅ PASSED Rating S: No issues

View Full Results

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 926d5f5da4

ℹ️ 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".

Comment thread scripts/apply-claude-cloud-profile.mjs Resolved
Comment thread scripts/setup-codex-cloud.sh Resolved
@qodo-code-review

qodo-code-review Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Code Review by Qodo

🐞 Bugs (1) 📘 Rule violations (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Action required

No findings for this group


Remediation recommended

No findings for this group


Informational

1. Setup checks the same destinations twice 🟡 Low 🐞 Bug ⚙ Maintainability
Description
The new block in setup-codex-cloud.sh validates config.toml, the runtime profile and the three
shell startup files one by one (lines 97-111), then the restored setup_target loop (lines 112-117)
runs the same symlink/regular-file checks on the same five paths again. The second loop can never
fail once the first checks pass, so anyone tightening these rules later has two copies with
different error messages to keep in sync, and tests that look for either message can disagree about
which check fired.
Code

scripts/setup-codex-cloud.sh[R112-117]

+for setup_target in "$codex_config_dir/config.toml" "$HOME/.clinical-kb-codex-cloud.sh" "$HOME/.bashrc" "$HOME/.profile" "$HOME/.bash_profile"; do
+  if [[ -L "$setup_target" ]]; then
+    fail "Setup target ${setup_target##*/} must not be a symlink."
+  elif [[ -e "$setup_target" && ! -f "$setup_target" ]]; then
+    fail "Setup target ${setup_target##*/} must be a regular file."
+  fi
Relevance

●●● Strong

Recent same-file setup validation cleanup was accepted in #3604; removing redundant checks is a
deterministic maintainability fix.

PR-#3604

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Lines 97-98 already reject a symlinked or non-regular config.toml, line 100 rejects a symlinked or
non-regular runtime profile, and lines 108-111 reject the same for .bashrc/.profile/.bash_profile.
The loop at 112-117 repeats those exact conditions on the same five paths, so it can never be
reached with a failing input.

scripts/setup-codex-cloud.sh[94-118]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The merge kept both the PR's per-destination validation and main's `setup_target` loop, so the same five paths are checked twice. Only the first set of checks can ever fail.

## Fix Focus Areas
- scripts/setup-codex-cloud.sh[97-118]

## Recommended Fix
Keep one set of checks. Either delete the `for setup_target in ...` loop (lines 112-117), or delete the individual checks and keep the loop. Then update any test or checker assertion that expects the error message you removed.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Dismiss ↗ | View ↗


Grey Divider


Resolved findings

1. Unexpected hydration failures are retried ✗ Dismissed
Description
expectHydrated rethrows non-navigation evaluation errors from inside expect.poll, which retries
rejected poll callbacks until its timeout. The new five-case test supplies those errors with a 500
ms budget and asserts one evaluation, so each case runs repeatedly and fails its call-count
assertion instead of validating immediate propagation.
Code

tests/playwright-hydration.test.ts[R55-56]

+    await expect(expectHydrated(locator, { timeout: 500 })).rejects.toBe(failure);
+    expect(evaluate).toHaveBeenCalledTimes(1);
Relevance

●●● Strong

Accepted hydration-poll findings require retry-safe assertions; this test incorrectly expects
immediate propagation and one evaluation.

PR-#3502
PR-#3501

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The production helper invokes locator.evaluate inside an expect.poll callback and rethrows every
non-navigation error. The new test then expects the same error with a 500 ms polling budget but also
requires exactly one invocation; Playwright's polling implementation retries callback failures, so
those assertions conflict with the helper's execution model.

tests/playwright-settlement.ts[119-145]
tests/playwright-hydration.test.ts[43-56]
🌐 Playwright's expect.poll implementation retries when the polling callback fails until the configured deadline.

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The unexpected-error cases in `tests/playwright-hydration.test.ts` expect `locator.evaluate` to be called once, but the implementation runs it inside Playwright `expect.poll`. Rejected poll callbacks are retried until the polling timeout, so the new tests fail their `toHaveBeenCalledTimes(1)` assertions.

## Fix Focus Areas
- tests/playwright-hydration.test.ts[43-56]
- tests/playwright-settlement.ts[119-145]

## Recommended Fix
Update the tests to assert the actual polling behavior, such as using a zero polling timeout when verifying immediate propagation, or assert that the original error is ultimately preserved after retries. Keep the production behavior that rethrows non-navigation errors unchanged unless the intended contract is to abort polling immediately; if immediate abort is required, move error handling outside `expect.poll` or use a polling callback mechanism that does not retry rejected evaluations.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Cached base checks never run ✓ Resolved
Description
The generated runtime profile reads the checkout-specific base cache only when
CODEX_CLOUD_EXPECTED_BASE_SHA is already set, although setup and maintenance unset that variable
when no explicit pin was supplied. On a normal unpinned installation, the refreshed cache is skipped
and checkout freshness remains unverified.
Code

scripts/setup-codex-cloud.sh[204]

+if [ "\${CODEX_CLOUD_EXPECTED_BASE_SHA+x}" != x ] && [ -r "\$cloud_expected_base_file" ]; then
Relevance

●●● Strong

The inverted condition bypasses normal unpinned cache validation, directly defeating checkout
freshness checks.

PR-#2280
PR-#3587

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The changed profile condition requires the variable to be set before it reads the cache, while the
normal setup and maintenance paths unset it before sourcing that profile. Checkout validation treats
a missing expected base as unverified.

scripts/setup-codex-cloud.sh[201-210]
scripts/setup-codex-cloud.sh[369-375]
scripts/maintain-codex-cloud.sh[54-60]
scripts/check-codex-cloud-setup.mjs[645-665]
Skill: review

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The generated profile skips the checkout-specific base cache in the normal unpinned setup path, leaving freshness unverified.

## Fix Focus Areas
- scripts/setup-codex-cloud.sh[201-210]
- scripts/setup-codex-cloud.sh[369-375]
- scripts/maintain-codex-cloud.sh[54-60]
- tests/codex-cloud-policy-harness.test.ts[540-582]

## Recommended Fix
Load the valid checkout-specific cached base only when `CODEX_CLOUD_EXPECTED_BASE_SHA` is unset, preserving explicitly supplied values, including empty and invalid pins. Add a regression test that sources the generated profile without a pin and checks that it loads the cache.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Valid legacy shims fail maintenance ✗ Dismissed
Description
generated_shim_targets_present unescapes every parsed target as though it came from
codex_cloud_shell_quote, including targets parsed from legacy double-quoted shims. A legacy shim
whose literal filename contains ('\''') is therefore checked under a different path and
maintenance reruns setup unnecessarily.
Code

scripts/maintain-codex-cloud.sh[95]

+    shim_target="${shim_target//\'\\\'\'/\'}"
Relevance

●●● Strong

Accepted maintenance bug fix; current PR explicitly adds apostrophe unescaping and regression
coverage for legacy shim paths.

PR-#3604

ⓘ Recommendations generated based on similar findings in past PRs

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
Legacy double-quoted shims are parsed alongside current single-quoted shims, but the unconditional escape replacement at `scripts/maintain-codex-cloud.sh:95` rewrites literal `('\''')` sequences in legacy paths. Maintenance then treats a valid executable target as missing and reruns setup.

### Fix Focus Areas
- scripts/maintain-codex-cloud.sh[92-95]
- scripts/lib/codex-cloud-paths.sh[8-12]

### Recommended Fix
Track which parsing branch matched, or parse the complete `exec` line in separate branches. Apply the `('\''')`-to-apostrophe decoding only when the single-quoted current-shim branch matched; leave targets from the legacy double-quoted branch byte-for-byte unchanged. Add a regression test for a legacy double-quoted shim whose target path contains the literal `('\''')` sequence.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


View resolved (9)
4. Malformed scan results pass completion ✗ Dismissed
Description
wait_semgrep_scans checks that SARIF results are objects but does not require their mandatory
message or a valid tool name. A syntactically valid artifact containing results such as {} passes
the completion gate; the documented merge can then deduplicate multiple such results into one and
report fewer findings.
Code

.claude/cloud-profile/skills/semgrep/scripts/scan-status.sh[R98-101]

+        if any(not isinstance(rule, dict) for rule in rules):
+            raise ValueError("invalid SARIF rule")
+        if any(not isinstance(item, dict) for item in results):
+            raise ValueError("invalid SARIF result")
Relevance

●●● Strong

Recent precedents favor rejecting shape-valid malformed inputs when required fields are absent or
unverifiable.

PR-#2609
PR-#2806

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The new validator accepts an empty result object. The merge fallback deduplicates results by rule
ID, URI and start line, all of which default to empty values for such objects, and the workflow's
post-merge check only loads JSON and counts results. SARIF documentation identifies the log version
and tool name as required; the schema defines the result message as required.

.claude/cloud-profile/skills/semgrep/scripts/scan-status.sh[84-105]
.claude/cloud-profile/skills/semgrep/scripts/merge_sarif.py[119-143]
.claude/cloud-profile/skills/semgrep/workflows/scan-workflow.md[275-290]
🌐 The SARIF 2.1.0 schema defines required properties for logs, tool components and results.

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The scan completion gate accepts malformed SARIF results that the merger can silently collapse.
## Fix Focus Areas
- .claude/cloud-profile/skills/semgrep/scripts/scan-status.sh[84-105]
## Recommended Fix
Validate required SARIF fields, including the log version, driver name and each result message, before admitting a scan pair. Add a regression with multiple malformed results that must fail the completion gate.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


5. Info-level scan notices fail the whole batch ✗ Dismissed
Description
The new error loop in wait_semgrep_scans treats only entries with level == "warn" as
non-blocking and counts every other level as an error, including Semgrep's documented info level.
If any approved scan reports an info-level diagnostic, which the schema defines as "nothing may be
wrong", the helper marks the whole batch incomplete and tells the operator not to report or merge
any results.
Code

.claude/cloud-profile/skills/semgrep/scripts/scan-status.sh[R73-79]

+    for error in errors:
+        if isinstance(error, dict) and error.get("level") == "warn":
+            warning_count += 1
+        else:
+            # Only an explicitly classified warning is non-blocking. Missing
+            # or unknown levels cannot prove that analysis completed.
+            error_count += 1
Relevance

●●● Strong

Documented info severity is non-error; the explicit-level check deterministically misclassifies
valid diagnostics.

PR-#3555

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Semgrep's output schema defines error_severity as one of three values: error, warn and info,
and describes info as "Nothing may be wrong". The validator only exempts warn, so an info
entry lands in the else branch, increments error_count, and raises the 'error-level incomplete
analysis' ValueError that fails the batch.

.claude/cloud-profile/skills/semgrep/scripts/scan-status.sh[68-83]
.claude/cloud-profile/skills/semgrep/scripts/scan-status.sh[106-116]
🌐 error_severity: Error = Always an error; Warning = Only an error if "strict" is set; Info = Nothing may be wrong; oneOf const "error", "warn", "info"

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`wait_semgrep_scans` counts any Semgrep JSON `errors[]` entry whose `level` is not `warn` as blocking. Semgrep's schema also defines `info` ("Nothing may be wrong"), so an info-level diagnostic currently fails the whole approved scan batch.

## Fix Focus Areas
- .claude/cloud-profile/skills/semgrep/scripts/scan-status.sh[71-83]

## Recommended Fix
Classify `level in ("warn", "info")` as non-blocking: count and report each separately on stderr. Keep treating `error`, a missing level and any unknown level as blocking. Add a test case with an `info`-level error entry that expects the batch to pass.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


6. Host-deleted settings reappear on update ✗ Dismissed
Description
The settings reconciliation loop treats a missing owned value as unchanged because it only preserves
values that are present and different from the manifest. If someone deletes an owned setting from
the Claude configuration, the next profile update writes it back; uninstall also drops its ownership
record without recognizing the deletion as a host edit.
Code

scripts/apply-claude-cloud-profile.mjs[R363-367]

+        const current = getSetting(settings, item.path);
+        if (current.present && !equal(current.value, item.value)) {
+          note(`preserved host setting modification: ${item.path.join(".")}`);
+          kept += 1;
+          continue;
Relevance

●●● Strong

Deletion is a host edit under this PR’s ownership-reconciliation intent and should not be silently
restored.

PR-#2236

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
getSetting returns present: false for a deleted leaf, but the changed condition preserves only
present-and-different values. The subsequent branch calls setSetting during an update, while the
documented reconciliation preserves host modifications.

scripts/apply-claude-cloud-profile.mjs[135-150]
scripts/apply-claude-cloud-profile.mjs[362-377]
docs/claude-cloud.md[87-100]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
A host-deleted owned setting is treated as unchanged and recreated on update, contrary to the ownership reconciliation contract.
## Fix Focus Areas
- scripts/apply-claude-cloud-profile.mjs[362-381]
## Recommended Fix
Treat absence of a previously owned setting as a host modification. Leave it absent and retain its manifest entry for review during update or uninstall; add lifecycle coverage for a deleted leaf.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


7. The rule check misses a telemetry flag ✓ Resolved
Description
semgrepCommands() splits examples at backticks and later Semgrep matches, but not at shell
separators between commands. If an active example puts two invocations on one line, a flag on the
first can make the second invocation pass the --metrics=off check despite omitting it.
Code

scripts/organisation/check-rule-consistency.mjs[R71-75]

+        commands.push({
+          line,
+          text: fragment.slice(match.index, matches[position + 1]?.index).trim(),
+          source: fragment,
+        });
Relevance

●●● Strong

Command extraction must isolate shell invocations so telemetry requirements apply to each Semgrep
command independently.

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The extracted text for the first match extends to the next semgrep, carrying both commands' flags;
the metrics contract tests that combined text. For example, `semgrep --version; semgrep scan
--config p/default --metrics=off` lets the first invocation pass without its own flag.

scripts/organisation/check-rule-consistency.mjs[64-79]
scripts/organisation/check-rule-consistency.mjs[250-255]
.claude/cloud-profile/skills/semgrep/SKILL.md[19-19]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The new rule checker can accept an active Semgrep example whose second shell command omits the required telemetry flag.
## Fix Focus Areas
- scripts/organisation/check-rule-consistency.mjs[64-79]
- scripts/organisation/check-rule-consistency.mjs[250-255]
- tests/organisation-rule-consistency.test.ts[93-103]
## Recommended Fix
Separate invocations at shell command separators before evaluating each command's flags, and test two Semgrep invocations joined by a separator where only the first has --metrics=off.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


8. Normal parse warnings fail the whole scan batch ✓ Resolved
Description
The scan-status validator rejects a scan whenever result.get("errors") is non-empty, so a single
PartialParsing entry with level: warn marks the whole approved batch as incomplete. Semgrep
emits these warnings routinely for files it can only partly parse (newer TS/Python syntax, YAML),
and the helper then tells the operator not to report any of the results.
Code

.claude/cloud-profile/skills/semgrep/scripts/scan-status.sh[R68-69]

+    if result.get("errors"):
+        raise ValueError("scan JSON reports incomplete analysis")
Relevance

●●● Strong

Directly conflicts with the stated partial-scan completion intent; warning-level parse errors should
not invalidate successful results.

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Any errors entry, including a warn-level partial parse, makes the Python check fail, which sets
failed=1 and prints 'incomplete scan batch; ... do not report or merge a successful subset'.

.claude/cloud-profile/skills/semgrep/scripts/scan-status.sh[66-82]
🌐 Semgrep JSON for valid Python 3.12 code contains errors:[{"code":3,"level":"warn","type":["PartialParsing",...]}] while the scan otherwise completes.

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
scan-status.sh treats every entry in Semgrep's JSON `errors` array as incomplete analysis. That includes routine `level: warn` PartialParsing warnings, so whole batches fail.

## Fix Focus Areas
- .claude/cloud-profile/skills/semgrep/scripts/scan-status.sh[66-69]

## Recommended Fix
Fail only on entries whose `level` is `error` (or that are not dicts). Report the count of warn-level parsing errors on stderr so they stay visible without invalidating the batch. If strict behaviour is deliberate, document that partial parses invalidate scans and update the workflow guidance to match.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


9. Invalid scan output can crash merging ✓ Resolved
Description
wait_semgrep_scans accepts any nonempty SARIF runs list without checking its entries. An
artifact containing {"runs":[null]} passes the new completion gate, but the subsequent merger
calls run.get() and fails instead of identifying that scan's artifact as invalid.
Code

.claude/cloud-profile/skills/semgrep/scripts/scan-status.sh[R70-71]

+    if not isinstance(sarif, dict) or not isinstance(sarif.get("runs"), list) or not sarif["runs"]:
+        raise ValueError("invalid or empty SARIF runs")
Relevance

●●● Strong

The completion gate should validate SARIF run entries before invoking a merger that assumes
mappings.

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The gate tests only the outer list, while the workflow makes passing that gate a prerequisite for a
merger that assumes each run is a mapping.

.claude/cloud-profile/skills/semgrep/scripts/scan-status.sh[65-74]
.claude/cloud-profile/skills/semgrep/workflows/scan-workflow.md[268-271]
.claude/cloud-profile/skills/semgrep/scripts/merge_sarif.py[108-114]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The scan completion gate accepts SARIF runs that the next merge step cannot read.
## Fix Focus Areas
- .claude/cloud-profile/skills/semgrep/scripts/scan-status.sh[65-74]
- .claude/cloud-profile/skills/semgrep/scripts/merge_sarif.py[108-114]
## Recommended Fix
Validate that every SARIF run has the object structure required by the merger before marking its scan complete. Add a malformed-run artifact test.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


10. Malformed settings block profile removal ✓ Resolved
Description
--uninstall still calls readObject() on the host settings file even though it has no desired
settings to install. If that file contains malformed JSON, the command exits before removing
unchanged owned files or updating the ownership manifest, including when the malformed file itself
should be preserved.
Code

scripts/apply-claude-cloud-profile.mjs[R341-342]

+    const existing = existsSync(settingsPath) ? readObject(settingsPath, "host settings") : {};
+    const settings = structuredClone(existing);
Relevance

●●● Strong

Uninstall should remove owned files and clean its manifest without requiring unrelated malformed
host settings to parse.

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Uninstall makes the desired settings list empty, but host settings parsing still throws on malformed
JSON. File removals and manifest cleanup occur only after that parsing succeeds.

scripts/apply-claude-cloud-profile.mjs[109-117]
scripts/apply-claude-cloud-profile.mjs[268-272]
scripts/apply-claude-cloud-profile.mjs[336-342]
scripts/apply-claude-cloud-profile.mjs[390-430]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
An ordinary uninstall aborts on malformed host settings before it can remove unrelated, unchanged owned files.
## Fix Focus Areas
- scripts/apply-claude-cloud-profile.mjs[336-385]
- scripts/apply-claude-cloud-profile.mjs[390-430]
## Recommended Fix
During uninstall, preserve an unparseable settings file and its recorded ownership entries for review, but continue removing independently owned files and persist the resulting manifest. Add a lifecycle test for uninstall with malformed host settings.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


11. A failed bootstrap skips every later startup hook ✓ Resolved
Description
The new claude-session-start.sh sources .claude/hooks/session-start.sh (which runs under `set
-euo pipefail) and then calls node claude-session-start.mjs in the same bash -c` shell. So any
bootstrap failure, such as a transient npm ci or Node download error, exits before cloud setup,
base freshness, issues, testing-policy and organisation hooks run, and the EXIT trap deletes
bootstrap-output, so the bootstrap's stdout diagnostics are lost too. Before this change, those
five hooks were separate .claude/settings.json entries and ran even when the bootstrap failed.
Profile, plugins, gh and deno provisioning and the testing/organisation context do not need npm ci
to succeed, so one network hiccup now leaves the session with none of them.
Code

scripts/claude-session-start.sh[R15-16]

+  bash -c 'source "$1" < "$3/payload" > "$3/bootstrap-output"; node "$2" "$3"' _ \
+    "$repo_root/.claude/hooks/session-start.sh" "$repo_root/scripts/claude-session-start.mjs" "$start_dir"
Relevance

●●● Strong

A bootstrap failure must not suppress independent startup hooks or discard diagnostic output.

PR-#3587

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
set -e from the sourced bootstrap is still active in the bash -c shell, so if npm ci fails the
shell exits before node "$2" "$3" runs. The wrapper then prints only the generic 'dependent setup
was skipped' message, and trap 'rm -rf -- "$start_dir"' EXIT deletes the captured bootstrap
stdout. The step list in claude-session-start.mjs (setup, freshness, issues, testing policy,
organisation) never runs.

scripts/claude-session-start.sh[9-24]
.claude/hooks/session-start.sh[7-7]
.claude/hooks/session-start.sh[105-122]
scripts/claude-session-start.mjs[27-41]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
If the sourced SessionStart bootstrap fails (e.g. `npm ci`), the `bash -c` shell exits before `claude-session-start.mjs` runs, so all dependent hooks are skipped and the captured bootstrap stdout is deleted.

## Fix Focus Areas
- scripts/claude-session-start.sh[12-23]
- scripts/claude-session-start.mjs[27-41]

## Recommended Fix
Record the bootstrap status inside the `bash -c` shell instead of letting errexit end it, e.g. `( set +e; source "$1" ... ); status=$?` won't keep PATH, so instead run `source "$1" ... || echo $? > "$3/bootstrap-status"` with errexit disabled around it. Then always invoke the node runner. Have the runner add a context line when bootstrap failed, still run the steps that don't depend on npm (or all of them, flagged), and always replay `bootstrap-output` to stderr so the diagnostics survive.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


12. Old cached Codex containers keep a stale base ✓ Resolved
Description
refresh-codex-cloud-base.sh now writes the verified base only to
~/.cache/clinical-kb-codex/checkouts/<key>/cloud-expected-base-sha. A runtime profile generated
before this change still reads the old global ~/.cache/clinical-kb-codex/cloud-expected-base-sha.
maintain-codex-cloud.sh re-sources that existing profile and only re-runs full setup when the
profile is missing (it does not check for the new # PsychSift checkout: header), so cached
containers keep exporting the base from their last full setup. Because the stale base is still an
ancestor of HEAD, check:codex-cloud passes, so freshness checks silently use the outdated pin
until someone re-runs setup by hand.
Code

scripts/refresh-codex-cloud-base.sh[R23-25]

+checkout_key="$(codex_cloud_checkout_key "$repo_root")"
+cache_dir="$HOME/.cache/clinical-kb-codex/checkouts/$checkout_key"
expected_base_file="$cache_dir/cloud-expected-base-sha"
Relevance

●●● Strong

This undermines checkout-specific base tracking for retained legacy profiles and matches the PR’s
stated freshness objective.

PR-#2280
PR-#3587

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Maintenance re-runs setup only when the profile is missing, and its header check only rejects a
header that names a different checkout. A header-less legacy profile passes, gets re-sourced after
refresh-codex-cloud-base.sh has written the new per-checkout path, and still reads the old global
cache file. The checkout validator only rejects a base that is not an ancestor of HEAD, and an older
main commit always is.

scripts/maintain-codex-cloud.sh[43-51]
scripts/maintain-codex-cloud.sh[82-85]
scripts/setup-codex-cloud.sh[200-212]
scripts/check-codex-cloud-setup.mjs[1364-1368]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Cached containers whose runtime profile predates this change read the old global expected-base cache, while refresh now writes the per-checkout path. Maintenance never regenerates the profile, so the exported base goes stale.

## Fix Focus Areas
- scripts/maintain-codex-cloud.sh[43-51]
- scripts/refresh-codex-cloud-base.sh[23-27]

## Recommended Fix
In maintain-codex-cloud.sh, if the runtime profile has no `# PsychSift checkout: ` header, log that it is a legacy format and `exec bash scripts/setup-codex-cloud.sh` so it is regenerated. As an alternative or in addition, have the refresh script stop leaving the legacy global file readable (or remove it) once the per-checkout file is written.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Compliance rules (platform): 9 rules
✅ Cross-repo context — repo relationships
  Explored: repo: BigSimmo/Medications (sha: 93e6ccc7) — View relationship
Review mode: Auto: ⚖️ Balanced: Localized shell parsing behavior carries real runtime correctness risk.
✅ Fix-loop round: fix loop

Grey Divider

Tip of the day
💡 Did you know, you can see how risky a PR is at a glance with blast radius labels

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread scripts/apply-claude-cloud-profile.mjs Resolved
Comment thread scripts/claude-session-start.sh Resolved
Comment thread scripts/refresh-codex-cloud-base.sh Resolved
Comment thread scripts/setup-codex-cloud.sh Resolved
Comment thread .claude/hooks/pr-handoff-stop.sh Resolved
Comment thread scripts/claude-session-start.mjs Resolved
@qodo-code-review

Copy link
Copy Markdown
Contributor

Qodo Fixer

✅ Committed (7) · ☑ Fixed (7)

Grey Divider

Commits pushed directly to this PR — no separate fix PR opened.

Process — 7 fixed
  • ☑ Fixed: Cached base checks never run
  • ☑ Fixed: The rule check misses a telemetry flag
  • ☑ Fixed: Normal parse warnings fail the whole scan batch
  • ☑ Fixed: Invalid scan output can crash merging
  • ☑ Fixed: Malformed settings block profile removal
  • ☑ Fixed: A failed bootstrap skips every later startup hook
  • ☑ Fixed: Old cached Codex containers keep a stale base

Comment thread scripts/claude-session-start.sh Resolved
Comment thread scripts/setup-codex-cloud.sh Resolved
@codeant-ai

codeant-ai Bot commented Oct 17, 2026

Copy link
Copy Markdown

CodeAnt Nitpicks

4 code suggestions

1. This template omits [INCLUDE_FLAGS]; following it for language-specific rulesets drops the required file restriction and makes Semgrep inspect unrelated files.

Incomplete implementation · .claude/cloud-profile/skills/semgrep/references/scan-modes.md:105


2. check:gate-manifest validates CI coverage and documented counts, but prints only a summary; it does not list the gates as this guidance promises.

Comment mismatch · docs/process-hardening.md:350


3. Base-cache files never contain this sentinel, so existing cache entries always show sha256=none and cannot be fingerprinted in the inventory.

Logic error · scripts/audit-codex-cloud-artifacts.sh:47


4. If bootstrap exits nonzero, node is skipped and the trap deletes this temporary output file, so stdout diagnostics never reach Claude.

Possible bug · scripts/claude-session-start.sh:15

Capture unexpected locator.evaluate failures inside expectHydrated's poll,
end the poll, and re-throw afterwards so they never depend on expect.poll
retrying or propagating callback errors. Add tests that swap in a retrying
expect.poll to prove the failure surfaces after exactly one evaluation.
gitar-bot[bot]
gitar-bot Bot previously approved these changes Oct 17, 2026

@gitar-bot gitar-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gitar has auto-approved this PR (configure)

@qodo-code-review

Copy link
Copy Markdown
Contributor

Code review by qodo was updated up to the latest commit af8d885

@cubic-dev-ai

cubic-dev-ai Bot commented Oct 17, 2026

Copy link
Copy Markdown
Contributor

Auto-fix isn't included in your plan ↗

Upgrade to Team

…n probe

Conflicts with #3604 (cloud setup lifecycle hardening) resolved keeping both sides:
- shims: PR's resolved-target pinning, managed-destination checks, per-checkout
  wrappers and mv -fT, plus main's bounded (timeout) npm/npx version probes,
  now applied to bundled npm/npx too
- setup: PR's early validation and checkout-bound profile, plus main's strict
  CODEX_HOME validation, setup-target checks, npx repair, and writing the
  runtime profile only after config admission (both moved with mv -fT)
- tests: both sides' new tests kept; main's fixtures use managed/checkout-bound
  profiles and an npx stub as the PR's stricter rules require; error messages
  carry both sides' wording; checker requires main's stricter CODEX_HOME form

Production UI (3): expectHydrated matched the navigation context-loss message
only with a trailing period; Playwright's context-destroyed path omits it, so
the services redirect failed fast. Match the stable stem and cover both forms.
gitar-bot[bot]

This comment was marked as resolved.

@gitar-bot
gitar-bot Bot dismissed their stale review October 17, 2026 10:48

Auto-approval revoked — new findings require attention.

@gitar-bot
gitar-bot Bot disabled auto-merge October 17, 2026 10:48
@qodo-code-review

Copy link
Copy Markdown
Contributor

Code review by qodo was updated up to the latest commit aae39fd

The installer now writes exec '<path>' "$@" via codex_cloud_shell_quote, but
generated_shim_targets_present only parsed the double-quoted form, so every
maintenance run fell back to full setup. Parse both forms and undo the quote
helper's '\'' escapes; regression test covers a quoted path with an apostrophe.
@gitar-bot
gitar-bot Bot enabled auto-merge (squash) October 17, 2026 11:12
gitar-bot[bot]
gitar-bot Bot previously approved these changes Oct 17, 2026

@gitar-bot gitar-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gitar has auto-approved this PR (configure)

Comment thread scripts/maintain-codex-cloud.sh Resolved
@qodo-code-review

Copy link
Copy Markdown
Contributor

Code review by qodo was updated up to the latest commit 6ecf660

Legacy double-quoted shims carry their target verbatim, so a literal '\'' in
such a path must not be rewritten. Parse the single-quoted form first and undo
codex_cloud_shell_quote escapes only there; regression test for the legacy form.

@gitar-bot gitar-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gitar has auto-approved this PR (configure)

@gitar-bot

gitar-bot Bot commented Oct 17, 2026

Copy link
Copy Markdown
Contributor
Code Review ✅ Approved 3 closed / 3 findings

🔴 High risk · Claude/Codex setup reconciles persistent host configs and startup files; ownership or checkout mistakes could remove managed user configuration or disrupt agent startup.

Reconciles Cloud setup ownership and coding-agent rules, including Semgrep scan-status validation, bootstrap errexit handling, and maintenance shim-target parsing. No open issues remain; the scan-status batch failure, the bootstrap || status=$? errexit masking, and the quoted shim-target probe are all addressed.

✅ 3 closed
✅ Bug: scan-status fails any batch with non-fatal Semgrep JSON errors

📄 .claude/cloud-profile/skills/semgrep/scripts/scan-status.sh:66-69
wait_semgrep_scans rejects every scan whose JSON has a non-empty errors array (if result.get("errors"): raise ValueError(...)). Semgrep fills that array on ordinary successful runs. It holds warn-level entries for partial parsing or syntax errors in single target files, per-file timeouts, and skipped or invalid rule files. That last case is common with the cloned third-party rule repos (Trail of Bits, 0xdea, Decurity), which the skill makes mandatory. A typical run exits 0 and writes valid SARIF, but the helper still marks the batch incomplete. The skill and scanner prompt then forbid reporting or merging any result, so the required workflow will usually produce nothing on real codebases.

Suggested fix: fail only on fatal entries, such as level == "error" or an error type that means the scan could not run. Record warn-level entries so the report can show partial coverage.

✅ Bug: source … || status=$? turns off errexit for all of bootstrap

📄 scripts/claude-session-start.sh:13-15 📄 scripts/claude-session-start.mjs:28-34
Bash ignores set -e for any command that runs in the left operand of ||, and that includes everything inside a sourced file. So the set -euo pipefail at the top of .claude/hooks/session-start.sh does nothing here, and the comment's claim that errexit is disabled "only around bootstrap" is wrong. If npm ci fails (lines 108/116 of the hook), the script carries on anyway. It writes node_modules/.cache/session-start-lock-hash, prints "Dependencies installed", and finishes with the final if, which exits 0. Two things break as a result:

  1. The lock stamp now marks a broken node_modules as current, so every later session skips the reinstall.
  2. bootstrap-status records 0, so the new "SessionStart bootstrap failed" context in claude-session-start.mjs never shows up for the most common failure.

A failed Node download is handled the same way: the curl/tar step is ignored and the script keeps going.

Fix: run bootstrap in a child bash process so its own errexit still applies. A child process cannot pass PATH back to the wrapper, so either have the bootstrap write the Node bin dir to a file the wrapper exports, or re-derive PATH from $HOME/.node24 before running node.

✅ Bug: Maintenance shim-target probe can't parse new quoted exec line

📄 scripts/install-codex-cloud-command-shims.sh:190 📄 scripts/maintain-codex-cloud.sh:92
The installer now writes each shim's last line as exec $quoted_command_path "\$@". codex_cloud_shell_quote single-quotes the path, so the generated line is exec '/abs/node' "$@". generated_shim_targets_present in scripts/maintain-codex-cloud.sh:92 still pulls the target out with sed -n 's/^exec "\(.*\)" "\$@"$/\1/p', which only matches a double-quoted path. With the new shims, shim_target therefore comes back empty, the function returns 1, and every maintenance run falls through to exec bash scripts/setup-codex-cloud.sh (line 98). That removes the fast path. It also means a real stale-target check no longer happens, because every shim looks broken. To fix it, update the probe to match the single-quoted form, or write the resolved target on a dedicated marker line (for example # Target: ...) and read that line instead.

Verification

Rules No rules evaluated

Functional validation Not enabled

Set up

Auto-approval Approved

For more verification details, comment gitar display:verbose.

Options

Auto-apply is off → Gitar will not commit updates to this branch.
Display: compact → Showing compact verification results.

Comment with these commands to change the behavior for this request:

Auto-apply Compact
gitar auto-apply:on         
gitar display:verbose         

Important

Your trial ends in 4 days — upgrade now to keep code review, CI analysis, auto-apply, custom automations, and more.

Was this helpful? React with 👍 / 👎 | Gitar

@qodo-code-review

Copy link
Copy Markdown
Contributor

Code review by qodo was updated up to the latest commit 677ee34

@gitar-bot
gitar-bot Bot merged commit ea8eac2 into main Oct 17, 2026
40 checks passed
@gitar-bot
gitar-bot Bot deleted the codex/cloud-cross-repo-hardening branch October 17, 2026 11:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🔴 Large blast radius size:XXL This PR changes 1000+ lines, ignoring generated files 🕐 40+ Minutes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants