Skip to content

test(essay): add governed facets synthetic recovery evidence - #797

Merged
seonghobae merged 9 commits into
mainfrom
fix/essay-facets-recovery-green
Aug 13, 2026
Merged

test(essay): add governed facets synthetic recovery evidence#797
seonghobae merged 9 commits into
mainfrom
fix/essay-facets-recovery-green

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Supersedes draft #782. Local synthetic recovery test green. Merge when product gates pass.

Summary by CodeRabbit

  • Documentation

    • Added detailed documentation for deterministic essay-facets synthetic recovery studies, including model scope, alignment rules, metrics, acceptance bounds, and limitations.
    • Added a changelog entry for governed synthetic recovery coverage.
  • Tests

    • Added coverage verifying convergence, connectivity, parameter accuracy, and correct recovery ordering for essay many-facet scoring scenarios.

@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: c3bdb34b-19a8-4170-a110-858264a85494

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The pull request adds a deterministic synthetic essay many-facet recovery test. It generates governed scored records, calibrates injected respondent, task, and rater effects, checks recovery criteria, and documents the study scope and limitations.

Changes

Essay facets synthetic recovery

Layer / File(s) Summary
Synthetic model and fixture
docs/doctoring/essay-facets-synthetic-recovery.md, tests/test_scoring_essay_facets_synthetic_recovery.py
The test defines the MFRM/RSM rating process and generates deterministic, fully crossed essay records with injected facet parameters.
Governed calibration and recovery checks
tests/test_scoring_essay_facets_synthetic_recovery.py, docs/doctoring/essay-facets-synthetic-recovery.md, docs/changelog.d/782-essay-facets-synthetic-recovery.md
The calibration test checks convergence, connectivity, error bounds, and parameter ordering. The documentation records alignment rules, metrics, limits, references, and non-claims. The changelog records the added coverage.

Estimated code review effort: 3 (Moderate) | ~25 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the addition of governed synthetic recovery evidence for essay facets.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/essay-facets-recovery-green

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 changed the base branch from main to fix/fitstats-m2-infit-docs-green August 12, 2026 07:16
@seonghobae
seonghobae marked this pull request as draft August 12, 2026 07:20
@seonghobae
seonghobae marked this pull request as ready for review August 12, 2026 08:14
Base automatically changed from fix/fitstats-m2-infit-docs-green to main August 12, 2026 08:14
@seonghobae
seonghobae force-pushed the fix/essay-facets-recovery-green branch from 39ea756 to dbe0c2f Compare August 12, 2026 10:03

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

  • Head SHA: dbe0c2f1eedb0e1a6d6fc6aeeade963de2e66c37

  • Workflow run: 31586438057

  • 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: CHANGELOG.md"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file: CHANGELOG.md"]
  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_scoring_essay_facets_synthetic_recovery.py"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test: test_scoring_essay_facets_synthetic_recovery.py"]
  R3 --> V3["targeted test run"]
Loading

@opencode-agent

opencode-agent Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: e9e224836c0966f12bc8ec982aa3efdb5d3aaaa9
  • Workflow run: 31626639854
  • Workflow attempt: 1
  • Gate result: REQUEST_CHANGES (approval step)

Pull request overview

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

Review outcome

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

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

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

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

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

  • Result: REQUEST_CHANGES

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

  • Head SHA: e9e224836c0966f12bc8ec982aa3efdb5d3aaaa9

  • Workflow run: 31626639854

  • 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["Docs (2 files)"]
  S1 --> I1["operator or user guidance"]
  I1 --> R1["Review risk: Docs (2 files)"]
  R1 --> V1["docs review"]
  Evidence --> S2["Test: test_scoring_essay_facets_synthetic_recovery.py"]
  S2 --> I2["regression suite"]
  I2 --> R2["Review risk: Test: test_scoring_essay_facets_synthetic_recovery.py"]
  R2 --> V2["targeted test run"]
Loading

@seonghobae
seonghobae enabled auto-merge (squash) August 12, 2026 11:05

Copy link
Copy Markdown
Contributor Author

@cwl-noema-review

Independent exact-head review requested for b1caa2ed0cc68a679ee237f693fbb2bafa7fe580 against current protected main 5231438df8e02bd71d88e692aaaa09a1d6c8cdc3.

Review the bounded essay-facets synthetic recovery evidence only. Verify that truth/estimate identification alignment, respondent/task/rater connectedness, severity and task-difficulty ordering, convergence/failure handling, deterministic seeds, conservative interpretation and Rust-backed production arithmetic are accurately tested without treating correlation or one synthetic scenario as validity, fairness or deployment readiness. Every exact-head check is complete and successful and there are no review threads. Read-only review; do not modify or merge.

Copy link
Copy Markdown
Contributor Author

@opencode-agent

Perform a read-only exact-head review of b1caa2ed0cc68a679ee237f693fbb2bafa7fe580 against protected main 5231438df8e02bd71d88e692aaaa09a1d6c8cdc3. The prior CHANGES_REQUESTED review targeted predecessor head dbe0c2f1eedb0e1a6d6fc6aeeade963de2e66c37; do not reuse it. Current exact-head coverage-evidence, OpenCode check, CI and security checks are successful and no inline threads exist. Review only the governed essay-facets synthetic recovery slice, without modifying or merging.

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

🧹 Nitpick comments (1)
tests/test_scoring_essay_facets_synthetic_recovery.py (1)

58-70: 🚀 Performance & Scalability | 🔵 Trivial | 💤 Low value

Remove the temporary squared-residual array.

The metric inputs are one-dimensional aligned vectors. Use the residual dot product for RMSE.

Proposed fix
-        float(np.sqrt(np.mean(np.square(residual)))),
+        float(np.sqrt(np.dot(residual, residual) / residual.size)),
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_scoring_essay_facets_synthetic_recovery.py` around lines 58 - 70,
Update the test helper _error_metrics to compute RMSE from the residual vector’s
dot product divided by its length, rather than creating a temporary
squared-residual array via np.square. Preserve the existing bias and MAE
calculations and returned metric order.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@tests/test_scoring_essay_facets_synthetic_recovery.py`:
- Around line 58-70: Update the test helper _error_metrics to compute RMSE from
the residual vector’s dot product divided by its length, rather than creating a
temporary squared-residual array via np.square. Preserve the existing bias and
MAE calculations and returned metric order.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: db3b48d9-2444-42e5-9e9c-1b4f4c764e24

📥 Commits

Reviewing files that changed from the base of the PR and between 7245b83 and ea182f8.

📒 Files selected for processing (3)
  • docs/changelog.d/782-essay-facets-synthetic-recovery.md
  • docs/doctoring/essay-facets-synthetic-recovery.md
  • tests/test_scoring_essay_facets_synthetic_recovery.py

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

  • Head SHA: e9e224836c0966f12bc8ec982aa3efdb5d3aaaa9

  • Workflow run: 31626639854

  • 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["Docs (2 files)"]
  S1 --> I1["operator or user guidance"]
  I1 --> R1["Review risk: Docs (2 files)"]
  R1 --> V1["docs review"]
  Evidence --> S2["Test: test_scoring_essay_facets_synthetic_recovery.py"]
  S2 --> I2["regression suite"]
  I2 --> R2["Review risk: Test: test_scoring_essay_facets_synthetic_recovery.py"]
  R2 --> V2["targeted test run"]
Loading

@opencode-agent
opencode-agent Bot disabled auto-merge August 12, 2026 19:27
@seonghobae
seonghobae dismissed stale reviews from opencode-agent[bot] and opencode-agent[bot] August 13, 2026 02:18

Superseded by later commits. This review is anchored to dbe0c2f; current exact head is f314b3e and its coverage-evidence/opencode-review checks now pass. This dismissal removes only stale review state; remaining current-head CI/review gates still apply.

@seonghobae
seonghobae enabled auto-merge (squash) August 13, 2026 03:25
@seonghobae
seonghobae merged commit a66ade1 into main Aug 13, 2026
35 checks passed
@seonghobae
seonghobae deleted the fix/essay-facets-recovery-green branch August 13, 2026 05:34
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