spb/cancerindex
Public
TypeScript 97.2%
SQL 1.5%
CSS 0.6%
JavaScript 0.5%
1import type { Metadata } from 'next';2import Link from 'next/link';3import { PageHeader, Section } from '@/components/ui/section';4import { ClaimBadge } from '@/components/ui/badge';5import { CONTACT_EMAIL, DISCLAIMER } from '@/lib/site';67export const metadata: Metadata = { title: 'Trust & policies', description: 'Provenance, methodology, AI policy, privacy, security, source policy and corrections.' };89export default function TrustPage() {10 return (11 <div className="ci-prose max-w-3xl">12 <PageHeader kicker="Trust" title="Trust & policies" lede={DISCLAIMER} />13 <Section id="provenance" kicker="§2" title="Provenance">14 <p>Every imported fact carries a provenance row: source, dataset, version, retrieval date, evidence type, license and — where relevant — PMID or DOI. Raw payloads are archived unchanged. Hover any source badge to see the chain; administrators can trace any value to its raw record.</p>15 </Section>16 <Section id="methodology" kicker="§250" title="Methodology">17 <p>18 Derived values reference a versioned formula from the public <Link className="ci-link" href="/methodology">metric catalog</Link>. Snapshots store their inputs hash; identical inputs yield identical ranks.19 </p>20 </Section>21 <Section id="labels" kicker="§3" title="Scientific safety labels">22 <p className="flex flex-wrap items-center gap-1.5">23 <ClaimBadge kind="observed" /> <ClaimBadge kind="published" /> <ClaimBadge kind="curated" /> <ClaimBadge kind="regulatory" /> <ClaimBadge kind="guideline" /> <ClaimBadge kind="computed" /> <ClaimBadge kind="ai" />24 </p>25 <p className="mt-2">Labels are never merged. Regulatory status is always tied to a jurisdiction and an indication. Population survival is never presented as an individual prognosis.</p>26 </Section>27 <Section id="ai" kicker="AI policy" title="AI-generated content: not enabled">28 <p>Phase 1 contains no AI-generated text. When AI synthesis is introduced, it will be database-grounded only (answers must cite records present in the index), cached with the model name, prompt version and record snapshot, and always labelled "AI-generated". Language models are never used to map source labels to entities; at most they propose candidates that a curator reviews.</p>29 </Section>30 <Section id="privacy" kicker="Privacy" title="Privacy">31 <p>CancerIndex holds no patient-level data: all statistics are aggregate and published by their sources. The site sets no tracking cookies; the only cookie is the administrator session. Server logs retain IP addresses for a short period for abuse prevention.</p>32 </Section>33 <Section id="security" kicker="Security" title="Security">34 <p>Read-only public access; administrative actions require a token and are written to an audit log. Connectors run with rate limits, idempotent writes and an anomaly guard that refuses destructive updates when a source shrinks unexpectedly. Report vulnerabilities to {CONTACT_EMAIL}.</p>35 </Section>36 <Section id="sources" kicker="Source policy" title="Source policy">37 <p>38 A connector goes live only after its license is reviewed; sources under review are listed with no public records. Attribution requirements are honoured on every page and in exports. See the <Link className="ci-link" href="/sources">source registry</Link>.39 </p>40 </Section>41 <Section id="corrections" kicker="Corrections" title="Corrections and takedowns">42 <p>43 Found an error, a mis-mapped label or a licensing concern? Write to <a className="ci-link" href={`mailto:${CONTACT_EMAIL}`}>{CONTACT_EMAIL}</a> with the page URL and the identifier (CI-…). Corrections are recorded as change events on the affected entity.44 </p>45 </Section>46 </div>47 );48}49