feat: add governed structured interview plan - #40
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthrough구조화 인터뷰 계획 패키지와 공개 API를 추가했습니다. 계획은 UUIDv4 참조, 증거 버전, 후보자 중립 메타데이터, 인간 승인 상태와 SHA-256 다이제스트를 포함합니다. 검증, 회귀 테스트와 GitHub Actions 품질 검사를 제공합니다. Changes구조화 인터뷰 계획
Estimated code review effort: 3 (Moderate) | ~25 minutes Merge Risk: 🟡 Moderate · up to The current head can still allow UUIDv1 reference suffixes that expose timestamp or node-correlation metadata, and the required pre-activation authority and interviewer checks are not demonstrated by executable activation-path evidence. Merge should wait until the reference validation and activation evidence are corrected or explicitly accepted by the owner. Sequence Diagram(s)sequenceDiagram
participant 개발자
participant 빌더
participant 계획모델
participant 품질워크플로
개발자->>빌더: 계획 증거와 메타데이터 전달
빌더->>계획모델: 계획 생성 및 검증
계획모델-->>개발자: 불변 계획 반환
개발자->>계획모델: canonical_json() 및 sha256_digest() 호출
계획모델-->>개발자: 결정적 JSON과 SHA-256 반환
품질워크플로->>계획모델: 패키지 컴파일 및 pytest 실행
품질워크플로-->>개발자: 커버리지와 작업 트리 검사 결과 반환
Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
|
@opencode-agent Please independently review exact current head |
|
@opencode-agent Please independently review exact current head |
Dismissed as stale predecessor-only evidence after current-source verification. This CHANGES_REQUESTED review is bound to predecessor head 8d8896b and its sole blocker was failed coverage evidence. The current exact head 6917e41 has same-head required-workflow-bootstrap, coverage-source-tree, and coverage-evidence GREEN, plus Structured Interview Plan Quality at 136 tests / 338 statements / 82 branches = 100%. Dismissal does not transfer the predecessor verdict or constitute approval: an authenticated current-head OpenCode formal verdict and qualifying independent approval are still required.
|
@opencode-agent Please independently review exact current head |
|
@opencode-agent Re-evaluate the unchanged exact head |
|
@opencode-agent Re-review this unchanged exact current head after the latest central review-scheduler fixes. Consumer: |
There was a problem hiding this comment.
Pull request overview
OpenCode reviewed the current-head product diff. Coverage is a separate gate.
Changed files
.github/requirements/foundation-test.txt— repository behavior.github/workflows/interview-plan-quality.yml— GitHub Actions review jobdocs/adr/0015-governed-structured-interview-plan.md— operator or user guidancedocs/doctoring/structured-interview-plan-references.md— operator or user guidancedocs/traceability/structured-interview-plan.md— operator or user guidancepackages/interview-plan/CHANGELOG.md— repository behaviorpackages/interview-plan/README.md— repository behaviorpackages/interview-plan/pyproject.toml— repository behaviorpackages/interview-plan/src/orgmetra_interview_plan/__init__.py— Python module behaviorpackages/interview-plan/src/orgmetra_interview_plan/activation.py— Python module behaviorpackages/interview-plan/src/orgmetra_interview_plan/plan.py— Python module behaviorpackages/interview-plan/tests/test_activation.py— regression suitepackages/interview-plan/tests/test_activation_approval_time.py— regression suitepackages/interview-plan/tests/test_activation_integrity_review.py— regression suitepackages/interview-plan/tests/test_activation_plan_mutation.py— regression suitepackages/interview-plan/tests/test_activation_plan_type.py— regression suitepackages/interview-plan/tests/test_adr_numbering.py— regression suitepackages/interview-plan/tests/test_docstrings.py— regression suitepackages/interview-plan/tests/test_evidence_version.py— regression suitepackages/interview-plan/tests/test_plan.py— regression suitepackages/interview-plan/tests/test_plan_issuance_integrity.py— regression suitepackages/interview-plan/tests/test_receipt_issuance.py— regression suitepackages/interview-plan/tests/test_string_runtime_evidence_integrity.py— regression suitepackages/interview-plan/tests/test_supported_python_versions.py— regression suitepackages/interview-plan/tests/test_temporal_evidence_integrity.py— regression suitepackages/interview-plan/tests/test_tenant_scope.py— regression suitepackages/interview-plan/tests/test_traceability_scope.py— regression suitepackages/interview-plan/tests/test_uuid_version.py— regression suitetests/test_foundation_ci_dependency_hygiene.sh— regression suite
Changed behavior
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Repository file: foundation-test.txt"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Repository file: foundation-test.txt"]
R1 --> V1["required checks"]
Evidence --> S2["Workflow: interview-plan-quality.yml"]
S2 --> I2["GitHub Actions review job"]
I2 --> R2["Review risk: Workflow: interview-plan-quality.yml"]
R2 --> V2["actionlint plus required checks"]
Evidence --> S3["Docs: 0015-governed-structured-interview-plan.md (3 files)"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs: 0015-governed-structured-interview-plan.md (3 files)"]
R3 --> V3["docs review"]
Evidence --> S4["Repository file: CHANGELOG.md"]
S4 --> I4["repository behavior"]
I4 --> R4["Review risk: Repository file: CHANGELOG.md"]
R4 --> V4["required checks"]
Evidence --> S5["Repository file: README.md"]
S5 --> I5["repository behavior"]
I5 --> R5["Review risk: Repository file: README.md"]
R5 --> V5["required checks"]
Evidence --> S6["Repository file: pyproject.toml"]
S6 --> I6["repository behavior"]
I6 --> R6["Review risk: Repository file: pyproject.toml"]
R6 --> V6["required checks"]
Evidence --> S7["Python: __init__.py (3 files)"]
S7 --> I7["Python module behavior"]
I7 --> R7["Review risk: Python: __init__.py (3 files)"]
R7 --> V7["pytest plus coverage"]
Evidence --> S8["Test: test_activation.py (17 files)"]
S8 --> I8["regression suite"]
I8 --> R8["Review risk: Test: test_activation.py (17 files)"]
R8 --> V8["targeted test run"]
Evidence --> S9["Test: test_foundation_ci_dependency_hygiene.sh"]
S9 --> I9["regression suite"]
I9 --> R9["Review risk: Test: test_foundation_ci_dependency_hygiene.sh"]
R9 --> V9["targeted test run"]
Findings
No source-backed product finding is synthesized from the coverage gate. A coverage miss belongs in the status comment.
- Head SHA:
6917e41f9053fab6f7e99f8185f2137e8fc5fca5 - Workflow run: 33371238759
- Workflow attempt: 1
- Coverage gate:
failure
Review outcome
Coverage is a gate, not the review. This body reviews the changed product files.
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Repository file: foundation-test.txt"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Repository file: foundation-test.txt"]
R1 --> V1["required checks"]
Evidence --> S2["Workflow: interview-plan-quality.yml"]
S2 --> I2["GitHub Actions review job"]
I2 --> R2["Review risk: Workflow: interview-plan-quality.yml"]
R2 --> V2["actionlint plus required checks"]
Evidence --> S3["Docs: 0015-governed-structured-interview-plan.md (3 files)"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs: 0015-governed-structured-interview-plan.md (3 files)"]
R3 --> V3["docs review"]
Evidence --> S4["Repository file: CHANGELOG.md"]
S4 --> I4["repository behavior"]
I4 --> R4["Review risk: Repository file: CHANGELOG.md"]
R4 --> V4["required checks"]
Evidence --> S5["Repository file: README.md"]
S5 --> I5["repository behavior"]
I5 --> R5["Review risk: Repository file: README.md"]
R5 --> V5["required checks"]
Evidence --> S6["Repository file: pyproject.toml"]
S6 --> I6["repository behavior"]
I6 --> R6["Review risk: Repository file: pyproject.toml"]
R6 --> V6["required checks"]
Evidence --> S7["Python: __init__.py (3 files)"]
S7 --> I7["Python module behavior"]
I7 --> R7["Review risk: Python: __init__.py (3 files)"]
R7 --> V7["pytest plus coverage"]
Evidence --> S8["Test: test_activation.py (17 files)"]
S8 --> I8["regression suite"]
I8 --> R8["Review risk: Test: test_activation.py (17 files)"]
R8 --> V8["targeted test run"]
Evidence --> S9["Test: test_foundation_ci_dependency_hygiene.sh"]
S9 --> I9["regression suite"]
I9 --> R9["Review risk: Test: test_foundation_ci_dependency_hygiene.sh"]
R9 --> V9["targeted test run"]
|
Scheduled review-feedback autofix for this PR head.
|
|
Scheduled review-feedback autofix for this PR head.
|
|
@opencode-agent review Review exact current head |
|
Failed-check RCA refresh for exact head
No Orgmetra source, warning threshold, security/review gate, approval state, or status was altered. Acceptance still requires fresh terminal exact-head evidence from the current central paths. |
|
Scheduled review-feedback autofix for this PR head.
|
|
Scheduled review-feedback autofix for this PR head.
|
|
Scheduled review-feedback autofix for this PR head.
|
|
Scheduled review-feedback autofix for this PR head.
|
|
Scheduled review-feedback autofix for this PR head.
|
|
Canonical prerequisite #258 now has an active protected-parent implementation in Draft PR #259 at exact head |
|
Scheduled review-feedback autofix for this PR head.
|
Buyer-visible outcome
Adds a candidate-neutral governed structured-interview plan and executable human-activation boundary. The plan binds one approved requisition/Job to exact Job Analysis, a predetermined question set and question-to-competency map, rating anchors, governed competencies, interviewer panel, evidence version, and canonical audit correlation. Only exact creation-bound plan evidence may cross the injected authoritative host boundary; authoritative verification must bind the exact plan evidence, accountable human actor, and approval instant before an activation receipt can exist.
Orgmetra-owned repair retained
The constructor-provenance reentrancy bypass remains repaired on exact feature head
6917e41f9053fab6f7e99f8185f2137e8fc5fca5. Regression-onlyab035c45...reproduced caller-controlled timezone re-entry that could retain an allocator-created object and later invoke__post_init__()to mint a second creation-bound plan. The repair consumes one context-local allocator ticket in the exact__new__()call before field validation or caller callbacks. The process-local identity/HMAC mechanism remains runtime defense-in-depth, not a durable signature or persisted audit record.Live protected-parent finding — 2026-09-06
Current protected truth is
develop@eb9757f8649aaad026a9865508d9aad50c1a7a4f; this PR still records old base snapshot9e3e4847510e1e612b48474ba42b177b8ed824df. GitHub reports the PR open · Draft · mechanically mergeable, but mechanical mergeability is not semantic adoption.GitHub's current protected-parent synthetic merge is
27083e1787c68a7723ac741d9dedeb04e748d81c, exact tree5690f0d2ac78550c6f86af4ce19ccf8c6159bdf4, with parents protectedeb9757f...and feature6917e41f.... That tree resurrects retired.github/workflows/interview-plan-quality.yml; the leaf usesubuntu-latest, contrary to protected #161's consolidated Foundation owner and exactubuntu-24.04runner contract.Deleting the leaf alone would also be wrong. Interview Plan declares
requires-python = ">=3.12", and executabletest_supported_python_versions.pyrequires real 3.12, 3.13, and primary 3.14 CI lanes. The historical leaf provides those compatibility lanes. Protected Foundation currently runs Python 3.14 only. Therefore a reconciliation that merely removes the package workflow would silently reduce the declared/executable compatibility acceptance contract.Issue #258 is now the canonical Foundation prerequisite for this class of adoption: preserve package-neutral 3.12/3.13/3.14 compatibility under the consolidated Foundation owner, retain
ubuntu-24.04, use reviewed hash-locked tooling across each executed minor, avoid package-name switchboards, keep retired leaves absent, update canonical inventories for any new executable root contract, and reseal deterministic provenance from final bytes where tracked artifacts change.Do not copy mutable #42 shared-dispatcher source into this branch. #42 independently demonstrates package-neutral artifact discovery, but it is not protected dependency truth and its current requirement parser assumes one single-line hash per package while Interview Plan's reviewed multi-minor toolchain needs multiple wheel hashes for
coverage. Canonical #258 integrates first; then both product lanes may non-force adopt protected owner truth.Historical exact-source evidence
Structured Interview Plan Quality
33294992324was terminal SUCCESS on this feature snapshot with 136 tests and 338/338 statements plus 82/82 branches. Foundation33294992349, Recovery33294992368, and SAST33294992329also succeeded on the old parent. Security remained non-passing at the central Dependency Review support boundary; OpenCode lacked a qualifying formal exact-head verdict, historical Noema used an older timeout path, and Strix evidence was not structurally bound to the target tuple. No qualifying independent current-head approval was established. None of this evidence transfers to a later protected-parent successor.Required order
Keep Draft. Implement and normally integrate #258 from fresh protected truth → non-force adopt that protected Foundation capability into this branch while preserving the complete structured-interview plan/activation delta and its 3.12–3.14 compatibility contract → keep the retired leaf absent → resolve docs/provenance semantically and reseal final tracked bytes → reacquire exact-head Foundation/product/recovery/Security/SAST/CodeQL/OpenCode/Noema/Strix and then-current independent review evidence.
Do not self-approve, use routine administrator bypass, transfer predecessor evidence, resurrect package-local CI, reduce the supported Python range merely to satisfy Foundation, create no-op retrigger churn, force-push/destructively rebase, weaken a gate, or mutate a foreign dedicated-writer boundary.
Scope / non-claims
This slice does not persist candidate responses, scores, or candidate PII; autonomously make selection decisions; duplicate authoritative tenant/Job/identity stores; or use cross-service application-table SQL. It does not claim a deployed production authority adapter, completed validity/fairness study, legal-compliance determination, durable signing system, certification, or commercial release.