docs/research/2026-10-11-license-provenance.md
License provenance review — 2026-10-11
Baseline: Signaltty ab9d849, clean working tree before this review. This is a
technical provenance review, not a legal opinion or a complete clearance of
the repository or earlier releases.
Confirmed incorporation
Herdr: all 13 bundled files in crates/signaltty-agent/screen/ identify
themselves as ports from revision 2563803. Their headers preserve attribution
and describe modifications. This is actual derivation, not merely a product
reference. History corroborates it, including de6e873 (Pi/OpenCode/Cursor),
9a2f2a0 (Claude), 8338b5c (Codex), and a0fe2a8 (Muse/Antigravity).
The revision resolves to 2563803dca97c040beaf3dc3acdcb5a3221b4238.
Its license
and Cargo manifest identify Apache-2.0. The license has a standard placeholder
appendix rather than a named copyright holder. The existing attribution
“Herdr contributors” is descriptive; it does not establish ownership.
The upstream tree has no project-level NOTICE. Its Windows ConPTY notice is
unrelated to the imported detector files.
Spec Kit: .specify/SOURCES.md explicitly records verbatim vendoring of
templates, Bash scripts and command instructions from
8d3f64cdccc877b6a297bc8167131103bb5b8ca0. The
upstream license
is MIT, copyright GitHub, Inc. Documentation and templates are covered too.
The declaration of verbatim provenance was inspected; this review did not
recompare every vendored file against upstream.
T3 Code: the repository explicitly references styles, theme families,
status indicators, dialogs, diff panels and appearance previews. See
docs/14-product-direction.md, specs/017-themes/research.md, and
specs/039-t3code-polish/spec.md. The last document pins 98beed1a, resolving
to 98beed1a226c42b85c52ff5ee9d5dbb67d776a77. Its
license
is MIT, copyright 2026 T3 Tools Inc.
The upstream index.css and themePalettes.ts were inspected against local
style references and theme research. For example, upstream's status animation
uses a two-second cycle, while the local GTK animation uses 800ms alternation;
the local palette research documents independently calculated colors.
This supports documented visual adaptation, not a finding that the whole GUI
or its Rust implementation was copied verbatim. Preserve the upstream MIT
notice for these adaptations rather than rely on a judgment that individual
tokens or fragments are too small to protect.
cmux: sensitive license scope, incorporation not established
The existing source research pins cmux
1a7d5cd08ad677359c0a273c10e13b853b86da31. Its
license
states GPL-3.0-or-later for the app/CLI and most other directories; listed
server directories have separate BUSL-1.1 licenses and production-use
restrictions. A source-visible repository is not automatically permissive.
Local research discusses mechanisms such as event replay, hooks and approvals. No explicit cmux code port was found by the text/history searches. This is not proof of absence: no exhaustive clone/similarity comparison, translated-code analysis or review of every historical patch was performed. The fact that cmux uses Swift and Signaltty uses Rust does not exclude derivation.
Before making a strong no-cmux-code claim, review the introduction commits
for event recovery, provider hook/approval bridges and agent automation against
the pinned source references in 2026-10-03-cmux-herdr-code.md. If protected
implementation was incorporated, attribution alone is insufficient: assess
the applicable GPL distribution requirements or applicable BUSL grant, obtain
an appropriate license, or replace the material through a documented independent
implementation. Do not describe a cosmetic rename as an independent rewrite.
Legal distinction and limits
In the EU, the Software Directive, article 1(2) distinguishes protected program expression from ideas and principles. That supports implementing the same workflow independently; it does not authorize copying source, adapted source, text or assets without permission. A graphical interface can also have copyright protection as an original work under the ordinary copyright regime; see CJEU C-393/09. Patent, trademark, contract, contribution ownership and jurisdiction-specific questions were not cleared by this technical review.
Corrections made in this checkout
The baseline declared MIT OR Apache-2.0 in Cargo.toml and README but had no
tracked LICENSE, COPYING or NOTICE files. Herdr headers linked to the
Apache license, while Spec Kit provenance named MIT; neither supplied its
full license text locally.
This change adds root MIT and Apache-2.0 texts consistent with the existing
project declaration, the exact pinned Spec Kit MIT notice in .specify/LICENSE,
the exact pinned T3 Code MIT notice in licenses/t3code-MIT.txt, and
THIRD_PARTY_NOTICES.md mapping the material to its provenance and terms.
The Apache text is byte-for-byte the inspected Herdr license. The root MIT
text uses the existing project's contributor attribution; this is not an
ownership audit. README now makes third-party exceptions explicit.
Existing port/change notices remain intact. No runtime implementation was
removed or changed, and no published Git history was rewritten.
PR review identified that prose exceptions alone did not correct inherited
Cargo licensing metadata or include root notices in nested Cargo archives.
The agent source package now declares (MIT OR Apache-2.0) AND Apache-2.0,
the GUI source package (MIT OR Apache-2.0) AND MIT, and the combined
AppStream application (MIT OR Apache-2.0) AND Apache-2.0 AND MIT.
Both affected crates carry local license texts and provenance notices, including
the T3 Code MIT text in the GUI package. Regression checks inspect the actual
cargo package --list output and require those texts to match the canonical
workspace copies. This fixes source-package notices, not binary installation.
Remaining release work
- Make release packaging install the notice bundle alongside binaries. The manifests and GUI resources are compiled in; a notice available only in the source repository does not ensure every binary recipient receives it.
- Inventory the actual dependency graph and native libraries of each release.
cargo metadata --locked --offline --format-version 1succeeded against the reviewed lockfile and reported license expressions for all 258 external Rust packages. This includes development/build/target-specific packages, not just shipped code. License metadata is a starting inventory, not proof of compliance or a complete notice bundle. Native libraries are outside that inventory: for example, GTK is LGPL-2.1-or-later, independently of the Rust bindings. Check actual linking and redistribution rather than change the whole project license based on a dependency name. - Audit icon/image/font origins. Local SVGs are introduced in Signaltty commits without a detected third-party header, but this does not prove originality. No exhaustive asset comparison was performed. Recheck any downloaded or generated material and the license of bundled assets.
- Fix upstream-license preservation in the external skill installer before
redistributing installed skill bundles. It copies individual directories;
repository-level license files may be left behind. The source list in
docs/15-agent-skills.mdis not a substitute for the required notices. - Review the targeted cmux introduction patches described above and record the result. Escalate actual restrictive-license derivations or disputed visual/asset ownership to a qualified lawyer before distribution.
Deleting inspiration links or rewriting Git history is not a compliance fix. Keep the provenance. The added notices address the identified missing texts in the current source checkout; they do not retroactively establish compliance of prior distributed artifacts.
Verification
cargo build --workspace and scripts/verify.sh fast passed. Fast-run evidence:
target/verification/fast-k0x483oe/summary.json. Local Markdown links and
git diff --check passed. The three imported license texts were compared
byte-for-byte with the pinned upstream URLs and matched. Before opening the PR,
scripts/verify.sh full also passed all 47 steps, including server QA, 35 isolated
GTK tests and the refresh benchmark; evidence is in
target/verification/full-bcd_81lz/summary.json. Representative dark and narrow
light renders were inspected. These checks verify the edit and existing build;
they do not certify legal compliance or complete visual acceptance.