Skip to content

Enforce multi-item IRT and improve local judge schema reliability - #816

Merged
seonghobae merged 173 commits into
mainfrom
codex/fast-judge-accepted-type-regression-adr2
Aug 16, 2026
Merged

Enforce multi-item IRT and improve local judge schema reliability#816
seonghobae merged 173 commits into
mainfrom
codex/fast-judge-accepted-type-regression-adr2

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Scope

This PR hardens fast-mlsirm's provider-neutral LLM-as-a-Judge and public IRT response contract:

  • enforce multi-item dichotomous and polytomous response/readiness validation;
  • keep every Judge call injected through contextual-orchestrator;
  • reject keyword matching, positional inference, category padding, silent repair, and scalar-to-matrix substitution;
  • preserve strict duplicate-free JSON parsing and bounded failure evidence;
  • record option-count/order perturbation calibration and conservative paper/OA-PDF provenance; and
  • keep Python validation separate from Rust-owned production psychometric arithmetic.

Exact current identity

  • Protected main: fb67ced09d8ee00542c05d56374537a9a7239751.
  • Exact live branch head: f3249f613ad6a87e261dc2938ee1af2552bb67ca.
  • Changed files: 32.
  • Branch is 149 commits ahead of protected main.
  • Current state at latest re-fetch: Draft, MERGEABLE but BLOCKED, auto-merge disabled, aggregate review REVIEW_REQUIRED.
  • No qualifying independent non-author approval is bound to this exact head; current inline review threads are resolved.

Every review, status, approval, or check anchored to another head is historical only.

Implemented controls

  • Contextual-orchestrator-only Judge construction with the versioned contract marker.
  • Exact bounded JSON schemas, duplicate-key rejection, model-output failure translation, and provider/exception redaction from calibration evidence.
  • At least two criterion items for IRT projection; each row retains validated dichotomous or polytomous categories.
  • Explicit cumulative-threshold and binary-threshold methods with monotonicity checks, bounded call counts, deterministic traces, category anchors, and failure-denominator retention.
  • Missing-response normalization and shared readiness semantics for NaN, -1, and masks.
  • Rust GPCM category bounds and response-range enforcement.
  • ADR-0015 paper basis for package-owned conservative readiness controls; no universal guarantee is inferred from those thresholds.
  • Zotero/OA provenance with permissible PDFs attached in docs/papers/ and citation-only records where redistribution was not established.
  • No direct provider fallback: an arbitrary transport cannot satisfy the contextual-orchestrator Judge contract.

Current evidence

  • Fast local full suite: 3717 passed with 2 existing NumPy warnings; no fast source change is hidden by this documentation head.
  • The live local Judge smoke used ContextualOrchestratorJudge -> _FastMLSIJudgeAdapter -> TaskOrchestrator -> ModelClient -> mlx-lm, with a Gemma 4 e4b worker, strict binary boundaries, two criteria, and an IRT row [2,2]. This is transport/shape evidence only, not semantic quality or unbiasedness evidence.
  • Historical required hosted runs for predecessor head 2d456b1 were queued at publication, including CI 31800704581, dynamic CodeQL 31800701211, Strix 31800702566, package/Rust/Python/fuzz/GPU jobs, security fan-out 31800704465, Semgrep 31800704450, and required bootstrap/Noema/queue jobs. Queued or pending is not passing evidence.
  • The prior fast Strix run 31797316247 / artifact 9219034211 ended success but had no evidence-binding.json; nested run.json had null repository/head/commit/report metadata. Preserve it as provider/content evidence only, not as a clean security gate.
  • Central .github PR fix(model-comparison): replay casewise trust boundary on current review workflow #1009 is Ready at 2833d8a1c2f2cbb02387a2af752db51298cc64c4, but remains BLOCKED with aggregate REVIEW_REQUIRED, queued hosted checks, and no qualifying independent current-head approval. Its aggregate-review scheduler gate and structured Strix artifact-hold fix still require normal protected integration; structured same-head evidence must be regenerated after protected-main integration.

Remaining protected gates

  1. Require every exact-head hosted check to terminate successfully.
  2. Require structured same-head Strix repository/head/run/job/report/digest binding.
  3. Obtain a qualifying independent non-author approval on this exact head.
  4. Keep zero unresolved current threads and re-fetch aggregate review state.
  5. Re-fetch the exact head, effective protection/ruleset, required contexts, approvals, auto-merge state, and linked contextual-orchestrator contract immediately before normal protected Merge.

No predecessor, bot-comment, CodeRabbit pass, local-only suite, unbound artifact, status-only result, self-approval, Admin bypass, keyword match, positional repair, or silent drop is Merge authority.

Fresh routed recheck — 2026-08-15

  • Exact source pair: fast-mlsirm f3249f6; contextual-orchestrator 2e36f9ba773f8eae29bf8e4320905726650c1621.
  • Warm transport widths 1, 2, 4, 5: the authenticated gateway returned HTTP 200 for 1, 2, 4, and 4/5 HTTP 200 plus explicit concurrency_limit_exceeded HTTP 503 at width 5; direct MLX returned 5/5 HTTP 200 by queueing the fifth request.
  • Three two-criterion K=3 probes through the required contextual route preserved strict binary/direct/cumulative boundaries; cumulative non-monotonicity failed closed. No keyword, positional, retry, repair, or silent drop path was used.
  • Zotero Local API PUT/DELETE returned 501; relevant existing OA child PDFs were verified, response-category PDF retrieval remains blocked/citation-only, and exact accidental audit notes were deleted and sync-verified.

Latest exact-head update — 2026-08-15

  • Documentation head f3249f613ad6a87e261dc2938ee1af2552bb67ca records the terminal Strix run 31819951865/job 94830599923: zero reported vulnerabilities, but artifact 9227098928 is unbound and its scan workspace reported tracked package files as missing.
  • The source layout was verified locally; no duplicate files were added. The result remains provider/content evidence only until structured repository/head/run/job/report/digest binding is present.
  • The hosted checks for this documentation head are now terminal with no failure conclusions. Strix run 31821797049 reported 0 findings, but its artifact lacks repository/head/job binding; keep that as provider/content evidence only. This Draft PR remains BLOCKED/REVIEW_REQUIRED until structured same-head provenance, an independent approval, resolved threads, and the final rules/refetch audit pass.

Terminal exact-head audit — 2026-08-15

  • Exact head f3249f6 has 34 terminal check-runs, with no failure conclusions; skipped entries remain non-approval evidence.
  • Strix run 31821797049 / job 94836547548 succeeded with 0 vulnerabilities and did not reproduce the package-file finding; artifact 9228610358 is digest-verified but lacks structured repository/head/job binding.
  • Rules still require one approval, last-push approval, resolved threads, and normal protected Merge. No qualifying non-author approval exists.

Seongho Bae and others added 30 commits August 12, 2026 05:30
…egression' into codex/fast-judge-accepted-type-regression
…770)

* test(jmle): add optimizer-mode recovery evidence

* docs(doctoring): define JMLE optimizer recovery evidence

* test(jmle): identify recovery scale before error gates

* docs(jmle): document affine recovery identification

* test(jmle): avoid quasi-separated recovery fixture

* test(jmle): eliminate person-separation confound in recovery fixture

* fix(jmle): recognize accepted L-BFGS objective convergence
…pted-type-regression-rebased

# Conflicts:
#	docs/documentation_coverage.md
#	tests/test_architecture_documentation_contract.py
#	tests/test_cov_c_fitstats.py
#	tests/test_documentation_coverage_fitness.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 d661b97ac99cf784b8d62db65ee1f435da6e0f9d.

  • Head SHA: d661b97ac99cf784b8d62db65ee1f435da6e0f9d

  • Workflow run: 31861353078

  • 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 (17 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (17 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs (7 files)"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs (7 files)"]
  R2 --> V2["docs review"]
  Evidence --> S3["Test (12 files)"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test (12 files)"]
  R3 --> V3["targeted test run"]
Loading

@opencode-agent

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: d661b97ac99cf784b8d62db65ee1f435da6e0f9d
  • Workflow run: 31861353078
  • 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 d661b97ac99cf784b8d62db65ee1f435da6e0f9d.

  • Head SHA: d661b97ac99cf784b8d62db65ee1f435da6e0f9d

  • Workflow run: 31861353078

  • 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 (17 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (17 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs (7 files)"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs (7 files)"]
  R2 --> V2["docs review"]
  Evidence --> S3["Test (12 files)"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test (12 files)"]
  R3 --> V3["targeted test run"]
Loading

@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 2ef29e72f6aeede8961cde31001429156f825365.

  • Head SHA: 2ef29e72f6aeede8961cde31001429156f825365

  • Workflow run: 31863493124

  • 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 (18 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (18 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs (7 files)"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs (7 files)"]
  R2 --> V2["docs review"]
  Evidence --> S3["Test (13 files)"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test (13 files)"]
  R3 --> V3["targeted test run"]
Loading

@opencode-agent

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: 2ef29e72f6aeede8961cde31001429156f825365
  • Workflow run: 31863493124
  • 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 2ef29e72f6aeede8961cde31001429156f825365.

  • Head SHA: 2ef29e72f6aeede8961cde31001429156f825365

  • Workflow run: 31863493124

  • 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 (18 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (18 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs (7 files)"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs (7 files)"]
  R2 --> V2["docs review"]
  Evidence --> S3["Test (13 files)"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test (13 files)"]
  R3 --> V3["targeted test run"]
Loading

@seonghobae
seonghobae enabled auto-merge (squash) August 15, 2026 05:26

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

  • Head SHA: e750a44181ebd079d72f90d8f698a0361a2e25e7

  • Workflow run: 31867996825

  • 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 (18 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (18 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs (7 files)"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs (7 files)"]
  R2 --> V2["docs review"]
  Evidence --> S3["Test (13 files)"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test (13 files)"]
  R3 --> V3["targeted test run"]
Loading

@opencode-agent

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: e750a44181ebd079d72f90d8f698a0361a2e25e7
  • Workflow run: 31867996825
  • 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 e750a44181ebd079d72f90d8f698a0361a2e25e7.

  • Head SHA: e750a44181ebd079d72f90d8f698a0361a2e25e7

  • Workflow run: 31867996825

  • 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 (18 files)"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file (18 files)"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs (7 files)"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs (7 files)"]
  R2 --> V2["docs review"]
  Evidence --> S3["Test (13 files)"]
  S3 --> I3["regression suite"]
  I3 --> R3["Review risk: Test (13 files)"]
  R3 --> V3["targeted test run"]
Loading

@cursor

cursor Bot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@seonghobae
seonghobae dismissed stale reviews from opencode-agent[bot], opencode-agent[bot], opencode-agent[bot], opencode-agent[bot], and opencode-agent[bot] August 16, 2026 13:41

Admin green-wave: product CI SUCCESS; dismiss bot request.

@seonghobae
seonghobae merged commit 0bc145a into main Aug 16, 2026
35 checks passed
@seonghobae
seonghobae deleted the codex/fast-judge-accepted-type-regression-adr2 branch August 16, 2026 18:58
@github-project-automation github-project-automation Bot moved this from In Progress to Done in naruon Platform Roadmap Aug 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant