feat: bind sensitive disclosure to exact task scope - #16
Conversation
|
Warning Review limit reached
Next review available in: 35 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (8)
📝 WalkthroughWalkthrough민감 데이터 공개 권한 커널을 추가했다. 권한 범위와 데이터 분류를 정확히 검증한다. 불투명 핸들의 대상, 만료 시각, 사용 횟수를 검증한다. 아키텍처, ADR, README, CHANGELOG, 로드맵을 새 정책에 맞게 갱신했다. Changes민감 데이터 권한 커널
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related issues
Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 2📝 Generate docstrings 💡
🛠️ Fix failing CI checks 💡
🧪 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 |
|
@coderabbitai review |
|
Superseded by #33 after protected |
Buyer-visible gap
Begin issue #10 with a bounded purpose-bound authority kernel that prevents ambient sensitive-data disclosure. The slice binds disclosure and opaque-handle admission to one exact classified authority: tenant, task, field, business purpose, canonical destination origin, and data classification. The policy API never carries protected values.
TDD evidence
The durable first disclosure contract is
crates/originweave-policy/tests/sensitive_data_policy.rs. Exact-head CI run31287629785on RED head5ffe5f3ea213cbf921dd22ad8c61f9a254577c17reachedcargo check --locked --workspace --all-targetsand failed at the intended production API boundary with unresolved imports for the disclosure and handle-use contracts.CodeRabbit then exposed two valid security boundaries, each corrected from current evidence:
originweave_core::Originand realistic credentials/path/port/Unicode/control/numeric-host cases before production constructors changed;ecdd2caf41a6d766c407444c89784e8c2db01fdbrequired the public nameevaluate_handle_use; CI run31289910081, Rust job93185229947, failed at the intended unresolved production API boundary before implementation and documentation separated pure admission from later atomic broker enforcement.A later review of the shipped opaque-handle scope found a separate reclassification defect: the handle retained tenant/task/field/purpose/destination but not
DataClassification, so an old handle could survive a field's move from ordinary personal data to sensitive personal, credential, or payment data. Test-only headbdda17ebda36c40a01650216e00869ac16d56ec2added a focused regression; CI run31302701008, Rust job93217937595, failed at the intended constructor boundary because handle scope and use requests had no classification input. Production then bound handle authority to classification.Adding one more primitive parameter exposed an API-design defect under strict Clippy: CI on
200efba0d1d49fcfa6d4c1ee029ebfa7265e8c64passed tests but rejected the primitive-heavy public constructors. The root-cause fix is the publicSensitiveDataAuthorityvalue object, which atomically represents tenant, task, field, purpose, canonical destination, and classification. Disclosure requests/scopes and handle scopes/use requests now consume that exact value rather than independently reconstructing authority.Scope and architecture
originweave_core::Origin, not caller-supplied raw URL text;The first attempt to register a separate workspace crate was rejected by the locked-workspace contract because it required an unauthorized lockfile mutation; those tree changes were reverted. This PR therefore implements the reusable policy foundation inside
originweave-policy. Issue #10 remains open for the separately versionedoriginweave-sensitive-datacrate and provider-neutral service/storage/broker/evidence/lifecycle contracts.Exact-head verification
On unchanged head
a5cdad6fcf550e250d1502ca77524d49ef344d7e:31303777506completed successfully, including repository contracts, formatting, locked workspace checks, all Rust tests, strict Clippy, rustdoc, and exact production coverage enforcement;31303777521completed successfully;31303777551completed successfully;Ready for qualifying independent review. Merge remains subject to an exact-current-head non-author formal
APPROVEDreview and a final unchanged-head gate and writer-lease revalidation.Partial implementation of #10.
Summary by CodeRabbit
새로운 기능
문서
테스트