Skip to content

The landing page says "open core" now, and this repo finally has a LICENSE - #1

Merged
bkd-dotcom merged 4 commits into
mainfrom
open-core-relicense
Sep 1, 2026
Merged

The landing page says "open core" now, and this repo finally has a LICENSE#1
bkd-dotcom merged 4 commits into
mainfrom
open-core-relicense

Conversation

@bkd-dotcom

Copy link
Copy Markdown
Member

The landing page told visitors Signetry was "Source-available" with a bare © 2026, and this repo had no LICENSE file at all — which LICENSING.md explicitly calls a bug.

What changed on the page

before after
§ III heading Source-available. Installed from source. Open core. Installed from source.
§ III lead (no licence named) names Apache-2.0, BUSL-1.1, and the 2030-08-31 conversion date
install tag © 2026 · not on PyPI BUSL-1.1 · not on PyPI
footer © 2026 Binay Dalai links to LICENSING.md; states contributors keep the same licence rights as everyone else

LICENSE is Apache-2.0. It is a static page — there is nothing here to restrict.

A styling bug caught before it shipped

.foot .rights had no a rule, so the new footer link would have rendered in default browser blue against a warm ink/wax palette. Added a rule matching .foot nav a rather than papering over it with an inline style.

README.md — the repo page was blank

Zero-dependency single-file site, so: how to preview it (python3 -m http.server), what belongs here (presentation only — governance behaviour goes upstream to core), and the two things this page is meant to survive that are easy to break by accident — no JavaScript, and a narrow screen.

Verification

Not just grepped — rendered. Headless Chrome at 1440×9000, then cropped and read back both changed regions:

  • the footer, confirming "Open core" is underlined in the muted link colour and not blue
  • § III, confirming the lead text and the BUSL-1.1 · not on PyPI tag

Plus an HTMLParser pass over the file: unbalanced: none, unclosed at EOF: none, and the new CSS rule confirmed inside <style>.

Not fixed here — reported instead

The page shows core@v0.6.0 in the hero ref line, the install command, and the registry table. Core is at v0.7.0 (the Homebrew formula pins v0.7.0). Out of scope for a relicense PR, but worth its own one-line change.

⚠️ Merge order

The new footer link points at LICENSING.md, which does not exist on main yet — it lands in Signetry/signetry#31. Merge that first.

… reserved"

The landing page told visitors Signetry was "Source-available" with a bare
"© 2026" and no licence file anywhere in this repository. Both are now wrong:
every integration surface is Apache-2.0, the engine is BUSL-1.1 with a
2030-08-31 conversion date, and LICENSING.md promises that a public Signetry
repo without a LICENSE is a bug. This repo was one of those bugs.

- LICENSE: Apache-2.0. It is a static page; there is nothing here to restrict.
- index.html: § III is now "Open core. Installed from source." and its lead
  names both licences and the conversion date. The install tag reads
  "BUSL-1.1 · not on PyPI" instead of "© 2026 · not on PyPI", and the footer
  links to LICENSING.md.
- .foot .rights had no `a` rule, so the new footer link would have rendered
  default-blue against a warm palette. Added one matching .foot nav a.
- README: the repo page was blank. How to preview, what belongs here, and the
  two things this page is meant to survive — no JavaScript, and a narrow screen.

Verified by rendering the page in headless Chrome and reading back the footer
and § III crops, not just by grepping the source.
index.html has no build step, so every version on it is a hand-maintained claim.
Four had drifted:

  core      v0.6.0 -> v0.7.0  (registry row, hero ref line, and the install command)
  reviewer  v0.1.2 -> v0.2.0
  plugins   —      -> v0.2.2

The install command is the one that actually cost something: a visitor who copied it
installed a release behind. And `plugins` printed an em dash, which everywhere else
in this project means "not measured" — here it was standing in for "we forgot",
which is exactly the substitution the project exists to prevent.

`action @v1` and `eval v0.2.3` were already correct. `action` deliberately prints a
moving major pin rather than its newest semver (v0.4.0) because that is how the
Marketplace consumes it.

reviewer is shown as v0.2.0 to match the convention the rest of the table follows.
It also carries a `v1` moving tag and an action.yml, so `@v1` would be defensible;
noted on the PR rather than decided here.
The four stale versions in the previous commit went unnoticed because nothing
checked them. This adds the check, as a stdlib-only script with no dependencies.

One rule per kind of value the page prints:

  vX.Y.Z  must equal the repository's newest semver tag, compared numerically —
          sorting these as strings ranks v0.9.0 above v0.10.0.
  @vn     a deliberately moving major pin. The tag must exist; it is not compared
          against the newest release.
  —       asserts no release exists, and fails if the repository has any tag. An
          em dash means "not measured" everywhere else here and must not quietly
          stand in for "we forgot".
  docs    not a version. Skipped.

The schedule is the part that matters. Drift here is almost never caused by a commit
to this repository — it is caused by another repository cutting a release, which fires
no event here at all. A push-only check would have sat green through all four of the
drifts it now catches. The push and pull_request runs only catch a bad hand-edit.

Two things learned building it, both encoded in the code:

The first version of the row parser used `href=...(.*?)<span class="rt">` with DOTALL.
A `Signetry/signetry` link *above* the table paired with core's cell, shifting every
repo/version pairing by one and dropping core's row entirely — so it reported three
drifts while silently not checking the fourth. Rows are now matched within a single
anchor. A checker that passes while checking nothing is worse than no checker.

Because that failure was silent, the row count is asserted rather than assumed: if
the markup changes so a row stops matching, the run errors instead of quietly
checking fewer claims. Both guards were confirmed against deliberately broken input
before being trusted — a moved href trips the count guard, a stray link outside the
table no longer shifts the pairings, and a row with no version cell is reported.
@bkd-dotcom

Copy link
Copy Markdown
Member Author

Pushed two more commits while auditing the page for this relicense.

The page was making four stale claims (a2cbdc1)

page said actually
core v0.6.0 v0.7.0 — in the registry row, the hero ref line, and the install command
reviewer v0.1.2 v0.2.0
plugins v0.2.2

The install command is the one that cost something real: anyone who copied it got a release behind.

And plugins printed an em dash. Everywhere else in this project an em dash means not measured — here it was standing in for "we forgot". That substitution is precisely the one Signetry exists to prevent, so it should not have been sitting on our own front page.

action @v1 and eval v0.2.3 were already correct. action prints a moving major pin instead of its newest semver (v0.4.0) on purpose, because that's how the Marketplace consumes it.

Nothing was checking them (1e7f630)

tools/check_versions.py + a versions workflow. Stdlib only, so the job can't break on an unrelated dependency resolution.

The schedule is the actual check, not the push trigger. Drift here is almost never caused by a commit to this repo — it's caused by another repo cutting a release, which fires no event here at all. A push-only check would have sat green through all four of these. Push/PR runs only catch a bad hand-edit.

Two things worth flagging, because both are the failure mode this project cares about:

The first version of the checker was quietly broken. The row parser used href=...(.*?)<span class="rt"> with DOTALL. A Signetry/signetry link above the table paired with core's cell, shifting every repo/version pairing by one and dropping core's row entirely — so it reported three drifts while silently not checking the fourth. A checker that passes while checking nothing is worse than no checker. Rows are now matched within a single anchor.

Because that failure was silent, the row count is now asserted rather than assumed. If the markup changes so a row stops matching, the run errors instead of checking fewer claims. Both guards were confirmed against deliberately broken input before I trusted the green: a moved href trips the count guard, a stray link outside the table no longer shifts the pairings, and a row with no version cell gets reported.

One decision for you

I set reviewer to v0.2.0 to match the convention the rest of the table follows. But reviewer also carries a v1 moving tag and an action.yml, so it's consumable as uses: Signetry/reviewer@v1 — which would make @v1 the more useful thing to print, exactly as action does.

Both pass the checker (@vN is validated for existence, not currency). Say which you want and I'll switch it; I didn't want to quietly change what the page advertises as reviewer's integration path.

Also note this repo had no CI at all before this — versions is its first workflow.

reviewer ships an action.yml and carries a v1 moving tag, so the useful thing to
print is the ref you would put in a workflow — not its newest semver. Same reason
the action row prints @v1 rather than v0.4.0.

The checker treats @vn as a deliberately moving pin: the tag must exist, but it is
not compared against the newest release. So this stays green while reviewer keeps
cutting semver tags underneath v1, which is the point of a major pin.
@bkd-dotcom
bkd-dotcom merged commit bfc320d into main Sep 1, 2026
1 check passed
@bkd-dotcom
bkd-dotcom deleted the open-core-relicense branch September 1, 2026 12:46
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