Skip to content

test(identity): bind data-rights ownership to recent authenticated session - #137

Merged
github-actions[bot] merged 4 commits into
mainfrom
feat/data-rights-authenticated-application
Aug 9, 2026
Merged

test(identity): bind data-rights ownership to recent authenticated session#137
github-actions[bot] merged 4 commits into
mainfrom
feat/data-rights-authenticated-application

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Intent

Continue #55 with one main-based TDD slice that advances the already-protected recent-authentication policy into session-derived data-rights ownership. The slice remains intentionally bounded: it establishes the authenticated application boundary for export; it does not claim the complete export/deletion orchestration from #55.

Live dependency state

Protected main now contains #136 as 68074830d952e209497e576f0af5ded6d83f8121. This branch still descends from the pre-squash #136 lineage, so predecessor checks are historical and the current PR synthetic merge must be revalidated against the live base. No predecessor review/check evidence transfers.

Implemented on the current head

  • AuthenticatedDataRightsApplication authenticates the opaque application session through the existing identity HTTP application boundary.
  • recent-authentication age is enforced before any data-rights work.
  • workspaceId and actorUserId are derived exclusively from the authenticated session.
  • only the trusted session-derived DataRightsWorkspaceContext is passed to DataRightsApplication.exportWorkspace.
  • no client parameter can select another workspace or actor.
  • deterministic tests cover trusted-context derivation and the recent-authentication boundary.

Current exact-head evidence

At head aa9e809bd2d37914b288d233e8b2b2f7f3fb3ab2, CI, Compose runtime, AppGuardrail, Semgrep, Security Scan, and Commercial Readiness completed successfully before the protected-main #136 squash moved the live base. Those runs are useful source-head evidence but are not treated as current-base merge evidence.

Remaining before merge

  • refresh all required PR workflows/review against the unchanged exact head and current live main;
  • address every valid current-head review finding;
  • retain Add complete tenant export and deletion orchestration #55 as open until destructive erasure, durable request/receipt/reconciliation, recent-auth gateway wiring, protected export delivery/audit, contributor coverage, legal-hold/retention, backup-expiry, and stuck-request recovery are complete.

Refs #55, #136, #134, #21.

@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown

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: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3cc9adbc-03ce-4b0d-a198-eaca6a785b9e

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.

@seonghobae
seonghobae changed the base branch from feat/data-rights-recent-auth-policy to main August 9, 2026 18:09
@seonghobae seonghobae closed this Aug 9, 2026
@seonghobae seonghobae reopened this Aug 9, 2026
@seonghobae
seonghobae marked this pull request as ready for review August 9, 2026 18:56

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@github-actions
github-actions Bot merged commit be5e6d9 into main Aug 9, 2026
35 checks passed
seonghobae added a commit that referenced this pull request Aug 9, 2026
* test(planning): define durable Today synchronization contract

* feat(planning): implement durable Today domain contract

* test(planning): define atomic Today persistence contract

* feat(planning): persist Today with atomic optimistic writes

* feat(planning): add durable Today persistence schema

* feat(planning): compose durable Today runtime

* test(planning): define Today HTTP precondition boundary

* feat(planning): enforce authenticated Today HTTP preconditions

* feat(planning): expose authenticated Today sync API

* fix(planning): avoid duplicate migration ordinal

* fix(planning): order durable Today migration after repository constraints

* test(planning): verify durable Today PostgreSQL behavior

* test(web): define authenticated Today sync BFF contract

* feat(web): add authenticated durable Today BFF

* feat(web): expose same-origin Today sync route

* test(web): include durable Today sync in quality gates

* test(web): define explicit local-to-workspace Today migration

* feat(web): implement explicit local-to-workspace Today migration

* test(web): verify workspace Today migration path

* feat(web): label local and durable Today states

* feat(web): localize durable Today sync states

* feat(web): add explicit durable Today controls

* feat(web): connect explicit workspace Today controls

* test(web): verify explicit durable Today migration

* test(ci): require browser journey verification

* ci(web): execute Playwright buyer journeys

* test(web): verify stale Today reconciliation

* docs(research): ground durable Today synchronization

* docs(planning): add durable Today operations runbook

* docs(planning): design durable Today workspace sync

* docs(planning): plan durable Today workspace sync

* test(web): preserve local Today across retry

* test(web): scope accessibility live-region assertions

* test(web): bind durable search acceptance to semantic controls

* test(web): follow the current Today capture label

* style(planning): restore canonical provider formatting

* style(planning): format concurrent Today assertion

* fix(web): remove unreachable Today save disabled check

* fix(web): narrow optional Today request body

* test(web): make Today fetch fixtures exact-optional safe

* test(web): preserve explicit optional fetch init in Today sync

* style(web): format Today workspace synchronization

* fix(planning): acquire Today advisory locks in order

* test(planning): enforce deterministic Today lock order

* test(planning): stress identical Today replay concurrency

* style(web): format Today sync boundary

* style(web): format Today workspace client

* style(web): format Today sync tests

* style(web): format Today workspace tests

* test(planning): match SQL client result contract

* test(planning): isolate lock-order integration fixture

* test(planning): move lock-order fixture out of production source

* test(planning): remove dynamic SQL from lock-order fixture

* style(web): format Today workspace sync client

* style(web): format Today sync boundary

* style(web): format Today sync tests

* fix(web): parse strong ETags with valid regex syntax

* fix(web): use valid strong ETag parser in BFF

* feat(identity): enforce recent-authentication policy for data rights (#136)

Add a fail-closed recent-authentication policy that uses the preserved authentication provenance from #134, distinguishing authentication age from session rotation. Includes test-first boundary, stale/future/malformed provenance rejection, and exact-head CI/security validation.

* test(planning): exercise Today concurrency independently

* fix(planning): make Today date constraint DateStyle-independent

* fix(planning): type Today SQL parameters explicitly

* test(identity): bind data-rights ownership to recent authenticated session (#137)

* test(identity): define recent authentication gate for data rights

* feat(identity): enforce recent authentication policy

* test(identity): define authenticated data-rights context boundary

* feat(identity): bind data-rights export to recent authenticated session

* fix(planning): serialize Today writes in explicit transactions

* fix(planning): pin Today transactions to one PostgreSQL connection

* test(planning): cover transactional Today persistence

* test(planning): verify transaction lifecycle and cleanup

* test(ci): bind Today concurrency to contributor head

* test(planning): remove SQL-text lock-order surrogate

* ci: capture exact Today prettier patch

* test(web): expose in-flight Today save overwrite

* fix(web): preserve edits during Today save

* ci: apply bounded Today formatting

* ci: expose read-only Today format patch

* style(web): format Today sync client

* style(web): format Today workspace sync

* style(web): format Today sync tests

* chore(ci): remove Today format diagnostic

* test(planning): reject malformed Today lookup scope before SQL

* ci: verify Today lookup validation red

* ci: apply verified Today lookup validation

* fix(ci): compare repair lease to contributor head

* fix(ci): include staged self-removal in repair lease

* test(planning): reject malformed Today repository lookups

* test(planning): distinguish corrupted Today persistence

* fix(planning): classify invalid Today persistence separately

* fix(planning): validate Today lookup scope before SQL

* test(planning): fail explicitly on leaked Today connections

* chore(ci): remove superseded Today repair workflow

* fix(web): lint complete source globs

* test(planning): make Today concurrency cleanup deterministic

* docs(today): classify standards publication status

* docs(today): align validation and readiness plan

* test(planning): define shared Today invariants contract

* feat(planning): centralize Today validation invariants

* refactor(planning): reuse shared Today invariants

* refactor(planning): share Today invariants with persistence

* refactor(planning): reuse Today invariants at HTTP boundary

* test(planning): import Today persistence error from domain boundary

* test(planning): use shared Today persistence error boundary

* fix(web): preserve destructive-copy warning in Korean

* test(ci): bind browser acceptance to its workflow job

* test(web): close Today BFF authority branch gaps

* ci(web): stage one-shot canonical formatter

* style(web): apply canonical formatter output

* feat(identity): persist data-rights request receipts (#138)

* test(identity): define durable data-rights request ledger

* feat(identity): persist data-rights request state

* feat(identity): add data-rights request ledger schema

* test(identity): preserve data-rights receipts through erasure

* fix(identity): retain data-rights receipts after erasure

* chore(identity): sequence data-rights request migration

* chore(identity): remove duplicate migration sequence

* docs(identity): record durable data-rights ledger boundary

* test(identity): expose request-id collision as domain conflict

* fix(identity): normalize request ledger conflicts

* test(identity): harden data-rights ledger integration harness

* test(identity): cover dual request conflict evidence

* docs(identity): align data-rights ledger implementation status

* docs(changelog): record durable data-rights ledger

* fix(identity): resolve ledger migration path portably

* test(identity): require immutable terminal receipt storage

* test(identity): model pg timestamp rows as Date values

* test(identity): satisfy pg parameter mutability contract

* fix(identity): enforce immutable terminal data-rights receipts

* test(identity): assert immutable receipt no-op at database boundary

* test(identity): bind migration fixture lock to one PostgreSQL session

* test(web): expose Today media-type and conflict coupling

* test(web): execute Today review regressions

* fix(web): preserve existing test dependencies

* fix(web): normalize Today media types and conflict semantics

---------

Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
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.

1 participant