Skip to content

Adopt the fleet license posture: one declaration, rendered per repo - #270

Merged
forkwright merged 1 commit into
mainfrom
chore/fleet-license-posture
Aug 17, 2026
Merged

Adopt the fleet license posture: one declaration, rendered per repo#270
forkwright merged 1 commit into
mainfrom
chore/fleet-license-posture

Conversation

@forkwright

Copy link
Copy Markdown
Owner

Finding

License across the fleet was a per-repo accident. Measured before this change: five licensing
regimes with no visible logic
, plus six repos carrying no LICENSE at all.

Regime Count
AGPL-3.0 8
PolyForm Shield 1.0.0 9
MIT OR Apache-2.0 3
MPL-2.0 1
All-rights-reserved 2
No LICENSE at all 6

gnomon, thumos and logismos were Shield while zetesis, sphragis and epistole were AGPL,
and nothing distinguished them. Two repos disagreed with themselves: koinon declared
license = "Apache-2.0" in Cargo.toml and shipped no license file, and the licensor identity varied
between a GitHub org handle and an individual across repos.

The absent six are the worst case, not the mildest. No LICENSE means all rights reserved by
default — on a public repo, the most restrictive possible outcome, reached without anyone deciding it.

Why this matters

AGPL does not restrict commercial use. It is a Free Software license that permits commercial use
including resale; what it requires is share-alike. So the eight AGPL repos were providing neither
property they were chosen for, which makes moving off them a strict improvement in intent-match rather
than a trade.

The licensor named no legal person. PolyForm's Noncompete and every proprietary notice are
enforceable only by someone who holds the copyright. Notices named forkwright — a GitHub organisation
handle, not a legal entity — or, in one repo, an individual while the work is invoiced through a
company.

Relicensing is unilateral only while there is a single copyright holder. It requires every
contributor's consent once there are others, and publishing publicly is what invites contributors. So
this lands before any public flip, not after.

Desired correction

Posture is declared once and rendered, rather than written per repo:

Posture Renders For
fleet PolyForm Noncommercial 1.0.0 personal tooling made public — read freely, use noncommercially, commercial use asks
product PolyForm Shield 1.0.0 business surface installed for clients
interop Apache-2.0 OR MIT a library another repo depends on; a library nobody may depend on is not a library
private explicit proprietary notice personal canon and client work — explicit, never absent

Licensor: Ardent Works LLC everywhere.

The Cargo.toml license field moves in the same commit as the license text, deliberately. A repo
whose manifest claims one license while its LICENSE states another is internally contradictory, and
that is worse than either original state — a scanner reports the stricter of the two, and a reader
cannot tell which governs.

What is deliberately NOT changed

Repos carrying an inherited copyleft obligation keep their current license: aletheia (142 files
under crates/krites/ derived from CozoDB, MPL-2.0, with a live burn-down ledger), akroasis (9
vendored GPL-3.0 protobuf schemas), and thumos (a separately-licensed kernel crate). An inherited
obligation is not ours to override, and relicensing derived code would be a violation performed as
tidying.

That distinction was established by a ten-repo provenance audit rather than assumed: strong copyleft
(GPL, AGPL) reaches the whole combined work, while weak file-level copyleft (MPL) reaches only the
derived files.
Getting it backwards in either direction is a mistake — the strict reading blocks work
that is free to move, the loose reading relicenses work that cannot be.

Done when: every repo's LICENSE and manifest agree with each other and with the declared posture, and
a check fails when either drifts.

Note

The renderer is utilities/apply-license-posture.py in metis-ops, with a --check mode. It reads the
posture from kanon's fleet-repos.toml when that field exists and from a staging file only until then,
so the staging copy dies by construction rather than by anyone remembering to delete it.

License texts are the canonical ones fetched as bytes from SPDX's license-list-data, not transcribed
— a page-summarising fetch of the same license silently abbreviated four sections, and a license with
summarised Definitions is worthless.

cargo-deny fails CLOSED on a LicenseRef it does not know. theatron's own LICENSE
already conforms to its interop posture and is untouched, but repos that depend on it
now render PolyForm Noncommercial, and this list is what lets a dependency graph
containing them resolve.
@forkwright
forkwright merged commit e860d72 into main Aug 17, 2026
10 checks passed
@forkwright
forkwright deleted the chore/fleet-license-posture branch August 17, 2026 20:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant