Skip to content

fix(reliability): reconcile artifact ledger on current main - #435

Closed
seonghobae wants to merge 11 commits into
mainfrom
fix/artifact-ledger-current-main-20260813
Closed

fix(reliability): reconcile artifact ledger on current main#435
seonghobae wants to merge 11 commits into
mainfrom
fix/artifact-ledger-current-main-20260813

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 13, 2026

Copy link
Copy Markdown
Collaborator

Superseded by #457

This stale-base branch is closed without merge. PR #457 reconstructs the same reviewed five-file artifact-ledger integrity result directly on current protected main eb0a32e87e7470469c8fa0f8c67d9583654bef57 as exactly one commit with zero behind commits. The two modified protected-main input blobs were byte-identical to this branch's construction inputs, and all five reconstructed output blobs are byte-identical to this reviewed result.

No checks, reviews, approvals, or child evidence from #435 transfer to #457. Ordered children #448#449#450 must be rebuilt after #457 reaches protected main.

Historical objective

Reconcile the bounded fail-closed artifact-link ledger integrity slice directly on the protected-main line without importing stale #357 ancestry.

@coderabbitai

coderabbitai Bot commented Aug 13, 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: 36 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: 9d7dc60c-242f-4475-83a5-80185e3ee07f

📥 Commits

Reviewing files that changed from the base of the PR and between 961f44a and 777cd3c.

📒 Files selected for processing (5)
  • src/main/java/com/clearfolio/viewer/artifact/ArtifactLinkLedger.java
  • src/test/java/com/clearfolio/viewer/artifact/ArtifactLinkLedgerAuthorityRebindingTest.java
  • src/test/java/com/clearfolio/viewer/artifact/ArtifactLinkLedgerDurabilityTest.java
  • src/test/java/com/clearfolio/viewer/artifact/ArtifactLinkLedgerFailClosedTest.java
  • src/test/java/com/clearfolio/viewer/artifact/ArtifactLinkServiceTest.java

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.

@seonghobae
seonghobae marked this pull request as ready for review August 14, 2026 07:57
@seonghobae
seonghobae enabled auto-merge (squash) August 14, 2026 07:57

Copy link
Copy Markdown
Collaborator Author

Exact-current-head review request for 777cd3c722fe6c3ad27bfb45d981aea86444606e on protected main 961f44a19c4ced87f8062b3ab9842a9a08d05235. CI, Security Scan, SAST Semgrep, and fuzz are terminal-success; the PR is mergeable and has no unresolved review threads. This branch is the current-main replacement for stale #357. Review read-only; do not mutate the branch or bypass independent approval.

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

@coderabbitai

coderabbitai Bot commented Aug 14, 2026

Copy link
Copy Markdown

@seonghobae I will perform a read-only review of PR #435 for the requested head. I will not modify the branch or approve the pull request.

⚠️ 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.

Copy link
Copy Markdown
Collaborator Author

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

Review exact head 777cd3c722fe6c3ad27bfb45d981aea86444606e only. Exact-head CI, Security Scan, SAST Semgrep, and fuzz are terminal-success; unresolved inline findings are zero. Verify durable-before-publication ordering, immutable token identity, complete forced appends, and fail-closed replay. This is the ordered protected-main parent for #448#449#450.

Review read-only; preserve independent reviewer identity. Do not mutate the branch, synthesize author approval, weaken protection, or merge.

@coderabbitai

coderabbitai Bot commented Aug 15, 2026

Copy link
Copy Markdown
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

expected_head='777cd3c722fe6c3ad27bfb45d981aea86444606e'
base='961f44a19c4ced87f8062b3ab9842a9a08d05235'

printf '%s\n' '== checked-out commit =='
git rev-parse HEAD
printf '%s\n' '== requested commits available =='
git cat-file -t "$expected_head"
git cat-file -t "$base"

printf '%s\n' '== changed paths =='
git diff --name-status "$base" "$expected_head"

printf '%s\n' '== diff statistics =='
git diff --stat "$base" "$expected_head"

printf '%s\n' '== ArtifactLinkLedger locations =='
fd -a 'ArtifactLinkLedger\.java$' .

printf '%s\n' '== Java outlines for changed files =='
while IFS= read -r path; do
  ast-grep outline "$path" --items all --type class,interface,method,constructor --view expanded || true
done < <(git diff --name-only "$base" "$expected_head" -- '*.java')

printf '%s\n' '== exact source diff =='
git diff --find-renames --find-copies --unified=80 "$base" "$expected_head" -- '*.java'

Length of output: 2448


🏁 Script executed:

#!/bin/bash
set -euo pipefail

base='961f44a19c4ced87f8062b3ab9842a9a08d05235'
head='777cd3c722fe6c3ad27bfb45d981aea86444606e'
ledger='src/main/java/com/clearfolio/viewer/artifact/ArtifactLinkLedger.java'
service_test='src/test/java/com/clearfolio/viewer/artifact/ArtifactLinkServiceTest.java'
rebinding_test='src/test/java/com/clearfolio/viewer/artifact/ArtifactLinkLedgerAuthorityRebindingTest.java'
durability_test='src/test/java/com/clearfolio/viewer/artifact/ArtifactLinkLedgerDurabilityTest.java'
fail_closed_test='src/test/java/com/clearfolio/viewer/artifact/ArtifactLinkLedgerFailClosedTest.java'

printf '%s\n' '== complete Java diff =='
git diff --find-renames --find-copies --unified=100 "$base" "$head" -- '*.java'

printf '%s\n' '== production outlines =='
ast-grep outline "$ledger" --items all --view expanded
service_path="$(fd -a '^ArtifactLinkService\.java$' src/main/java | head -n 1)"
printf '%s\n' "== service path: ${service_path:-not-found} =="
if [ -n "${service_path:-}" ]; then
  ast-grep outline "$service_path" --items all --view expanded
fi

printf '%s\n' '== complete changed regression tests =='
for path in "$rebinding_test" "$durability_test" "$fail_closed_test" "$service_test"; do
  printf '\n== %s ==\n' "$path"
  cat -n "$path"
done

printf '%s\n' '== current ledger source =='
cat -n "$ledger"

if [ -n "${service_path:-}" ]; then
  printf '%s\n' '== service calls to ledger and publication-related methods =='
  rg -n -C 8 --glob '*.java' \
    '(ArtifactLinkLedger|\.issue\(|\.revoke\(|\.read\(|append|publish|audit)' \
    "$service_path"
fi

Length of output: 106253


🏁 Script executed:

#!/bin/bash
set -euo pipefail

service='src/main/java/com/clearfolio/viewer/artifact/ArtifactLinkService.java'
ledger='src/main/java/com/clearfolio/viewer/artifact/ArtifactLinkLedger.java'

printf '%s\n' '== ArtifactLinkService issue, revoke, and read methods =='
sed -n '120,315p' "$service" | cat -n

printf '%s\n' '== all production calls to ArtifactLinkLedger state-changing methods =='
rg -n -C 6 --glob '*.java' \
  '\bartifactLinkLedger\.(recordIssued|revoke|recordRead)\s*\(' \
  src/main/java

printf '%s\n' '== all ledger construction and state-changing calls =='
rg -n -C 4 --glob '*.java' \
  '\bnew\s+ArtifactLinkLedger\s*\(|\.(recordIssued|revoke|recordRead)\s*\(' \
  src/main/java src/test/java

printf '%s\n' '== replay, malformed, truncation, and invalid-ledger test coverage =='
rg -n -i -C 5 --glob '*ArtifactLink*Test.java' \
  '(replay|malformed|truncat|invalid line|invalid.*ledger|ledger.*invalid)' \
  src/test/java

printf '%s\n' '== base-to-head focused semantic diff for service test adjustment =='
git diff --unified=30 \
  961f44a19c4ced87f8062b3ab9842a9a08d05235 \
  777cd3c722fe6c3ad27bfb45d981aea86444606e \
  -- src/test/java/com/clearfolio/viewer/artifact/ArtifactLinkServiceTest.java

printf '%s\n' '== current repository status =='
git status --short

Length of output: 66390


@seonghobae Read-only review complete for 777cd3c722fe6c3ad27bfb45d981aea86444606e.

I found no blocking issues in the requested integrity scope.

  • ISSUED, REVOKED, and READ state is published only after appendLine returns.
  • appendDurably writes all remaining bytes and calls FileChannel.force(true).
  • createLink records durable issuance before it returns the artifact link response.
  • Runtime and replay duplicate ISSUED records fail closed. A token identifier cannot rebind authority.
  • Failed issuance, revocation, and read persistence do not publish the changed local state.
  • Invalid, malformed, and truncated-style ledger records fail through the controlled invalid-line path.
  • Repeated runtime revocation remains idempotent without another append.

I did not modify the branch, approve the pull request, merge, or change protection settings.

⚠️ 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.

Copy link
Copy Markdown
Collaborator Author

Exact-current-head independent review request for 777cd3c722fe6c3ad27bfb45d981aea86444606e.

The five-file artifact-ledger integrity parent is mergeable; CI, Security Scan, SAST Semgrep, and fuzz are terminal-success; unresolved inline findings are zero. This parent must reach protected main before rebuilding #448#449#450 on current base.

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

Review this exact head read-only. Do not mutate the branch, synthesize author approval, weaken protection, or merge.

@coderabbitai

coderabbitai Bot commented Aug 15, 2026

Copy link
Copy Markdown

Rate Limit Exceeded

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

Copy link
Copy Markdown
Collaborator Author

Exact-head review/update request for 777cd3c722fe6c3ad27bfb45d981aea86444606e.

The bounded artifact-ledger integrity parent has terminal-success CI, Security Scan, SAST Semgrep, and fuzz, is mergeable, and has zero unresolved inline threads. Its construction base 961f44a19c4ced87f8062b3ab9842a9a08d05235 predates current protected main, so update it to current main and regenerate all base-sensitive checks before independent approval or protected merge if required. This parent must integrate before #448#449#450 are rebuilt on protected main.

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

@coderabbitai

coderabbitai Bot commented Aug 15, 2026

Copy link
Copy Markdown

Rate Limit Exceeded

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

@seonghobae seonghobae closed this Aug 15, 2026
auto-merge was automatically disabled August 15, 2026 12:59

Pull request was closed

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