feat(core): add governed Position reporting-change review - #95
seonghobae wants to merge 17 commits into
Conversation
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (3)
🚧 Files skipped from review as they are similar to previous changes (1)
Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthrough새 Position 보고 변경 검토 패키지와 패킷 생성 API를 추가했습니다. 패킷은 입력, 검토 상태, 시간 및 증거 무결성을 검증합니다. Foundation CI는 패키지 wheel을 빌드하고 설치한 뒤 테스트합니다. 관련 거버넌스 문서와 추적성 기록도 갱신했습니다. Changes포지션 보고 변경 검토
Priority: ⬇️ Low Estimated code review effort: 3 (Moderate) | ~25 minutes Change: Feature Sequence Diagram(s)sequenceDiagram
participant Caller
participant build_position_reporting_change_review_packet
participant PositionReportingChangeReviewPacket
participant SHA256
Caller->>build_position_reporting_change_review_packet: 보고 변경 입력 전달
build_position_reporting_change_review_packet->>PositionReportingChangeReviewPacket: 검증된 입력으로 패킷 생성
PositionReportingChangeReviewPacket->>PositionReportingChangeReviewPacket: canonical_json 직렬화 및 생성 후 변경 확인
PositionReportingChangeReviewPacket->>SHA256: 검증된 JSON의 UTF-8 데이터 전달
SHA256-->>PositionReportingChangeReviewPacket: SHA-256 digest 반환
Merge Risk: ⚪ Minimal · up to This adds a review-only packet contract with input validation and tests, and it does not change HRIS data. No actionable merge-blocking risk was found in the supplied context. Hosted checks and independent approval remain normal merge gates. Security Architecture ReviewSecurity architecture risk: 🔵 Low · up to The package remains review-only and does not grant permission to change reporting relationships. A repeat-initialization path can replace its local integrity seal, weakening post-issuance tamper detection. The exposure is limited to callers with access to the Python object; no live reporting-change mutation consumer is included. Retained concerns
Security review detailsSecurity Blast Radius
Security Findings and Attack Paths
Trust Boundaries and Controls
Resilience and Maintainability Implications
Hardening Proposals
🚥 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 |
…tively Preserve the complete governed reporting-change review delta while adopting protected develop@eb9757f8649aaad026a9865508d9aad50c1a7a4f using GitHub's conflict-free exact merge tree. Keep #94 as an active read-only hierarchy dependency claim only; do not import mutable sibling source. No force-push, gate weakening, foreign-owner source copy, or release claim.
Repair the exact-head Foundation runner/inventory RED after protected-parent adoption. Retire the resurrected package-local workflow, preserve its exact CPython 3.14.7 installed-wheel and 100% statement/branch coverage contract inside canonical one-job Foundation CI, update the package regression and traceability, and reseal the Foundation manifest. No Position domain behavior, review authority boundary, coverage threshold, protected history, or central gate is weakened.
|
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.
|
Future
|
|
Post-repair review admission update: #95 is now Ready / Proposed on unchanged exact head |
|
Exact-head review cleanup receipt for Two still-live Code Quality findings were valid: the security regressions used class statements whose names could never be consumed because the production Fresh local evidence:
The available local runtime is Python 3.12.14 and lacks pinned |
|
Review-thread reconciliation at unchanged exact head
The code head is unchanged. Hosted exact-head Checks and qualifying independent approval remain merge gates; no status is transferred from prior heads. |
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/workflows/foundation-ci.yml— GitHub Actions review jobdocs/adr/0095-governed-position-reporting-change-review.md— operator or user guidancedocs/doctoring/position-reporting-change-review-references.md— operator or user guidancedocs/traceability/position-reporting-change-review.md— operator or user guidancemanifest.json— repository behaviorpackages/position-reporting-change-review/CHANGELOG.md— repository behaviorpackages/position-reporting-change-review/README.md— repository behaviorpackages/position-reporting-change-review/pyproject.toml— repository behaviorpackages/position-reporting-change-review/src/orgmetra_position_reporting_change_review/__init__.py— Python module behaviorpackages/position-reporting-change-review/src/orgmetra_position_reporting_change_review/review.py— Python module behaviorpackages/position-reporting-change-review/tests/test_packet_runtime_type_integrity.py— regression suitepackages/position-reporting-change-review/tests/test_recorded_at_freshness.py— regression suitepackages/position-reporting-change-review/tests/test_repository_contract.py— regression suitepackages/position-reporting-change-review/tests/test_review.py— regression suite
Changed behavior
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Workflow: foundation-ci.yml"]
S1 --> I1["GitHub Actions review job"]
I1 --> R1["Review risk: Workflow: foundation-ci.yml"]
R1 --> V1["actionlint plus required checks"]
Evidence --> S2["Docs: 0095-governed-position-reporting-change-review.md (3 files)"]
S2 --> I2["operator or user guidance"]
I2 --> R2["Review risk: Docs: 0095-governed-position-reporting-change-review.md (3 files)"]
R2 --> V2["docs review"]
Evidence --> S3["Repository file: manifest.json"]
S3 --> I3["repository behavior"]
I3 --> R3["Review risk: Repository file: manifest.json"]
R3 --> V3["required checks"]
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 (2 files)"]
S7 --> I7["Python module behavior"]
I7 --> R7["Review risk: Python: __init__.py (2 files)"]
R7 --> V7["pytest plus coverage"]
Evidence --> S8["Test: test_packet_runtime_type_integrity.py (4 files)"]
S8 --> I8["regression suite"]
I8 --> R8["Review risk: Test: test_packet_runtime_type_integrity.py (4 files)"]
R8 --> V8["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:
567204874282f66eccb8fbe0ec25474e7dd1c7f9 - Workflow run: 36306625613
- 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["Workflow: foundation-ci.yml"]
S1 --> I1["GitHub Actions review job"]
I1 --> R1["Review risk: Workflow: foundation-ci.yml"]
R1 --> V1["actionlint plus required checks"]
Evidence --> S2["Docs: 0095-governed-position-reporting-change-review.md (3 files)"]
S2 --> I2["operator or user guidance"]
I2 --> R2["Review risk: Docs: 0095-governed-position-reporting-change-review.md (3 files)"]
R2 --> V2["docs review"]
Evidence --> S3["Repository file: manifest.json"]
S3 --> I3["repository behavior"]
I3 --> R3["Review risk: Repository file: manifest.json"]
R3 --> V3["required checks"]
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 (2 files)"]
S7 --> I7["Python module behavior"]
I7 --> R7["Review risk: Python: __init__.py (2 files)"]
R7 --> V7["pytest plus coverage"]
Evidence --> S8["Test: test_packet_runtime_type_integrity.py (4 files)"]
S8 --> I8["regression suite"]
I8 --> R8["Review risk: Test: test_packet_runtime_type_integrity.py (4 files)"]
R8 --> V8["targeted test run"]
OpenCode Review Overview
Coverage evidence did not pass, so approval is blocked. The formal pull-request review is the source-backed diff review, not this status comment. |
|
Scheduled review-feedback autofix for this PR head.
|
|
Exact-head admission correction — Fresh audit found this Ready PR is not merge-admissible:
Queued/pending runs are neither extra blockers nor passing evidence. The PR remains Open and its complete delta is preserved, but is moved to Draft/Proposed until the causal repair is present on a successor exact head and re-audited. No Close, force push, destructive rebase, manual rerun, synthetic status/approval, merge, auto-merge, or bypass was performed. |
|
Exact-head hosted RCA — The queued runs have now terminated; neither failure is a product-source finding:
The PR remains Draft/Proposed. Do not duplicate a leaf workaround, fabricate status, manually rerun the unchanged head, or add a wake commit. Acceptance requires the canonical GitHub dependency-review/configuration repair and authenticated terminal CodeQL verdict, then fresh exact-head Checks and qualifying independent approval. |
Buyer-visible scope
This Orgmetra-only PR adds a bounded, transport-neutral pre-mutation review boundary for solid-line Position-to-Position reporting reassignment. The packet keeps subordinate/current/proposed manager Position references distinct, rejects self-report/no-op proposals, separates business-effective from system-recorded time, binds reviewed scope with SHA-256 evidence, requires requester/reviewer separation, and remains
requires_human_review,requires_authoritative_resolution,not_authorized_to_apply, andhuman_review_only. It carries no Person PII, compensation, ratings, free-form personal reasons or employment-decision authority.Protected-parent adoption and causal repair
Current exact head is
e78e79fb846ec5af7f6fe0c09cedd71357373312with tree75134bde546c613965066833a09ac6618b136d57on protected comparison basedevelop@eb9757f8649aaad026a9865508d9aad50c1a7a4f; the PR remains open · Draft / Proposed and mechanically mergeable.Ordinary non-force adoption
2317c367...preserved protected #161 and imported no mutable #94 source. Successorc0975db9...added protected-parent traceability, then hosted Foundation34005946944exposed the semantic adoption RED:.github/workflows/position-reporting-change-review-quality.ymlhad been resurrected withubuntu-latest, violating the protected exactubuntu-24.04runner/inventory contract.9b50b4f...is an ordinary fast-forward causal repair. It retires the leaf, preserves exact installed-wheel execution, hash-bound wheel installation, pinned CPython 3.14.7 and the unchanged 100% statement/branch threshold in canonical Foundation CI, rewrites the package repository contract to require the canonical path and retired leaf, updates traceability/changelog, and resealsmanifest.jsonagainst exact Foundation bytes (sha256=81ae584c9c3dd89d7e86011550d9afec439f17b46a1b21db2fc8104f9149aab3, 9199 bytes, 148 lines). No Position domain behavior, review authority, coverage threshold, protected history, mutable #94 source or central gate was weakened.Later exact RED
6cdd9ef67e2bebb3b7beedc815a85cd2e604b6caadded a realistic issuance regression and hosted Foundation34303150853proved the defect: 47 passed / 1 failed, withtest_rejects_future_system_recorded_timefailing because a futurerecorded_atdid not raise. Ordinary GREEN3e17400b0b649cdea52713e8cbdfb6f4a5b284b7validates the already type-checked fixed-offset timestamp against the current UTC instant before issuance. Changelog and traceability were then updated ordinary-forward at1933aff3...and335242a5.... Current test-only child567204874282f66eccb8fbe0ec25474e7dd1c7f9repairs two still-live Code Quality findings by expressing the malicious subclass attempts as directtype(...)calls. The forged__getattribute__and no-op__post_init__remain in the class namespaces, so the same production__init_subclass__denial is exercised without unused local class bindings. No Force Push or destructive rebase was used.Current acceptance
Independent review found one valid fail-closed validation gap on predecessor
567204874282f66eccb8fbe0ec25474e7dd1c7f9: exact built-in fixed-offset datetimes atdatetime.min/+14:00ordatetime.max/-12:00raised rawOverflowErrorduring UTC conversion instead of the package'sValueErrorvalidation contract. Test-first RED reproduced both boundary failures against that predecessor. Ordinary non-force childe78e79fb846ec5af7f6fe0c09cedd71357373312catches only that conversion overflow and raisesValueError("recorded_at must be convertible to UTC").Exact tree
75134bde546c613965066833a09ac6618b136d57passed the focused regression (3/3), the full source suite (50/50, 168 statements / 54 branches, 100%), and the installed-wheel suite on pinned CPython 3.14.7 (50/50, 100%). Root Foundation contracts passed 23/23; repository validation, compileall, andgit diff --checkpassed. Independent delta review reported no Critical, Important, or Minor finding.Fresh exact-head Foundation CI and SAST Semgrep succeeded. Security Scan is terminal failure because dependency-review job
109775460044received HTTP403withcurl_exit=0for exact public comparisondevelop@eb9757f8649aaad026a9865508d9aad50c1a7a4f...e78e79fb846ec5af7f6fe0c09cedd71357373312; central owner incident.github#810remains open. CodeQL PR is terminal failure because both Actions job109756543004and Python job109756542993dispatched successfully but failed closed at authenticatedVERDICT_STATE=pending; central handoff incident.github#1929remains open. Neither failure establishes a Position-domain source defect, and sibling security success is not substituted for either hard gate. Historical checks and the predecessor OpenCode change request do not transfer. Unresolved review threads are zero and no qualifying independent approval exists, so merge/auto-merge remains prohibited.Before authoritative mutation the host must still re-resolve tenant, subordinate/current/proposed manager Positions, business-effective coordinate, current recorded cutoff, solid-line relationship, Position validity/staffability, reviewer separation, cycle/cardinality constraints, and immutable audit/outbox evidence. This packet neither mutates HRIS truth nor grants employment-decision authority.
No self-approval, routine administrator bypass, gate weakening, predecessor-evidence transfer, no-op retrigger, force-push/destructive rebase, mutable sibling-source import, or release claim.
Summary by CodeRabbit