MY-2571 wiring contract

Buttondown export fields before a live leaderboard.

Define the minimum Buttondown subscriber export shape needed to build a private Cork referral ledger and a redacted public leaderboard.

Do not publish live rankings, email subscribers, contact referrers, fulfil rewards or expose raw Buttondown exports until attribution, abuse review and editor approval have passed.

Latest dry-run result

Fixture-only proof for the privacy transform. This is not a live Buttondown export and does not publish real reader rankings.

OpenStatuspassed - growth/fixtures/buttondown-referral-export-dry-run.jsonOpenAccepted rows10 - Confirmed Cork website subscribers accepted into the private dry-run ledger.OpenRejected rows5 - Rows blocked before public scoring.OpenPublic rows3 - Rows emitted to redacted fixture-only leaderboard JSON.

Rejected fixture rows

Rows must be blocked before any public score is calculated.

Openduplicate confirmed email hash1 fixture row(s) rejected by the privacy transform.Openunconfirmed subscriber1 fixture row(s) rejected by the privacy transform.Openwrong market1 fixture row(s) rejected by the privacy transform.Openmissing website subscribe tag1 fixture row(s) rejected by the privacy transform.Openself referral1 fixture row(s) rejected by the privacy transform.

Export inputs

Fields required from Buttondown before private referral attribution can be trusted.

Private ledger schema

These fields stay outside public website output.

OpenPrivate fieldbuttondown_subscriber_idOpenPrivate fieldconfirmed_email_hashOpenPrivate fieldreader_token_hashOpenPrivate fieldreferral_source_hashOpenPrivate fieldsignup_marketOpenPrivate fieldcreated_atOpenPrivate fieldconfirmed_atOpenPrivate fieldsource_tagOpenPrivate fieldfraud_review_statusOpenPrivate fieldmanual_reward_status

Public JSON schema

Only these fields can appear in future public leaderboard output.

OpenPublic fieldrankOpenPublic fielddisplay_nameOpenPublic fieldareaOpenPublic fieldconfirmed_referralsOpenPublic fieldreward_tierOpenPublic fieldreviewed_at

Transform checks

Assertions for the dry run before any live Buttondown export or reward publication.

OpenTransform checkReject rows where signup_market is not good-morning-cork.OpenTransform checkReject rows without website-subscribe tag unless they are manually whitelisted.OpenTransform checkReject rows where is_confirmed is false.OpenTransform checkHash email, reader_token and referral_source before writing any private ledger file.OpenTransform checkExclude self-referrals where subscriber hash and referrer-owned hash match.OpenTransform checkExclude duplicate confirmed_email_hash rows from public counts.OpenTransform checkReplace unsafe display names or areas before writing public JSON: emails, URLs, long strings, angle brackets and street-level numeric detail must fall back to broad reader labels.OpenTransform checkEmit only publicLeaderboardSchema fields to website/public/leaderboard/leaderboard.json.

Dry-run proof

Evidence to attach to MY-2571 before enabling live attribution.

OpenDry-run proofRun export transform against a fixture with confirmed, unconfirmed, duplicate and self-referral rows.OpenDry-run proofAssert no email, Buttondown id, raw reader token or raw referral source appears in public JSON.OpenDry-run proofAssert unsafe display metadata is redacted before public leaderboard output.OpenDry-run proofAssert the public leaderboard stays hidden if any top-ten row has fraud_review_status other than cleared.OpenDry-run proofRecord fixture result in Linear MY-2571 before enabling a live Buttondown export.

Next actions

Internal prep only. Live exports and public rankings still need approval.

OpenNext actionCreate a local fixture for the export shape above.OpenNext actionAdd a transform script that writes private and public outputs separately.OpenNext actionWire the public page to leaderboard.json only after the privacy assertions pass.OpenNext actionRequest explicit approval before any live Buttondown API export or reward publication.