From d45c05bae45e60c197736fa4a903ab3387666f23 Mon Sep 17 00:00:00 2001 From: UnbreakableMJ Date: Sun, 26 Jul 2026 02:12:34 +0300 Subject: [PATCH] =?UTF-8?q?sync(spacecraft-standard-constitution):=20root?= =?UTF-8?q?=20LICENSE=20symlink=20rule=20=E2=80=94=20v1.36?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Back-sync of Spacecraft-Software/Standard#15. §4.3: the root LICENSE file is now required and MUST be a symbolic link to the project's primary license text in LICENSES/, upgrading the former "MAY remain as a GitHub-detection pointer" allowance. GitHub follows the symlink for license detection while REUSE keeps the verbatim texts in LICENSES/ — one source of truth, no drift. §5.2: LICENSE added as a required posture file in its own right. §16: compliance-checklist §4.3 bullet extended with the requirement. Masthead and frontmatter description bumped to v1.36 (2026-07-26); description measures 924 chars, under the 1000-char skill limit. Co-Authored-By: Claude Opus 5 (1M context) --- spacecraft-standard-constitution/SKILL.md | 30 +++++++++++++++---- .../references/CHANGELOG.md | 1 + 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/spacecraft-standard-constitution/SKILL.md b/spacecraft-standard-constitution/SKILL.md index c39c506..8ded5fa 100644 --- a/spacecraft-standard-constitution/SKILL.md +++ b/spacecraft-standard-constitution/SKILL.md @@ -8,7 +8,7 @@ description: > Spacecraft Software-umbrella project — even if the user doesn't explicitly mention the Standard. If the user mentions "Spacecraft Software", a Spacecraft Software subproject name, or asks you to work on anything in the Spacecraft Software ecosystem, consult this skill immediately. It encodes - The Steelbore Standard v1.35 (§11 palette family; §18 accessibility; §17 progress reporting; §3.2 compiler flags; concurrency; §3.3 security-by-design; §8 Texinfo; §7 Shell Environment) so + The Steelbore Standard v1.36 (§4.3 LICENSE symlink; §11 palette family; §18 accessibility; §17 progress reporting; §3.2 compiler flags; concurrency; §3.3 security-by-design; §8 Texinfo; §7 Shell Environment) so you never need to ask for it or have it attached to a prompt again. license: GPL-3.0-or-later maintainer: Mohamed Hammad @@ -17,7 +17,7 @@ website: https://Construct.SpacecraftSoftware.org/ # The Steelbore Standard — Compliance Reference -**Version:** 1.35 | **Date:** 2026-07-25 | **Author:** Mohamed Hammad +**Version:** 1.36 | **Date:** 2026-07-26 | **Author:** Mohamed Hammad **Maintainer:** Mohamed Hammad | **Contact:** [Mohamed.Hammad@SpacecraftSoftware.org](mailto:Mohamed.Hammad@SpacecraftSoftware.org) **Copyright:** Copyright (C) 2026 Mohamed Hammad & Spacecraft Software | **License:** GPL-3.0-or-later **Website:** [https://Construct.SpacecraftSoftware.org/](https://Construct.SpacecraftSoftware.org/) @@ -275,8 +275,25 @@ and the correct comment syntax for the file type.) replaces the former blanket "documents are exempt" rule). - **`LICENSES/` directory:** verbatim text of every license used lives in `LICENSES/.txt` (e.g., `LICENSES/GPL-3.0-or-later.txt`, - `LICENSES/AGPL-3.0-or-later.txt`, plus any upstream licenses per §4.2). A root - `LICENSE` file MAY remain as a pointer for GitHub's license detection. + `LICENSES/AGPL-3.0-or-later.txt`, plus any upstream licenses per §4.2). +- **Root `LICENSE` is a symbolic link.** GitHub reads a repository's license from a + root `LICENSE` file; REUSE requires the verbatim texts under `LICENSES/`. Both are + satisfied with a single source of truth: the root `LICENSE` MUST be a symbolic link + to the project's primary license text inside `LICENSES/` — never a second, + duplicated copy of the text. + + ```sh + ln -s LICENSES/GPL-3.0-or-later.txt LICENSE + git add LICENSE + ``` + + Git stores the result as a symlink (mode `120000`), GitHub follows it for license + detection, and `reuse lint` stays clean. The link target is the repository's + **primary** license per §4.1.1 — `GPL-3.0-or-later` (or `AGPL-3.0-or-later` when + network-facing) for a software-primary repo, `CC-BY-SA-4.0` for a document-primary + repo. A duplicated regular-file `LICENSE` is **non-compliant**: the two copies + drift, and a stale root `LICENSE` misreports the project's license to every GitHub + visitor. - **CI gate:** `reuse lint` MUST pass before shipping. When writing or reviewing any file, confirm REUSE coverage; when generating a new file, @@ -317,7 +334,8 @@ root, derived from the canonical Spacecraft Software templates: | `README.md` | Includes a "Project Posture" section linking to the two below | | `NOTICE.md` | Full no-warranty / no-liability statement; defers to the project's GPL/AGPL license (§4.1) for binding terms | | `CONTRIBUTING.md` | Contribution scope, PR-acceptance discretion, sign-off, security reporting, license-of-contributions | -| `LICENSES/` | REUSE license directory (§4.3): verbatim text of every license used (`GPL-3.0-or-later` or `AGPL-3.0-or-later`, plus any upstream licenses per §4.2). A root `LICENSE` MAY remain as a GitHub-detection pointer. | +| `LICENSES/` | REUSE license directory (§4.3): verbatim text of every license used (`GPL-3.0-or-later` or `AGPL-3.0-or-later`, plus any upstream licenses per §4.2). | +| `LICENSE` | Symbolic link to the primary license text in `LICENSES/` (§4.3) — e.g. `ln -s LICENSES/GPL-3.0-or-later.txt LICENSE`. Not a duplicated copy of the text. | Customize only the project name, scope, and any project-specific carve-outs. @@ -1250,7 +1268,7 @@ Before finalising **any** Spacecraft Software artifact, mentally verify: - [ ] **§3.3** Hardened security; PQC readiness addressed - [ ] **§4.1** License is `GPL-3.0-or-later` or `AGPL-3.0-or-later` (AGPL for network-facing; per §4.1) - [ ] **§4.2** Upstream copyright notices, license texts, and `NOTICE`/`AUTHORS` preserved verbatim; upstream licenses shipped in `LICENSES/` -- [ ] **§4.3** REUSE-compliant: two-tag SPDX header (`SPDX-FileCopyrightText` + `SPDX-License-Identifier`) on every file (or `.license` sidecar / `REUSE.toml` entry); `LICENSES/` directory present; `reuse lint` passes +- [ ] **§4.3** REUSE-compliant: two-tag SPDX header (`SPDX-FileCopyrightText` + `SPDX-License-Identifier`) on every file (or `.license` sidecar / `REUSE.toml` entry); `LICENSES/` directory present; root `LICENSE` is a symbolic link into `LICENSES/` (never a duplicated copy); `reuse lint` passes - [ ] **§5** Project Posture: README/NOTICE/CONTRIBUTING present; default personal-hobby stance applied; general-use carve-outs declared in project README - [ ] **§5.5** Package distribution: `packaging/guix.scm`, `packaging/default.nix`, and `packaging/PKGBUILD` present, buildable, and carrying correct version + SHA-256 checksum (in each package manager's native format) before any release tag is pushed - [ ] **§6.1** POSIX-compliant CLI/system tools diff --git a/spacecraft-standard-constitution/references/CHANGELOG.md b/spacecraft-standard-constitution/references/CHANGELOG.md index 6412da3..4c97c72 100644 --- a/spacecraft-standard-constitution/references/CHANGELOG.md +++ b/spacecraft-standard-constitution/references/CHANGELOG.md @@ -11,6 +11,7 @@ holds the full history so it doesn't load into agent context on every skill activation. The published Standard document (`standard/The_Steelbore_Standard.md`) keeps its own inline changelog as the canonical record. +- **v1.36 (2026-07-26):** **§4.3:** the root `LICENSE` file is now **required** and MUST be a **symbolic link** to the project's primary license text in `LICENSES/` (e.g. `ln -s LICENSES/GPL-3.0-or-later.txt LICENSE`), upgrading the former "a root `LICENSE` MAY remain as a GitHub-detection pointer" allowance. GitHub reads a repository's license from a root `LICENSE` file while REUSE requires the verbatim texts under `LICENSES/`; the symlink satisfies both from one source of truth — Git stores it as mode `120000`, GitHub follows it for detection, and `reuse lint` stays clean. A duplicated regular-file `LICENSE` is **non-compliant**: the two copies drift, and a stale root `LICENSE` misreports the project's license to every GitHub visitor. The link target is the repository's **primary** license per §4.1.1 — `GPL-3.0-or-later` (or `AGPL-3.0-or-later` when network-facing) for a software-primary repo, `CC-BY-SA-4.0` for a document-primary repo. **§5.2:** `LICENSE` added as a required posture file in its own right, alongside `README.md`, `NOTICE.md`, `CONTRIBUTING.md`, and `LICENSES/`. **§16:** compliance-checklist §4.3 bullet extended with the symlink requirement. - **v1.35 (2026-07-25):** **§11 becomes a palette family.** The single canonical palette is replaced by a registry of six. The v1.34 Steelbore 2 palette is now named **Steelbore Modern** and remains the default and canonical binding; the v1.33 six-token palette is **un-retired** and preserved as **Steelbore Classic** (§11.2), reversing the v1.34 retirement — which now stands only as a version-history note. **§11.3 added:** four alternates, each anchored on two fixed colors and verified against its own canvas and surfaces — **Steelbore Blue** (Orbit Navy `#0A1024` / Electric Blue `#0066FF`; Electric Blue is †restricted at 3.91:1 to large text, icons, and non-text UI), **Steelbore BlackPinkPanther** (Core Black `#141418` / Plasma Magenta `#E445FF`; no restricted pairings), **Steelbore MatrixGreen** (Circuit Navy `#0C1A2B` / Solar Lime `#B6FF3B`; its `surface-alt` Ambient Black `#05070A` is darker than the canvas, which §11.0.1 permits), and **Steelbore NavyWhite** (Pearl Silver `#E7E5E0` / Lunar Navy `#111827`) — the family's first **light-canvas** palette, whose high-contrast variant *darkens* rather than lightens and whose accent/status hues are deepened from the source tints to clear 4.5:1. **§11.1 generalized:** the eleven role tokens are now the contract for every palette, so application logic is palette-agnostic (Classic keeps its legacy six-role contract and defines no surface class). **§11.1.1 generalized:** every palette ships a `-high-contrast` sibling; `steelbore-mono` is palette-independent and serves all. **§11.4 added:** palette-selection rules — Modern is the default and needs no declaration, a project adopts exactly one palette and declares it in `README.md`, tokens are never mixed across palettes, and the canvas is mandatory within its palette. The Void Navy rule is accordingly scoped to Modern rather than stated globally. §16 checklist §11 bullet updated. All 13 themes, their per-background matrices, and per-palette rules ship in the `steelbore-color-palette` skill's `assets/steelbore.toml`. - **v1.34 (2026-07-25):** **§11 rewritten — Steelbore 2 palette adopted.** Nine tokens replace the six-token v1.33 palette: Void Navy `#000027` unchanged as the mandatory canvas; a new **surface class** joins (Quantum Blue `#0E2A47` elevated panels, Deep Matrix `#0B1A12` code/terminal wells — fills on Void Navy, never text colors, §11.0.1, with a drawn Pulse Violet edge required at meaningful boundaries); new foreground tokens Platinum Mist `#D9DEE5` (body), Plasma Orange `#FF5E00` (accent), Pulse Violet `#8A6CFF` (structure/links/borders), Acid Lime `#B4FF00` (success/focus), Mars Red `#FF3B3B` (error), Plasma Magenta `#E445FF` (warning). **§11.0.2 added:** per-surface contrast matrix — every foreground token measured against all three legal backgrounds (18 pairings, WCAG relative-luminance), with two † restricted pairings (Pulse Violet 3.93:1 and Mars Red 4.12:1 on Quantum Blue — large text/icons/non-text UI only); EN 301 549 V4.1.1 clause 11 cited alongside the AA floors. **§11.1 expanded:** theme contract grows to eleven role tokens (`surface`, `surface-alt`, `structure`, `warning`, `focus`, `border` join; `info` retired); v1.33-palette apps stay compliant until their next minor release. **§11.1.1 revised:** high-contrast variant now lifts **four** tokens (`accent` → `#FF8A3D` 8.70:1, `structure` → `#B3A1FF` 9.19:1, `error` → `#FF7A7A` 8.08:1, `warning` → `#EE7BFF` 8.66:1), all clearing 4.5:1 on both surfaces so the † restrictions vanish under high contrast; the `#7FAEDC`/`#FF8080` lifts retire with their bases. **§11.2 added:** retired-token register — Molten Amber `#D98E32`, Steel Blue `#4B7EB0`, Radium Green `#50FA7B`, Red Oxide `#FF5C5C`, Liquid Coolant `#8BE9FD` may not appear in new artifacts. **§18.2.1 updated** to the three-background matrix framing; **§16 checklist §11 bullet** extended (surface-tokens-never-text, matrix-measured pairings, no retired tokens). - **v1.33 (2026-07-24):** **§18 added:** Accessibility (Opt-In Mode Layer) — accessibility codified as a first-class, auditable chapter covering CLI, TUI, and GUI, superseding §13's design-system framing where the two overlap. Two-sided rule: **mandatory for developers to implement, off by default for users**, with no new-projects-only phase-in. §18.1 defines a single activation toggle with four sources and explicit precedence (`--accessible` > `SPACECRAFT_A11Y` > config > auto-detect hints such as `TERM=dumb`/`NO_COLOR`/`GTK_MODULES=…gail:atk`); unset everywhere means standard `Steelbore` rendering, unchanged. §18.2 splits CLI/TUI rules into always-on requirements (status never color-only — `[OK]`/`[ERROR]`/`[WARN]`/`[INFO]`; stdout/stderr separation; `NO_COLOR` family honored) and accessible-mode requirements (no animation, no decorative art, linear output, tabular fallback, legible prompts), plus §18.2.3 TUI linear mode and a required non-interactive CLI path. §18.3 mandates **AccessKit** for Rust/custom-drawn GUI (UIA / NSAccessibility / AT-SPI) with `GtkAccessible`, Flutter `Semantics`, and `QAccessible` for toolkit-native paths, and requires explicit accessible names and roles. §18.4 requires verification by real screen reader (Orca/NVDA/VoiceOver) and `espeak-ng`, and a dated remediation entry in `PROJECTS.md` for any project not yet conforming. **§11.1.1 added:** accessibility theme variants as *additive siblings* — `steelbore` remains the sole default; `steelbore-high-contrast` lifts only `accent` (`#4B7EB0` → `#7FAEDC`, 8.73:1) and `error` (`#FF5C5C` → `#FF8080`, 8.41:1) so all six tokens reach ≥7:1 on Void Navy, with the other four §11 values verbatim; `steelbore-mono` uses 4-bit ANSI to defer to the user's terminal palette. Void Navy remains the background in every variant. **§11 clarified:** the AA guarantee covers foreground-on-Void-Navy only — 9 of 10 inter-token pairs fall below 3:1 (Molten Amber on Red Oxide 1.13:1; Radium Green on Liquid Coolant 1.01:1), so text on a palette-colored fill now requires its own pair verification, and color may never be the sole carrier of meaning. **§10 extended:** bindings must be user-remappable, and NVDA/Orca/VoiceOver modifier chords must not be captured. **§13 retargeted:** WCAG 2.1 AA → **WCAG 2.2 Level AA**, with **EN 301 549 clause 11 (non-web software)** adopted as the normative anchor for CLI/TUI. **§18.5 added:** Games Carve-Out — projects registered as games are **exempt from §18 in full and from §10 in full**; accessibility in a game is optional, nothing is enforced, and its absence is never a compliance failure. §18 assumes a character grid or a widget tree with roles and names, which games (real-time simulations rendering custom non-widget interfaces) satisfy neither of; the techniques that suit them — remappable controls, colorblind-safe signalling, subtitles, difficulty options — are a different discipline. §18.5.1 identifies games by **declaration plus registry**, mirroring the §5.3 general-use carve-out: a `README.md` declaration alongside the §5.2 posture section, plus a registry table (today naming **Ironway**), kept in sync with `PROJECTS.md` and §2.1. §18.5.2 offers a recommended list a game may decline outright (remappable controls; leave `Insert`/`CapsLock`/`KP_Insert`/`Ctrl`+`Option` free for NVDA/Orca/VoiceOver; colorblind-safe signalling; subtitles; reduced motion). §18.5.3 asks only that a toggle a game *chooses* to ship use the §18.1 and §11.1.1 names — constraining naming, never requiring a feature. **§10 scope** narrowed accordingly: registered games are exempt in full, including the pre-existing CUA and Vim rows, since modal editing and text-editor chords are a poor fit for real-time play. **§18.4:** registered games owe no remediation entry, because they owe no conformance. Compliance-checklist gains a §18 bullet; §10 and §13 bullets extended; §10 and §18 bullets marked N/A for registered games. Skill Cross-References gains a `spacecraft-accessibility-support` row.