revokeConsent() exists at src/db/repo.ts:321 and has no callers. No CLI subcommand, no modal, no slash command reaches it — revocation is currently only possible by hand-editing SQLite.
docs/consent-form.md tells parents they may withdraw consent at any time in writing, so this is a right we promise and cannot currently perform.
Shape: a revoke-consent subcommand alongside import-consents. It needs no Slack credentials, so it fits the CLI's existing dataDir()-only constraint — don't reach for config().
Once revoked, consentStatus already returns revoked, mayHoldAccount returns false, and the next sweep raises unconsented_account for a still-existing account. The enforcement half already works; only the entry point is missing.
revokeConsent()exists atsrc/db/repo.ts:321and has no callers. No CLI subcommand, no modal, no slash command reaches it — revocation is currently only possible by hand-editing SQLite.docs/consent-form.mdtells parents they may withdraw consent at any time in writing, so this is a right we promise and cannot currently perform.Shape: a
revoke-consentsubcommand alongsideimport-consents. It needs no Slack credentials, so it fits the CLI's existingdataDir()-only constraint — don't reach forconfig().Once revoked,
consentStatusalready returnsrevoked,mayHoldAccountreturns false, and the next sweep raisesunconsented_accountfor a still-existing account. The enforcement half already works; only the entry point is missing.