fix(license): use LicenseRef- SPDX form for PolyForm Strict #12

Merged
iuriishikov merged 3 commits from task/spdx-identifier into main 2026-07-20 13:53:39 +00:00

Fixes the invalid SPDX expression in the archive: PolyForm-Strict-1.0.0 is not on the SPDX License List, so per the spec the header now uses the LicenseRef- form. Metadata only — the code and the history of the prototype are untouched.

Inventory (step 0, git grep -n 'PolyForm-Strict-1\.0\.0')

Fixed — authored source files carrying the bare tag:

  • src/main.rs:1
  • src/glass.rs:1
  • src/glass.wgsl:1

All three now read // SPDX-License-Identifier: LicenseRef-PolyForm-Strict-1.0.0 (one-line System76 pattern kept, no SPDX-FileCopyrightText, no REUSE tooling). No source file was missing a header, so item 3 of the brief was not needed. LICENSE and NOTICE name the licence in prose and were not touched, per the brief.

Found in template-managed files and left alone:

  • CONVENTIONS.md:7 — already LicenseRef- (corrected upstream in the template)
  • docs/patterns.md:7 and :13 — already LicenseRef- (same)

The brief itself (docs/tasks/spdx-identifier.md:15) mentioned the bare tag in prose; the file is deleted by the final commit per the standing rules, so no separate edit was needed.

Step-0 discrepancies and how they resolved

  1. Brief vs .sync.yml. The brief states CONVENTIONS.md and docs/patterns.md are listed in .sync.yml; the actual manifest lists only deny.toml, justfile, .gitignore, .forgejo/workflows/ci.yml. Both files do carry the managed by shikos-template header, and both already carry the corrected tag, so the discrepancy had no effect on the work: they were left alone either way.
  2. Dirty working tree. src/main.rs held a pre-existing uncommitted functional change (shader preview 1000×700 → 1500×900) that conflicted with the brief's "no functional changes / header lines only". Surfaced at step 0; the founder chose to discard it (git restore), so the branch diff is header lines only.

Gate

just ci — green (exit 0): fmt, clippy, nextest, cargo-deny (advisories ok, bans ok, licenses ok, sources ok).

Observations

  • The managed by shikos-template headers and the .sync.yml managed: list have drifted apart: CONVENTIONS.md, docs/patterns.md (and CODEOWNERS, per its provenance) carry the header but are absent from the manifest, so the sync workflow would not diff them in children. Might be worth reconciling in the template.

Deviations from the brief

None. The dirty-tree discard above was a founder decision at step 0, not a unilateral one.

Fixes the invalid SPDX expression in the archive: `PolyForm-Strict-1.0.0` is not on the SPDX License List, so per the spec the header now uses the `LicenseRef-` form. Metadata only — the code and the history of the prototype are untouched. ## Inventory (step 0, `git grep -n 'PolyForm-Strict-1\.0\.0'`) Fixed — authored source files carrying the bare tag: - `src/main.rs:1` - `src/glass.rs:1` - `src/glass.wgsl:1` All three now read `// SPDX-License-Identifier: LicenseRef-PolyForm-Strict-1.0.0` (one-line System76 pattern kept, no `SPDX-FileCopyrightText`, no REUSE tooling). No source file was missing a header, so item 3 of the brief was not needed. `LICENSE` and `NOTICE` name the licence in prose and were not touched, per the brief. Found in template-managed files and left alone: - `CONVENTIONS.md:7` — already `LicenseRef-` (corrected upstream in the template) - `docs/patterns.md:7` and `:13` — already `LicenseRef-` (same) The brief itself (`docs/tasks/spdx-identifier.md:15`) mentioned the bare tag in prose; the file is deleted by the final commit per the standing rules, so no separate edit was needed. ## Step-0 discrepancies and how they resolved 1. **Brief vs `.sync.yml`.** The brief states `CONVENTIONS.md` and `docs/patterns.md` are listed in `.sync.yml`; the actual manifest lists only `deny.toml`, `justfile`, `.gitignore`, `.forgejo/workflows/ci.yml`. Both files do carry the `managed by shikos-template` header, and both already carry the corrected tag, so the discrepancy had no effect on the work: they were left alone either way. 2. **Dirty working tree.** `src/main.rs` held a pre-existing uncommitted functional change (shader preview 1000×700 → 1500×900) that conflicted with the brief's "no functional changes / header lines only". Surfaced at step 0; the founder chose to discard it (`git restore`), so the branch diff is header lines only. ## Gate `just ci` — green (exit 0): fmt, clippy, nextest, cargo-deny (`advisories ok, bans ok, licenses ok, sources ok`). ## Observations - The `managed by shikos-template` headers and the `.sync.yml` `managed:` list have drifted apart: `CONVENTIONS.md`, `docs/patterns.md` (and `CODEOWNERS`, per its provenance) carry the header but are absent from the manifest, so the sync workflow would not diff them in children. Might be worth reconciling in the template. ## Deviations from the brief None. The dirty-tree discard above was a founder decision at step 0, not a unilateral one.
docs(task): brief for the SPDX identifier fix in the archive
All checks were successful
ci / ci-1 (push) Successful in 2m6s
ci / ci (push) Successful in 0s
4d254da4c6
The finale landed in #11, so the tree is complete. What remains is the invalid
licence tag: PolyForm-Strict-1.0.0 is not on the SPDX License List, so the
LicenseRef- form is the only valid expression. Template-managed files are out
of scope — they are corrected upstream and arrive through the sync bot.
PolyForm-Strict-1.0.0 is not on the SPDX License List; the bare tag is an
invalid expression. Per decisions/011 Amendment C the header becomes
LicenseRef-PolyForm-Strict-1.0.0 (one-line System76 pattern kept).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
docs(task): retire the spent spdx-identifier brief
All checks were successful
ci / ci-1 (push) Successful in 2m35s
ci / ci (push) Successful in 0s
ci / ci-1 (pull_request) Successful in 1m46s
ci / ci (pull_request) Successful in 0s
b5709a89dc
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
iuriishikov left a comment

Approve. Three header lines, nothing else in the diff. The gate is green here, unlike in the template.

Your step-0 finding is bigger than you framed it

You reported the brief and .sync.yml disagreeing about which files are managed, and correctly noted it had no effect on the work. It has a large effect elsewhere.

The manifest in shikos-template currently lists sixteen paths — CONVENTIONS.md, docs/patterns.md, AGENTS.md, CLAUDE.md, clippy.toml, rust-toolchain.toml, the .claude/ hooks, LICENSE, NOTICE and more. The one in this repository lists four. They are not two views of the same thing; this one is simply old.

The cause is that .sync.yml does not manage itself. It is copied into a repository at birth and never updated again, so every child freezes whichever manifest existed on its creation day, and they drift apart silently as the template grows. This one is from mid-July.

Whether that changes behaviour depends on which copy the sync workflow reads — the template's or the child's — and neither of us knows. If it reads the child's, then this repository has been syncing four files while believing it syncs sixteen, and a file corrected upstream would never arrive. That question is worth answering before the next template change.

Also right

Surfacing the dirty working tree at step 0 rather than committing around it was the correct call — an uncommitted 1500×900 preview tweak would have turned a metadata-only diff into a functional change in a frozen archive.

Not for this PR

The module doc in src/glass.rs still describes a procedural backdrop, although the finale replaced it with a texture and a procedural fallback. Stale prose in an archive, left alone deliberately.

Merging is the founder's call.

**Approve.** Three header lines, nothing else in the diff. The gate is green here, unlike in the template. ## Your step-0 finding is bigger than you framed it You reported the brief and `.sync.yml` disagreeing about which files are managed, and correctly noted it had no effect on the work. It has a large effect elsewhere. The manifest in `shikos-template` currently lists sixteen paths — `CONVENTIONS.md`, `docs/patterns.md`, `AGENTS.md`, `CLAUDE.md`, `clippy.toml`, `rust-toolchain.toml`, the `.claude/` hooks, `LICENSE`, `NOTICE` and more. The one in this repository lists four. They are not two views of the same thing; this one is simply old. The cause is that **`.sync.yml` does not manage itself.** It is copied into a repository at birth and never updated again, so every child freezes whichever manifest existed on its creation day, and they drift apart silently as the template grows. This one is from mid-July. Whether that changes behaviour depends on which copy the sync workflow reads — the template's or the child's — and neither of us knows. If it reads the child's, then this repository has been syncing four files while believing it syncs sixteen, and a file corrected upstream would never arrive. That question is worth answering before the next template change. ## Also right Surfacing the dirty working tree at step 0 rather than committing around it was the correct call — an uncommitted 1500×900 preview tweak would have turned a metadata-only diff into a functional change in a frozen archive. ## Not for this PR The module doc in `src/glass.rs` still describes a procedural backdrop, although the finale replaced it with a texture and a procedural fallback. Stale prose in an archive, left alone deliberately. Merging is the founder's call.
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
shikos/shikos-glass-scratch!12
No description provided.