Skip to content

fix: make provider batch apply and undo crash-safe#1336

Merged
ding113 merged 10 commits into
ding113:devfrom
Brisbanehuang:agent/provider-batch-apply-safety
Jul 22, 2026
Merged

fix: make provider batch apply and undo crash-safe#1336
ding113 merged 10 commits into
ding113:devfrom
Brisbanehuang:agent/provider-batch-apply-safety

Conversation

@Brisbanehuang

@Brisbanehuang Brisbanehuang commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

What changed

  • persist provider batch apply claims and results in PostgreSQL with a 24-hour retention window
  • enforce the complete preview preimage with row lock before applying any provider update
  • make preview tokens single-consumption and idempotency keys durable across processes and restarts
  • keep sensitive proxy URLs out of durable undo payloads
  • make provider undo atomic: provider restoration and undo-token consumption commit in the same transaction
  • add unit coverage and a PostgreSQL integration suite for concurrency, rollback, replay, and undo behavior

Related

Why

The existing preview/apply flow could validate against fresh state outside the write transaction. Concurrent provider edits or repeated execution of the same preview could therefore overwrite newer values or perform the same approved operation more than once.

The previous undo flow also consumed its token before restoring provider rows, leaving a crash window where the token was permanently consumed but the provider changes were not reverted.

Behavior

  • any drift in provider type, enabled state, or a field touched by the approved patch aborts the complete batch with no writes
  • exclusions reduce only the write set; they do not reduce the preimage validation set
  • retries with the same key, preview, and payload replay the committed result
  • reuse of a key with another payload conflicts, and a preview cannot be consumed under another key
  • undo row restoration and durable token consumption are one PostgreSQL transaction
  • cache and circuit-breaker invalidation remain idempotent post-commit effects

Validation

  • bun run typecheck
  • 62 focused provider batch unit tests
  • PostgreSQL 16 integration suite covering concurrent claims, preview single-consumption, preimage rollback, SQL rollback, durable replay, atomic undo, and failed-undo rollback
  • changed-file Biome check and git diff --check

Greptile Summary

This PR hardens the provider batch preview/apply/undo pipeline by replacing the previous in-memory undo snapshot store with a durable PostgreSQL ledger, making the flow resilient to process crashes and concurrent edits.

  • Atomic apply: a single transaction claims the preview token via INSERT, acquires row-level locks on all provider rows in a deterministic order, validates the complete preimage (including excluded providers), writes the effective updates, and transitions the ledger row from applying to applied — all or nothing.
  • Atomic undo: a single transaction locks the ledger row with FOR UPDATE, applies provider restoration, and marks the undo token consumed in the same commit, eliminating the prior crash window.
  • Idempotency and replay: duplicate apply requests with the same claimKey/previewToken/payload replay the committed result from the ledger; sensitive proxy URLs are stripped from the durable undo preimage; expired-row cleanup is moved outside the critical transaction to avoid blocking provider locks on large backlogs.

Confidence Score: 5/5

The core transactional correctness is solid — provider locks are acquired in a consistent order, the preimage CAS check is complete, and undo token consumption is committed atomically with provider restoration. The two findings are quality concerns rather than functional defects on any live path.

The apply and undo transactions are both correctly structured, the shared SENSITIVE_PROVIDER_BATCH_UNDO_KEYS constant resolves the prior duplicate-literal drift risk, and all new repository status values are properly handled in the action layer. The exported-but-unused consumeProviderBatchUndo is a cleanup concern, not a runtime defect; the missing DB-level CHECK on the status column is a defence-in-depth gap, not a broken invariant.

src/repository/provider.ts — the exported consumeProviderBatchUndo function should be reviewed for removal. src/drizzle/schema.ts — the status column would benefit from a CHECK constraint to match the project's use of pgEnum elsewhere.

Important Files Changed

Filename Overview
src/repository/provider.ts Core ledger logic: adds applyProviderBatchOperationIfUnchanged, undoProviderBatchOperation, findProviderBatchApplyOperation, and supporting helpers. The atomic apply and undo transactions are both correctly structured. consumeProviderBatchUndo is exported but never called — a footgun that should be removed.
src/actions/providers.ts Action layer wiring: applyProviderBatchPatch now builds the durable undo preimage (stripping sensitive keys via the shared SENSITIVE_PROVIDER_BATCH_UNDO_KEYS constant) and delegates to applyProviderBatchOperationIfUnchanged; undoProviderPatch falls back to durable ledger when in-memory snapshot is absent and routes to the atomic undoProviderBatchOperation. All new status values are correctly handled.
src/drizzle/schema.ts New provider_batch_apply_operations table: correct use of unique indexes for preview_token, operation_id, and undo_token; status column uses varchar(32) with TypeScript-level typing but no DB CHECK constraint, inconsistent with other enum columns that use pgEnum.
drizzle/0109_nice_shriek.sql Migration creates provider_batch_apply_operations with four indexes (unique on preview_token, operation_id, undo_token; btree on expires_at). DDL is consistent with the Drizzle schema definition.
src/lib/provider-batch-patch-error-codes.ts Adds UNDO_STALE error code and moves SENSITIVE_PROVIDER_BATCH_UNDO_KEYS here as the single source of truth, resolving the previous duplicate-literal concern.
src/app/api/v1/resources/providers/handlers.ts Maps UNDO_STALE to HTTP 409 alongside the other conflict codes; no other handler changes.

Sequence Diagram

sequenceDiagram
    participant C as Client
    participant A as Action Layer
    participant L as Ledger (PG)
    participant P as Providers (PG)

    Note over C,P: Apply path
    C->>A: applyProviderBatchPatch(claimKey, previewToken, payload)
    A->>L: findProviderBatchApplyOperation
    alt replay or conflict
        L-->>A: "replay | idempotency_conflict | preview_consumed"
        A-->>C: cached result or 409
    else not_found
        A->>L: "BEGIN TX INSERT ledger status=applying"
        L-->>A: inserted
        A->>P: SELECT FOR UPDATE ORDER BY id
        A->>P: validate preimage CAS
        A->>P: UPDATE effective providers
        A->>L: "UPDATE ledger status=applied"
        A->>L: COMMIT
        A-->>C: 200 operationId undoToken
    end

    Note over C,P: Undo path (durable)
    C->>A: undoProviderPatch(undoToken, operationId)
    A->>L: findProviderBatchUndoOperation
    A->>L: BEGIN TX SELECT FOR UPDATE ledger row
    A->>P: UPDATE providers to preimage
    A->>L: "UPDATE ledger undo_consumed_at=now"
    A->>L: COMMIT
    A-->>C: 200 revertedCount
Loading

Reviews (5): Last reviewed commit: "Merge dev into provider batch safety" | Re-trigger Greptile

@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

新增 Provider 批量应用的 PostgreSQL 持久化账本,支持幂等应用、预映像一致性校验、结果重放与撤销,并接入 action、repository、API 错误映射、本地化文案及测试体系。

Changes

Provider 批量应用账本

Layer / File(s) Summary
账本结构与数据库迁移
drizzle/0109_nice_shriek.sql, drizzle/meta/*, src/drizzle/schema.ts, package.json
新增账本表、状态与结果类型、唯一索引、过期索引,并更新 Drizzle 快照、迁移日志和集成测试脚本。
Repository 原子应用与撤销
src/repository/provider.ts
实现账本查询、原子 apply、preimage CAS、undo 消费与回滚,并补齐启用 Provider 的 endpoint。
Action 幂等应用与撤销接入
src/actions/providers.ts, src/lib/provider-batch-patch-error-codes.ts, src/app/api/v1/resources/providers/handlers.ts
使用 claimKey 和 payload 指纹处理 replay、冲突与过期;统一提交后副作用、撤销快照及撤销结果。
集成验证与测试基础设施
tests/integration/*, tests/unit/actions/*, tests/unit/repository/*, tests/configs/*, tests/README.md, tests/tsconfig.provider-batch-ledger.json
新增 PostgreSQL durable ledger 集成测试、repository CAS/ledger 测试、action ledger mocks、Vitest 配置、TypeScript 配置和运行说明。
错误映射与本地化提示
src/lib/provider-batch-error-i18n.ts, src/app/[locale]/settings/providers/_components/*, messages/*/settings/providers/*
将批量操作错误码映射为本地化提示,并补充多语言的预览、幂等和撤销错误文案。

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

Possibly related PRs

Suggested reviewers: ding113

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 6.90% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ 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 标题准确概括了本次关于 provider 批量 apply/undo 崩溃安全化的核心变更。
Description check ✅ Passed 描述与实际改动一致,清楚覆盖了持久化账本、幂等、原子撤销和测试新增等主要内容。
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitai
coderabbitai Bot requested a review from ding113 July 14, 2026 22:46
@github-actions github-actions Bot added bug Something isn't working area:provider labels Jul 14, 2026

@gemini-code-assist gemini-code-assist 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.

Code Review

This pull request introduces a durable ledger for provider batch apply operations by adding the provider_batch_apply_operations table and implementing transaction-backed batch apply, replay, and undo mechanisms. Feedback on these changes includes replacing JSON.stringify with a robust deep equality helper in isProviderBatchPreimageValueEqual to avoid false-positive stale states from object key ordering, and removing the inline DELETE from findProviderBatchApplyOperation to keep the query read-only and compatible with read-replicas.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread src/repository/provider.ts
Comment thread src/repository/provider.ts

@coderabbitai coderabbitai 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.

Actionable comments posted: 7

🧹 Nitpick comments (1)
tests/unit/repository/provider-batch-preimage-cas.test.ts (1)

24-40: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

建议在 Mock 数据中补充 isEnabled 字段以提升测试健壮性

目前的 makeLockedProvider 没有返回 isEnabled 属性,这意味着在执行“returns stale when provider enablement changed after preview”测试时,系统会将 undefined(当前值)与 false(预期值)进行对比。虽然测试确实能因此返回 stale 并通过,但这属于非预期的巧合。建议显式加上 isEnabled: true 以对齐真实的 Provider 数据结构。

💡 建议的修改
 function makeLockedProvider(id: number, groupTag: string | null) {
   return {
     id,
     name: `Provider-${id}`,
     url: "https://api.example.com/v1",
     key: "sk-test",
     providerVendorId: 1,
     providerType: "codex",
+    isEnabled: true,
     groupTag,
     priority: 1,
     weight: 100,
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/unit/repository/provider-batch-preimage-cas.test.ts` around lines 24 -
40, Update the makeLockedProvider test fixture to include an explicit isEnabled:
true property, matching the real Provider structure and ensuring
enablement-change assertions compare defined boolean values.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/actions/providers.ts`:
- Around line 2515-2538: Update the undo flow around undoProviderBatchOperation
so post-commit side effects such as providerPatchUndoStore.delete, cache
broadcasting, or circuit-breaker handling are isolated in error handling that
records failures without propagating them as undo failures. Once the database
restoration succeeds, preserve the successful response and revertedCount even if
token cleanup or other post-commit processing throws, while retaining conflict
and expired handling.
- Around line 2025-2035: Update the newly added error branches in the relevant
provider action flows, including the idempotency-conflict and stale-preview
returns, to expose only stable errorCode and errorParams values instead of
hardcoded Chinese error text. Ensure the presentation boundary translates these
codes with next-intl for zh-CN, zh-TW, en, ja, and ru; leave existing
user-facing strings in the file unchanged and keep the broader Server Action
i18n migration separate.
- Around line 1634-1640: 调整 providers 更新流程中 undoValues 的构造,使其仅记录后续 updateGroups
实际应用的字段;复用 2360-2401 附近按 provider 类型筛选和跳过字段的逻辑,不要直接遍历所有 rows 写入撤销快照。保留 values
的现有构造行为,并确保撤销时不会恢复未实际应用的字段。
- Around line 2130-2149: 在批量调用 forceCloseCircuitState 前,针对每个 providerId
读取并确认当前熔断器阈值仍表示禁用状态,不要仅依据
operation.postCommitEffects.nextCircuitBreakerFailureThreshold 的旧值执行关闭;仅对当前仍禁用的
provider 调用 forceCloseCircuitState,并保留现有失败告警处理。
- Line 83: 将 providers 导入列表中的 updateProvidersBatch
从类型导入改为值导入,确保调用该函数的运行时代码能够正确解析;保留其他仅用于类型的导入不变。

In `@tests/unit/actions/providers-apply-engine.test.ts`:
- Line 11: 删除 providers-apply-engine.test.ts 模块作用域内重复的 redisStore const
声明,仅保留一份共享声明,确保同一作用域不再出现重复标识符并恢复测试编译。

In `@tests/unit/actions/providers-patch-actions-contract.test.ts`:
- Around line 12-20: 为 apply ledger mock 抽取共享的 ApplyLedgerResult 类型,具体声明
applyResult 及其 undoToken、operationId 字段,并将其复用于
tests/unit/actions/providers-patch-actions-contract.test.ts(12-20)和
tests/unit/actions/providers-undo-engine.test.ts(14-22)的 result 类型,避免嵌套属性被推断为
unknown。

---

Nitpick comments:
In `@tests/unit/repository/provider-batch-preimage-cas.test.ts`:
- Around line 24-40: Update the makeLockedProvider test fixture to include an
explicit isEnabled: true property, matching the real Provider structure and
ensuring enablement-change assertions compare defined boolean values.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: f7b427a0-8ac7-4855-ab34-a95efc1b1f55

📥 Commits

Reviewing files that changed from the base of the PR and between 6fcb827 and 8f4a232.

📒 Files selected for processing (19)
  • drizzle/0109_nice_shriek.sql
  • drizzle/meta/0109_snapshot.json
  • drizzle/meta/_journal.json
  • package.json
  • src/actions/providers.ts
  • src/app/api/v1/resources/providers/handlers.ts
  • src/drizzle/schema.ts
  • src/lib/provider-batch-patch-error-codes.ts
  • src/repository/provider.ts
  • tests/README.md
  • tests/configs/provider-batch-ledger-postgres.config.ts
  • tests/integration/provider-batch-ledger-postgres.test.ts
  • tests/tsconfig.provider-batch-ledger.json
  • tests/unit/actions/providers-apply-engine.test.ts
  • tests/unit/actions/providers-patch-actions-contract.test.ts
  • tests/unit/actions/providers-preview-engine.test.ts
  • tests/unit/actions/providers-undo-engine.test.ts
  • tests/unit/repository/provider-batch-ledger.test.ts
  • tests/unit/repository/provider-batch-preimage-cas.test.ts

Comment thread src/actions/providers.ts Outdated
Comment thread src/actions/providers.ts
Comment thread src/actions/providers.ts
Comment thread src/actions/providers.ts
Comment thread src/actions/providers.ts Outdated
Comment thread tests/unit/actions/providers-apply-engine.test.ts
Comment thread tests/unit/actions/providers-patch-actions-contract.test.ts
@Brisbanehuang
Brisbanehuang marked this pull request as ready for review July 14, 2026 23:10
@github-actions github-actions Bot added the size/XL Extra Large PR (> 1000 lines) label Jul 14, 2026

@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: c92d84915a

ℹ️ 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 src/repository/provider.ts Outdated
Comment thread src/actions/providers.ts
Comment thread src/repository/provider.ts Outdated
Comment thread src/actions/providers.ts Outdated
Comment thread src/repository/provider.ts
Comment thread src/repository/provider.ts Outdated

@github-actions github-actions 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.

Code Review Summary

No significant issues identified in this PR. The durable PostgreSQL ledger design is sound: claim insertion, complete-preimage validation under FOR UPDATE, effective-subset writes, and the applying->applied status transition all live in a single transaction, so a stuck applying row is impossible under normal PostgreSQL semantics (commit is all-or-nothing). Atomic undo (row restoration + token consumption in one transaction), single-consumption previews via unique indexes, and sensitive-URL stripping from durable payloads are all correctly implemented and well-tested. The 60s preview TTL is safely shorter than the 24h ledger TTL, so a ledger row can never outlive its preview and be re-consumed.

PR Size: XL

  • Lines changed: 7732 (7446 additions, 286 deletions)
  • Files changed: 20

Split suggestions (informational; the PR is cohesive as-is): if future iterations grow this surface further, the durable-ledger repository layer (applyProviderBatchOperationIfUnchanged, undoProviderBatchOperation, findProviderBatchApplyOperation), the actions-layer orchestration (applyProviderBatchPatch/undoProviderPatch rewiring + runProviderBatchPostCommitEffects), and the migration/schema could land as separate PRs to shrink the blast radius of each.

Issues Found

Category Critical High Medium Low
Logic/Bugs 0 0 0 0
Security 0 0 0 0
Error Handling 0 0 0 0
Types 0 0 0 0
Comments/Docs 0 0 0 0
Tests 0 0 0 0
Simplification 0 0 0 0

Review Coverage

  • Logic and correctness - Clean
  • Security (OWASP Top 10) - Clean (parameterized queries, fingerprint regex-validated, idempotencyKey length-capped at 128)
  • Error handling - Clean (all post-commit effects in the apply path are try/caught + logged; preimage mismatches surface PREVIEW_STALE)
  • Type safety - Clean
  • Documentation accuracy - Clean (comments match behavior, including the deliberately-cautious "applying" note)
  • Test coverage - Strong (62 unit tests + PostgreSQL integration suite covering concurrency, rollback, replay, atomic undo, and failed-undo rollback)
  • Code clarity - Good

Automated review by Claude AI

@coderabbitai coderabbitai 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.

🧹 Nitpick comments (1)
src/lib/provider-batch-patch-error-codes.ts (1)

12-12: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

将敏感字段集合设为只读

导出的 Set 仍可被其他模块调用 clear()add();一旦被意外修改,proxyUrlmcpPassthroughUrl 可能重新进入持久化撤销载荷,违反本 PR 的脱敏保证。至少将其声明为 ReadonlySet<string>,让 TypeScript 阻止后续调用方修改集合。

建议修改
-export const SENSITIVE_PROVIDER_BATCH_UNDO_KEYS = new Set(["proxyUrl", "mcpPassthroughUrl"]);
+export const SENSITIVE_PROVIDER_BATCH_UNDO_KEYS: ReadonlySet<string> = new Set([
+  "proxyUrl",
+  "mcpPassthroughUrl",
+]);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/lib/provider-batch-patch-error-codes.ts` at line 12, Update
SENSITIVE_PROVIDER_BATCH_UNDO_KEYS to expose a ReadonlySet<string> type,
preventing consumers from calling mutating Set methods while preserving the
existing sensitive keys and membership behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@src/lib/provider-batch-patch-error-codes.ts`:
- Line 12: Update SENSITIVE_PROVIDER_BATCH_UNDO_KEYS to expose a
ReadonlySet<string> type, preventing consumers from calling mutating Set methods
while preserving the existing sensitive keys and membership behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4de314e9-3b10-46b3-914c-3ae95053d150

📥 Commits

Reviewing files that changed from the base of the PR and between c92d849 and cf74ff8.

📒 Files selected for processing (21)
  • messages/en/settings/providers/batchEdit.json
  • messages/en/settings/providers/batchTest.json
  • messages/ja/settings/providers/batchEdit.json
  • messages/ja/settings/providers/batchTest.json
  • messages/ru/settings/providers/batchEdit.json
  • messages/ru/settings/providers/batchTest.json
  • messages/zh-CN/settings/providers/batchEdit.json
  • messages/zh-CN/settings/providers/batchTest.json
  • messages/zh-TW/settings/providers/batchEdit.json
  • messages/zh-TW/settings/providers/batchTest.json
  • src/actions/providers.ts
  • src/app/[locale]/settings/providers/_components/batch-edit/provider-batch-dialog.tsx
  • src/app/[locale]/settings/providers/_components/batch-test/batch-test-dialog.tsx
  • src/app/api/v1/resources/providers/handlers.ts
  • src/lib/provider-batch-error-i18n.ts
  • src/lib/provider-batch-patch-error-codes.ts
  • src/repository/provider.ts
  • tests/unit/actions/provider-undo-edit.test.ts
  • tests/unit/actions/providers-patch-actions-contract.test.ts
  • tests/unit/actions/providers-undo-engine.test.ts
  • tests/unit/repository/provider-batch-preimage-cas.test.ts
🚧 Files skipped from review as they are similar to previous changes (7)
  • tests/unit/actions/provider-undo-edit.test.ts
  • src/app/api/v1/resources/providers/handlers.ts
  • tests/unit/actions/providers-undo-engine.test.ts
  • tests/unit/actions/providers-patch-actions-contract.test.ts
  • tests/unit/repository/provider-batch-preimage-cas.test.ts
  • src/repository/provider.ts
  • src/actions/providers.ts

@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: cf74ff8588

ℹ️ 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 src/actions/providers.ts Outdated
Comment thread tests/integration/provider-batch-ledger-postgres.test.ts Outdated

@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: d81bb210d8

ℹ️ 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 src/actions/providers.ts
@Brisbanehuang
Brisbanehuang force-pushed the agent/provider-batch-apply-safety branch from d81bb21 to 39ed2a4 Compare July 15, 2026 07:54

@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: e0db39a9ef

ℹ️ 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 src/repository/provider.ts
Comment thread tests/unit/actions/providers-apply-engine.test.ts
@ding113
ding113 merged commit 75d2432 into ding113:dev Jul 22, 2026
9 checks passed
@github-project-automation github-project-automation Bot moved this from Backlog to Done in Claude Code Hub Roadmap Jul 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:provider bug Something isn't working size/XL Extra Large PR (> 1000 lines)

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants