{"data":{"version":"1.0.0","last_updated":"2026-01-01","title":"How The One computes and publishes its quarterly graduation disclosure","summary":"The One is required by its seventh structural commitment to publish, on the first day of each new quarter, a machine-readable disclosure of the platform's graduation rate. This document defines every term in that disclosure: what counts as a released match, what counts as a graduation, how cohorts are defined, how rates are computed, and how the year-one outcome is verified. The number is computed by a scheduled job that writes directly to the disclosure_snapshots table; no human approves the number before it publishes.","sections":[{"id":"counts","title":"What the top-level counts mean","body":["Each disclosure snapshot is the result of a single read against the production database, taken at snapshot_at (ISO-8601 timestamp, UTC).","total_matches_released is the number of matches whose released_at timestamp falls on or before the snapshot_at instant. A match is only counted once, regardless of how many times its state was updated.","total_graduations is the number of rows in the graduations table whose graduated_at timestamp falls on or before snapshot_at. Each match can graduate at most once.","total_year_one_sustained is the number of graduations whose year_one_check_at occurred on or before snapshot_at AND whose year_one_status is \"sustained\". Graduations that have not yet reached their year-one anniversary are NOT counted as failures, they are simply not yet eligible.","Three integers; no rounding, no projections, no smoothing. Each integer is the literal count returned by SELECT count(*) against the production database at the snapshot instant."]},{"id":"match-released","title":"What \"match released\" means","body":["A match exists in the database from the moment a reviewer writes their note (matches.reviewer_decision_at). It is not yet \"released.\"","A match is \"released\" the moment a reviewer's decision is delivered to both users, that is the value stored in matches.released_at. Only released matches count toward total_matches_released. Internal candidate pairings that a reviewer wrote and then revoked before delivery are never counted.","A released match cannot be unreleased. The released_at column is write-once at the database level.","A match released within the snapshot quarter contributes to that quarter's \"matches released this quarter\" line in the cohort breakdown for that quarter."]},{"id":"graduation","title":"What counts as a graduation","body":["A graduation is recorded by a reviewer in the graduations table when, and only when, three conditions are simultaneously true:","  (a) both partners have independently affirmed the relationship has reached the platform's definition of graduation (user_a_confirmed_at and user_b_confirmed_at are both non-null);","  (b) a reviewer has confirmed they spoke with both partners and that the affirmation is the partners' own framing, not a prompt from the platform; and","  (c) the match is in outcome = 'continuing' at the moment of graduation, which the database enforces.","Graduation is the only terminal state of a match that is positive. All other terminal states, declined, expired, exit-interviewed, start the six-month cooldown for both partners.","A graduation cannot be retroactively created. graduated_at is the wall-clock moment the reviewer recorded the row. If a couple separates later, the graduation row is not deleted; their year_one_status becomes \"separated\" instead."]},{"id":"year-one-verification","title":"Year-one verification process","body":["Twelve months after graduated_at, the platform schedules a year-one check for the graduated match. The check is conducted by a reviewer (not by a marketing system) via the channel each partner chose at graduation.","The check asks one question of each partner: \"Are you still in the relationship?\" The reviewer records year_one_check_at as the timestamp the check was completed and year_one_status as one of:","  - \"sustained\": both partners confirm the relationship continues.","  - \"separated\": either partner reports the relationship has ended, OR the partners give conflicting answers, OR one partner confirms and one declines to respond after good-faith outreach.","  - \"unreachable\": after at least three contact attempts across the channels the partners provided, neither partner can be reached.","Only year_one_status = \"sustained\" contributes to total_year_one_sustained. \"Unreachable\" is reported separately in the cohort breakdown and is NOT counted as either sustained or separated, to avoid penalizing the platform for the partners' choice to disengage from check-ins.","A graduation that has not yet reached its twelve-month anniversary at snapshot_at is reported in the cohort breakdown as \"year_one_eligible = 0\", it is not a failure, it is not yet measurable."]},{"id":"cohorts","title":"How cohorts are defined","body":["Every cohort in cohort_breakdowns is keyed by the quarter in which the matches were released (YYYYQ[1-4]). Cohort assignment is based on matches.released_at, not on graduated_at.","For each cohort, the breakdown reports:","  - matches_released: total matches released in that quarter (the cohort size).","  - graduations: matches from that cohort that have graduated at any point on or before snapshot_at.","  - year_one_eligible: graduations from this cohort whose graduated_at is more than twelve months before snapshot_at.","  - year_one_sustained / year_one_separated / year_one_unreachable: the three possible outcomes of the year-one check, restricted to the year_one_eligible subset. These three values sum to year_one_eligible.","Cohorts are cumulative, a match released in 2026Q1 will appear in the 2026Q1 cohort row of every future quarterly snapshot. This is what allows year-one rates to be honestly tracked over time without restating prior disclosures.","A cohort newer than one year will always show year_one_eligible = 0. That is correct, not missing data."]},{"id":"graduation-rate","title":"How rates are derived (and why this API does not publish them directly)","body":["The API publishes counts, not ratios. The ratios users care about are simple to derive and depend on which question is being asked:","  - Cumulative graduation rate = total_graduations / total_matches_released.","  - Cohort graduation rate (for cohort C) = cohort.graduations / cohort.matches_released.","  - Cohort year-one sustained rate (for cohort C) = cohort.year_one_sustained / cohort.year_one_eligible.","Publishing counts instead of pre-computed rates protects the disclosure from rounding decisions and lets independent analysts reproduce the headline number byte-for-byte. A scientist and a journalist will compute the same rate from the same disclosure; the platform does not get to choose between numerator and denominator definitions.","The cumulative graduation rate is biased low until the platform has been operating for years, because the denominator includes recent matches that have not had time to graduate. This is honest, not flattering. The cohort view is the better signal once cohorts mature."]},{"id":"integrity","title":"Integrity guarantees","body":["Every snapshot row includes computed_by_version (the git SHA of the cron job that wrote it) and commitments_hash (the sha256 of the COMMITMENTS.md file at write time). If any of these change across quarters, that change is visible in the disclosure itself.","The disclosure_snapshots table is append-only by RLS. There is no UPDATE or DELETE policy. Once a snapshot is written, the only way to change it is a database migration that itself is a public artifact.","No human approves a snapshot before it publishes. The cron writes; the API serves whatever the cron wrote. If the number is bad, the number is bad, the platform reports it and addresses the cause."]}],"changelog":[{"version":"1.0.0","date":"2026-01-01","note":"Initial methodology document published alongside the v1 API."}]}}