Skip to content

feat(rubric): govern post-pilot item-bank lifecycle - #611

Closed
seonghobae wants to merge 9 commits into
mainfrom
feat/governed-item-bank-lifecycle
Closed

feat(rubric): govern post-pilot item-bank lifecycle#611
seonghobae wants to merge 9 commits into
mainfrom
feat/governed-item-bank-lifecycle

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Buyer-visible gap

fast-mlsirm already has immutable rubrics, deterministic blueprints/generation contracts, hostile-output parsing, deterministic candidate audit and replay-verified pilot admission. This branch adds the governed post-pilot lifecycle boundary that prevents a generated or merely piloted item from being called calibrated, approved, active, suspended, reactivated or retired without exact evidence and immutable transition history.

Test-first implemented contract

The branch began from fail-first lifecycle tests and now implements the bounded fast_mlsirm.rubric.item_bank surface with immutable, factory-sealed lifecycle/evidence records and transition validation. The contract preserves:

  • exact verified PilotCandidateRecord provenance;
  • allowed transitions only: piloting → calibrated → approved → active, active → suspended → active, and active/suspended → retired;
  • calibration, fit, DIF, information, approval, drift, suspension and retirement evidence gates;
  • use-specific approval;
  • cumulative evidence and exact previous-record linkage;
  • evidence-order invariance and conflicting-ID rejection;
  • separation of policy criticality from psychometric discrimination;
  • direct-construction and stale post-construction mutation refusal;
  • exact package-owned child types;
  • terminal retirement; and
  • stable redacted failure surfaces without raw source/response/prompt/provider text.

Existing rubric/audit/pilot contracts remain the sole pre-pilot source of truth. New numerical evidence is referenced by exact fingerprint only; calibration, item fit, DIF, information, linking, exposure, drift, uncertainty and selection arithmetic remain Rust-owned.

Canonical architecture/traceability authority remains #604; this feature PR must not create a competing cross-cutting documentation baseline.

Exact-current evidence

Freshly revalidated state:

  • protected main: 8db4bf358b0a469915d6c5e336054f4a4f9c6b46;
  • exact Draft head: 61ba3943556d364fdcb5829dcdcf7eeb222503c0;
  • lifecycle implementation/tests are GREEN on the exact head;
  • exact-head CI run 31319982817 reaches the full Python suite with exactly one repository failure after the lifecycle slice passes: stale managed CHANGELOG.md relative to its authoritative fragment;
  • Rust/PyO3, package/reinstall/release acceptance, enterprise sales-readiness smoke, explicit GPU no-skip and fuzz are successful;
  • exact-head Security Scan and SAST Semgrep are successful;
  • the only suite warning is the separately tracked marginal _log_sigmoid overflow from issue numerics: eliminate inactive-branch overflow warnings in marginal log-sigmoid #583, owned by overlapping marginal PR fix(mmle): bound latent-distance workspaces #564 rather than this lifecycle slice;
  • a bounded current-main OpenCode integration/changelog handoff already exists. Do not race or duplicate it while exact head/main remain unchanged.

Scope and scientific boundary

This lifecycle is evidence governance, not a physical item-bank database or hosted authorization service. A valid transition does not itself establish construct validity, fairness, score comparability or consequential-decision readiness. No version/release, persistence, hosted authorization, generated-item approval shortcut, new likelihood, item-parameter estimate, CAT/ATA arithmetic, LLM provider call or uncontrolled self-evolving rubric belongs here.

Remaining Draft gate

Keep Draft. Reconcile any accepted-main movement without losing the bounded lifecycle contract, render/check authoritative changelog material, then require one unchanged exact head with full Python/Rust/PyO3/package/GPU/fuzz/Security/SAST evidence, current-head automated review, zero valid unresolved findings and repository approval/branch-protection policy. Close #609 only after protected-main integration and accepted-main verification.

Advances #609.

@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Draft detected.

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: 083a7bcc-7c4e-420d-8690-852bdaeaec8a

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

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.

Copy link
Copy Markdown
Contributor Author

@jules address

Take a bounded writer lease only if this Draft branch is still exactly 34454a4ee46dc8ac341655fd9222d305cd663c4a on protected base 7516031df533d1131572eb07b6e3a86b04d12793; abort without writing if either moved.

The intentional RED contract and minimal item-bank lifecycle implementation are now present. Complete only the deterministic GREEN/release-note slice:

  1. Run pytest -q tests/test_rubric_item_bank_lifecycle.py and fix only current failures in python/fast_mlsirm/rubric/item_bank.py, python/fast_mlsirm/rubric/__init__.py, or that test. Preserve the public names, transition graph, required evidence classes, immutable previous-record linkage, source-text-free records, policy-criticality separation, exact-type/replay protection, and no-database/no-numerical-estimator boundary.
  2. Run formatting/lint and remove any unrelated formatting churn. Do not weaken/delete/skip/xfail the fail-first assertions.
  3. Run branch coverage for the new module and add only meaningful missing branch tests until it reaches 100% owned production statement/branch coverage with complete public docstrings.
  4. Run python scripts/render_changelog_fragments.py --update CHANGELOG.md and --check CHANGELOG.md; commit the generated CHANGELOG.md together with only the minimal source/test corrections required by focused evidence.
  5. Run the focused test again plus git diff --check.

Keep Draft. Do not create another PR, modify dependencies/workflows/version/release, add a database/provider/LLM call/numerical estimator, alter canonical architecture PR #604, mark Ready, approve, merge, or close #609. Stop after one bounded exact-head commit and report the focused evidence.

Copy link
Copy Markdown
Contributor Author

@jules One additional current-design gap to include in the same bounded GREEN commit, provided the branch still matches the leased head when you start: add a regression and fail-closed implementation proving approved_use_ids cannot be introduced during piloting -> calibrated; the approved-use scope may first appear only on calibrated -> approved, and must then remain byte-identical through active/suspended/reactivated/retired successors. Also reject future governance evidence kinds (approval, suspension, retirement) when supplied before their corresponding transition so callers cannot preload authority-shaped evidence into an earlier record. Preserve legitimate ancillary calibration/linking/exposure evidence and all previous instructions.

Copy link
Copy Markdown
Contributor Author

@opencode-agent address

The earlier Jules handoff has no receipt/reaction and the branch remains unchanged at exact head 34454a4ee46dc8ac341655fd9222d305cd663c4a; take the bounded lease only if a final refetch still shows that exact head and protected base 7516031df533d1131572eb07b6e3a86b04d12793. Abort if either moved or any other writer receipt appears.

Run the focused lifecycle tests first and make one ordinary direct GREEN commit. Preserve the existing design and fix only proven defects, including the authority-order gap: approved-use IDs must remain empty through piloting and calibrated, may first be introduced on calibrated -> approved, and must remain exact thereafter; approval, suspension, and retirement evidence may not be preloaded before the corresponding transition. Add meaningful regressions in the existing authoritative lifecycle test module. Remove lint/format defects, reach 100% statement/branch coverage for item_bank.py, render/check CHANGELOG.md, rerun the focused tests and git diff --check, and commit only the bounded source/test/export/changelog changes. Keep Draft and stop. Do not change dependencies, workflows, version, architecture PR #604, provider calls, numerical estimators, repository policy, approvals, or issue state.

Copy link
Copy Markdown
Contributor Author

@opencode-agent Add one more fail-closed provenance correction in the same bounded GREEN pass. build_item_bank_pilot_record currently accepts an exact PilotCandidateRecord and reads a fingerprint that is recomputed from its current fields. Because the upstream public record can be changed through object.__setattr__, a valid-looking post-construction mutation (for example a different descriptive pilot_study_id, query_testlet_id, judge_policy_id, or occasion_id) can acquire a new dynamic fingerprint and be admitted as though it were the originally replay-verified pilot.

Add a regression that mutates one field to another syntactically valid value and require lifecycle admission to fail before creating a bank record. Use the narrowest durable fix: preserve/verify the pilot record's creation-time identity or require an explicit trusted expected pilot fingerprint at the lifecycle boundary; do not merely compare two freshly recomputed fingerprints. Keep the error stable and source-text-free.

Also keep the bank record self-auditing by retaining the non-sensitive pilot provenance needed to interpret that fingerprint (pilot_study_id, query_testlet_id, generator_family_id, judge_policy_id, and occasion_id) or document/test an explicit mandatory dereference contract if you deliberately choose fingerprint-only storage. Do not drop these axes silently, because later testlet, generator-family, judge-policy, and occasion/drift analysis depends on them. Preserve all prior scope and authority-order instructions.

Copy link
Copy Markdown
Contributor Author

@jules Existing bounded writer follow-up only; do not start a second writer and abort without writing if exact head 34454a4ee46dc8ac341655fd9222d305cd663c4a or protected main 7516031df533d1131572eb07b6e3a86b04d12793 moved.

Fresh exact-head CI 31311485469 shows the lifecycle implementation itself is already green: Rust, package/reinstall/release acceptance, GPU-smoke, fuzz, Security Scan and SAST pass, and Python reaches 2,930 passed / 2 skipped before exactly three changelog-contract failures. Root cause is local and deterministic: docs/changelog.d/609-governed-item-bank-lifecycle.md starts with ### Added instead of the repository fragment contract's required level-one title, so the renderer cannot parse any fragment set.

Please repair only release-note integration on this branch:

  1. give docs/changelog.d/609-governed-item-bank-lifecycle.md a concise # ... title, then valid supported release-note sections (## Added and, if retained, an allowed section for the boundary note; follow scripts/render_changelog_fragments.py exactly rather than inventing a heading);
  2. run python scripts/render_changelog_fragments.py --update CHANGELOG.md and --check;
  3. run pytest -q tests/test_rubric_item_bank_lifecycle.py tests/test_changelog_fragment_contract.py;
  4. commit only the fragment/managed CHANGELOG.md repair if GREEN, then leave Draft for fresh full exact-head gates.

Do not alter lifecycle state/evidence semantics, numerical ownership, canonical architecture PR #604, dependencies/workflows, version/release state, or issue #609.

Copy link
Copy Markdown
Contributor Author

@opencode-agent address

Take a bounded writer lease only if this Draft PR is still exactly 61ba3943556d364fdcb5829dcdcf7eeb222503c0 on protected base 7516031df533d1131572eb07b6e3a86b04d12793; abort without writing if either moved.

Current exact-head CI reaches the full Python suite and fails only tests/test_changelog_fragment_contract.py::test_repository_changelog_is_rendered_from_current_fragments. The focused item-bank tests are already green. RCA: docs/changelog.d/609-governed-item-bank-lifecycle.md now has the valid repository fragment shape, but CHANGELOG.md has not been regenerated from the authoritative fragments.

Perform only this deterministic release-note repair:

  1. run python scripts/render_changelog_fragments.py --update CHANGELOG.md;
  2. run python scripts/render_changelog_fragments.py --check CHANGELOG.md;
  3. run pytest -q tests/test_changelog_fragment_contract.py tests/test_rubric_item_bank_lifecycle.py;
  4. run git diff --check;
  5. commit only the renderer-produced CHANGELOG.md change (plus no unrelated files).

Keep Draft. Do not modify the lifecycle implementation/tests/fragment unless one of the commands proves a new exact-current defect there; do not change workflows, dependencies, version/release, PR #604, review state, or merge state.

Copy link
Copy Markdown
Contributor Author

@opencode-agent address

Reacquire a bounded writer lease only if a final refetch still shows Draft head 61ba3943556d364fdcb5829dcdcf7eeb222503c0 and protected main exactly 8db4bf358b0a469915d6c5e336054f4a4f9c6b46; abort without writing if either moved or another writer/source receipt appears. The prior renderer request was bound to old main 7516031... and is stale.

Exact-current evidence is narrow: Security Scan 31319982814, SAST 31319982854, Rust/PyO3, package/reinstall/release acceptance, GPU-smoke, fuzz, and all item-bank lifecycle tests are green; Python CI 31319982817 has one deterministic failure only after 2932 passed / 2 skipped: stale authoritative CHANGELOG.md versus docs/changelog.d/609-governed-item-bank-lifecycle.md.

Perform only the integration/release-note closure for this bounded lifecycle slice:

  1. reconcile newly integrated protected-main 🧪 Add tests for Luce Spectral Ranking (LSR) #590 non-destructively, preserving all accepted-main changes and the item-bank lifecycle contract;
  2. run python scripts/render_changelog_fragments.py --update CHANGELOG.md then --check;
  3. run pytest -q tests/test_changelog_fragment_contract.py tests/test_rubric_item_bank_lifecycle.py, relevant rubric pilot/replay/integrity tests, docstring/coverage checks, and git diff --check;
  4. commit only the normal main reconciliation and deterministic rendered changelog unless focused evidence proves a minimal lifecycle defect;
  5. refresh the PR body to exact head/base/evidence, and keep Draft for fresh exact-head review.

Do not add persistence, provider/LLM calls, numerical calibration/item-fit/DIF/information arithmetic, generated-item approval shortcuts, dependencies/workflows/version/release changes, or canonical PRD/TRD/Architecture/ADR/UML/ERD edits owned by #604.

Copy link
Copy Markdown
Contributor Author

@opencode-agent address

The prior current-main integration handoff has had no receipt/reaction and no source movement for nearly three hours. Reacquire one bounded writer lease only if a final refetch still shows Draft head 61ba3943556d364fdcb5829dcdcf7eeb222503c0, protected main 8db4bf358b0a469915d6c5e336054f4a4f9c6b46, and no current-head source-writer receipt; abort if any identity moved.

Current exact evidence already proves the item-bank lifecycle implementation itself GREEN: all focused lifecycle tests pass; Rust/PyO3, package/reinstall/release acceptance, GPU-smoke, fuzz, Security Scan and SAST pass; the Python suite has only the deterministic managed-CHANGELOG mismatch. Perform only the smallest integration/release-note repair: reconcile protected main non-destructively, preserving #590 and this unique lifecycle slice; run python scripts/render_changelog_fragments.py --update CHANGELOG.md then --check; run pytest -q tests/test_rubric_item_bank_lifecycle.py tests/test_changelog_fragment_contract.py and git diff --check; commit only the integration/changelog synchronization required for GREEN. Keep Draft. Do not change lifecycle semantics, dependencies, workflows, canonical #604, credentials, version/release, review/merge state, or issue #609.

Copy link
Copy Markdown
Contributor Author

@opencode-agent address

Take a bounded writer lease only if a final refetch still shows Draft head 8b3691d209381d4b03234836759ff30c85697c96 over protected main a6b7ecc680b73a277714a795143c7a27125022c3; abort without writing if either moved or another source writer appears.

The lifecycle branch has already been reconciled non-destructively with current protected main as a two-parent merge commit, preserving the bounded six-file item-bank slice and current-main report UX behavior. The lifecycle implementation/tests were GREEN on the predecessor; do not alter lifecycle states/evidence semantics or canonical architecture PR #604.

Complete only deterministic release-note cleanup:

  1. Run python scripts/render_changelog_fragments.py --update CHANGELOG.md and python scripts/render_changelog_fragments.py --check CHANGELOG.md, preserving current-main notes plus docs/changelog.d/609-governed-item-bank-lifecycle.md through the repository renderer.
  2. Run pytest -q tests/test_rubric_item_bank_lifecycle.py tests/test_changelog_fragment_contract.py and git diff --check (plus formatting only if required).
  3. Commit only the renderer-produced CHANGELOG.md if those checks require a source change.

Keep Draft. Do not change lifecycle semantics, add DB/hosted authorization/provider/numerical logic, modify dependencies/workflows/version/release, modify #604, mark Ready, approve, merge, or expand the slice. Stop after exact-head deterministic evidence.

Copy link
Copy Markdown
Contributor Author

@opencode-agent address

Take a bounded writer lease on PR #611 only if a final refetch still shows exact Draft head 8b3691d209381d4b03234836759ff30c85697c96 and protected main f43a466b1441b27bd2ac4a71be8aa3e4f08c8e8f; abort without writing if either moved or another source writer is active. Prior Jules/OpenCode handoffs are bound to predecessor heads and do not authorize a current write.

The governed item-bank lifecycle implementation/tests are already GREEN; prior full CI isolated the remaining repository integration defect to managed changelog parity, and protected main has since advanced through #618.

Execute only deterministic integration cleanup:

  1. reconcile protected main non-destructively while preserving accepted-main behavior and only feat(rubric): govern post-pilot item-bank lifecycle #611's unique lifecycle implementation/tests/doctoring/fragment;
  2. run python scripts/render_changelog_fragments.py --update, then --check;
  3. run pytest -q tests/test_rubric_item_bank_lifecycle.py tests/test_changelog_fragment_contract.py and git diff --check;
  4. push only if focused evidence is green and the exact branch lease still holds.

Keep Draft. Do not change lifecycle semantics, create persistence/hosted authorization/numerical estimators/provider calls, alter dependencies/workflows/version/release, or touch canonical architecture PR #604.

seonghobae commented Aug 10, 2026

Copy link
Copy Markdown
Contributor Author

Superseded bookkeeping note: an earlier exact-current writer handoff already covers head 8b3691d209381d4b03234836759ff30c85697c96 over protected main f43a466b1441b27bd2ac4a71be8aa3e4f08c8e8f. This duplicate request is withdrawn; do not create an additional writer from this comment.

Copy link
Copy Markdown
Contributor Author

@opencode-agent address

Take a bounded writer lease only if a final refetch still shows Draft head 8b3691d209381d4b03234836759ff30c85697c96 and protected main f43a466b1441b27bd2ac4a71be8aa3e4f08c8e8f; abort without writing if either moved or another current-head source writer appears. Older Jules/OpenCode handoffs bound to predecessor heads/bases are stale.

The governed post-pilot item-bank lifecycle implementation is already GREEN on its branch; current Security Scan and SAST are successful and the known integration gate is managed changelog/base reconciliation. Preserve the lifecycle transition graph, immutable factory-sealed records, exact PilotCandidateRecord provenance, use-specific approval, cumulative evidence/previous-record linkage, terminal retirement, stable redacted failures, and the strict boundary that all calibration/fit/DIF/information/drift arithmetic remains Rust-owned.

Non-destructively reconcile current protected main, preserve accepted #618 behavior, render/check the authoritative changelog, run pytest -q tests/test_rubric_item_bank_lifecycle.py plus changelog contract, formatting/lint and git diff --check, and commit only the minimum reconciliation/renderer cleanup. Keep Draft. Do not add persistence/database/hosted authorization/provider calls/numerical kernels, alter architecture PR #604, change dependencies/workflows/version/release, mark Ready, approve, merge, close #609, or create another PR. Stop if exact head/base changes during the write.

Copy link
Copy Markdown
Contributor Author

@opencode-agent address

Take a bounded writer lease only if a final refetch still shows Draft head 39b91c599b96192b6997fed63ab9622299cabb66 and protected main f43a466b1441b27bd2ac4a71be8aa3e4f08c8e8f; abort if either moved or another current-head source writer appears. This exact head is a non-destructive two-parent reconciliation of the governed item-bank lifecycle slice over current protected main; predecessor handoffs are stale.

Do not change lifecycle semantics. Run pytest -q tests/test_rubric_item_bank_lifecycle.py, then synchronize only managed release notes using python scripts/render_changelog_fragments.py --update CHANGELOG.md and --check CHANGELOG.md, run the changelog contract, formatting/lint and git diff --check, and commit the minimum renderer result if GREEN. Preserve immutable lifecycle/evidence records, exact verified-pilot provenance, use-specific approval, cumulative previous-record linkage, terminal retirement, policy-criticality separation and Rust-owned numerical evidence. Keep Draft. Do not add DB/hosted authorization/provider calls/estimators, alter dependencies/workflows/version/release or canonical docs #604, mark Ready, approve, merge, close #609, or create another PR. Stop if exact head/base moves during the write.

Copy link
Copy Markdown
Contributor Author

@jules address

Fallback bounded writer handoff for exact Draft head 39b91c599b96192b6997fed63ab9622299cabb66 over protected main f43a466b1441b27bd2ac4a71be8aa3e4f08c8e8f. The prior exact-head OpenCode handoff has shown no receipt/reaction and no source movement for more than two hours; treat it as inactive, but perform a final head/base/comment refetch before writing and abort if another writer has appeared or either ref moved.

Do not change item-bank lifecycle semantics. The exact-head full suite already proves the feature GREEN and fails only deterministic managed changelog parity (1 failed, 2958 passed, 2 skipped; Rust/PyO3, package, GPU, fuzz, Security Scan and SAST are green). Run the focused lifecycle test, then only python scripts/render_changelog_fragments.py --update CHANGELOG.md and --check CHANGELOG.md, the changelog contract, formatting/lint as applicable, and git diff --check. Commit only the generated CHANGELOG.md synchronization if all focused verification is green. Keep Draft. Do not change source/tests/dependencies/workflows/version/release/canonical docs #604, mark Ready, approve, merge, close #609, or open another PR. Stop writing if exact head/base changes.

Copy link
Copy Markdown
Contributor Author

@opencode-agent address

Superseding governed item-bank lifecycle cleanup after both CodeQL dependency merges. Fresh identities: Draft #611 exact head 39b91c599b96192b6997fed63ab9622299cabb66; protected main a7be9eb8ca0b807364173f8471fc300e3cf9350f; compare = diverged, ahead 9 / behind 2, and the net feature remains the item-bank implementation/tests/doctoring/plan/changelog fragment. Prior writer handoffs were bound to older head/base identities and required abort on movement. Refetch head/main/comments before writing; abort if either moves or another current-head writer appears.

Preserve the already-GREEN lifecycle semantics and fail-first history: immutable factory-sealed records, exact verified-pilot provenance, allowed transition graph/evidence gates, use-specific approval, previous-record linkage, evidence-order invariance/conflicting-ID rejection, policy-criticality separation, replay protection, terminal retirement, source-text-free/non-reflective evidence. Reconcile protected main non-destructively, preserving both CodeQL init/analyze 4.37.6 pins. Then run focused lifecycle tests + meaningful statement/branch coverage/docstrings, formatting/lint/diff-check, and repository-authoritative CHANGELOG render/check; commit only the minimum reconciliation/renderer or genuine focused correction if GREEN.

Keep Draft. Do not create persistence/provider/LLM/numerical estimator work, change dependencies/workflows/version/release/canonical docs #604, mark Ready/approve/merge, or close #609. Stop source writes after one coherent verified update; fresh exact-head full CI/Security/SAST/review returns to the maintainer loop.

Copy link
Copy Markdown
Contributor Author

@jules address

Fallback sole branch writer for exact Draft #611 head 39b91c599b96192b6997fed63ab9622299cabb66 over live protected main a7be9eb8ca0b807364173f8471fc300e3cf9350f. Fresh compare remains diverged, ahead 9 / behind 2, merge base f43a466b1441b27bd2ac4a71be8aa3e4f08c8e8f; the net feature remains the governed item-bank lifecycle implementation/tests/doctoring/plan/changelog fragment. The latest exact-base OpenCode handoff 5235700171 has no receipt/reaction and has produced no source movement for more than six hours. Treat it as inactive for this bounded fallback. Immediately refetch head/main/comments before writing and abort if either ref moves or any other current writer appears.

Preserve the already-GREEN lifecycle semantics and fail-first history: immutable factory-sealed records, exact verified-pilot provenance, only the declared transition graph/evidence gates, use-specific approval, cumulative evidence and exact previous-record linkage, evidence-order invariance/conflicting-ID rejection, policy-criticality separation, exact package-owned child types/replay protection, terminal retirement, and source-text-free non-reflective evidence. Reconcile the two accepted CodeQL 4.37.6 protected-main commits non-destructively. Then run focused lifecycle tests, meaningful owned statement/branch coverage and docstring checks, formatting/lint and git diff --check; render/check managed CHANGELOG.md only through the repository renderer and commit only one coherent minimal reconciliation/renderer or genuine focused correction if all evidence is GREEN.

Keep Draft and stop source writes after that coherent update. Do not add persistence/database/provider/LLM calls or numerical estimators, change dependencies/workflows/version/release, touch canonical docs #604, mark Ready/approve/merge/close #609, or create another PR. Fresh exact-head full CI/Security/SAST/current-head review belongs to the maintainer loop.

Copy link
Copy Markdown
Contributor Author

Maintainer-loop sole-writer takeover for exact Draft #611. Fresh pre-write evidence: source head remains 39b91c599b96192b6997fed63ab9622299cabb66; protected main remains a7be9eb8ca0b807364173f8471fc300e3cf9350f; compare is diverged, ahead 9 / behind 2, merge base f43a466b1441b27bd2ac4a71be8aa3e4f08c8e8f; the only protected-main changes since that merge base are the accepted CodeQL 4.37.6 init/analyze pins in .github/workflows/codeql.yml. The latest exact-base Jules handoff 5238772251 is ~16 hours old, has zero reactions, and produced no source movement; treat it as inactive predecessor writer evidence. Abort if head/main/comments move or another writer appears before mutation.

I will perform only the already-authorized bounded integration cleanup: non-destructively merge current protected main into this branch preserving the six-file item-bank lifecycle slice, then revalidate exact-head CI. No lifecycle semantics, dependencies beyond accepted-main ancestry, canonical #604 docs, package version/release, provider/LLM/numerical-estimator code, Ready/approval/merge state, or #609 issue state will be changed during the ancestry step. Changelog synchronization will be handled only from fresh post-merge evidence, not assumed from predecessor CI.

Copy link
Copy Markdown
Contributor Author

@opencode-agent address

Fresh current-main reconciliation handoff for Draft #611. All earlier source/release-note leases in this thread are bound to predecessor heads/bases and are stale. Immediately refetch #611 exact head, live protected main, current comments/reviews and the six unique lifecycle paths; proceed only if source remains 39b91c599b96192b6997fed63ab9622299cabb66 and live main is still compatible with 56967deceafeb7ecd0ff08a98f196282a6ec81a3. Abort if another writer appears or either ref moves.

Fresh compare is diverged, ahead 9 / behind 153, merge base f43a466b1441b27bd2ac4a71be8aa3e4f08c8e8f; unique product slice remains rubric/item_bank.py, rubric exports, lifecycle tests, doctoring/plan/changelog fragment. Reconcile current protected main non-destructively without replaying predecessor-main changes as branch-owned work. Re-run focused lifecycle tests and current repository contracts rather than assuming predecessor GREEN.

Preserve the already-established fail-closed lifecycle semantics: exact replay-verified pilot provenance; immutable transition graph; approval/use scope introduced only at the correct transition and invariant thereafter; governance evidence cannot be preloaded; creation-time identity/tamper detection; retained non-sensitive pilot provenance axes; policy criticality separate from discrimination; terminal retirement; no raw source/provider text. Numerical calibration/fit/DIF/information/linking remains Rust-owned and referenced by evidence only. Fix only exact-current defects found during reconciliation, maintain 100% owned statement/branch coverage and public docstrings, preserve authoritative changelog fragment under the current renderer policy, and run full same-head gates. Do not add persistence/provider calls/new estimator/workflows/dependencies/version/release or canonical #604 docs. Keep Draft for current-head review/merge.

Copy link
Copy Markdown
Contributor Author

@opencode-agent address

Fresh current-main reconciliation handoff for Draft #611 after protected main advanced again. Immediately refetch exact source head, live main, comments/reviews and the six branch-owned paths; proceed only if source remains 39b91c599b96192b6997fed63ab9622299cabb66, live main is still compatible with d2301dccb7d39a794d08cc96ea8c858b9ff49125, and no other writer targets this branch. Abort if any identity moves.

Fresh compare is diverged, ahead 9 / behind 157, merge base f43a466b1441b27bd2ac4a71be8aa3e4f08c8e8f; branch-owned scope is still exactly the governed lifecycle module/export, its tests, doctoring/plan and changelog fragment. Non-destructively reconcile current protected main first; do not replay predecessor-main changes as feature work. Re-run the focused lifecycle suite and current repository contracts rather than inheriting old GREEN evidence.

Preserve the established fail-closed lifecycle semantics: replay-verified creation-time pilot provenance; immutable record/fingerprint linkage; approval/use scope introduced only at calibrated→approved and invariant thereafter; no preload of governance-shaped evidence; retained non-sensitive pilot axes; policy criticality distinct from psychometric discrimination; terminal retirement; source/provider text absent from durable records/errors. Numerical calibration/fit/DIF/information/linking/drift arithmetic remains Rust-owned and referenced only by governed evidence. Fix only reconciliation-proven defects, keep 100% owned statement/branch coverage and public docs, render/check authoritative changelog, then run full same-head gates. Do not add persistence/providers/new numerical estimators/workflows/dependencies/version/release or canonical #604/#621 docs. Keep Draft until current-head review/gates are complete.

Copy link
Copy Markdown
Contributor Author

@opencode-agent address

Fresh replacement reconciliation lease for Draft #611 after protected-main movement invalidated every earlier base-bound handoff. Immediately before writing refetch source head, live protected main, comments/reviews and the six branch-owned lifecycle paths; proceed only while source remains 39b91c599b96192b6997fed63ab9622299cabb66, live main remains compatible with 3bc1222bf9552bb74f98cf34c89eba0b8d29c0dc, and no other writer targets this branch. Fresh compare is diverged ahead 9 / behind 195 from merge base f43a466b1441b27bd2ac4a71be8aa3e4f08c8e8f; unique scope remains item-bank lifecycle implementation/export, tests, doctoring/plan and changelog fragment. Reconcile protected main non-destructively first; do not replay accepted-main commits as feature-owned work.

Preserve the established fail-closed semantics already proven on the branch: replay-verified creation-time pilot provenance and retained non-sensitive pilot axes; immutable content-addressed record/previous-record linkage; only allowed transition graph; approval/use scope introduced only at calibrated→approved and byte-identical thereafter; no preloaded approval/suspension/retirement evidence; policy criticality distinct from psychometric discrimination; terminal retirement; no raw source/provider text in durable records/errors; calibration/fit/DIF/information/linking/drift arithmetic remains Rust-owned and referenced only by exact evidence.

After reconciliation, run focused lifecycle tests under current contracts, meaningful 100% owned statement/branch coverage/docstrings, renderer-managed CHANGELOG update/check, formatting/lint and git diff --check, then full Python 3.12/3.14, Rust/PyO3/package/GPU/fuzz/Security/SAST on one unchanged head. Fix only exact-current reconciliation defects. Keep Draft. Do not add persistence/hosted auth/provider calls/new numerical kernels/dependencies/workflows/version/release or canonical #604/#621 documentation. Stop on any source/base/lease movement; current-head review/Ready/merge returns to maintainer loop.

Copy link
Copy Markdown
Contributor Author

@opencode-agent address

Fresh exact-current reconciliation/replacement handoff for Draft #611 / issue #609. Immediately before any source write refetch exact branch head 39b91c599b96192b6997fed63ab9622299cabb66, protected main bb30b196d2f83df5117a6bebf5e9680faf18c841, comments/reviews/threads and the six lifecycle-owned paths; abort if either ref moves or another writer targets this branch. The previous lease 5252181620 was explicitly bound to older protected main 3bc1222b... and self-invalidated when main advanced.

Fresh compare is diverged, ahead 9 / behind 198 from merge base f43a466b1441b27bd2ac4a71be8aa3e4f08c8e8f; unique scope remains exactly item-bank lifecycle module/export, its tests, doctoring/plan and changelog fragment. Because live main has moved materially, derive the exact six-file unique slice before integration. Prefer non-destructive reconciliation; if current package/rubric structure makes that conflict-heavy, create exactly one clean-lineage replacement from current main, transfer every non-duplicative lifecycle contract, document lineage, then close #611 so no competing writer remains.

Preserve the already-proven semantics rather than redesigning them: replay-verified PilotCandidateRecord provenance; immutable content-addressed lifecycle records and exact previous-record linkage; only piloting→calibrated→approved→active, active→suspended→active, and active/suspended→retired; calibrated evidence classes separated from governance approval/suspension/retirement; approved-use scope introduced at approval and preserved; policy criticality independent from psychometric discrimination; terminal retirement; exact package-owned child types; stable redacted errors; no raw source/response/prompt/provider text in durable records; numerical calibration/fit/DIF/information/linking/drift remains Rust-owned and referenced only by exact governed evidence.

Re-establish focused lifecycle RED/GREEN/parity on the integrated/replacement branch, keep 100% owned statement/branch coverage and public docstrings, render/check the authoritative changelog, run git diff --check, then full Python 3.12/3.14, Rust/PyO3/package/reinstall/GPU-existing/fuzz, Security Scan and SAST on one unchanged head. Keep Draft until current-head review and zero valid unresolved findings. Do not add persistence/hosted authorization/providers/new numerical estimators/dependencies/workflows/version/release or canonical #604/#621 documentation.

Copy link
Copy Markdown
Contributor Author

@opencode-agent address

Fresh current-main reconciliation/replacement handoff for Draft #611 / issue #609. Every earlier writer instruction in this thread is predecessor-only because protected main has advanced again. Immediately before any source write refetch exact Draft head 39b91c599b96192b6997fed63ab9622299cabb66, live protected main 7b57f77747b9a9bd911660c76b1be0ca0dc2d145, comments/reviews/threads and the six branch-owned lifecycle paths; abort if either ref moves or another current-head writer targets this branch.

Fresh compare is diverged, ahead 9 / behind 199 from merge base f43a466b1441b27bd2ac4a71be8aa3e4f08c8e8f. Current protected main still has no python/fast_mlsirm/rubric/item_bank.py, so this is unique unintegrated product value, not a duplicate. The branch-owned scope remains exactly the item-bank lifecycle implementation/export, lifecycle tests, doctoring/implementation plan and changelog fragment. Derive that exact six-path unique slice before mutation.

Prefer non-destructive reconciliation with current protected main. Because this long-lived branch is now 199 commits behind, if ordinary reconciliation is conflict-heavy or would obscure ownership, create exactly one clean-lineage replacement from exact current main, transfer every non-duplicative lifecycle contract and its tests/doctoring/fragment, preserve fail-first lineage in the replacement PR body, and then close #611 with precise supersession lineage so there is only one lifecycle writer. Do not keep both lines active.

Preserve the already-established fail-closed lifecycle semantics: replay-verified creation-time pilot identity and retained non-sensitive pilot provenance axes; immutable content-addressed records and exact previous-record linkage; only the declared transition graph; approved-use scope appears only at calibrated -> approved and stays invariant thereafter; approval/suspension/retirement evidence cannot be preloaded; policy criticality remains distinct from psychometric discrimination; retirement is terminal; durable records/errors contain no raw source/response/prompt/provider text. Calibration, fit, DIF, information, linking, exposure and drift arithmetic remains Rust-owned and is referenced only by exact governed evidence.

After integration, run focused lifecycle tests, meaningful exact 100% owned statement/branch coverage and public docstrings, current formatting/lint/diff checks, renderer-managed CHANGELOG update/check, then the full applicable Python 3.12/3.14, Rust/PyO3/package/GPU-existing/fuzz/Security/SAST gates on one unchanged head. Fix only exact-current reconciliation defects. Keep Draft through fresh current-head review. Do not add persistence/hosted auth/provider calls/new numerical kernels/dependencies/workflows/version/release or canonical #604/#621 documentation. Stop immediately if source/base/lease state moves.

Copy link
Copy Markdown
Contributor Author

@opencode-agent address

Fresh clean-lineage replacement handoff for stale Draft #611 / issue #609. Before any write, refetch exact #611 head 39b91c599b96192b6997fed63ab9622299cabb66, protected main 7b57f77747b9a9bd911660c76b1be0ca0dc2d145, open PRs/branches and writer evidence; abort if either ref moves or a current-main item-bank lifecycle writer/replacement appears. All prior handoffs were bound to predecessor bases and are stale.

Fresh compare shows #611 is diverged, ahead 9 / behind 199 from merge base f43a466b1441b27bd2ac4a71be8aa3e4f08c8e8f. Its non-duplicative product/evidence slice is explicit: python/fast_mlsirm/rubric/item_bank.py, the item-bank exports added to python/fast_mlsirm/rubric/__init__.py, tests/test_rubric_item_bank_lifecycle.py, docs/doctoring/governed_item_bank_lifecycle.md, and docs/changelog.d/609-governed-item-bank-lifecycle.md. The old Superpowers implementation plan is historical process evidence and need not be promoted into a clean replacement.

Create exactly one clean-lineage Draft from live protected main if no replacement exists. Reapply the bounded lifecycle slice onto current rubric/package conventions rather than merging 199 stale commits. Preserve current-main rubric/__init__.py exports and add only the item-bank imports needed by the existing explicit subpackage-attribute contract; do not regress accepted-main rubric/pilot/security behavior. Once every non-duplicative product/evidence delta is preserved on the replacement, record lineage and close #611 so one implementation authority remains. No old checks/reviews/approvals transfer.

Preserve the accepted scientific/governance contract: immutable factory-sealed post-pilot records; exact verified PilotCandidateRecord provenance; allowed transitions only piloting→calibrated→approved→active, active→suspended→active, and active/suspended→retired; calibration/item-fit/DIF/information/approval/drift/suspension/retirement evidence gates; use-specific approval; cumulative evidence plus exact previous-record linkage; policy criticality separate from psychometric discrimination; exact package-owned child types/replay; terminal retirement; stable source-text-free errors; no physical DB/hosted authorization/provider call/new estimator. Calibration/fit/DIF/information/linking/exposure/drift arithmetic remains Rust-owned and referenced by exact fingerprint only.

Recreate focused evidence on current lineage: lifecycle tests, exact owned statement/branch coverage and docstrings, changelog renderer update/check, git diff --check, then full Python 3.12/3.14, Rust/PyO3, package/reinstall, existing GPU/fuzz, Security Scan and SAST. Keep Draft through current-head review/governance. Do not alter canonical #604/#621, dependencies/workflows/version/release or close #609 until protected-main integration and acceptance prove the lifecycle shipped.

@seonghobae

Copy link
Copy Markdown
Contributor Author

Superseded by surgical GREEN re-apply on current main (CHANGELOG fragment re-render).

@seonghobae seonghobae closed this Aug 11, 2026
seonghobae added a commit that referenced this pull request Aug 11, 2026
Factory-sealed, content-addressed item-bank states with evidence gates for
calibration, fit, DIF, information, approval, drift, suspension, and
retirement. Surgical re-apply of #611 on current main with re-rendered
CHANGELOG fragments.
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.

Implement governed dynamic rubric and calibrated item-bank lifecycle

1 participant