feat(relation): refuse a template copy as the source identity - #143
Conversation
A template or pasted copy keeps a distinct identity for relation-aware splits (ADR 0003). It cannot reuse the source document identity or become a state transition. Recovery is the computed share of copy kinds that match known truth versus collapsing every copy to the source.
|
Warning Review limit reachedNext included review available in 2 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (17)
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 |
|
Current head |
|
Current-head validation update (fc9dec9): fixed the quality contract to derive the Rust crate count from scripts/check_workspace_contract.py instead of hard-coding 10. Local evidence: 89 quality tests passed; coverage 100% (991/991 statements, 442/442 branches); workspace, docstring, documentation, and diff checks passed. Please review and rerun Checks against this exact head; merge remains subject to the repository's two independent approvals and protected rules. |
|
@opencode-agent @cwl-noema-review Review-only request for exact current head |
|
Queued @cwl-noema-review and @opencode-agent for PR #143 at head |
|
Current-head review refresh for fc9dec9:
|
|
Rebased current head 7d533c6 onto origin/main and retained both the copy-identity and current-main changelog entries. Local merge-tree, git diff --cached --check, and cargo fmt --all -- --check pass. Exact-head hosted checks and required independent approvals remain required before protected merge. |
|
Current-head review request: exact head |
Maintainer exact-head disposition
|
# Conflicts: # ARCHITECTURE.md # CHANGELOG.md # Cargo.lock # Cargo.toml # README.md # docs/TRACEABILITY.md # docs/adr/0003-relational-event-multiple-membership.md # docs/adr/README.md # docs/research/standards-and-literature.md # docs/validation/temporal-event-foundation.md # scripts/check_workspace_contract.py # tests/quality/test_check_docstrings.py
| TEPP separates stable record identity, content equality, exact text location, wire representation, authorization, and provenance. JSON wire records are explicit versioned DTOs with unknown-field rejection and reconstruct through domain validation. `SHA-256` detects content substitution but is not treated as proof of origin, authority, or chain of custody. A summary is a PROV derivation of the source document, not a state transition and not a reuse of the source identity (Moreau & Missier, 2013). | ||
|
|
||
| International Organization for Standardization and International Electrotechnical Commission. (2011). *Information technology—Security techniques—Privacy framework* (ISO/IEC Standard No. 29100:2011). Data minimization informs `provider_receipt`; it is not a certification claim. | ||
| TEPP separates stable record identity, content equality, exact text location, wire representation, authorization, and provenance. JSON wire records are explicit versioned DTOs with unknown-field rejection and reconstruct through domain validation. `SHA-256` detects content substitution but is not treated as proof of origin, authority, or chain of custody. A template or pasted copy is a PROV derivation of the source document, not a reuse of the source identity and not a state transition (Moreau & Missier, 2013). |
There was a problem hiding this comment.
🔍 Unrelated reference removed from standards doc
The change to standards-and-literature.md drops a paragraph and an ISO/IEC 29100:2011 citation from the evidence-identity section, unrelated to the copy-identity feature. The 2011 reference survives in the privacy section, so this reads as duplicate cleanup rather than a regression.
Was this helpful? React with 👍 or 👎 to provide feedback.
| ### Added | ||
|
|
||
| - `copy_identity` identity gate: a template or pasted copy cannot reuse the source document identity or become a state transition; recovered copy kinds match known truth at a higher computed rate than collapsing every copy to the source (ADR 0003). | ||
| - `persistence_postgres` retention/deletion/legal-hold (migration `0007`): policy rows, legal holds that block completed deletion, evidence tombstones without raw-source restore, analysis exclusion only for `logical_revocation`/`identity_tombstone` (not `cache_export_removal`), and deletion requests bound to the cited retention policy's tenant/class/purpose. |
There was a problem hiding this comment.
🔍 Unrelated CHANGELOG entry for persistence_postgres migration 0007
The CHANGELOG diff adds two entries: the copy_identity gate (expected) and a persistence_postgres retention/deletion/legal-hold (migration 0007) entry at CHANGELOG.md. The latter is unrelated to this PR's stated scope (copy-versus-source identity) and the author description explicitly disclaims allocating migrations. retention_sql.rs does exist in the tree, so this may be a pre-existing/merge-carried entry rather than newly introduced work, but its appearance in this PR's diff is worth confirming to avoid over-claiming capabilities not delivered by this change.
Was this helpful? React with 👍 or 👎 to provide feedback.
A template or pasted copy keeps a distinct identity for relation-aware splits (ADR 0003). It cannot reuse the source document identity or become a state transition. Recovery is the computed share of recovered kinds that match known truth versus collapsing every copy to the source.
Complementary to #136 translation, #139 summarizes, and #75 method_effects (copied-text as a method source, not an identity). This crate owns copy-versus-source identity.
Local gates:
Does not allocate migration `0008`. Does not recreate `payload_semantics`, `validation_core` claim promotion (#57), or other in-flight crates.
Keep this PR draft. Preferred merge remains #46 only when exact-head required Checks pass and a qualifying independent (non-Cursor/CodeRabbit) APPROVE exists. Do not empty-commit.