DataTalksClub / DataTalksClub/website

Integrate member profiles and Slack state with privacy export and full erasure

Open
#251 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

auth data-migration needs grooming operations P0 security testing
Dominant language
Python
Stars
0
Forks
0
PR merge metrics
No merged PRs in 30d

Description

Parent epic: #108
Global privacy implementation: #64
Owner privacy decision: #23 (closed/approved)

Raw outcome

Integrate accounts-owned MemberProfile, SlackAccessGrant, legacy compatibility projections, and queued/delivery state into #64's account access/export, correction, full-erasure, retention, processor propagation, and restore-tombstone workflow. The member-domain adapter must expose all owned data and erase personal fields/future Slack eligibility without leaking the shared Slack secret or silently rewriting separately retained course history.

This is an accounts/email domain adapter into #64, not a second global privacy inventory, generic rights intake engine, or tombstone scheduler.

Dependencies and boundaries

Interface acceptance gate

PM may groom the bounded backend adapter only after these implementation-facing contracts are accepted, integrated, and identified by exact merge SHA/schema version:

  • #254: canonical privacy authority/register version, required-domain manifest entry, field/right dispositions, retention classes, safe policy/block/exception codes, and unresolved HUMAN states.
  • #255: privacy-request aggregate, domain-adapter registration, domain-work lifecycle, idempotency/revision, safe DTO/error, transaction, and durable-job boundary.
  • #256: portable-export and correction adapter protocols, envelope/part schemas, artifact lifecycle seam, and safe result contract.
  • #257: retention definition/runner/checkpoint/result protocols.
  • #258: erasure tombstone, restore replay, fencing, checkpoint, and receipt interfaces.
  • #259: invalidation/processor operation, ambiguity, receipt, generation/watermark, and reconciliation interfaces.
  • #247, #248, and #249: accepted MemberProfile schema/service, compatibility projections, onboarding states, SlackAccessGrant, reveal/resend denial behavior, and invite-version semantics.
  • #49: accepted website EmailDelivery/logical-intent, cancellation/reconciliation, projected-state, and Relay boundary.

The #64 parent coordinates policy and HUMAN closure; it is not itself an implementation interface. #250 is a downstream Studio/admin consumer of this adapter, not a prerequisite; do not create a #250 ↔ #251 cycle. #32/#33 are required for later management-surface activation owned by #250, not for a backend-only #251 adapter.

Operational activation gate

Accepted execution-disabled interfaces are sufficient to groom and later test a backend-only adapter with synthetic data. They do not authorize live privacy execution. Production/protected-data activation remains separately gated by the accepted #254 authority row and HUMAN values, enabled production registrations in #255–#259, #66 restore/startup enforcement, applicable #49 Relay readiness and processor receipts, and every owning operational lifecycle. Until then, production registration and execution must fail closed; a delivered backend slice uses Refs #251 and leaves this issue open.

Apply #23's owner-approved full-erasure direction and approved provisional retention defaults. Preserve the explicit already-issued real-name certificate exception and non-PII reconciliation evidence exactly as the privacy authority defines; do not invent broader retention exceptions.

Course registration snapshots and educational records remain courses-owned and follow #64/#242 policy. This child supplies member-domain hooks/results only and never directly rewrites course rows.

No production-data operation, policy invention, public UI, generic accountless rights flow, global processor inventory, Slack API/SCIM revocation, raw link export, or unrelated domain deletion.

Raw acceptance direction

  • Account export includes the owner's profile fields, completion/revision metadata, grant and safe delivery-state metadata, and compatibility-projection provenance; it never returns the Slack URL, another member's data, provider payload/body, credentials, or unsafe internal identifiers.
  • Correction flows through the normal accounts service and revision/audit contract.
  • Full erasure removes/anonymizes every member-profile PII field as the accepted #64 primitive requires, denies future Slack reveal/resend, cancels safe unsent work, clears compatibility/search/cache/export copies, propagates to Relay/provider state where authorized, and leaves only bounded non-PII tombstone/reconciliation evidence. It does not claim to remove an already-used external Slack membership.
  • Retry/crash/resume/concurrent request is idempotent; partial processor failure remains visible and retryable; legal/retention exceptions fail closed and are explicit; restoring a pre-erasure backup replays the tombstone before profile use, reveal, export, or send.
  • Test active/incomplete/quarantined/deleted profiles, rotated grants, queued/in-flight/ambiguous/suppressed deliveries, export authorization/non-enumeration, correction races, erasure replay, cache/search rebuild, provider failure, restore, and artifact/log/audit canaries using synthetic data only.
  • Browser screenshots are required only for changed rights/Studio surfaces selected by the verification graph; backend-only adapters may mark screenshots not_applicable with graph evidence. Never capture member values or the Slack link.

PM must bind the exact accepted #254 register/manifest identity, #255–#259 service/event/receipt/tombstone schemas, #247–#249/#49 domain symbols, field-level erasure-versus-retention matrix, processor behavior, and accepted prerequisite merge SHAs before removing needs grooming.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with parent issue #64 and the accepted contracts required from #254–#259, #247–#249, and #49; this issue does not name implementation files or entry points. Confirm the exact merge SHAs and schemas before grooming the adapter. Done means synthetic-data coverage for export, correction, erasure, retries, restore, processor failure, and safe non-disclosure, while production execution remains disabled.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend, security
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.