Skip to content

feat(scoring): persist dispatch request job and outbox atomically - #68

Merged
seonghobae merged 13 commits into
mainfrom
feat/scoring-dispatch-transaction-20260814-1802
Aug 16, 2026
Merged

seonghobae merged 13 commits into
mainfrom
feat/scoring-dispatch-transaction-20260814-1802

Conversation

@seonghobae

Copy link
Copy Markdown
Contributor

Why

Protected main already persists immutable response snapshots, scoring requests, scoring-job state, and integration outbox evidence, but callers can still accidentally commit those dispatch records through separate transaction boundaries. ROADMAP Phase 2 requires scoring dispatch/outbox effects to survive crashes without losing or splitting business evidence.

What

  • Add persist_scoring_dispatch as a caller-owned PostgreSQL transaction composition over the existing immutable scoring-request, scoring-job, and transactional-outbox adapters.
  • Fail closed before writes when the job references a different scoring request.
  • Preserve exact-replay dispositions independently so legacy partial exact evidence can be reconciled without rewriting immutable rows.
  • Add real PostgreSQL tests proving all three records commit together, exact replay stays idempotent, request/job failure boundaries are typed, and a late outbox conflict rolls back newly inserted request/job state.

This does not call or duplicate fast-mlsirm psychometric numerics, define a new external event schema, or add a migration. Event payload/subject semantics remain owned by the caller's versioned integration contract.

Verification intent

  • cargo test --test postgres_scoring_dispatch_transaction --test postgres_scoring_dispatch_error_paths
  • full Runtime CI, coverage/docstrings, security and required independent review on the exact PR head

Base at branch creation: cc5850a0d1eacbbf16d03075534fce460a8286e6.

@coderabbitai

coderabbitai Bot commented Aug 14, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@seonghobae, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 31 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 905d6562-b22c-47d4-b8cd-946e066df1be

📥 Commits

Reviewing files that changed from the base of the PR and between cc5850a and 6c42307.

📒 Files selected for processing (4)
  • src/postgres_scoring_request.rs
  • tests/postgres_scoring_dispatch_envelope.rs
  • tests/postgres_scoring_dispatch_error_paths.rs
  • tests/postgres_scoring_dispatch_transaction.rs

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.

Copy link
Copy Markdown
Contributor Author

@opencode-agent

Please perform a bounded independent current-head review of 0f54cf83be44c0b91cce54512aa501d2fc2eb30b against protected main cc5850a0d1eacbbf16d03075534fce460a8286e6. Exact-head Runtime CI, Security Scan, SAST Semgrep, coverage-evidence, and the required OpenCode workflow check are successful. Do not update the branch or merge.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 14, 2026

Copy link
Copy Markdown

Rate Limit Exceeded

@seonghobae have exceeded the limit for the number of chat messages per hour. Please wait 13 minutes and 11 seconds before sending another message.

@opencode-agent opencode-agent 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.

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 6c42307288c42f18b58380329642f3d398cc0df0.

  • Head SHA: 6c42307288c42f18b58380329642f3d398cc0df0

  • Workflow run: 31849192015

  • Workflow attempt: 1

Coverage evidence

Coverage Decision

  • Result: FAIL
  • Test evidence: not proven passing
  • Docstring evidence: not proven passing when configured
  • Failure count: 1

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file: postgres_scoring_request.rs"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file: postgres_scoring_request.rs"]
  R1 --> V1["required checks"]
  Evidence --> S2["Test (3 files)"]
  S2 --> I2["regression suite"]
  I2 --> R2["Review risk: Test (3 files)"]
  R2 --> V2["targeted test run"]
Loading

@opencode-agent

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: 6c42307288c42f18b58380329642f3d398cc0df0
  • Workflow run: 31849192015
  • Workflow attempt: 1
  • Gate result: REQUEST_CHANGES (approval step)

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 6c42307288c42f18b58380329642f3d398cc0df0.

  • Head SHA: 6c42307288c42f18b58380329642f3d398cc0df0

  • Workflow run: 31849192015

  • Workflow attempt: 1

Coverage evidence

Coverage Decision

  • Result: FAIL
  • Test evidence: not proven passing
  • Docstring evidence: not proven passing when configured
  • Failure count: 1

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file: postgres_scoring_request.rs"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file: postgres_scoring_request.rs"]
  R1 --> V1["required checks"]
  Evidence --> S2["Test (3 files)"]
  S2 --> I2["regression suite"]
  I2 --> R2["Review risk: Test (3 files)"]
  R2 --> V2["targeted test run"]
Loading

@seonghobae
seonghobae dismissed opencode-agent[bot]’s stale review August 16, 2026 14:01

Dismissed as obsolete blocker evidence after exact-head re-verification. The review cites workflow run 31849192015 and a failed coverage-evidence result for head 6c42307, but that referenced run is no longer retrievable and the current GitHub check suite for the unchanged exact same head has coverage-evidence=success, opencode-review=success, Runtime CI=success, Security Scan=success, and SAST Semgrep=success, with no failed, queued, in-progress, or null-conclusion exact-head checks. This dismissal does not add an approval or bypass a current failing gate; it removes a contradicted formal REQUEST_CHANGES state whose sole stated premise is no longer true.

@seonghobae
seonghobae merged commit 0b861cb into main Aug 16, 2026
30 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant