content-explorer/research/baseline/2026-10-12-upstream-baseline.md
tegwick 072a7fa550 Freeze the v0.1 contract and the local ingest connector.
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
2026-10-12 19:07:32 +02:00

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 tsc ran out of memory. The same command passed with a 6 GB heap.
  • R2: production next build and the full test and lint runs were not executed.
  • R1: NOTICE is 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 -v found none). The task stays open. Live page titles were fetched over HTTP only.