Aggregate counts of grievances received and resolved, DPDP data-rights requests, takedown actions, and security events. No personal identifiers are published — only totals.
Schema: transparency-v1
| Generated: Loading…
What this report shows
Each counter below is a simple SQL COUNT(*) over our audit log and data-rights table. We publish two reporting windows — the last 30 days, and lifetime totals. The numbers update live with each page load.
No personal identifiers (names, emails, IPs, case IDs) are exposed. The underlying audit log is hash-chained to prevent tampering (see Phase 0.11 in our security roadmap).
Content takedown requests received via the legal-notices channel
—
Received
—
Acted on
Security Events
Aggregated from our hash-chained audit log
—
Rate-limit hits
—
Permission denials
—
Account erasures
—
Anomalies detected
If a category shows 0/0, either no events of that type have been recorded yet, or the table backing that counter has not yet shipped (e.g. legal_notices is part of Phase 0.12). Counters are not retroactively re-classified; once shipped, they fill in going forward.
Audit chain tip
Every security-relevant event we record is chained to the previous event via SHA-256 (Phase 0.11). The current tip hash is published below. Record it externally — if we ever silently edit an interior audit row, the chain verification will fail.
Tip: —
Algorithm: SHA-256 over canonical pre-image. Updated live.
Live verification
—
Knowledge-graph mutations
Every change to our legal knowledge graph (sections, precedents, draft variants) is recorded as an audit-chain event in the kg.* namespace. This card surfaces the most recent mutations directly — no need to scroll the full chain.
Loading recent KG events…
Endpoint: /api/transparency/kg-events · projects only the curated payload subset · DPDP-safe (no actor / case / document refs)
KG curation — this week (aggregate-only)
Aggregate counters for the knowledge-graph correction queue over the lookback window. Counts by surface (what is being corrected) and by status (the lifecycle of a proposal). The median triage latency is the p50 — never p99 or a full distribution — to avoid fingerprinting individual reviews. No per-proposal rows ever cross this surface.
Network health — Verified Contributor Network (aggregate-only)
The size and shape of the verified contributor network behind the knowledge graph (Moat #7). Counts by tier (T1 citizen → T4 judicial) for the full network and for the publicly-listed subset. The median onboarding-to-first-acceptance latency is the p50 — never p99 — to avoid fingerprinting individual reviews. The 30-day net positive reputation flow sums only growth (rejections excluded) so a network in a heavy review backlog does not falsely read as shrinking. No per-contributor row ever crosses this surface — no contributorId, no displayName, no token, no bio.
Reputation flow — daily history (last 30 UTC days, aggregate-only)
A day-by-day breakdown of the positive reputation flow surfaced as a single scalar on the Network Health tile above. Each bar is one UTC day; the height is the sum of positive delta_reputation across accepted contributions on that day. No per-contributor row crosses the wire — only daily totals and bucket sample sizes. Window is hard-coded at 30 days; the day index resets at UTC midnight.
Loading reputation-flow-history…
30-day total (+)
—
Peak day (+)
—
Active days (any accept)
—
Daily breakdown (oldest → newest, UTC)
——
Endpoint: /api/transparency/reputation-flow-history · GET-only · aggregate-only · 30-day window hard-coded · day buckets UTC · NO per-contributor rows
The shape of the audit chain itself: how many events have been recorded, how they're distributed across severity classes (info / notice / warning / critical) and namespaces (contributor.* / security.* / kg.* / etc.), and the 7-day rolling daily rate. Pair this with /api/transparency/verify-chain (which proves the chain is untampered) to close the trust loop: we can prove it's intact AND we can show you what's in it, both at aggregate resolution only. No event id, no actor, no payload, no row hash ever crosses this surface.
Public scorecard for the background cron dispatchers that keep the platform self-improving: when each cron last ran successfully, when each was last skipped (typically auth failure during a deploy window), and a 7-day count of successes vs. skips. Sourced entirely from the audit chain's own security.cron_action and security.cron_skipped events. Aggregate-only — no bearer-token contents, no IP addresses, no payload internals.
Where contributors are in the verification pipeline, in 5 buckets that partition the population exactly once: signed in but no credentials submitted yet → credentials submitted but pending verification → credentials verified but no contributions yet → first contribution submitted but pending review → first contribution accepted. The 7-day delta arrows show how many contributors entered each bucket within the last 7 days, surfacing where new arrivals are stalling. Aggregate-only — no per-contributor identifiers ever leave the database.
Total contributors
—
7-day distinct accepts
—
1. Signed in — no credentials—
—
2. Credentials submitted — pending—
—
3. Credentials verified — no contributions—
—
4. First contribution — pending review—
—
5. First contribution — accepted—
—
Endpoint: /api/transparency/contributor-onboarding-funnel · GET-only · aggregate-only · 7-day window hard-coded · 5 canonical states partition population exactly once
Credential mix
What kinds of credentials the platform has actually collected, and how many of each are verified vs. pending vs. rejected vs. expired.
Is the self-improving moat actually spinning? Five independent improvement loops (reviewer, KG-edit, contributor, translation-review, audit-chain) measured as 7-day per-day rates and summed into a single composite flywheel-RPM.
A single machine-readable manifest of every transparency surface — enforced by a two-way filesystem↔registry bijection. Drift is structurally impossible.
A single round-trip aggregator that composes ALL 26 transparency surfaces into one canonically-serialized JSON bundle with a SHA-256 digest. Verify locally: sha256(canonical(bundle)) === digest.
A public manifest of every npm dependency, Cloudflare runtime compatibility_date, and SRI host allow-list. Gate 75 enforces equality with package.json + wrangler.jsonc — supply-chain drift is structurally impossible.
A public manifest of every D1 migration file under cloudflare/migrations/. Gate 78 enforces filesystem↔endpoint equality + canonical naming + monotonic numbering — silent schema-history rewriting is structurally impossible.
A public manifest of every CSP directive — 15 directives + 6 defensive-baseline invariants. Gate 80 enforces a three-way bijection between this manifest, functions/_middleware.js, and the on-disk _headers file — CSP drift is structurally impossible.
A public manifest of every non-CSP security header — 9 headers + 26-directive Permissions-Policy + 8 defensive-baseline invariants. Gate 81 enforces a three-way bijection between this manifest, functions/_middleware.js, and the on-disk _headers file — drift is structurally impossible.