# Third-party notices and provenance audit

This file records third-party code and assets identified in the CatGo source
tree as audited at commit `ba35376e98d888aaee02f9cb34848da25110a0cf`.
It is an evidence inventory, not a legal opinion or a claim that every
third-party item has been found. CatGo is licensed under AGPL-3.0-or-later,
which does not replace or override the licenses described here. Requested
acknowledgement and citation are not additional conditions of that license.

The path scopes below are deliberately narrow. A path listed for one component
does not imply that every byte in that path came from that component, and an
unlisted path is not thereby classified as CatGo-owned. Package-manager
dependencies retain the terms shipped by their publishers and are not
enumerated here unless CatGo also copies or adapts their source or asset into
the repository.

## Confirmed notices

### Forblaze Project UFF and VSEPR crates

- Components and source:
  - `extensions/uff-relax/`:
    https://github.com/ForblazeProject/uff-relax.git
  - `extensions/vsepr-rs/`:
    https://github.com/ForblazeProject/vsepr-rs.git
- Author recorded by both component manifests: Forblaze Project
- License recorded by both component manifests: MIT OR Apache-2.0, at the
  recipient's option
- Complete retained license texts:
  - uff-relax:
    [MIT](third_party/licenses/uff-relax-MIT.txt) or
    [Apache-2.0](third_party/licenses/uff-relax-Apache-2.0.txt)
  - vsepr-rs:
    [MIT](third_party/licenses/vsepr-rs-MIT.txt) or
    [Apache-2.0](third_party/licenses/vsepr-rs-Apache-2.0.txt)

CatGo commit `dcb8a503245602dae82a4157de6a69ab1d795fe1` introduced both
component directories with their manifests, source URLs, authors, and complete
MIT and Apache-2.0 texts. Later CatGo history modifies each component's
`src/optimizer.rs`, so this notice preserves the recorded license choice for
the imported/upstream portions without claiming that every current line is
third-party-authored.

### MatterViz / historical Janosh Riebesell snapshot

- Source: https://github.com/janosh/matterviz
- Historical source URL recorded in CatGo package metadata:
  https://github.com/janosh/catgo
- License: MIT
- Preserved notice and full text:
  [`third_party/licenses/MatterViz-MIT.txt`](third_party/licenses/MatterViz-MIT.txt)

Repository evidence:

- CatGo commit `4da4da53631c057bf486a996f463201cf707d8a6` carried
  an MIT license with `Copyright (c) 2021 Janosh Riebesell`.
- The same snapshot's `package.json` named Janosh Riebesell as author and
  `https://github.com/janosh/catgo` as repository.
- Comparing that snapshot with the audited tree by exact path and Git blob ID
  finds 1,306 current path-and-blob pairs that are byte-identical.
- `readme.md` and `readme.zh.md` document MatterViz origins for the structure
  viewer, periodic table, element data, color schemes, and UI patterns.
  `src/lib/structure/polyhedra.ts` and `tests/e2e/smoke.test.ts` contain more
  specific MatterViz provenance comments.

The blob comparison proves that those 1,306 path-and-blob pairs were already
present under the historical notice. It does not establish that every current
file came from MatterViz, identify all modified descendants, or separate later
CatGo contributions within a modified file. Until maintainers complete that
mapping, the historical MIT notice is preserved for all applicable portions.

### CatRender: xyzrender, xyz2svg, and xyzgraph lineage

CatGo commit `40d0c44c2190a0b46e6bfd9ef99a80206c55c2a2` and current
source comments describe CatRender as a faithful port rather than independent
reimplementation.

Primary CatGo scope:

- `extensions/catrender-wasm/src/`
- `extensions/catrender-wasm/src/presets/`
- `src/lib/structure/catrender/`
- `tests/fidelity/`

#### xyzrender

- Source: https://github.com/aligfellow/xyzrender
- Version exercised by the fidelity report: `0.2.10`
- License: MIT
- Notice and full text:
  [`third_party/licenses/xyzrender-MIT.txt`](third_party/licenses/xyzrender-MIT.txt)

Current CatRender comments identify verbatim formulas, palette data, named
colors, presets, projection, canvas fitting, fog, and orientation behavior
from xyzrender. The exact upstream Git revision used for every ported file was
not recorded, so this is a component-and-feature scope, not a file-by-file
revision map.

#### xyz2svg

- Source: https://github.com/briling/xyz2svg
- License: MIT
- Notice and full text:
  [`third_party/licenses/xyz2svg-MIT.txt`](third_party/licenses/xyz2svg-MIT.txt)

The CatRender design identifies xyzrender as built on xyz2svg and specifically
records xyz2svg lineage for bond/SVG rendering. No direct xyz2svg revision or
complete copied-line map is recorded in CatGo history.

#### xyzgraph

- Source: https://github.com/aligfellow/xyzgraph
- Version named in current source: `1.6.10`
- License: MIT
- Notice and full text:
  [`third_party/licenses/xyzgraph-MIT.txt`](third_party/licenses/xyzgraph-MIT.txt)

`extensions/catrender-wasm/src/vdw.rs` says its data are sourced verbatim from
xyzgraph, and `extensions/catrender-wasm/src/svg.rs` identifies the symbol to
atomic-number table as verbatim xyzgraph data.

### AtomCanvas ports

- Source: https://github.com/zyc2806/atomcanvas
- License: MIT
- Notice and full text:
  [`third_party/licenses/AtomCanvas-MIT.txt`](third_party/licenses/AtomCanvas-MIT.txt)

CatGo history and source identify these adaptations:

- `src/lib/structure/select-dsl.ts`: selection parser and operation semantics;
- `src/lib/structure/bonding/bond-orders.ts`: a one-to-one TypeScript port of
  AtomCanvas bond-order heuristics; and
- `src/lib/structure/StructureScene.svelte` and related atom shader paths:
  ToonHighlightMaterial behavior.

CatGo did not record the exact AtomCanvas source revision for these ports.

### pretty-lattice material presets

- Source: https://github.com/songfeitong/pretty-lattice
- License: MIT
- Notice and full text:
  [`third_party/licenses/pretty-lattice-MIT.txt`](third_party/licenses/pretty-lattice-MIT.txt)

`src/lib/structure/rendering/visual-state.ts` and `src/lib/settings/config.ts`
identify glossy and metallic material values ported from pretty-lattice.
The audit confirms the upstream repository and MIT notice but found no pinned
upstream revision in CatGo history.

### OVITO Basic ray-cylinder implementation

- Source: https://gitlab.com/stuko/ovito
- Official project license information:
  https://www.ovito.org/manual/licenses/
- Recorded upstream revision:
  `0b2cdccef7452bf28212e15daf9df2dc7a545bcc`
- License option selected in the CatGo source comments: MIT
- Notice and full text:
  [`third_party/licenses/OVITO-MIT.txt`](third_party/licenses/OVITO-MIT.txt)

CatGo's analytic WebGL bond cylinder rendering and picking code in
`src/lib/structure/gpu/webgl2/bond-replica-renderer.ts` and
`src/lib/structure/gpu/webgl2/replica-id-picker.ts` is adapted from these
recorded upstream files:

- `src/ovito/opengl/OpenGLCylinderPrimitive.cpp`
- `src/ovito/opengl/resources/glsl/cylinder/cylinder.vert`
- `src/ovito/opengl/resources/glsl/cylinder/cylinder.frag`
- `src/ovito/opengl/resources/glsl/cylinder/cylinder_picking.vert`
- `src/ovito/opengl/resources/glsl/cylinder/cylinder_picking.frag`

Material CatGo changes include WebGL2 GLSL3 syntax, Three.js uniforms,
half-bond replica decoding, static atom-color lookup, analytic coverage,
sparse ghost halves, and GPU picking.

### whisper.cpp optional STT accelerator

- Source: https://github.com/ggml-org/whisper.cpp
- Recorded upstream revision:
  `080bbbe85230f624f0b52127f1ae1218247989f9`
- License: MIT
- Scope: optional `whisper-cli` accelerator release archives
- Preserved notice and full text:
  [`third_party/licenses/whisper.cpp-MIT.txt`](third_party/licenses/whisper.cpp-MIT.txt)

Every accelerator archive also retains the upstream file byte-for-byte at
`whisper.cpp/LICENSE` and records the repository and exact revision in
`whisper.cpp/SOURCE.json`. CatGo's AGPL-3.0-or-later license does not replace
the MIT terms for whisper.cpp.

### Vendored PORMAKE

- Source: https://github.com/Sangwon91/PORMAKE
- Recorded upstream revision:
  `639caad9d315ef6cb4838d0f8e44336d4a41aa7a`
- License: MIT
- Scope: `server/catgo/vendor/pormake/`
- Retained upstream text:
  [`third_party/licenses/PORMAKE-MIT.txt`](third_party/licenses/PORMAKE-MIT.txt)

CatGo commit `5e7411ef1da98fd0139cf72e586b43f5451b94d9` records that
the tree was copied from PORMAKE, `experimental/` was omitted, and
`scaler.py` was changed from JAX to NumPy/SciPy.

### PORMAKE database and RCSR-derived topology collection — notice-backed evidence

- Paths: `server/catgo/vendor/pormake/database/` and
  `server/catgo/vendor/pormake/database/topologies/RCSR_topology.zip`
- Official PyPI project and version: `pormake 0.2.2`
- Machine-readable evidence:
  [`third_party/provenance/pormake-database-provenance.json`](third_party/provenance/pormake-database-provenance.json)
- Official publisher artifacts:
  - `pormake-0.2.2-py3-none-any.whl`
    (SHA-256 `cdcd945ed9146781cb05154b34cc4fb283c84e0d12cd6e0bb6c31e223c293c20`):
    https://files.pythonhosted.org/packages/c4/a5/f374f804c02b2be4d31f2f70452d5028f28753ce9a19bc664efdf36e4893/pormake-0.2.2-py3-none-any.whl
  - `pormake-0.2.2.tar.gz`
    (SHA-256 `d5b73897cf4f3b3828073f7ba71ece535172318e709a9a2186b925c40c37a04e`):
    https://files.pythonhosted.org/packages/22/c2/0b8ce705072c2c7aa52bcd15c08d1ee96ef1abb5971c6c6195e827e12a25/pormake-0.2.2.tar.gz

Both artifacts contain the identical 3,274-file database at
`pormake/database`. Both artifacts retain the MIT license: the wheel has
`pormake-0.2.2.dist-info/LICENSE.md` and the sdist has `LICENSE.md`. That
1,064-byte text has SHA-256
`62bf3249aed0b2105bd66c0f99283f68d97e6afac79cd5a2df083821373c1a31` and is
byte-identical to both retained CatGo copies at
`server/catgo/vendor/pormake/LICENSE` and
`third_party/licenses/PORMAKE-MIT.txt`.

This supplies the immediate-publisher notice basis for **NOTICE_BACKED**
distribution evidence for the listed CatGo database path. It does not establish
an independent chain of title for each dataset contribution. The
ToBaCCo/CoRE/RCSR independent chain of title was not separately established;
the source-specific caveats below remain part of the record. The audited ACS
supporting-information terms are CC BY-NC only for the supporting information
and are not extrapolated to the underlying ToBaCCo data. CoRE Zenodo record
3370144 is CC BY 4.0, but an E/N per-file mapping to the 796 bundled files has not been established. The current `odf/RCSR` repository declares no license,
and no dedicated open redistribution license was found for the audited CGD/ZIP
collection. This is a provenance record, not a legal conclusion.

### sql.js WebAssembly binary

- Source: https://github.com/sql-js/sql.js
- License: MIT
- Scope: `static/sql-wasm.wasm`
- Notice and full text:
  [`third_party/licenses/sql.js-MIT.txt`](third_party/licenses/sql.js-MIT.txt)

CatGo commit `fa62230e` records adding this binary for the sql.js desktop
fallback. The audited binary SHA-256 is
`9125e039f90b91617b6327d6fe271865248a1ae36fa3857d022cd213c730f6f6`.
The exact sql.js release/build revision used to produce it was not recorded.

### Bundled fonts

- Scope: `src/lib/fonts/`
- License: SIL Open Font License 1.1 (`OFL-1.1`)
- Font-specific notices:
  [`third_party/licenses/BUNDLED-FONTS.txt`](third_party/licenses/BUNDLED-FONTS.txt)
- Complete common license text:
  [`third_party/licenses/OFL-1.1.txt`](third_party/licenses/OFL-1.1.txt)

The bundled files' internal font metadata confirms the named copyright and
license records for Geist, Cascadia Code, Fira Code, JetBrains Mono, and
Source Code Pro. Geist also retains its source-specific text at
`src/lib/fonts/Geist-OFL.txt`.

### MediaPipe Hand Landmarker model bundle

- Scope: `static/models/hand_landmarker.task`
- Official Google model guide:
  https://developers.google.com/edge/mediapipe/solutions/vision/hand_landmarker
- Official bundle URL linked as "Latest" by that guide:
  https://storage.googleapis.com/mediapipe-models/hand_landmarker/hand_landmarker/float16/latest/hand_landmarker.task
- Official model card linked by that guide:
  https://storage.googleapis.com/mediapipe-assets/Model%20Card%20Hand%20Tracking%20%28Lite_Full%29%20with%20Fairness%20Oct%202021.pdf
- License: Apache-2.0
- [Apache-2.0 full text](third_party/licenses/Apache-2.0.txt)
- Audited SHA-256:
  `fbc2a30080c3c557093b5ddfc334698132eb341044ccee322ccf8bcf3607cde1`

The official guide says the Hand Landmarker task bundle contains the palm
detection and hand-landmark models, links the bundle above as its full,
float16 "Latest" model, and links the model card above for model information.
That model card identifies the license as Apache License, Version 2.0. On
2026-07-25 the official "Latest" download was byte-identical to CatGo's
bundled file at the recorded SHA-256.

## Confirmed source references with bounded provenance maps

The following records separate exact imports, adapted implementations, adapted
tests, copied data, and format/API interoperability. The complete
machine-readable evidence ledger is
[`third_party/provenance/pymatgen-ase-xterm-provenance.json`](third_party/provenance/pymatgen-ase-xterm-provenance.json).
These technical mappings make no legal conclusion. Where the historical record
does not prove the revision actually used by the original author, the immutable
revision below is identified only as a verified audit snapshot and the external
evidence gate remains open.

The bounded pymatgen, ASE, MatterViz, and xterm.js mappings are supported by
retained notices that provide **NOTICE_BACKED** release evidence:
`extensions/rust/src/algorithms/ewald.rs`,
`extensions/rust/src/cif.rs`, `extensions/rust/src/composition.rs`,
`extensions/rust/src/crystal_nn.rs`, `extensions/rust/src/element.rs`,
`extensions/rust/src/integrators.rs`, `extensions/rust/src/io.rs`,
`extensions/rust/src/lattice.rs`, `extensions/rust/src/matcher.rs`,
`extensions/rust/src/structure_matcher.rs`,
`extensions/rust/src/voronoi_cell.rs`, `extensions/rust/src/wasm_types.rs`,
`src/lib/structure/TerminalPanel.svelte`,
`src/lib/xrd/atomic-scattering-params.ts`, and `src/lib/xrd/calc-xrd.ts`.
This bounded release classification neither identifies an actual adopted
revision nor closes either external evidence gate.

### pymatgen

- Source: https://github.com/materialsproject/pymatgen
- Upstream license declaration: MIT
- Preserved upstream text:
  [`third_party/licenses/pymatgen-MIT.txt`](third_party/licenses/pymatgen-MIT.txt)
- Verified audit snapshot:
  `7b92f9ab4112d538381f4ee4dd6119295c200245`

That snapshot is an immutable point at which the mapped data, symbols, and test
fixtures can be reproduced. It is **not evidence that this was the revision
actually adopted**, which was not recorded.

The import history also establishes a MatterViz/Ferrox intermediary:

- MatterViz PR 274 head
  `63a222673cd21d6b4542ac8b819714aa3104b625` maps to CatGo commit
  `b4ce49e30eca8547b57f3f57fa251f8936a1b589`. `cif.rs`, `element.rs`, and
  `lattice.rs` have exact whole-file blobs; the marked test blocks in
  `composition.rs` and `io.rs` are exact; the first four marked `matcher.rs`
  tests are exact.
- MatterViz PR 290 head
  `34d031638685869f40ebfc8c5233c29584fb86f5` maps to CatGo commit
  `ce041a67c21232232de7f096652c1c5eb841b6eb`.
  `integrators.rs`, `structure_matcher.rs`, `algorithms/ewald.rs`, `xrd.rs`,
  and `elastic.rs` have exact whole-file blobs at import.

Bounded pymatgen mappings:

- **Copied data:** `src/lib/xrd/atomic-scattering-params.ts` is byte-identical
  to MatterViz revision `e17228c29d744c07b8b4d8315fa79fbc342551b2`;
  its 99 entries have zero value mismatches against
  `src/pymatgen/analysis/diffraction/atomic_scattering_params.json` at the
  audit snapshot.
- **Adapted production implementation:** `src/lib/xrd/calc-xrd.ts` maps
  `WAVELENGTHS`, diffraction tolerances, `get_unique_families`, and
  `compute_xrd_pattern` to pymatgen's diffraction `core.py` and `xrd.py`,
  through MatterViz revision `e17228c29d744c07b8b4d8315fa79fbc342551b2`.
- **Adapted production implementation:** CatGo commit
  `2c2439028ba65bde30866a3bf5efbf1963c5212b` explicitly introduced
  `extensions/rust/src/crystal_nn.rs` as a pymatgen port.
  `extensions/rust/src/voronoi_cell.rs::solid_angle` also states that it
  matches pymatgen's implementation. A reproducible pre-reorganization
  reference is `cc57da9bb90cf1e46ff72ca8fe8642514692cb8f` at
  `src/pymatgen/analysis/local_env.py`; the actual adopted revision remains
  unrecorded.
- **Adapted production implementation:** `extensions/rust/src/algorithms/ewald.rs`
  names pymatgen `analysis/ewald.py` for implementation details, and
  `extensions/rust/src/{matcher,structure_matcher}.rs` adapts
  `StructureMatcher` behavior.
- **Adapted tests:** the marked Rust tests map to pymatgen
  `test_composition.py`, `test_periodic_table.py`, `test_lattice.py`,
  `test_structure_matcher.py`, and `test_cif.py`; they are consolidated
  cross-language test scenarios, not byte-identical Python imports.
- **Interoperability only:** pymatgen `Structure.as_dict()` JSON,
  `PymatgenStructure` TypeScript shapes, and compatible element/structure
  field names do not by themselves establish copied implementation.

External evidence is still required to identify the actual pymatgen revisions
used by the original authors. The audit snapshot must not be promoted to an
adopted-revision claim without that evidence.

### ASE

- Source: https://gitlab.com/ase/ase
- Upstream license declaration: LGPL-2.1-or-later
- Preserved upstream text:
  [`third_party/licenses/ASE-LGPL-2.1.txt`](third_party/licenses/ASE-LGPL-2.1.txt)
- Verified audit snapshot:
  `e311e0ab9a04202b94799229e43357ead6243830`

That revision is a reproducible audit snapshot, **not proof of the revision
actually adopted**, which was not recorded. CatGo's
`extensions/rust/src/integrators.rs` was imported byte-identically in commit
`ce041a67c21232232de7f096652c1c5eb841b6eb` from MatterViz PR 290 head
`34d031638685869f40ebfc8c5233c29584fb86f5`.

The four explicit adapted-test mappings are:

- `test_nose_hoover_momentum_conservation` →
  `test_nose_hoover_chain.py::test_nose_hoover_chain_nvt`
- `test_velocity_verlet_symplectic` →
  `test_nose_hoover_chain.py::test_thermostat_round_trip`
- `test_nve_total_energy_conserved_high_precision` →
  `test_verlet_thermostats_asap.py::test_verlet_thermostats_asap`
- `test_langevin_temperature_distribution` →
  `test_nvt_npt.py::{propagate,test_langevin}`

These are rewritten Rust scenarios, not byte-identical Python imports. ASE
Atoms dictionaries, ASE-compatible units, and compatible field names are
recorded separately as interoperability only. External evidence is still
required to identify the actual ASE revision used by the original author.

### xterm.js

- Source: https://github.com/xtermjs/xterm.js
- Upstream license declaration: MIT
- Preserved upstream text:
  [`third_party/licenses/xterm.js-MIT.txt`](third_party/licenses/xterm.js-MIT.txt)
- PR: https://github.com/xtermjs/xterm.js/pull/5704
- Fixed comparison base:
  `fb25eb8f79fd223acef90828dc2990bb7e196a1d`
- Fixed comparison head:
  `16c7a837be902403383142016936059c90b6706e`
- Logic commits:
  `d70c52da926584f6865ab22e1a98a7d83a4c38bc` and
  `c02ba2cf07d3f46c594cd1eb37e5785e2b5e8f5a`

CatGo commit `99ebfb0015b9e19e8cc83ef43f21f2e7a63dc2e6` explicitly describes
the terminal IME architecture as based on PR 5704. The bounded scope is the IME
block in `src/lib/structure/TerminalPanel.svelte`, where
`wk_composing`, `wk_pending`, `isCJK`, `wkFlush`, `beforeinput`, keydown
flushing, and `term.onData` suppression correspond to xterm.js
`_wkImeComposing`, `_wkImePending`, `_isHangul`, `_wkFlush`, `_inputEvent`,
`_keyDown`, and `CompositionHelper.wkImeComposing`.

The CatGo patch ID is
`6a61e2bb0cca035bf2500e0afee4e0b2de734b38`; the two upstream logic patch
IDs are `7330ecfab8076b9baad43bfebc9b68aa0e8a1cf7` and
`a2eab2de989c9bd7a224d744244b851cd9310fd2`. None match. This rules out a
patch-identical import but, together with the state-machine and symbol mapping,
supports classification as an **adapted implementation**, rather than merely
conceptual use. CatGo-specific extensions include Chinese
`insertFromComposition`, a post-composition suppression window, and synthetic
DEL-debt handling. No blanket assignment is made outside that IME block.

## Unresolved provenance and license mappings

These items require maintainer/counsel mapping before a release represents the
third-party inventory as complete. Recording a source URL or a repository's
general license would not by itself resolve model, dataset, artwork, or copied
code rights.

### Historical KMC Git submodule reference

- Historical path: `server/ext/KMC`
- Source: https://github.com/leshenzhang/KMC
- Historical pinned Git object:
  `7ebf5913bdaabdf78f248fcc7e71327e9f1f96ab`

No license file or license declaration was found in the historical pinned
upstream repository. No license ID is assigned here, and reuse of that source
still requires maintainer/counsel mapping. The audited Git tree contains no
`server/ext/KMC` entry. CatGo also removes the stale `.gitmodules` entry and
tests that KMC is absent from Git source archives, CI submodule checkout, and
the Python release configurations. The unresolved historical license therefore
does not supply rights for any future reintroduction.

### Historical Open Babel-derived CatRender perception code — removed

- Removed paths: `extensions/catrender-wasm/src/perceive.rs` and
  `docs/superpowers/plans/2026-05-21-catrender-ob-bond-perception.md`
- Source: https://github.com/openbabel/openbabel
- Audited upstream snapshot:
  `7ba0614b1fa51116f49dbbc669940e7af7df716a`
- Upstream repository license declaration: GPL-2.0
- Provenance ledger:
  [`third_party/provenance/catrender-bond-order-removal.md`](third_party/provenance/catrender-bond-order-removal.md)

The implementation and its embedded port plan were
removed from the current release tree. The ledger records the immutable
technical source map and the replacement provenance for CatRender's remaining
covalent-radius data. This
historical notice does not make a compatibility, substantiality, or other legal
conclusion, and removal does not settle those questions.

### Application icons, logos, screenshots, and QR image

- Generated icon paths: `src-tauri/icons/`
- Base/application artwork paths include `desktop/logo.png`,
  `desktop/logo.svg`, `static/favicon.svg`, `docs/public/logo-*.svg`, and
  `extensions/vscode/icon.png`
- Other media paths include `image/`, `static/*.png`, `static/*.webp`, and
  `static/qr-qq-group.jpg`

Repository history calls the application icon design custom and documents that
Tauri icons are generated from `desktop/logo.png`, but it does not retain
authorship, assignment, stock-asset, screenshot-subject, or QR-image rights
records. No third-party license is guessed. Maintainers should classify each
base artwork/media source and retain the supporting records.

### Other documented inspirations without revision maps

- `server/catgo/utils/nanotube_algorithm.py` names
  https://github.com/shm-phy/MOIRE-LATTICE_NANO-TUBE as inspiration.
- `server/catgo/utils/pseudo_hydrogen.py` says it is adapted from
  `reference_code/pseudo_hydrogen.py`, but that source is not identified in
  the current tree.

These references do not establish a copied scope or applicable notice. They
remain provenance follow-ups rather than confirmed license assignments.
