Skip to content

feat(etl): advertise bounded active-job polling cadence - #130

Closed
seonghobae wants to merge 7 commits into
feat/durable-job-cursor-list-v2from
feat/durable-job-poll-advisory-v2
Closed

feat(etl): advertise bounded active-job polling cadence#130
seonghobae wants to merge 7 commits into
feat/durable-job-cursor-list-v2from
feat/durable-job-poll-advisory-v2

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Superseded by repaired-stack replacement #145

This PR is closed without merge because its immediate base is the superseded pagination branch feat/durable-job-cursor-list-v2@683e1a8b132772236b561b28d5d204c866a08034, whose PR #129 has already been replaced by repaired-stack PR #144. Keeping this PR open would preserve an obsolete ancestry boundary and encourage downstream work to deepen the invalid stack.

The branch feat/durable-job-poll-advisory-v2 is intentionally preserved at exact head e7495b4fe558f543fe5fc1a1834e2f87542263a1, including its non-destructive historical merge and fail-first lineage. Nothing is force-pushed, rewritten, or deleted.

Replacement PR #145 was created from the exact current repaired predecessor #144 head 2a37789e651316e9bf29cbbd68902aa827a50c63 and reapplies the same bounded four-file polling product slice through auditable commits. Its exact current head is 2e388ad163cd97c53688decdca63d2b2dd98366f; it is four commits ahead, zero behind, and has the predecessor SHA as its exact merge base.

Replacement evidence

PR #145 regenerated its own evidence from scratch:

  • fail-first RED f6a7f3dc0b6659f05736916ef6cbb493fdbbee4d: exact-head CI reached test compilation and failed specifically because production EtlJobPollingAdvice did not yet exist;
  • GREEN production implementation 793f823259962a03e260fe2fd44e6a9f93a37f16;
  • polling operator/rollback documentation 2e840691d2ddb23f06377051c232d5498c09ed37;
  • exact current head 2e388ad163cd97c53688decdca63d2b2dd98366f with successful CI run 31294055411, Dependency Review 31294055431, CycloneDX SBOM 31294055437, and CodeRabbit exact-head status.

No checks, statuses, reviews, approvals, review-thread conclusions, synthetic merges, or base snapshots from this PR transfer to #145. The replacement remains Draft and must still regenerate missing direct-base SAST/Security evidence and a qualifying independent non-author formal approval before eventual protected merge.

Historical product intent remains unchanged: active owner-scoped durable-job status responses may advertise RFC 9110 Retry-After only while local worker execution is enabled, with terminal/disabled-worker responses omitting the advisory and no sensitive data added to the response.

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

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

Next review available in: 5 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

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: e89bf19b-2c5e-4841-974d-925948c8b5cd

📥 Commits

Reviewing files that changed from the base of the PR and between 683e1a8 and e7495b4.

📒 Files selected for processing (4)
  • CHANGELOG.md
  • docs/etl/durable-job-polling.md
  • etl-service/src/main/java/com/xtrmetl/etl/controller/EtlJobPollingAdvice.java
  • etl-service/src/test/java/com/xtrmetl/etl/controller/EtlJobPollingAdviceTest.java

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

…sory-v2

Advance polling advisory to the repaired pagination and hourly OpenCode lineage without discarding either change set.
Carry the corrected hourly OpenCode tests and documentation through the repaired pagination head while preserving polling behavior.

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

Review exact current head 1cd1dbda288f57906ef00669f5de78393a29e16f only. Cross-platform CI, Dependency Review, and CycloneDX SBOM succeed on the repaired lineage. Verify that Retry-After is emitted only for active states when the local worker is enabled, that fractional delays round upward, disabled execution never advertises progress, unrelated responses remain untouched, and predecessor workflow, worker, and pagination contracts remain intact. Treat later heads as requiring a new review.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Checked-out commit =="
git rev-parse HEAD
git status --short
echo

echo "== Target commit availability =="
git cat-file -t 1cd1dbda288f57906ef00669f5de78393a29e16f
echo

echo "== Commit metadata =="
git show -s --format='%H%n%P%n%s' 1cd1dbda288f57906ef00669f5de78393a29e16f
echo

echo "== Files changed by requested commit versus first parent =="
git diff-tree --no-commit-id --name-status -r 1cd1dbda288f57906ef00669f5de78393a29e16f
echo

echo "== Compact outlines for changed Java files =="
git diff-tree --no-commit-id --name-only -r 1cd1dbda288f57906ef00669f5de78393a29e16f \
  | grep -E '\.java$' \
  | while IFS= read -r file; do
      echo "--- $file"
      ast-grep outline "$file" --items all || true
    done
echo

echo "== Focused commit diff =="
git diff 1cd1dbda288f57906ef00669f5de78393a29e16f^ 1cd1dbda288f57906ef00669f5de78393a29e16f -- \
  '*.java' '*.yml' '*.yaml' '*.properties' '*.md' '*.xml'
echo

echo "== Retry-After-related declarations and uses =="
rg -n -C 4 --glob '*.java' --glob '*.properties' --glob '*.yml' --glob '*.yaml' \
  '(Retry-After|ResponseBodyAdvice|fixed-delay|fixedDelay|worker.*enabled|enabled.*worker)' .
echo

echo "== Controller, worker, and pagination contract definitions/usages =="
rg -n -C 3 --glob '*.java' \
  '(class\s+EtlJobController|interface\s+EtlJobController|class\s+.*Worker|`@Scheduled`|Pageable|Page<|Slice<|owner)' .

Length of output: 2143


🏁 Script executed:

#!/bin/bash
set -euo pipefail

target="1cd1dbda288f57906ef00669f5de78393a29e16f"

echo "== PR `#130` metadata and changed files =="
gh pr view 130 --repo ContextualWisdomLab/mightyETL \
  --json number,headRefOid,baseRefOid,baseRefName,headRefName,mergeCommit,files \
  --jq '{number, headRefOid, baseRefOid, baseRefName, headRefName, mergeCommit, files: [.files[].path]}'
echo

echo "== Merge-result changes relative to each parent =="
for parent in $(git show -s --format=%P "$target"); do
  echo "--- Parent: $parent"
  git diff --name-status "$parent" "$target"
done
echo

echo "== Combined merge diff =="
git show --cc --find-renames --format=fuller "$target" -- \
  '*.java' '*.properties' '*.yml' '*.yaml' '*.md' '*.xml'
echo

echo "== Candidate files =="
fd -t f . \
  | grep -Ei '(etl.*job|job.*etl|retry|poll|worker|pagination|page|application.*\.(properties|ya?ml)$|changelog|rfc)'
echo

echo "== Relevant declarations and call sites in the exact checkout =="
rg -n -C 5 --glob '*.java' --glob '*.properties' --glob '*.yml' --glob '*.yaml' \
  '(ResponseBodyAdvice|supports\s*\(|beforeBodyWrite\s*\(|Retry-After|EtlJobController|`@Scheduled`|fixedDelay|fixed-delay|worker.*enabled|enabled.*worker|Pageable|Page<|Slice<)' .

Length of output: 65652


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== PR patch against its GitHub base =="
git diff --find-renames 349afe7f0e9c77279806f13b2d156e4bcd43bab1 1cd1dbda288f57906ef00669f5de78393a29e16f -- \
  CHANGELOG.md \
  docs/etl/durable-job-polling.md \
  etl-service/src/main/java/com/xtrmetl/etl/controller/EtlJobPollingAdvice.java \
  etl-service/src/test/java/com/xtrmetl/etl/controller/EtlJobPollingAdviceTest.java
echo

echo "== Focused source maps =="
for file in \
  etl-service/src/main/java/com/xtrmetl/etl/controller/EtlJobPollingAdvice.java \
  etl-service/src/main/java/com/xtrmetl/etl/controller/EtlJobController.java \
  etl-service/src/main/java/com/xtrmetl/etl/job/EtlJobWorker.java \
  etl-service/src/main/java/com/xtrmetl/etl/job/EtlJobWorkerProperties.java \
  etl-service/src/test/java/com/xtrmetl/etl/controller/EtlJobPollingAdviceTest.java \
  etl-service/src/test/java/com/xtrmetl/etl/job/EtlJobPaginationControllerTest.java; do
  echo "--- $file"
  ast-grep outline "$file" --items all
done
echo

echo "== Full polling advice and direct tests =="
cat -n etl-service/src/main/java/com/xtrmetl/etl/controller/EtlJobPollingAdvice.java
echo "--- tests"
cat -n etl-service/src/test/java/com/xtrmetl/etl/controller/EtlJobPollingAdviceTest.java
echo

echo "== Controller endpoint signatures and status/list implementations =="
rg -n -C 12 --glob 'EtlJobController.java' \
  '(@(Get|Post)Mapping|EtlJob(Status|Page|Accepted)Response|ResponseEntity|list|status|find)' \
  etl-service/src/main/java
echo

echo "== Worker activation and property validation =="
sed -n '1,155p' etl-service/src/main/java/com/xtrmetl/etl/job/EtlJobWorker.java
sed -n '1,115p' etl-service/src/main/java/com/xtrmetl/etl/job/EtlJobWorkerProperties.java
echo

echo "== Pagination controller contract tests =="
cat -n etl-service/src/test/java/com/xtrmetl/etl/job/EtlJobPaginationControllerTest.java

Length of output: 91663


@seonghobae Review complete for exact head 1cd1dbda288f57906ef00669f5de78393a29e16f.

I found no actionable issues.

Verified behavior:

  • Retry-After applies only to EtlJobStatusResponse from EtlJobController.
  • PENDING and RUNNING emit the header only when xtrmetl.etl.jobs.worker.enabled=true.
  • The worker uses the same enabled property for conditional activation.
  • The delay rounds upward. 1 ms becomes 1, and 1001 ms becomes 2.
  • Terminal states remove the header.
  • Active states remove the header when worker execution is disabled.
  • Submission, list, problem, and unrelated response bodies remain unchanged.
  • The status endpoint retains owner scope and Cache-Control: no-store.
  • The pagination controller contract remains unchanged.

Any later commit requires a new review scope, as requested.

⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Preserve the complete polling implementation and fail-first history while incorporating PR #129 exact head 683e1a8. Resolve CHANGELOG.md additively and retain all predecessor policy evidence.
seonghobae added a commit that referenced this pull request Aug 6, 2026
Preserve the complete conditional-status implementation and fail-first history while incorporating PR #130 exact head e7495b4. Resolve CHANGELOG.md additively and retain all predecessor policy evidence.

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review
@cwl-noema-review
@opencode-agent

Please review the exact live head against its declared #129 stacked base only. Verify Retry-After is emitted only for PENDING/RUNNING status representations when the durable worker is actually enabled, delay derives from validated fixed-delay configuration and rounds positive fractional seconds upward, terminal/disabled-worker/unrelated responses omit the header, no sensitive job/lease/principal/queue data enters the advisory, and inherited owner pagination/worker/NVIDIA-NIM contracts remain intact. Review only; do not retarget, update the branch, remove manual-merge, merge, release, or alter protections.

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo="ContextualWisdomLab/mightyETL"
declared_head="e7495b4fe558f543fe5fc1a1834e2f87542263a1"
declared_base="683e1a8b132772236b561b28d5d204c866a08034"

echo "== Live pull request metadata =="
gh pr view 130 --repo "$repo" \
  --json number,headRefOid,baseRefOid,headRefName,baseRefName,mergeable,state,files \
  --jq '{number, headRefOid, baseRefOid, headRefName, baseRefName, mergeable, state, files: [.files[].path]}'
echo

echo "== Checked-out revision =="
git rev-parse HEAD
git status --short
echo

echo "== Declared revisions =="
git show -s --format='head %H%nparents %P%nsubject %s' "$declared_head"
git show -s --format='base %H%nparents %P%nsubject %s' "$declared_base"
echo

echo "== Required ancestry =="
git merge-base --is-ancestor "$declared_base" "$declared_head" && echo "declared base is an ancestor of declared head"
echo

echo "== Exact declared-base-to-head changed files =="
git diff --name-status "$declared_base" "$declared_head"
echo

echo "== Exact declared-base-to-head patch for polling and documentation =="
git diff --find-renames "$declared_base" "$declared_head" -- \
  'etl-service/src/main/java/**/*.java' \
  'etl-service/src/test/java/**/*.java' \
  'etl-service/src/main/resources/**' \
  'CHANGELOG.md' \
  'docs/**'
echo

echo "== Candidate file map =="
fd -t f . | rg '(EtlJob(PollingAdvice|Controller|Worker|WorkerProperties|PaginationControllerTest)|Nim|NVIDIA|Pagination|durable-job-polling|CHANGELOG)'
echo

echo "== Compact source and test outlines =="
for file in $(fd -t f . | rg '(EtlJobPollingAdvice|EtlJobController|EtlJobWorker|EtlJobWorkerProperties|EtlJobPaginationControllerTest|Nim|NVIDIA)' | sort); do
  echo "--- $file"
  ast-grep outline "$file" --items all || true
done
echo

echo "== Polling, worker, status, pagination, and NVIDIA-NIM declarations and tests =="
rg -n -C 5 \
  --glob '*.java' --glob '*.properties' --glob '*.yml' --glob '*.yaml' \
  '(ResponseBodyAdvice|beforeBodyWrite|supports\s*\(|Retry-After|EtlJobStatusResponse|PENDING|RUNNING|SUCCEEDED|FAILED|fixed-delay|fixedDelay|worker\.enabled|`@ConditionalOnProperty`|`@Scheduled`|Pageable|Page<|owner|NVIDIA|Nim)' \
  etl-service

Length of output: 225639


🏁 Script executed:

#!/bin/bash
set -euo pipefail

base="683e1a8b132772236b561b28d5d204c866a08034"
head="e7495b4fe558f543fe5fc1a1834e2f87542263a1"

echo "== Worker activation and scheduler configuration =="
sed -n '1,145p' etl-service/src/main/java/com/xtrmetl/etl/job/EtlJobWorker.java
echo
sed -n '1,105p' etl-service/src/main/java/com/xtrmetl/etl/job/EtlJobWorkerProperties.java
echo

echo "== Exact EtlJobController response paths =="
sed -n '85,215p' etl-service/src/main/java/com/xtrmetl/etl/controller/EtlJobController.java
echo

echo "== Advice and exception-handler topology =="
fd -t f -e java . etl-service/src/main/java/com/xtrmetl/etl/controller \
  | sort \
  | while IFS= read -r file; do
      echo "--- $file"
      rg -n -C 3 '(ControllerAdvice|RestControllerAdvice|ResponseBodyAdvice|Retry-After|RETRY_AFTER|ExceptionHandler)' "$file" || true
    done
echo

echo "== All Retry-After header writers in repository =="
rg -n -C 4 --glob '*.java' --glob '*.kt' --glob '*.groovy' \
  '(HttpHeaders\.RETRY_AFTER|Retry-After|RETRY_AFTER)' .
echo

echo "== Inherited worker, pagination, and NVIDIA-NIM files changed from declared base =="
git diff --name-status "$base" "$head" -- \
  'etl-service/src/main/java/com/xtrmetl/etl/job/**' \
  'etl-service/src/test/java/com/xtrmetl/etl/job/**' \
  '.github/**' \
  'etl-service/src/test/java/com/xtrmetl/etl/documentation/**'
echo

echo "== NVIDIA-NIM workflow contract source and tests =="
fd -t f . .github etl-service/src/test/java 2>/dev/null \
  | rg '(HourlyOpenCode|opencode.*\.ya?ml|.*\.ya?ml$)' \
  | while IFS= read -r file; do
      echo "--- $file"
      rg -n -C 2 '(NVIDIA_NIM_API_KEY|NVIDIA_API_KEY|MODEL:|opencode run|pull-requests: write|actions: write|contents: write|/reviews|/merge)' "$file" || true
    done

Length of output: 41040


@seonghobae Review complete for live head e7495b4fe558f543fe5fc1a1834e2f87542263a1 against declared base 683e1a8b132772236b561b28d5d204c866a08034.

I found no actionable issues.

Verified:

  • The live head and base match the declared revisions.
  • The declared base is an ancestor of the live head.
  • Retry-After is written only by EtlJobPollingAdvice.
  • The advice applies only to EtlJobController responses with an EtlJobStatusResponse body.
  • Only PENDING and RUNNING set the header.
  • The advice uses the same xtrmetl.etl.jobs.worker.enabled setting that activates EtlJobWorker.
  • Disabled worker execution removes the header.
  • SUCCEEDED and FAILED remove the header.
  • The fixed delay is validated from one millisecond through one day.
  • The delay rounds upward. For example, 1 ms becomes 1, and 1001 ms becomes 2.
  • The advisory contains only the bounded integer delay.
  • Submission, list, problem, and unrelated-controller responses do not write the header.
  • The status endpoint retains owner scope and Cache-Control: no-store.
  • The exact diff does not modify inherited worker, owner-pagination, or NVIDIA-NIM workflow contracts.

I did not retarget, update, merge, release, change manual-merge, or alter protections.

⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@opencode-agent

opencode-agent Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Queued @cwl-noema-review ; Rejected @opencode-agent: repository is absent from OPENCODE_REPOSITORY_DISPATCH_TARGETS for PR #130 at head e7495b4fe558f543fe5fc1a1834e2f87542263a1. Central exact-name Actions artifacts are the durable dispatch ledger; existing review workflows remain authoritative for the final verdict and failure evidence.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant