The snapshot and manifest schemas, both example dataspaces, and the shared text renderer now pass the fixture validator and the negative contract tests. JSON, NDJSON, and Markdown frontmatter publish a snapshot only when rights, identity, and references allow it. CONTENT-WP-0001 and CONTENT-WP-0003 are marked finished against those artifacts. CONTENT-WP-0000-T04 stays open. SCOPE.md and the 19:05 scope-against-intent note record the stop. Assistant: grok Assistant-Session: 01a130f1-abfb-7d71-9cd6-a8b75ec7f95a
7.9 KiB
Upstream baseline — 2026-10-12
Pin: b594d7433bf4e408b44215e25e5304696d6f840e on https://github.com/judegomila/OnCo.git.
Subject: chore: render this week's issue to public/newsletter/ (#254) (2026-10-12 08:17:45 +0000).
Local checkout: upstream-onco/, gitignored. This report does not vendor upstream source or corpus text.
Re-count with python3 scripts/audit_upstream.py.
Reproduce
Node v24.11.1, npm 11.6.2.
| Command | Result |
|---|---|
npm ci --ignore-scripts |
Exit 0. 473 packages added, 474 audited. npm reported 13 vulnerabilities (2 moderate, 9 high, 2 critical). Lifecycle scripts were skipped. |
NODE_OPTIONS=--max-old-space-size=6144 npx tsc --noEmit |
Exit 0, no diagnostics. |
npx tsc --noEmit at the default heap |
Exit 134. V8 mark-compact failed near a 2 GB heap. |
npx vitest run src/lib/dag.test.ts src/components/CollapsibleSection.test.ts src/lib/graph-layout.test.ts |
Exit 0. 3 files, 23 tests. |
npx eslint src/lib/kinds.ts src/lib/dag.ts src/components/filters/ResultsTable.tsx src/components/ui.tsx |
Exit 0, no findings. |
npm run build / npm test / full npm run lint |
Not run. |
npm run build starts with build:api, which runs network fetchers and corpus compilers (github-stars, embeddings, ask, similar, triples, context, freshness, newsletter) before next build. That is a publication pipeline, not a check that the UI typechecks. The full Vitest run loads the corpus (src/lib/graph.test.ts is named corpus). Both stay out of this pass. R2 is partly open: the toolchain reproduces; the static site build does not.
License matrix
There is no NOTICE file. LICENSE is MIT, copyright line Copyright (c) 2026 OnCo. package.json declares "license": "MIT". That grant covers the software, not the corpus.
| Material | Path | Terms | Decision |
|---|---|---|---|
| Application source | src/ except src/data/, scripts/, packages/, mcp/ |
MIT | May adapt later. Keep the copyright and permission notice with any copied portion. |
| Corpus | src/data/ (583 files) |
CC BY-NC 4.0, copyright OnCo and contributors | Do not copy. Commercial and internal-pipeline use needs permission. |
| Logos | public/logos/ |
Owner trademarks; some Wikimedia files with per-file terms in index.json |
Do not copy. |
| Portraits | public/portraits/ |
Per-file free licences, not the MIT grant | Do not copy. |
| Favicons | fetched via a third-party favicon service | Organisations' own icons | Do not copy. |
| Direct npm dependencies | see below | MIT, ISC, or Apache-2.0 | Usable. No copyleft in the direct set. |
Direct dependencies at the locked versions: @modelcontextprotocol/sdk 1.30.0 MIT, d3-geo 3.1.1 ISC, minisearch 7.2.0 MIT, next 16.3.4 MIT, react 19.2.8 MIT, react-dom 19.2.8 MIT, topojson-client 3.1.0 ISC, zod 4.5.4 MIT. Dev: Tailwind 4.3.3 MIT, TypeScript 5.9.3 Apache-2.0, ESLint 9.39.5 MIT, Vitest 5.0.0 MIT, tsx 4.23.13 MIT, esbuild 0.28.2 MIT, and the @types/* packages MIT.
public/ holds 13,458 files and almost no code. Treat it as assets, not as MIT source.
Size
| Tree | Files | Code files (.ts, .tsx, .js, .mjs) |
|---|---|---|
src/ |
1,439 | 1,408 |
src/data/ |
583 | 559 |
src/components/ |
298 | 298 |
src/lib/ |
324 | 323 |
src/app/ |
233 | 227 |
scripts/ |
177 | 170 |
src/lib/kinds.ts is the zod-free half of the model so client components do not import schema.ts. It lists 20 kinds: cancer, section, technology, target, drug, company, institution, pathway, term, trial, pairing, roadmap, idea, collection, person, bottleneck, paper, journal, biomarker, year. Every kind label and blurb is oncology vocabulary.
Shared relation fields: related, cancers, sections, technologies, targets, drugs, companies, institutions, pathways, terms, trials, people, bottlenecks, keyPapers, journals, dependsOn. related and dependsOn are the generic ones.
A filename search for cancer, drug, target, trial, and similar tokens hits 61 code files under src/components, src/lib, and src/app. The token adc also matches Breadcrumbs.tsx, so the count is an upper bound, not a reuse list.
Import trace
| File | Local imports | What is coupled |
|---|---|---|
src/components/EntityBrowser.tsx (34,991 bytes) |
32 | CancerIcon, TargetThumb, TechThumb, MoleculeSlot, ApprovalChip, plus generic filters/ResultsTable, browser-sort, URL table state |
src/components/EntityDetail.tsx |
111 | Cancer record tabs, molecule viewer, trial finder, dosing, coverage, investor panels. Also generic header, TL;DR, citations, neighbours, sources, tabs |
src/lib/graph.ts |
2 | EntitySchema and ALL_INPUTS from @/data. forCancer is a dedicated traversal. Extra edges for pairing, roadmap, cancer, pathway, biomarker, company |
src/app/[kind]/page.tsx |
22 | Index shell plus branches for cancer, drug, and target |
src/lib/nav.ts |
— | Absent at this pin. Navigation is not a single module. |
src/lib/schema.ts |
— | Domain subtypes over a shared base. Server code re-exports kinds.ts. |
Reuse decision
| Piece | Decision |
|---|---|
filters/ResultsTable.tsx, FacetSelect, browser-sort, URL query state |
Extract later. These are the generic table. |
EntityBrowser.tsx as a whole |
Do not copy. Split the row visual registry from the table first. |
ui.tsx header, TL;DR, citation chip, neighbours, source list, tabs |
Extract later as the detail shell. |
EntityDetail.tsx as a whole |
Do not copy. It is the oncology page. |
graph.ts duplicate and dangling checks, forward and reverse links |
Reimplement the behaviour against the canonical snapshot. Do not import ALL_INPUTS or forCancer. |
kinds.ts / KIND_META |
Do not copy the enum. Copy the idea of a zod-free manifest the client can import. |
[kind]/page.tsx |
Copy the static index pattern only. Drop the cancer, drug, and target branches. |
src/data, public/logos, public/portraits |
Out of scope. |
scripts/build-api.ts and the fetchers |
Copy the idea of a build-time snapshot. Do not copy cancer API clients. |
packages/, mcp/ |
Later. Same read contract, not part of the first UI extract. |
Live reference examples
No screenshots were stored. The pages are copyrighted presentation, and a bitmap is not part of the MIT grant. Keyboard walkthrough is still open (CONTENT-WP-0000-T04).
| Role | URL | Observed title |
|---|---|---|
| Home / search entry | https://onco.cc/ | OnCo: the open, cited map of cancer: treatments, targets, trials, and what is coming |
| Browse | https://onco.cc/cancers/ | Cancers · OnCo |
| Browse, second kind | https://onco.cc/drugs/ | Treatments & tests · OnCo |
| Detail | https://onco.cc/cancers/head-and-neck/ | Head and neck squamous cell carcinoma · Cancer · OnCo |
| Search / structured query | https://onco.cc/query/ | Query builder: structured questions over the corpus · OnCo |
| Relations | https://onco.cc/graph/ | Graph explorer · OnCo |
The detail page's first sections are Overview, State of the art, Anatomy and lymph node drainage, Types and stages, Subtypes, Symptoms and diagnosis, Biomarkers clinicians test, Treatment, Standard of care, Trials and papers, Biology and targets, Countries and centres. That is the oncology detail shape. The generic shell we want is title, summary, evidence, and neighbours, not those sections.
Deviations
- R2: default-heap
tscran out of memory. The same command passed with a 6 GB heap. - R2: production
next buildand the full test and lint runs were not executed. - R1:
NOTICEis absent. Preservation of the MIT notice applies when a file is copied, which this pass does not do. - T04 screenshots and the keyboard walkthrough are not done. At 18:52 CEST on 2026-10-12 the workstation had no Chrome, Chromium, Firefox, or Playwright launcher (
command -vfound none). The task stays open. Live page titles were fetched over HTTP only.