Skip to content

perf(mmle): use matrix-vector EAP projection - #549

Closed
seonghobae wants to merge 8 commits into
mainfrom
perf/mmle-eap-matmul-reviewed
Closed

perf(mmle): use matrix-vector EAP projection#549
seonghobae wants to merge 8 commits into
mainfrom
perf/mmle-eap-matmul-reviewed

Conversation

@seonghobae

Copy link
Copy Markdown
Contributor

Purpose

Replace the automation-owned PR #547 with a maintainer-owned exact branch so review and validation evidence cannot be invalidated by later branch rewrites.

Change

  • replace (posterior * nodes[None, :]).sum(axis=1) with the equivalent matrix-vector product posterior @ nodes in the NumPy reference/fallback MMLE path;
  • avoid materializing the additional posterior-shaped element-wise product;
  • preserve quadrature nodes, posterior weights, missing-data handling, initialization, M-step, stopping rules, return transport, and public signatures;
  • keep the resolved production backend in Rust.

Verification

  • independently reconstruct a one-iteration posterior for a realistic partially observed response matrix and compare the fallback EAP result to the former weighted-sum equation at tight floating-point tolerance;
  • require the expected one-iteration status and iteration count;
  • pin the allocation-bounded source path so the broadcast temporary cannot be silently restored;
  • include APA 7th doctoring and authoritative changelog material;
  • require fresh exact-head Python, Rust/PyO3, GPU no-skip, package, fuzz, Security Scan, SAST, current-head automated review, independent approval, and zero actionable threads.

Performance depends on dimensions, layout, linked BLAS implementation, hardware, and runtime conditions. No universal speedup claim is made.

Supersedes #547 after this PR is open. No release is included.

seonghobae and others added 7 commits August 5, 2026 07:30
MMLE fallback 추정기에서 EAP 능력을 계산할 때 사용되던 축소연산 `(posterior * nodes[None, :]).sum(axis=1)`을 행렬곱 `posterior @ nodes` 연산으로 변경했습니다. 이 변경으로 인해 중간 단계에서 거대한 N x Q 크기의 임시 배열을 할당하고 복사하는 메모리 오버헤드가 사라지며, BLAS 최적화 루틴을 활용하게 되어 전반적인 성능이 향상되었습니다. 성능 하락을 우려하던 일부 연산 방식(`np.ones`를 이용한 내적 등)은 유지 보수성 및 코드 가독성을 위해 기존 `sum(axis=1)`을 유지하여 Bolt 가이드라인을 준수했습니다.
@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: 43 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 2dfe3e7e-2129-4393-889e-6a2718340deb

📥 Commits

Reviewing files that changed from the base of the PR and between 84f3251 and fe48aef.

📒 Files selected for processing (5)
  • CHANGELOG.md
  • docs/changelog.d/mmle-fallback-eap-matmul.md
  • docs/doctoring/mmle-fallback-eap-matmul.md
  • python/fast_mlsirm/estimators/mmle.py
  • tests/test_mmle_fallback_eap_matmul.py

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

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@opencode-agent @cwl-noema-review Review exact head 12fc519ca798c8400840f04b3b19c07754ad7dfe. This clean branch replaces automation-owned #547 after its head was rewritten. Verify the missing-data EAP parity fixture, one-iteration status binding, allocation-bounded matmul path, Rust-primary boundary, calibrated performance claim, APA 7 doctoring, and changelog. Require fresh checks and independent approval on this PR's exact head.

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

@seonghobae I will review pull request #549 at the specified exact head. I will verify the requested implementation, documentation, and validation evidence.

⚠️ 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
Contributor Author

@opencode-agent @cwl-noema-review Final independent exact-head approval requested for 12fc519ca798c8400840f04b3b19c07754ad7dfe. Repository CI 30989992368, SAST 30989992460, and Security Scan 30989992408 are successful on this head, including Python, Rust/PyO3, package, GPU no-skip, and fuzz jobs. No unresolved current review thread is present. Verify the missing-data EAP parity reconstruction, one-iteration status contract, allocation-bounded NumPy fallback path, Rust-primary architecture, calibrated performance wording, APA 7 doctoring, and changelog. Submit APPROVE only after same-head Strix evidence is successful and no actionable issue remains; stale, status-only, self-authored, or prior-PR evidence is insufficient.

@seonghobae
seonghobae marked this pull request as draft August 5, 2026 09:18
@seonghobae
seonghobae marked this pull request as ready for review August 5, 2026 09:18
@seonghobae
seonghobae enabled auto-merge (squash) August 5, 2026 11:53

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Review exact current head 12fc519ca798c8400840f04b3b19c07754ad7dfe. The prior invocation was rate-limited; no commits have moved since. Reassess the complete six-file diff and report only current-head actionable findings.

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

expected='12fc519ca798c8400840f04b3b19c07754ad7dfe'
actual="$(git rev-parse HEAD)"
printf 'HEAD=%s\nEXPECTED=%s\n' "$actual" "$expected"
git status --short
git show --no-ext-diff --format=fuller --no-renames --stat "$expected"
printf '\n--- changed files ---\n'
git diff-tree --no-commit-id --name-status -r "$expected"
printf '\n--- complete diff ---\n'
git diff --no-ext-diff --find-renames=0 "${expected}^" "$expected" --

printf '\n--- outlines for changed Python files ---\n'
git diff-tree --no-commit-id --name-only -r "$expected" | while IFS= read -r file; do
  case "$file" in
    *.py)
      printf '\n### %s\n' "$file"
      ast-grep outline "$file" --items all --view expanded || true
      ;;
  esac
done

printf '\n--- exact-head PR state, checks, reviews, and threads ---\n'
gh pr view 549 --repo ContextualWisdomLab/fast-mlsirm \
  --json number,headRefOid,state,isDraft,reviewDecision,reviews,statusCheckRollup,comments \
  --jq '{number,headRefOid,state,isDraft,reviewDecision,reviews:(.reviews|map({author:.author.login,state,commit:.commit.oid,submittedAt})),checks:(.statusCheckRollup|map({name,conclusion,status,detailsUrl})),comments:(.comments|map({author:.author.login,createdAt,body}))}' || true

gh api graphql -f owner='ContextualWisdomLab' -f name='fast-mlsirm' -F number=549 -f query='
query($owner:String!, $name:String!, $number:Int!) {
  repository(owner:$owner,name:$name) {
    pullRequest(number:$number) {
      reviewThreads(first:100) {
        nodes {
          isResolved
          isOutdated
          comments(first:20) {
            nodes { author { login } commit { oid } body path line originalLine }
          }
        }
      }
    }
  }
}' --jq '.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false) | {isOutdated, comments: [.comments.nodes[] | {author:.author.login,commit:.commit.oid,path,line,originalLine,body}]}' || true

Length of output: 20698


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/fast-mlsirm'
pr=549
head='12fc519ca798c8400840f04b3b19c07754ad7dfe'
base="$(gh pr view "$pr" --repo "$repo" --json baseRefOid --jq .baseRefOid)"
printf 'BASE=%s\nHEAD=%s\n' "$base" "$head"

printf '\n--- complete PR files ---\n'
gh pr view "$pr" --repo "$repo" --json files --jq '.files[] | {path, additions, deletions}' || true

printf '\n--- complete PR diff ---\n'
git diff --no-ext-diff --find-renames=0 "$base" "$head" -- \
  .jules/bolt.md \
  CHANGELOG.md \
  docs/changelog.d/mmle-fallback-eap-matmul.md \
  docs/doctoring/mmle-fallback-eap-matmul.md \
  python/fast_mlsirm/estimators/mmle.py \
  tests/test_mmle_fallback_eap_matmul.py

printf '\n--- changed file contents ---\n'
for file in \
  .jules/bolt.md \
  CHANGELOG.md \
  docs/changelog.d/mmle-fallback-eap-matmul.md \
  docs/doctoring/mmle-fallback-eap-matmul.md \
  python/fast_mlsirm/estimators/mmle.py \
  tests/test_mmle_fallback_eap_matmul.py
do
  printf '\n### %s\n' "$file"
  cat -n "$file"
done

printf '\n--- MMLE backend dispatch and EAP usage context ---\n'
rg -n -C 5 --glob '*.py' \
  'fit_mmle_2pl|_fit_mmle_2pl|posterior\s*@\s*nodes|posterior\s*\*\s*nodes|gauss_hermite_nodes|rust|Rust' \
  python tests

printf '\n--- test collection references ---\n'
rg -n -C 3 --glob '*.py' \
  'test_one_iteration_eap_matches_independent_weighted_sum_reference|test_eap_projection_retains_the_allocation_bounded_matmul_path|fit_mmle_2pl' \
  tests

Length of output: 182781


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/fast-mlsirm'
pr=549
head='12fc519ca798c8400840f04b3b19c07754ad7dfe'
base="$(gh pr view "$pr" --repo "$repo" --json baseRefOid --jq .baseRefOid)"
files=(
  .jules/bolt.md
  CHANGELOG.md
  docs/changelog.d/mmle-fallback-eap-matmul.md
  docs/doctoring/mmle-fallback-eap-matmul.md
  python/fast_mlsirm/estimators/mmle.py
  tests/test_mmle_fallback_eap_matmul.py
)

printf '%s\n' '--- PR file list ---'
gh pr view "$pr" --repo "$repo" --json files --jq '.files[] | "\(.path) +\(.additions) -\(.deletions)"'

for file in "${files[@]}"; do
  printf '\n--- DIFF: %s ---\n' "$file"
  git diff --no-ext-diff --find-renames=0 "$base" "$head" -- "$file"
done

printf '\n--- MMLE fallback source ---\n'
cat -n python/fast_mlsirm/estimators/mmle.py

printf '\n--- new EAP test ---\n'
cat -n tests/test_mmle_fallback_eap_matmul.py

printf '\n--- production dispatch boundary ---\n'
sed -n '180,255p' python/fast_mlsirm/fit.py | cat -n

printf '\n--- EAP-pattern occurrences in MMLE source and test ---\n'
rg -n -C 2 'posterior|nodes|theta\s*=|matmul|@' \
  python/fast_mlsirm/estimators/mmle.py \
  tests/test_mmle_fallback_eap_matmul.py

Length of output: 36088


@seonghobae I found no actionable findings on exact head 12fc519ca798c8400840f04b3b19c07754ad7dfe.

I verified the six-file diff. The NumPy fallback uses posterior @ nodes. The missing-data fixture independently reconstructs the one-iteration posterior and checks the former weighted-sum equation. The fixture also binds status == "max_iter_reached" and n_iter == 1.

The Rust fit_mmle_2pl path remains primary. The NumPy path remains the fallback. The documentation limits the performance claim to allocation avoidance and possible optimized numerical-library dispatch. It does not claim a universal speedup.

The current-head Python, Rust, GPU, fuzz, package, SAST, security, and Strix checks report success. No unresolved review thread was present.

You are interacting with an AI system.

@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 12fc519ca798c8400840f04b3b19c07754ad7dfe.

  • Head SHA: 12fc519ca798c8400840f04b3b19c07754ad7dfe

  • Workflow run: 31002982024

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (3 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (3 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs (2 files)"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs (2 files)"]
  R2 --> V2["docs review"]
  Evidence --> S3["Test: test_mmle_fallback_eap_matmul.py"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test: test_mmle_fallback_eap_matmul.py"]
  R3 --> V3["targeted test run"]
Loading

@opencode-agent

opencode-agent Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: fe48aef717cae331ffb6c567931ce646f6de1774
  • Workflow run: 31080795209
  • Workflow attempt: 2
  • 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 fe48aef717cae331ffb6c567931ce646f6de1774.

  • Head SHA: fe48aef717cae331ffb6c567931ce646f6de1774

  • Workflow run: 31080795209

  • Workflow attempt: 2

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (2 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (2 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs (2 files)"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs (2 files)"]
  R2 --> V2["docs review"]
  Evidence --> S3["Test: test_mmle_fallback_eap_matmul.py"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test: test_mmle_fallback_eap_matmul.py"]
  R3 --> V3["targeted test run"]
Loading

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@opencode-agent @cwl-noema-review Review exact current head 12fc519ca798c8400840f04b3b19c07754ad7dfe. Repository CI 30989992368, SAST Semgrep 30989992460, and Security Scan 30989992408 are successful on this SHA, and no unresolved review thread is present. Verify the independently reconstructed missing-data EAP parity fixture, one-iteration status binding, allocation-bounded posterior @ nodes path, Rust-primary production boundary, calibrated performance wording, APA 7 doctoring, and changelog. Submit APPROVE only if no actionable issue remains; stale, status-only, self-authored, or prior-head evidence is insufficient.

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/fast-mlsirm'
pr='549'
expected='12fc519ca798c8400840f04b3b19c07754ad7dfe'
actual="$(git rev-parse HEAD)"
base="$(gh pr view "$pr" --repo "$repo" --json baseRefOid --jq .baseRefOid)"

printf '%s\n' "--- exact head ---"
printf 'HEAD=%s\nEXPECTED=%s\nBASE=%s\n' "$actual" "$expected" "$base"
test "$actual" = "$expected"

printf '%s\n' "--- complete PR diff ---"
git diff --no-ext-diff --find-renames=0 "$base" "$expected" -- \
  .jules/bolt.md \
  CHANGELOG.md \
  docs/changelog.d/mmle-fallback-eap-matmul.md \
  docs/doctoring/mmle-fallback-eap-matmul.md \
  python/fast_mlsirm/estimators/mmle.py \
  tests/test_mmle_fallback_eap_matmul.py

printf '%s\n' "--- changed source and test ---"
cat -n python/fast_mlsirm/estimators/mmle.py
cat -n tests/test_mmle_fallback_eap_matmul.py

printf '%s\n' "--- production MMLE dispatch ---"
fd -t f '^fit\.py$' python -x sed -n '180,270p' {} \; | cat -n

printf '%s\n' "--- exact-head PR checks and reviews ---"
gh pr view "$pr" --repo "$repo" \
  --json headRefOid,reviewDecision,reviews,statusCheckRollup \
  --jq '{
    headRefOid,
    reviewDecision,
    reviews: [.reviews[] | {author: .author.login, state, commit: .commit.oid, submittedAt}],
    checks: [.statusCheckRollup[] | {name, status, conclusion, detailsUrl}]
  }'

printf '%s\n' "--- unresolved review threads ---"
gh api graphql -f owner='ContextualWisdomLab' -f name='fast-mlsirm' -F number="$pr" -f query='
query($owner:String!, $name:String!, $number:Int!) {
  repository(owner:$owner,name:$name) {
    pullRequest(number:$number) {
      reviewThreads(first:100) {
        nodes {
          isResolved
          isOutdated
          comments(first:20) {
            nodes { author { login } commit { oid } path line originalLine body }
          }
        }
      }
    }
  }
}' --jq '
  .data.repository.pullRequest.reviewThreads.nodes[]
  | select(.isResolved == false)
  | {isOutdated, comments: [.comments.nodes[] | {author:.author.login, commit:.commit.oid, path, line, originalLine, body}]}'

Length of output: 38103


@seonghobae I found no actionable findings on exact head 12fc519ca798c8400840f04b3b19c07754ad7dfe.

I verified these conditions:

  • The NumPy fallback uses theta = posterior @ nodes.
  • The parity fixture independently reconstructs the missing-data posterior and compares against the former weighted-sum equation at rtol=1e-13 and atol=1e-13.
  • The fixture requires status == "max_iter_reached" and n_iter == 1.
  • The source-level test prevents restoration of posterior * nodes[None, :].
  • The Rust fast_mlsirm._core.fit_mmle_2pl path remains primary. The NumPy implementation remains the fallback.
  • The doctoring records the allocation and performance boundaries. It does not claim a universal speedup. The references and changelog are present.
  • Current-head Python, Rust, GPU, package, fuzz, Semgrep, security, and Strix checks succeeded.
  • No unresolved review thread is present.

Approval requires a separate top-level @coderabbitai approve command.

You are interacting with an AI system.

Copy link
Copy Markdown
Contributor Author

The current OpenCode CHANGES_REQUESTED review is retained as a merge blocker. The central source-only coverage sandbox cannot import the compiled maturin/PyO3 module fast_mlsirm._core; it did not establish that this EAP projection change is wrong. Exact-head repository CI, Rust/PyO3, package, GPU-no-skip, fuzz, SAST, and Security Scan evidence remains successful but is not substituted for the required central decision.

ContextualWisdomLab/.github#784 tracks the fail-closed workflow repair, and draft central PR #789 provides the bounded failure classifier plus exact-head native peer-check verifier at 100% focused statement/branch coverage. No test is skipped and no branch protection is bypassed. Auto-merge remains enabled but cannot act until the central workflow integration and a fresh exact-head independent approval succeed.

@seonghobae
seonghobae enabled auto-merge (squash) August 6, 2026 06:34
@seonghobae
seonghobae dismissed opencode-agent[bot]’s stale review August 6, 2026 07:04

Dismissed because it is anchored to predecessor head 12fc519. Current head fe48aef removes only transient agent-journal drift, has fresh successful repository CI/SAST/Security and CodeRabbit status, and still requires a new exact-head OpenCode/Noema verdict plus independent approval before merge.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@cwl-noema-review Review exact current head fe48aef717cae331ffb6c567931ce646f6de1774. The only delta from the previously reviewed implementation head is removal of transient .jules/bolt.md journal drift. Repository CI 31077507993, SAST Semgrep 31077507917, and Security Scan 31077507913 are successful on this exact head, CodeRabbit combined status is successful, and no unresolved thread exists. Revalidate the independent missing-data EAP reconstruction, one-iteration status, allocation-bounded posterior @ nodes fallback, Rust-primary production boundary, calibrated performance wording, APA 7 doctoring, and authoritative changelog. Do not mutate the branch or merge; exact-head OpenCode review will be rerun after the central PyO3 native peer-evidence gate is integrated.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/fast-mlsirm'
pr='549'
expected='fe48aef717cae331ffb6c567931ce646f6de1774'
actual="$(git rev-parse HEAD)"
base="$(gh pr view "$pr" --repo "$repo" --json baseRefOid --jq '.baseRefOid')"

printf '%s\n' '--- exact head ---'
printf 'HEAD=%s\nEXPECTED=%s\nBASE=%s\n' "$actual" "$expected" "$base"
test "$actual" = "$expected"

printf '%s\n' '--- complete PR file list and diff stat ---'
gh pr view "$pr" --repo "$repo" --json files \
  --jq '.files[] | "\(.path) +\(.additions) -\(.deletions)"'
git diff --no-ext-diff --find-renames=0 --stat "$base" "$expected" --

printf '%s\n' '--- complete PR diff ---'
git diff --no-ext-diff --find-renames=0 "$base" "$expected" --

printf '%s\n' '--- source and test outlines ---'
ast-grep outline python/fast_mlsirm/estimators/mmle.py --items all --view expanded
ast-grep outline tests/test_mmle_fallback_eap_matmul.py --items all --view expanded

printf '%s\n' '--- EAP source and parity test ---'
sed -n '1,320p' python/fast_mlsirm/estimators/mmle.py | cat -n
sed -n '1,360p' tests/test_mmle_fallback_eap_matmul.py | cat -n

printf '%s\n' '--- production MMLE dispatch ---'
fd -t f '^fit\.py$' python -x sed -n '180,280p' {} \; | cat -n

printf '%s\n' '--- changed documentation ---'
for file in CHANGELOG.md docs/changelog.d/mmle-fallback-eap-matmul.md docs/doctoring/mmle-fallback-eap-matmul.md; do
  printf '\n### %s\n' "$file"
  cat -n "$file"
done

printf '%s\n' '--- EAP pattern checks ---'
rg -n -C 3 --glob '*.py' \
  'posterior\s*@\s*nodes|posterior\s*\*\s*nodes|fit_mmle_2pl|_fit_mmle_2pl' \
  python tests

printf '%s\n' '--- exact-head checks and reviews ---'
gh pr view "$pr" --repo "$repo" \
  --json headRefOid,reviewDecision,reviews,statusCheckRollup \
  --jq '{
    headRefOid,
    reviewDecision,
    reviews: [.reviews[] | {author: .author.login, state, commit: .commit.oid, submittedAt}],
    checks: [.statusCheckRollup[] | {name, status, conclusion, detailsUrl}]
  }'

printf '%s\n' '--- unresolved review threads ---'
gh api graphql -f owner='ContextualWisdomLab' -f name='fast-mlsirm' -F number="$pr" -f query='
query($owner:String!, $name:String!, $number:Int!) {
  repository(owner:$owner,name:$name) {
    pullRequest(number:$number) {
      reviewThreads(first:100) {
        nodes {
          isResolved
          isOutdated
          comments(first:20) {
            nodes { author { login } commit { oid } path line originalLine body }
          }
        }
      }
    }
  }
}' --jq '
  .data.repository.pullRequest.reviewThreads.nodes[]
  | select(.isResolved == false)
  | {isOutdated, comments: [.comments.nodes[] | {author:.author.login, commit:.commit.oid, path, line, originalLine, body}]}'

Length of output: 202733


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/fast-mlsirm'
prior='12fc519ca798c8400840f04b3b19c07754ad7dfe'
current='fe48aef717cae331ffb6c567931ce646f6de1774'

printf '%s\n' '--- delta from prior reviewed head ---'
git diff --no-ext-diff --find-renames=0 --name-status "$prior" "$current"
git diff --no-ext-diff --find-renames=0 "$prior" "$current" --

printf '%s\n' '--- focused parity fixture ---'
sed -n '1,130p' tests/test_mmle_fallback_eap_matmul.py | cat -n

printf '%s\n' '--- focused fallback EAP implementation ---'
sed -n '150,205p' python/fast_mlsirm/estimators/mmle.py | cat -n

printf '%s\n' '--- named workflow run SHA bindings ---'
for run in 31077507993 31077507917 31077507913; do
  gh run view "$run" --repo "$repo" \
    --json databaseId,headSha,name,status,conclusion,event,workflowName \
    --jq '{databaseId, headSha, workflowName, name, event, status, conclusion}'
done

printf '%s\n' '--- current exact-head checks with successful conclusions ---'
gh pr view 549 --repo "$repo" --json headRefOid,statusCheckRollup --jq \
  '{headRefOid, successful: [.statusCheckRollup[] | select(.conclusion == "SUCCESS") | .name]}'

printf '%s\n' '--- current-head open review threads ---'
gh api graphql -f owner='ContextualWisdomLab' -f name='fast-mlsirm' -F number=549 -f query='
query($owner:String!, $name:String!, $number:Int!) {
  repository(owner:$owner,name:$name) {
    pullRequest(number:$number) {
      reviewThreads(first:100) {
        nodes {
          isResolved
          comments(first:20) { nodes { commit { oid } } }
        }
      }
    }
  }
}' --jq --arg current "$current" \
  '[.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false)] | length'

Length of output: 9038


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/fast-mlsirm'
current='fe48aef717cae331ffb6c567931ce646f6de1774'

printf '%s\n' '--- exact workflow-run bindings ---'
for run in 31077507993 31077507917 31077507913; do
  gh api "repos/$repo/actions/runs/$run" --jq \
    '{id, name, display_title, event, head_sha, status, conclusion, html_url}'
done

printf '%s\n' '--- unresolved review-thread count ---'
gh api graphql -f owner='ContextualWisdomLab' -f name='fast-mlsirm' -F number=549 -f query='
query($owner:String!, $name:String!, $number:Int!) {
  repository(owner:$owner,name:$name) {
    pullRequest(number:$number) {
      reviewThreads(first:100) {
        nodes { isResolved isOutdated }
      }
    }
  }
}' --jq \
  '[.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false)] | length'

printf '%s\n' '--- exact current PR head ---'
gh pr view 549 --repo "$repo" --json headRefOid --jq '.headRefOid'

Length of output: 2164


@seonghobae I found no current-head actionable findings on fe48aef717cae331ffb6c567931ce646f6de1774.

I verified the requested scope:

  • The only delta from 12fc519ca798c8400840f04b3b19c07754ad7dfe removes transient .jules/bolt.md journal content.
  • The NumPy fallback uses theta = posterior @ nodes.
  • The parity fixture independently reconstructs the partially observed posterior. It computes the former weighted-sum equation. It requires status == "max_iter_reached" and n_iter == 1. It compares EAP values at rtol=atol=1e-13.
  • The source-level test prevents restoration of posterior * nodes[None, :].
  • fast_mlsirm._core.fit_mmle_2pl remains the primary path. The NumPy implementation remains the fallback.
  • The doctoring states the allocation boundary and avoids a universal speed claim. It includes the requested APA-style references and changelog material.
  • CI 31077507993, SAST Semgrep 31077507917, and Security Scan 31077507913 completed successfully on this exact SHA.
  • The PR has zero unresolved review threads.

I did not mutate the branch or merge the PR.

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

  • Head SHA: fe48aef717cae331ffb6c567931ce646f6de1774

  • Workflow run: 31080795209

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (2 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (2 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs (2 files)"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs (2 files)"]
  R2 --> V2["docs review"]
  Evidence --> S3["Test: test_mmle_fallback_eap_matmul.py"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test: test_mmle_fallback_eap_matmul.py"]
  R3 --> V3["targeted test run"]
Loading

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review Final independent exact-head review requested for fe48aef717cae331ffb6c567931ce646f6de1774. Repository CI 31077507993, SAST Semgrep 31077507917, and Security Scan 31077507913 are successful on this exact SHA; CodeRabbit's exact-head pass reports no new actionable finding; no unresolved thread exists. Verify the missing-data EAP reconstruction, one-iteration status, allocation-bounded posterior @ nodes fallback, Rust-primary production boundary, calibrated performance wording, APA 7 doctoring, authoritative changelog, and the sole current-head cleanup of transient agent-journal drift. Submit APPROVE only after live exact-head evidence is independently sufficient; stale, status-only, self-authored, prior-head, or prior-PR evidence is insufficient. Do not mutate or merge the branch.

@opencode-agent
opencode-agent Bot disabled auto-merge August 6, 2026 10:11

Copy link
Copy Markdown
Contributor Author

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

Re-run the independent review on exact head fe48aef717cae331ffb6c567931ce646f6de1774. CI 31077507993, SAST 31077507917, and Security Scan 31077507913 are successful; there are zero unresolved review threads. Re-evaluate coverage/docstring evidence with the current central workflow rather than the superseded failed evidence run. Confirm exact numerical equivalence of the EAP matrix-vector projection, preservation of the Rust production backend, allocation-bounded fallback behavior, APA 7 doctoring, and current-head release gates before submitting APPROVE.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/fast-mlsirm'
pr='549'
expected='fe48aef717cae331ffb6c567931ce646f6de1774'
actual="$(git rev-parse HEAD)"
base="$(gh pr view "$pr" --repo "$repo" --json baseRefOid --jq '.baseRefOid')"

printf '%s\n' '--- exact head ---'
printf 'HEAD=%s\nEXPECTED=%s\nBASE=%s\n' "$actual" "$expected" "$base"
test "$actual" = "$expected"

printf '%s\n' '--- complete PR file list and diff ---'
gh pr view "$pr" --repo "$repo" --json files --jq '.files[] | {path, additions, deletions}'
git diff --no-ext-diff --find-renames=0 "$base" "$expected" --

printf '%s\n' '--- changed Python file outlines ---'
ast-grep outline python/fast_mlsirm/estimators/mmle.py --items all --view expanded
ast-grep outline tests/test_mmle_fallback_eap_matmul.py --items all --view expanded

printf '%s\n' '--- fallback implementation and focused fixture ---'
sed -n '1,280p' python/fast_mlsirm/estimators/mmle.py | cat -n
sed -n '1,360p' tests/test_mmle_fallback_eap_matmul.py | cat -n

printf '%s\n' '--- production dispatch ---'
fd -t f '^fit\.py$' python -x sed -n '180,290p' {} \; | cat -n

printf '%s\n' '--- documentation and changelog ---'
for file in CHANGELOG.md docs/changelog.d/mmle-fallback-eap-matmul.md docs/doctoring/mmle-fallback-eap-matmul.md; do
  printf '\n### %s\n' "$file"
  cat -n "$file"
done

printf '%s\n' '--- EAP projection and dispatch references ---'
rg -n -C 4 --glob '*.py' \
  'posterior\s*@\s*nodes|posterior\s*\*\s*nodes|fit_mmle_2pl|_fit_mmle_2pl|fast_mlsirm\._core' \
  python tests

printf '%s\n' '--- named exact-head workflow runs ---'
for run in 31077507993 31077507917 31077507913; do
  gh api "repos/$repo/actions/runs/$run" --jq \
    '{id,workflow_id,name,display_title,event,head_sha,status,conclusion,html_url}'
done

printf '%s\n' '--- current PR checks and reviews ---'
gh pr view "$pr" --repo "$repo" --json headRefOid,reviewDecision,reviews,statusCheckRollup \
  --jq '{headRefOid,reviewDecision,reviews:[.reviews[]|{author:.author.login,state,commit:.commit.oid,submittedAt}],checks:[.statusCheckRollup[]|{name,status,conclusion,detailsUrl}]}'

printf '%s\n' '--- current workflow files mentioning coverage, PyO3, native, or central verification ---'
rg -n -i -C 3 'coverage|pyo3|native|central|peer.check|docstring' .github 2>/dev/null || true

printf '%s\n' '--- recent exact-head workflow runs ---'
gh api "repos/$repo/actions/runs?head_sha=$expected&per_page=100" --jq \
  '.workflow_runs[] | {id,name,display_title,event,status,conclusion,workflow_id,html_url}'

printf '%s\n' '--- unresolved review threads ---'
gh api graphql -f owner='ContextualWisdomLab' -f name='fast-mlsirm' -F number="$pr" -f query='
query($owner:String!, $name:String!, $number:Int!) {
  repository(owner:$owner,name:$name) {
    pullRequest(number:$number) {
      reviewThreads(first:100) {
        nodes {
          isResolved
          isOutdated
          comments(first:20) {
            nodes { author { login } commit { oid } path line originalLine body }
          }
        }
      }
    }
  }
}' --jq '[.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false)]'

Length of output: 203207


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/fast-mlsirm'
pr='549'
head='fe48aef717cae331ffb6c567931ce646f6de1774'
run='31077507156'

printf '%s\n' '--- focused PR diff ---'
base="$(gh pr view "$pr" --repo "$repo" --json baseRefOid --jq '.baseRefOid')"
git diff --no-ext-diff --find-renames=0 "$base" "$head" -- \
  CHANGELOG.md \
  docs/changelog.d/mmle-fallback-eap-matmul.md \
  docs/doctoring/mmle-fallback-eap-matmul.md \
  python/fast_mlsirm/estimators/mmle.py \
  tests/test_mmle_fallback_eap_matmul.py

printf '%s\n' '--- current-head review comments ---'
gh api "repos/$repo/pulls/$pr/reviews" --jq \
  '.[] | select(.commit_id == "'"$head"'") | {id,user:.user.login,state,submitted_at,body}'

printf '%s\n' '--- review comments attached to current head ---'
gh api "repos/$repo/pulls/$pr/comments?per_page=100" --jq \
  '.[] | select(.commit_id == "'"$head"'") | {user:.user.login,path,line,created_at,body}'

printf '%s\n' '--- required OpenCode workflow jobs ---'
gh api "repos/$repo/actions/runs/$run/jobs?per_page=100" --jq \
  '.jobs[] | {id,name,status,conclusion,started_at,completed_at,html_url}'

printf '%s\n' '--- selected coverage and review job logs ---'
for job in 92538698234 92538724028 92538742016; do
  printf '\n### job=%s\n' "$job"
  gh api "repos/$repo/actions/jobs/$job/logs" 2>/dev/null \
    | rg -n -i -C 3 \
      'coverage|docstring|pyo3|native|peer|exact.head|head.sha|pass|fail|error|summary|100%' \
    || true
done

printf '%s\n' '--- workflow files that define the required evidence steps ---'
fd -t f . .github/workflows -x sh -c \
  'if rg -q -i "coverage-source-tree|coverage-evidence|opencode-review|native peer|docstring" "$1"; then echo "### $1"; rg -n -i -C 4 "coverage-source-tree|coverage-evidence|opencode-review|native peer|docstring" "$1"; fi' sh {}

printf '%s\n' '--- changed-file test and docstrings checks ---'
rg -n -C 3 --glob '*.py' \
  'def test_one_iteration_eap_matches_independent_weighted_sum_reference|def test_eap_projection_retains_the_allocation_bounded_matmul_path|"""' \
  tests/test_mmle_fallback_eap_matmul.py python/fast_mlsirm/estimators/mmle.py

Length of output: 18431


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/fast-mlsirm'
head='fe48aef717cae331ffb6c567931ce646f6de1774'

printf '%s\n' '--- cited workflow run metadata ---'
for run in 31080795209 31077507156; do
  printf '\n### run=%s\n' "$run"
  gh api "repos/$repo/actions/runs/$run" --jq \
    '{id,name,display_title,event,head_sha,head_branch,status,conclusion,run_attempt,created_at,updated_at,html_url}'
  gh api "repos/$repo/actions/runs/$run/jobs?per_page=100" --jq \
    '.jobs[] | {id,name,status,conclusion,started_at,completed_at,html_url}'
done

printf '%s\n' '--- exact-head workflow inventory ---'
gh api "repos/$repo/contents/.github/workflows?ref=$head" --jq \
  '.[] | {name,path,sha,type}'

printf '%s\n' '--- exact-head workflow definitions with evidence terms ---'
for path in $(gh api "repos/$repo/contents/.github/workflows?ref=$head" --jq -r '.[].path'); do
  content=$(gh api "repos/$repo/contents/$path?ref=$head" --jq -r '.content' | base64 -d)
  if printf '%s' "$content" | rg -q -i 'coverage-evidence|coverage-source-tree|opencode-review|docstring|native peer'; then
    printf '\n### %s\n' "$path"
    printf '%s' "$content" | rg -n -i -C 8 \
      'coverage-evidence|coverage-source-tree|opencode-review|docstring|native peer|coverage'
  fi
done

printf '%s\n' '--- run-level annotations and artifacts ---'
for run in 31080795209 31077507156; do
  printf '\n### run=%s artifacts\n' "$run"
  gh api "repos/$repo/actions/runs/$run/artifacts?per_page=100" --jq \
    '.artifacts[] | {id,name,size_in_bytes,expired,created_at}'
done

Length of output: 2078


🏁 Script executed:

#!/bin/bash
set -u -o pipefail

repo='ContextualWisdomLab/fast-mlsirm'
head='fe48aef717cae331ffb6c567931ce646f6de1774'
run='31077507156'
job='92538724028'

printf '%s\n' '--- accessible exact-head coverage job ---'
gh api "repos/$repo/actions/jobs/$job" --jq \
  '{id,name,run_id,status,conclusion,started_at,completed_at,steps,html_url}' || true

printf '%s\n' '--- exact-head workflow file inventory ---'
workflow_json="$(gh api "repos/$repo/contents/.github/workflows?ref=$head" 2>&1)" || {
  printf '%s\n' "$workflow_json"
  exit 0
}
printf '%s\n' "$workflow_json" | jq -r '.[] | "\(.path)\t\(.sha)"'

printf '%s\n' '--- workflows containing coverage evidence controls ---'
printf '%s\n' "$workflow_json" | jq -r '.[].path' | while IFS= read -r path; do
  content="$(gh api "repos/$repo/contents/$path?ref=$head" --jq -r '.content' 2>/dev/null | base64 -d)" || continue
  if printf '%s' "$content" | rg -q -i 'coverage-evidence|coverage-source-tree|opencode-review|docstring|native'; then
    printf '\n### %s\n' "$path"
    printf '%s' "$content" | rg -n -i -C 6 \
      'coverage-evidence|coverage-source-tree|opencode-review|docstring|native|pytest|coverage'
  fi
done

printf '%s\n' '--- exact-head required OpenCode workflow and artifact metadata ---'
gh api "repos/$repo/actions/runs/$run" --jq \
  '{id,head_sha,event,status,conclusion,workflow_id,run_attempt,created_at,updated_at}' || true
gh api "repos/$repo/actions/runs/$run/artifacts?per_page=100" --jq \
  '.artifacts[] | {id,name,size_in_bytes,expired,created_at}' || true

printf '%s\n' '--- exact-head review decision and unresolved threads ---'
gh pr view 549 --repo "$repo" --json headRefOid,reviewDecision --jq '{headRefOid,reviewDecision}' || true
gh api graphql -f owner='ContextualWisdomLab' -f name='fast-mlsirm' -F number=549 -f query='
query($owner:String!, $name:String!, $number:Int!) {
  repository(owner:$owner,name:$name) {
    pullRequest(number:$number) {
      reviewThreads(first:100) { nodes { isResolved } }
    }
  }
}' --jq '[.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false)] | length' || true

Length of output: 4204


@seonghobae I found one current-head release-gate blocker.

The implementation review found no defect in the EAP change. The fallback uses posterior @ nodes. The fixture independently reconstructs the missing-data posterior, checks the prior weighted-sum equation at rtol=atol=1e-13, and binds status == "max_iter_reached" with n_iter == 1. The Rust fast_mlsirm._core.fit_mmle_2pl path remains primary. The doctoring and changelog have calibrated allocation and performance wording.

However, the current exact-head coverage-evidence job is not coverage evidence. Job 92538724028 in run 31077507156 contains only this successful step:

This required-workflow job preserves the stable branch-protection context without executing pull-request content.

The job does not run tests, docstring checks, PyO3/native checks, or a peer-evidence verifier. Therefore, its successful status cannot establish the requested current-head coverage/docstring evidence. The PR also remains in CHANGES_REQUESTED.

I cannot approve until the central workflow runs the required checks against fe48aef717cae331ffb6c567931ce646f6de1774 and publishes verifiable successful evidence.

You are interacting with an AI system.

@seonghobae
seonghobae enabled auto-merge (squash) August 6, 2026 23:18

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@opencode-agent @cwl-noema-review Re-run independent review on exact head fe48aef717cae331ffb6c567931ce646f6de1774. Repository CI 31077507993, Security Scan 31077507913, and SAST Semgrep 31077507917 are successful; CodeRabbit is successful; and there are zero unresolved threads. The previous CHANGES_REQUESTED was solely a central coverage-evidence publication failure. Verify the committed one-iteration numerical equivalence regression, allocation-bounded source contract, authoritative changelog, APA 7 doctoring, and that production psychometric arithmetic remains Rust-owned. Submit a superseding approval only if exact-head coverage/docstring evidence now succeeds.

Copy link
Copy Markdown
Contributor Author

Exact-current-head review requested for fe48aef717cae331ffb6c567931ce646f6de1774. Repository CI, Security Scan, and SAST Semgrep are successful. Verify the NumPy path remains reference/fallback only, realistic missing-data EAP parity, allocation-bound source contract, Rust production ownership, APA 7 doctoring, and changelog parity. The prior OpenCode REQUEST_CHANGES was infrastructure coverage-evidence failure; reevaluate this exact head rather than reusing stale evidence.

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

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/fast-mlsirm'
pr='549'
expected='fe48aef717cae331ffb6c567931ce646f6de1774'
actual="$(git rev-parse HEAD)"
base="$(gh pr view "$pr" --repo "$repo" --json baseRefOid --jq '.baseRefOid')"

printf '%s\n' '--- exact head ---'
printf 'HEAD=%s\nEXPECTED=%s\nBASE=%s\n' "$actual" "$expected" "$base"
test "$actual" = "$expected"

printf '%s\n' '--- complete PR diff ---'
git diff --no-ext-diff --find-renames=0 "$base" "$expected" --

printf '%s\n' '--- changed implementation, tests, and documentation ---'
ast-grep outline python/fast_mlsirm/estimators/mmle.py --items all --view expanded
ast-grep outline tests/test_mmle_fallback_eap_matmul.py --items all --view expanded
sed -n '1,300p' python/fast_mlsirm/estimators/mmle.py | cat -n
sed -n '1,380p' tests/test_mmle_fallback_eap_matmul.py | cat -n
for file in CHANGELOG.md docs/changelog.d/mmle-fallback-eap-matmul.md docs/doctoring/mmle-fallback-eap-matmul.md; do
  printf '\n### %s\n' "$file"
  cat -n "$file"
done

printf '%s\n' '--- Rust-primary production dispatch ---'
fd -t f '^fit\.py$' python -x sed -n '180,300p' {} \; | cat -n

printf '%s\n' '--- current exact-head workflow inventory ---'
gh api "repos/$repo/actions/runs?head_sha=$expected&per_page=100" --jq \
  '.workflow_runs[] | {id,name,display_title,event,status,conclusion,workflow_id,run_attempt,created_at,updated_at,html_url}'

printf '%s\n' '--- current PR checks and review decision ---'
gh pr view "$pr" --repo "$repo" --json headRefOid,reviewDecision,statusCheckRollup,reviews --jq \
  '{headRefOid,reviewDecision,checks:[.statusCheckRollup[]|{name,status,conclusion,detailsUrl}],reviews:[.reviews[]|{author:.author.login,state,commit:.commit.oid,submittedAt}]}'

printf '%s\n' '--- jobs and relevant logs for exact-head central/review workflows ---'
gh api "repos/$repo/actions/runs?head_sha=$expected&per_page=100" --jq -r \
  '.workflow_runs[] | select((.name+" "+.display_title|ascii_downcase|test("opencode|coverage|review|evidence|central"))) | .id' \
| while IFS= read -r run; do
  printf '\n### run=%s metadata\n' "$run"
  gh api "repos/$repo/actions/runs/$run" --jq \
    '{id,name,display_title,head_sha,status,conclusion,workflow_id,run_attempt,html_url}'
  gh api "repos/$repo/actions/runs/$run/jobs?per_page=100" --jq \
    '.jobs[] | {id,name,status,conclusion,started_at,completed_at,html_url}'
  gh api "repos/$repo/actions/runs/$run/jobs?per_page=100" --jq -r \
    '.jobs[] | select((.name|ascii_downcase|test("coverage|docstring|native|pyo3|peer|evidence"))) | .id' \
  | while IFS= read -r job; do
      printf '\n#### job=%s\n' "$job"
      gh api "repos/$repo/actions/jobs/$job" --jq \
        '{id,name,run_id,status,conclusion,steps,html_url}'
      gh api "repos/$repo/actions/jobs/$job/logs" 2>/dev/null \
        | rg -n -i -C 4 'coverage|docstring|pyo3|native|peer|exact.head|head.sha|pytest|pass|fail|error|100%' \
        || true
    done
done

printf '%s\n' '--- unresolved review threads ---'
gh api graphql -f owner='ContextualWisdomLab' -f name='fast-mlsirm' -F number="$pr" -f query='
query($owner:String!, $name:String!, $number:Int!) {
  repository(owner:$owner,name:$name) {
    pullRequest(number:$number) {
      reviewThreads(first:100) { nodes { isResolved isOutdated } }
    }
  }
}' --jq '[.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false)] | length'

Length of output: 203582


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/fast-mlsirm'
head='fe48aef717cae331ffb6c567931ce646f6de1774'
run='31077507156'

printf '%s\n' '--- focused implementation and test diff ---'
base="$(gh pr view 549 --repo "$repo" --json baseRefOid --jq '.baseRefOid')"
git diff --no-ext-diff --find-renames=0 "$base" "$head" -- \
  python/fast_mlsirm/estimators/mmle.py \
  tests/test_mmle_fallback_eap_matmul.py \
  docs/changelog.d/mmle-fallback-eap-matmul.md \
  docs/doctoring/mmle-fallback-eap-matmul.md

printf '%s\n' '--- focused source and test regions ---'
sed -n '150,215p' python/fast_mlsirm/estimators/mmle.py | cat -n
sed -n '1,220p' tests/test_mmle_fallback_eap_matmul.py | cat -n

printf '%s\n' '--- exact-head central workflow metadata and artifacts ---'
gh api "repos/$repo/actions/runs/$run" --jq \
  '{id,name,head_sha,status,conclusion,workflow_id,run_attempt,created_at,updated_at,html_url}'
gh api "repos/$repo/actions/runs/$run/artifacts?per_page=100" --jq \
  '.artifacts[] | {id,name,size_in_bytes,expired,created_at}'

printf '%s\n' '--- exact job definitions and logs ---'
for job in 92538698234 92538724028 92538742016; do
  printf '\n### job=%s metadata\n' "$job"
  gh api "repos/$repo/actions/jobs/$job" --jq \
    '{id,name,run_id,status,conclusion,started_at,completed_at,steps,html_url}'
  printf '### job=%s log excerpts\n' "$job"
  gh api "repos/$repo/actions/jobs/$job/logs" 2>/dev/null \
    | rg -n -i -C 5 \
      'coverage|docstring|pyo3|native|peer|exact.head|head.sha|pytest|pass|fail|error|placeholder|preserves|without executing|summary|100%' \
    || true
done

printf '%s\n' '--- workflow definition at the reviewed SHA ---'
gh api "repos/$repo/actions/workflows/303795243?ref=$head" --jq \
  '{id,name,path,state}' || true
workflow_path="$(gh api "repos/$repo/actions/workflows/303795243" --jq -r '.path')"
printf 'PATH=%s\n' "$workflow_path"
gh api "repos/$repo/contents/$workflow_path?ref=$head" --jq -r '.content' \
  | base64 -d \
  | rg -n -i -C 8 'coverage-source-tree|coverage-evidence|docstring|native|pyo3|peer|opencode-review'

printf '%s\n' '--- all runs later than the original central run on this immutable SHA ---'
gh api "repos/$repo/actions/runs?head_sha=$head&per_page=100" --jq \
  '[.workflow_runs[] | {id,name,created_at,updated_at,status,conclusion}] | sort_by(.created_at)'

printf '%s\n' '--- unresolved thread count ---'
gh api graphql -f owner='ContextualWisdomLab' -f name='fast-mlsirm' -F number=549 -f query='
query($owner:String!, $name:String!, $number:Int!) {
  repository(owner:$owner,name:$name) {
    pullRequest(number:$number) {
      reviewThreads(first:100) { nodes { isResolved } }
    }
  }
}' --jq '[.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false)] | length'

Length of output: 18000


@seonghobae I found one current-head release-gate blocker.

The implementation has no actionable defect. The fallback uses theta = posterior @ nodes. The regression reconstructs the partially observed one-iteration posterior independently. It checks the former weighted-sum equation at rtol=atol=1e-13. It also requires status == "max_iter_reached" and n_iter == 1. The source contract prevents restoration of posterior * nodes[None, :].

The Rust primary boundary remains intact. python/fast_mlsirm/fit.py resolves fast_mlsirm._core.fit_mmle_2pl before the NumPy fallback. The changelog and doctoring describe the allocation boundary, limit the performance claim, and include the cited material.

However, the required central evidence has not changed on this exact head:

  • coverage-source-tree job 92538698234 only echoes that execution is delegated.
  • coverage-evidence job 92538724028 only runs: “This required-workflow job preserves the stable branch-protection context without executing pull-request content.”
  • opencode-review job 92538742016 only states that approval is a separate requirement.

These jobs do not execute or publish coverage, docstring, PyO3/native, or peer-evidence results for PR #549. Their successful status does not clear the prior blocker. The PR remains CHANGES_REQUESTED on fe48aef717cae331ffb6c567931ce646f6de1774.

I cannot submit approval until a fresh exact-head central workflow runs the required checks and publishes verifiable successful evidence.

You are interacting with an AI system.

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

  • Head SHA: fe48aef717cae331ffb6c567931ce646f6de1774

  • Workflow run: 31080795209

  • Workflow attempt: 2

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file (2 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (2 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs (2 files)"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs (2 files)"]
  R2 --> V2["docs review"]
  Evidence --> S3["Test: test_mmle_fallback_eap_matmul.py"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test: test_mmle_fallback_eap_matmul.py"]
  R3 --> V3["targeted test run"]
Loading

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review Re-run the independent exact-head review for fe48aef717cae331ffb6c567931ce646f6de1774 under the current central coverage contract. Repository CI, SAST Semgrep, and Security Scan are successful on this exact SHA, no unresolved review thread exists, and the prior CHANGES_REQUESTED verdict identified no implementation defect and was caused only by the then-failing central coverage-evidence job. Recompute current coverage evidence; verify Rust remains the default production path and the NumPy fallback matvec substitutions preserve behavior. Submit APPROVE only when all current-head gates are independently green. Do not mutate or merge the branch.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/fast-mlsirm'
pr='549'
expected='fe48aef717cae331ffb6c567931ce646f6de1774'
actual="$(git rev-parse HEAD)"
base="$(gh pr view "$pr" --repo "$repo" --json baseRefOid --jq '.baseRefOid')"

printf '%s\n' '--- exact head ---'
printf 'HEAD=%s\nEXPECTED=%s\nBASE=%s\n' "$actual" "$expected" "$base"
test "$actual" = "$expected"

printf '%s\n' '--- complete changed-file list and diff ---'
gh pr view "$pr" --repo "$repo" --json files --jq '.files[] | {path,additions,deletions}'
git diff --no-ext-diff --find-renames=0 "$base" "$expected" --

printf '%s\n' '--- implementation and regression-test outlines ---'
ast-grep outline python/fast_mlsirm/estimators/mmle.py --items all --view expanded
ast-grep outline tests/test_mmle_fallback_eap_matmul.py --items all --view expanded

printf '%s\n' '--- focused source, test, dispatch, and documentation ---'
sed -n '140,225p' python/fast_mlsirm/estimators/mmle.py | cat -n
sed -n '1,260p' tests/test_mmle_fallback_eap_matmul.py | cat -n
sed -n '180,290p' python/fast_mlsirm/fit.py | cat -n
for file in CHANGELOG.md docs/changelog.d/mmle-fallback-eap-matmul.md docs/doctoring/mmle-fallback-eap-matmul.md; do
  printf '\n### %s\n' "$file"
  cat -n "$file"
done

printf '%s\n' '--- current-head workflow runs and central evidence jobs ---'
gh api "repos/$repo/actions/runs?head_sha=$expected&per_page=100" --jq \
  '.workflow_runs[] | {id,name,display_title,event,status,conclusion,workflow_id,run_attempt,created_at,updated_at,html_url}'

gh api "repos/$repo/actions/runs?head_sha=$expected&per_page=100" --jq -r \
  '.workflow_runs[] | select((.name+" "+.display_title|ascii_downcase|test("opencode|coverage|review|evidence|central"))) | .id' \
| while IFS= read -r run; do
    printf '\n### run=%s\n' "$run"
    gh api "repos/$repo/actions/runs/$run/jobs?per_page=100" --jq \
      '.jobs[] | {id,name,status,conclusion,steps,html_url}'
  done

printf '%s\n' '--- current PR state and unresolved threads ---'
gh pr view "$pr" --repo "$repo" --json headRefOid,reviewDecision,statusCheckRollup,reviews --jq \
  '{headRefOid,reviewDecision,checks:[.statusCheckRollup[]|{name,status,conclusion}],reviews:[.reviews[]|{author:.author.login,state,commit:.commit.oid,submittedAt}]}'
gh api graphql -f owner='ContextualWisdomLab' -f name='fast-mlsirm' -F number="$pr" -f query='
query($owner:String!, $name:String!, $number:Int!) {
  repository(owner:$owner,name:$name) {
    pullRequest(number:$number) {
      reviewThreads(first:100) { nodes { isResolved isOutdated } }
    }
  }
}' --jq '[.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false)] | length'

Length of output: 202831


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/fast-mlsirm'
pr='549'
head='fe48aef717cae331ffb6c567931ce646f6de1774'
base="$(gh pr view "$pr" --repo "$repo" --json baseRefOid --jq '.baseRefOid')"

printf '%s\n' '--- exact head and focused diff ---'
git rev-parse HEAD
git diff --no-ext-diff --find-renames=0 "$base" "$head" -- \
  python/fast_mlsirm/estimators/mmle.py \
  tests/test_mmle_fallback_eap_matmul.py \
  docs/changelog.d/mmle-fallback-eap-matmul.md \
  docs/doctoring/mmle-fallback-eap-matmul.md

printf '%s\n' '--- fallback implementation ---'
sed -n '150,215p' python/fast_mlsirm/estimators/mmle.py | cat -n

printf '%s\n' '--- parity and allocation-contract test ---'
sed -n '1,240p' tests/test_mmle_fallback_eap_matmul.py | cat -n

printf '%s\n' '--- Rust-primary dispatch ---'
sed -n '190,275p' python/fast_mlsirm/fit.py | cat -n

printf '%s\n' '--- targeted changelog and doctoring ---'
cat -n docs/changelog.d/mmle-fallback-eap-matmul.md
cat -n docs/doctoring/mmle-fallback-eap-matmul.md

printf '%s\n' '--- central workflow jobs ---'
for job in 92538698234 92538724028 92538742016; do
  printf '\n### job=%s metadata\n' "$job"
  gh api "repos/$repo/actions/jobs/$job" --jq \
    '{id,name,run_id,status,conclusion,steps,html_url}'
  printf '### job=%s relevant log lines\n' "$job"
  gh api "repos/$repo/actions/jobs/$job/logs" 2>/dev/null | \
    rg -n -i -C 2 'coverage|docstring|pyo3|native|peer|pytest|placeholder|delegated|without executing|preserves|pass|fail|error' \
    || true
done

printf '%s\n' '--- PR review state and unresolved thread count ---'
gh pr view "$pr" --repo "$repo" --json headRefOid,reviewDecision --jq '{headRefOid,reviewDecision}'
gh api graphql -f owner='ContextualWisdomLab' -f name='fast-mlsirm' -F number="$pr" -f query='
query($owner:String!, $name:String!, $number:Int!) {
  repository(owner:$owner,name:$name) {
    pullRequest(number:$number) {
      reviewThreads(first:100) { nodes { isResolved } }
    }
  }
}' --jq '[.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false)] | length'

Length of output: 23535


@seonghobae I found one current-head release-gate blocker.

The implementation has no actionable defect.

  • The NumPy fallback uses theta = posterior @ nodes.
  • The regression test independently reconstructs the partially observed one-iteration posterior.
  • The regression test compares the public result with the former weighted-sum equation at rtol=atol=1e-13.
  • The regression test requires status == "max_iter_reached" and n_iter == 1.
  • The source-level test prevents restoration of posterior * nodes[None, :].
  • fast_mlsirm._core.fit_mmle_2pl remains the primary production path. The NumPy implementation remains the fallback.
  • The changelog and doctoring describe the allocation boundary and avoid a universal speed claim. The doctoring includes the requested references.
  • CI 31077507993, Security Scan 31077507913, and SAST Semgrep 31077507917 succeeded on this exact head.

However, the exact-head central evidence remains non-substantive:

  • coverage-source-tree job 92538698234 only states that execution is delegated.
  • coverage-evidence job 92538724028 only states that it preserves branch-protection context without executing pull-request content.
  • opencode-review job 92538742016 only states that approval occurs elsewhere.

These jobs do not run or publish coverage, docstring, PyO3/native, or peer-evidence results for this head. The PR remains CHANGES_REQUESTED, although it has zero unresolved threads.

I cannot approve until a fresh central workflow executes and publishes verifiable exact-head evidence.

You are interacting with an AI system.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review
@cwl-noema-review review

Please review exact current head fe48aef717cae331ffb6c567931ce646f6de1774. Repository CI, Security Scan, and SAST are successful; unresolved threads are zero. The prior OpenCode request-changes verdict reflects the central source-only coverage environment, not a product-code finding in this bounded NumPy fallback allocation change. Review only; no protection bypass or author approval.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/fast-mlsirm'
pr='549'
expected='fe48aef717cae331ffb6c567931ce646f6de1774'
actual="$(git rev-parse HEAD)"
base="$(gh pr view "$pr" --repo "$repo" --json baseRefOid --jq '.baseRefOid')"

printf '%s\n' '--- exact revision ---'
printf 'HEAD=%s\nEXPECTED=%s\nBASE=%s\n' "$actual" "$expected" "$base"
test "$actual" = "$expected"

printf '%s\n' '--- PR files and complete diff ---'
gh pr view "$pr" --repo "$repo" --json files --jq '.files[] | {path, additions, deletions}'
git diff --no-ext-diff --find-renames=0 "$base" "$expected" --

printf '%s\n' '--- changed Python outlines ---'
ast-grep outline python/fast_mlsirm/estimators/mmle.py --items all --view expanded
ast-grep outline tests/test_mmle_fallback_eap_matmul.py --items all --view expanded

printf '%s\n' '--- implementation, regression test, dispatch, and documentation ---'
sed -n '130,235p' python/fast_mlsirm/estimators/mmle.py | cat -n
sed -n '1,280p' tests/test_mmle_fallback_eap_matmul.py | cat -n
sed -n '180,300p' python/fast_mlsirm/fit.py | cat -n
for file in CHANGELOG.md docs/changelog.d/mmle-fallback-eap-matmul.md docs/doctoring/mmle-fallback-eap-matmul.md; do
  printf '\n### %s\n' "$file"
  cat -n "$file"
done

printf '%s\n' '--- projection and dispatch references ---'
rg -n -C 4 --glob '*.py' \
  'posterior\s*@\s*nodes|posterior\s*\*\s*nodes|fit_mmle_2pl|_fit_mmle_2pl|fast_mlsirm\._core' \
  python tests

printf '%s\n' '--- exact-head workflow runs ---'
gh api "repos/$repo/actions/runs?head_sha=$expected&per_page=100" --jq \
  '.workflow_runs[] | {id,name,display_title,event,status,conclusion,workflow_id,run_attempt,created_at,updated_at,html_url}'

printf '%s\n' '--- current PR state, checks, and reviews ---'
gh pr view "$pr" --repo "$repo" --json headRefOid,reviewDecision,statusCheckRollup,reviews --jq \
  '{headRefOid, reviewDecision, checks:[.statusCheckRollup[]|{name,status,conclusion,detailsUrl}], reviews:[.reviews[]|{author:.author.login,state,commit:.commit.oid,submittedAt}]}'

printf '%s\n' '--- central/evidence job metadata and relevant log excerpts ---'
gh api "repos/$repo/actions/runs?head_sha=$expected&per_page=100" --jq -r \
  '.workflow_runs[] | select((.name+" "+.display_title|ascii_downcase|test("opencode|coverage|review|evidence|central"))) | .id' \
| while IFS= read -r run; do
    printf '\n### run=%s\n' "$run"
    gh api "repos/$repo/actions/runs/$run/jobs?per_page=100" --jq \
      '.jobs[] | {id,name,status,conclusion,steps,html_url}'
    gh api "repos/$repo/actions/runs/$run/jobs?per_page=100" --jq -r \
      '.jobs[] | select((.name|ascii_downcase|test("coverage|docstring|native|pyo3|peer|evidence"))) | .id' \
    | while IFS= read -r job; do
        printf '\n#### job=%s\n' "$job"
        gh api "repos/$repo/actions/jobs/$job/logs" 2>/dev/null | \
          rg -n -i -C 3 'coverage|docstring|pyo3|native|peer|exact.head|head.sha|pytest|pass|fail|error|delegated|without executing|preserves' \
          || true
      done
  done

printf '%s\n' '--- unresolved review threads ---'
gh api graphql -f owner='ContextualWisdomLab' -f name='fast-mlsirm' -F number="$pr" -f query='
query($owner:String!, $name:String!, $number:Int!) {
  repository(owner:$owner,name:$name) {
    pullRequest(number:$number) {
      reviewThreads(first:100) {
        nodes { isResolved isOutdated }
      }
    }
  }
}' --jq '[.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false)] | length'

Length of output: 203711


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/fast-mlsirm'
pr='549'
head='fe48aef717cae331ffb6c567931ce646f6de1774'

printf '%s\n' '--- exact checked-out head ---'
git rev-parse HEAD

printf '%s\n' '--- focused changed source and test ---'
git diff --no-ext-diff --find-renames=0 "$(gh pr view "$pr" --repo "$repo" --json baseRefOid --jq .baseRefOid)" "$head" -- \
  python/fast_mlsirm/estimators/mmle.py \
  tests/test_mmle_fallback_eap_matmul.py \
  docs/changelog.d/mmle-fallback-eap-matmul.md \
  docs/doctoring/mmle-fallback-eap-matmul.md

printf '%s\n' '--- exact central-job records ---'
for job in 92538698234 92538724028 92538742016; do
  gh api "repos/$repo/actions/jobs/$job" --jq \
    '{id,name,run_id,status,conclusion,started_at,completed_at,steps,html_url}'
done

printf '%s\n' '--- exact central-job log evidence ---'
for job in 92538698234 92538724028 92538742016; do
  printf '\n### job=%s\n' "$job"
  gh api "repos/$repo/actions/jobs/$job/logs" 2>/dev/null | \
    rg -n -i -C 4 \
      'coverage|docstring|pyo3|native|peer|exact.head|head.sha|pytest|pass|fail|error|delegated|without executing|preserves|placeholder' \
    || true
done

printf '%s\n' '--- named run SHA bindings ---'
for run in 31077507993 31077507917 31077507913 31077507156; do
  gh api "repos/$repo/actions/runs/$run" --jq \
    '{id,name,head_sha,event,status,conclusion,run_attempt,html_url}'
done

printf '%s\n' '--- unresolved review threads ---'
gh api graphql -f owner='ContextualWisdomLab' -f name='fast-mlsirm' -F number="$pr" -f query='
query($owner:String!, $name:String!, $number:Int!) {
  repository(owner:$owner,name:$name) {
    pullRequest(number:$number) {
      reviewThreads(first:100) {
        nodes {
          isResolved
          isOutdated
          comments(first:20) {
            nodes { author { login } commit { oid } path line originalLine body }
          }
        }
      }
    }
  }
}' --jq '[.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false) | {isOutdated, comments:[.comments.nodes[]|{author:.author.login,commit:.commit.oid,path,line,originalLine,body}]}]'

Length of output: 13094


@seonghobae I found no product-code defect on exact head fe48aef717cae331ffb6c567931ce646f6de1774.

The NumPy fallback uses theta = posterior @ nodes.

The regression test independently reconstructs the partially observed posterior. It evaluates the former weighted-sum equation. It requires status == "max_iter_reached" and n_iter == 1. It also prevents restoration of posterior * nodes[None, :].

The Rust fast_mlsirm._core.fit_mmle_2pl path remains the first production path. The NumPy implementation remains the fallback.

The changelog and doctoring accurately describe the allocation boundary. The performance wording does not claim a universal speedup. The doctoring includes the requested references.

CI, SAST Semgrep, and Security Scan succeeded on this exact head. No unresolved review thread exists.

One release-gate finding remains. It is not a product-code finding. The central jobs coverage-source-tree, coverage-evidence, and opencode-review only run echo steps. They do not execute or publish coverage, docstring, PyO3/native, or peer-evidence results. Therefore, they cannot establish substantive central evidence. The PR remains CHANGES_REQUESTED.

I performed review only. I did not mutate, merge, approve, or bypass protection.

You are interacting with an AI system.

@opencode-agent
opencode-agent Bot disabled auto-merge August 7, 2026 00:20

Copy link
Copy Markdown
Contributor Author

@jules Refresh branch perf/mmle-eap-matmul onto current protected main after merges #550, #556, and #560, preserving only this PR's five-file EAP fallback slice. Resolve CHANGELOG.md by rendering authoritative fragments rather than choosing either side manually. Do not modify the Rust-primary/fallback boundary or widen scope. Run focused parity, changelog parity, then the full exact-head repository gates. Keep auto-merge enabled and request current-head review after the refresh.

Copy link
Copy Markdown
Contributor Author

@opencode-agent address

The product change is fully reviewed, but protected main advanced through PRs #546, #550, #556, and #560. Current head fe48aef717cae331ffb6c567931ce646f6de1774 is now four commits behind and GitHub reports the PR non-mergeable.

Update this same maintainer-owned branch onto current main without dropping or duplicating the one-line EAP matmul change, its independent parity/source regression, APA 7 doctoring, changelog fragment, or managed CHANGELOG.md entry. Resolve the changelog only through the repository's authoritative fragment renderer. Do not force-push or rewrite history; use a normal merge commit or equivalent reviewed descendant. Then rerun exact-head Python, Rust/PyO3, package, GPU no-skip, fuzz, Security Scan, SAST, current-head review, and independent approval. Keep auto-merge subordinate to branch protection.

Copy link
Copy Markdown
Contributor Author

@opencode-agent address

The product change is already bounded and repository CI/Security/SAST were green on predecessor head fe48aef717cae331ffb6c567931ce646f6de1774, but protected main has advanced and this PR is no longer mergeable. Merge current protected main into perf/mmle-eap-matmul-reviewed normally, resolve only genuine conflicts while preserving the one-line EAP matrix-vector change, focused equivalence/allocation regression, doctoring, and authoritative changelog parity. Rerun exact-head Python/Rust/PyO3/package/GPU-no-skip/fuzz/Security/SAST and request current-head CodeRabbit/OpenCode/Noema review. Do not rewrite history, expand scope, approve, merge, release, or weaken tests.

Copy link
Copy Markdown
Contributor Author

@jules Apply the non-destructive current-main update requested in comment 5210605867. Preserve the exact one-line posterior @ nodes change, its independent parity test, source regression, APA 7 doctoring, changelog fragment, and renderer-managed CHANGELOG.md. Use a normal descendant merge/rebase commit without force-push or branch rewrite, then run exact-head full gates. Do not create another PR or merge without protections.

Copy link
Copy Markdown
Contributor Author

Closing the stale/diverged predecessor. PR #568 recreates the same reviewed one-line MMLE EAP projection, parity/source regressions, APA 7 doctoring, and authoritative fragment directly from current protected main, avoiding a conflict-prone historical merge. Continue all exact-head validation and review on #568 only.

@seonghobae seonghobae closed this Aug 7, 2026

Copy link
Copy Markdown
Contributor Author

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

Re-evaluate the live exact current head under the repaired central coverage contract. Verify Rust remains the production path, the NumPy fallback matrix-vector EAP projection preserves the former weighted-sum result, allocation regression tests are meaningful, and no public contract changed. Submit a formal current-head verdict only; do not mutate or merge.

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/fast-mlsirm'

printf '%s\n' '--- candidate PR state ---'
for pr in 549 568; do
  printf '\n### PR #%s\n' "$pr"
  gh pr view "$pr" --repo "$repo" \
    --json number,state,isDraft,url,headRefName,headRefOid,baseRefName,baseRefOid,mergeStateStatus,reviewDecision \
    --jq '{number,state,isDraft,url,headRefName,headRefOid,baseRefName,baseRefOid,mergeStateStatus,reviewDecision}' \
    || true
done

printf '%s\n' '--- checked out revision ---'
git rev-parse HEAD
git status --short

printf '%s\n' '--- open PRs with relevant branches ---'
gh pr list --repo "$repo" --state open --limit 100 \
  --json number,title,url,headRefName,headRefOid,baseRefName \
  --jq '.[] | select(.headRefName | test("mmle|eap"; "i")) | {number,title,url,headRefName,headRefOid,baseRefName}'

Length of output: 2113


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/fast-mlsirm'
pr='568'
head='3669b3d5d4fe8443ce14e0c30f1fdeb30e47b4d4'

printf '%s\n' '--- exact PR state and changed files ---'
gh pr view "$pr" --repo "$repo" \
  --json headRefOid,baseRefOid,files,statusCheckRollup,reviews,reviewDecision \
  --jq '{
    headRefOid, baseRefOid, reviewDecision,
    files: [.files[] | {path,additions,deletions}],
    checks: [.statusCheckRollup[] | {name,status,conclusion,detailsUrl}],
    reviews: [.reviews[] | {author:.author.login,state,commit:.commit.oid,submittedAt}]
  }'

printf '%s\n' '--- complete pull request diff ---'
gh pr diff "$pr" --repo "$repo" --color=never

printf '%s\n' '--- exact-head changed source, test, dispatch, and documents ---'
for path in \
  python/fast_mlsirm/estimators/mmle.py \
  tests/test_mmle_fallback_eap_matmul.py \
  python/fast_mlsirm/fit.py \
  CHANGELOG.md \
  docs/changelog.d/mmle-fallback-eap-matmul.md \
  docs/doctoring/mmle-fallback-eap-matmul.md
do
  printf '\n### %s\n' "$path"
  gh api "repos/$repo/contents/$path?ref=$head" --jq -r '.content' 2>/dev/null \
    | base64 -d \
    | cat -n \
    || printf '%s\n' '[not present at exact head]'
done

printf '%s\n' '--- exact-head workflow runs ---'
gh api "repos/$repo/actions/runs?head_sha=$head&per_page=100" --jq \
  '.workflow_runs[] | {id,name,display_title,event,status,conclusion,workflow_id,run_attempt,created_at,updated_at,html_url}'

printf '%s\n' '--- central coverage, docstring, and native-evidence jobs ---'
gh api "repos/$repo/actions/runs?head_sha=$head&per_page=100" --jq -r \
  '.workflow_runs[] | select((.name+" "+.display_title|ascii_downcase|test("opencode|coverage|review|evidence|central"))) | .id' \
| while IFS= read -r run; do
    printf '\n### run=%s\n' "$run"
    gh api "repos/$repo/actions/runs/$run/jobs?per_page=100" --jq \
      '.jobs[] | {id,name,status,conclusion,steps,html_url}'
  done

printf '%s\n' '--- unresolved review threads ---'
gh api graphql -f owner='ContextualWisdomLab' -f name='fast-mlsirm' -F number="$pr" -f query='
query($owner:String!, $name:String!, $number:Int!) {
  repository(owner:$owner,name:$name) {
    pullRequest(number:$number) {
      reviewThreads(first:100) {
        nodes {
          isResolved
          isOutdated
          comments(first:20) {
            nodes { author { login } commit { oid } path line originalLine body }
          }
        }
      }
    }
  }
}' --jq '[.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false) | {isOutdated,comments:[.comments.nodes[]|{author:.author.login,commit:.commit.oid,path,line,originalLine,body}]}]'

Length of output: 21599


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/fast-mlsirm'
pr='568'
head='3669b3d5d4fe8443ce14e0c30f1fdeb30e47b4d4'
ci_run='31142733383'
python_job='92755810371'
central_run='31142731916'

printf '%s\n' '--- failed exact-head Python CI job ---'
gh api "repos/$repo/actions/jobs/$python_job" --jq \
  '{id,name,run_id,status,conclusion,started_at,completed_at,steps,html_url}'
gh api "repos/$repo/actions/jobs/$python_job/logs" 2>/dev/null | tail -n 500 || true

printf '%s\n' '--- exact-head CI workflow jobs ---'
gh api "repos/$repo/actions/runs/$ci_run/jobs?per_page=100" --jq \
  '.jobs[] | {id,name,status,conclusion,steps,html_url}'

printf '%s\n' '--- repaired central workflow jobs and evidence logs ---'
gh api "repos/$repo/actions/runs/$central_run/jobs?per_page=100" --jq \
  '.jobs[] | {id,name,status,conclusion,steps,html_url}'
for job in 92755828389 92755845137 92755862644; do
  printf '\n### central job=%s\n' "$job"
  gh api "repos/$repo/actions/jobs/$job" --jq \
    '{id,name,run_id,status,conclusion,steps,html_url}'
  gh api "repos/$repo/actions/jobs/$job/logs" 2>/dev/null | tail -n 500 || true
done

printf '%s\n' '--- exact-head production dispatch and public function signatures ---'
for path in python/fast_mlsirm/fit.py python/fast_mlsirm/estimators/mmle.py; do
  printf '\n### %s\n' "$path"
  curl -fsSL "https://raw.githubusercontent.com/$repo/$head/$path" \
    | rg -n -C 5 'def fit_mmle_2pl|_fit_mmle_2pl|fast_mlsirm\._core|fit_mmle_2pl\(' \
    || true
done

printf '%s\n' '--- unresolved review-thread count ---'
gh api graphql -f owner='ContextualWisdomLab' -f name='fast-mlsirm' -F number="$pr" -f query='
query($owner:String!, $name:String!, $number:Int!) {
  repository(owner:$owner,name:$name) {
    pullRequest(number:$number) {
      reviewThreads(first:100) { nodes { isResolved } }
    }
  }
}' --jq '[.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false)] | length'

Length of output: 22936


@seonghobae Formal verdict for #568 at exact head 3669b3d5d4fe8443ce14e0c30f1fdeb30e47b4d4: do not approve.

I found no product-code defect in the EAP projection change.

  • The NumPy fallback now uses theta = posterior @ nodes.
  • The regression independently reconstructs the partially observed posterior.
  • The regression compares the result with the former weighted-sum equation at rtol=atol=1e-13.
  • The regression requires status == "max_iter_reached" and n_iter == 1.
  • The source test prevents restoration of posterior * nodes[None, :].
  • The changed implementation does not alter public function signatures.
  • CI verified that the compiled Rust core is the resolved default backend.
  • No unresolved review thread exists.

Two exact-head release gates block approval:

  1. CI run 31142733383 failed. Its python job 92755810371 failed during Run pytest.
  2. The central coverage-source-tree, coverage-evidence, and opencode-review jobs only execute echo commands. They do not publish current-head coverage, docstring, PyO3/native, or peer-evidence results.

I performed review only. I did not modify, merge, 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.

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