Skip to content

Commit 926b55b

Browse files
feat(spacecraft-standard): sync skill to v1.22 — §7 Shell + §14.2 email note
feat(spacecraft-standard): sync skill to v1.22 — §7 Shell Environment
2 parents 7a68a8a + e813123 commit 926b55b

1 file changed

Lines changed: 72 additions & 49 deletions

File tree

spacecraft-standard/SKILL.md

Lines changed: 72 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,23 @@ description: >
88
Spacecraft Software-umbrella project — even if the user doesn't explicitly mention the Standard.
99
If the user mentions "Spacecraft Software", a Spacecraft Software subproject name, or asks you to work on
1010
anything in the Spacecraft Software ecosystem, consult this skill immediately. It encodes
11-
The Steelbore Standard v1.21 so you never need to ask for it or have it attached to a
12-
prompt again.
11+
The Steelbore Standard v1.22 (§7 Shell Environment; §14.2 email obfuscation note) so
12+
you never need to ask for it or have it attached to a prompt again.
1313
license: GPL-3.0-or-later
1414
maintainer: Mohamed Hammad <Mohamed.Hammad@SpacecraftSoftware.org>
1515
website: https://Construct.SpacecraftSoftware.org/
1616
---
1717

1818
# The Steelbore Standard — Compliance Reference
1919

20-
**Version:** 1.21 | **Date:** 2026-06-17 | **Author:** Mohamed Hammad
20+
**Version:** 1.22 | **Date:** 2026-06-18 | **Author:** Mohamed Hammad
2121
**Maintainer:** Mohamed Hammad | **Contact:** [Mohamed.Hammad@SpacecraftSoftware.org](mailto:Mohamed.Hammad@SpacecraftSoftware.org)
2222
**Copyright:** Copyright (C) 2026 Mohamed Hammad & Spacecraft Software | **License:** GPL-3.0-or-later
2323
**Website:** [https://Construct.SpacecraftSoftware.org/](https://Construct.SpacecraftSoftware.org/)
2424

2525
This skill encodes The Steelbore Standard in full. Apply every applicable section
26-
to any artifact you produce under the standard. The 13-point compliance checklist
27-
in §14 is your audit gate — run through it mentally before finalising any output.
26+
to any artifact you produce under the standard. The 14-point compliance checklist
27+
in §15 is your audit gate — run through it mentally before finalising any output.
2828

2929
> **License note:** This skill is `GPL-3.0-or-later` (skills are software-class, §4.1.1).
3030
> The *published* Standard document it encodes is licensed `CC-BY-SA-4.0`.
@@ -109,7 +109,7 @@ back-rename.
109109

110110
Existing legacy-named projects MAY be renamed under the v1.2 convention at the
111111
maintainer's discretion — renames are optional. When a rename happens, update
112-
this table and §13.1's subdomain table in the same commit.
112+
this table and §14.1's subdomain table in the same commit.
113113

114114
### §2.2 — Skill IDs are functional, not codenamed
115115

@@ -239,7 +239,7 @@ upstream's license in full — independent of the project's own GPL/AGPL choice:
239239
- **Ship** each distinct upstream license text in the project's `LICENSES/` directory (§4.3).
240240
- **Verify compatibility** of the upstream license with the project's GPL/AGPL license
241241
before inclusion.
242-
- This is the legal/mechanical obligation; §13.3's `CREDITS.md` is the human-readable
242+
- This is the legal/mechanical obligation; §14.3's `CREDITS.md` is the human-readable
243243
narrative counterpart. When both are triggered, both apply.
244244

245245
### §4.3 — SPDX & REUSE Compliance
@@ -322,7 +322,7 @@ A project may declare itself **intended for general use**. When it does:
322322
semantic versioning, maintained `CHANGELOG.md`, deprecation policy, and a
323323
documented support window for the current major version.
324324

325-
**General-use registry** (keep in sync with §13.1 subdomain table):
325+
**General-use registry** (keep in sync with §14.1 subdomain table):
326326

327327
| Project | Posture |
328328
|--------------|---------------|
@@ -395,7 +395,22 @@ keys, Spacecraft Software commits migrate accordingly.
395395

396396
---
397397

398-
## §7 — Privacy-Friendly Application (PFA) Policy
398+
## §7 — Shell Environment
399+
400+
Spacecraft Software tooling, documentation, and CI pipelines target **four first-class shell environments**: **Nushell**, **Ion**, **Brush**, and **Bash**. All four are equally supported; none is deprecated or downgraded.
401+
402+
### §7.1 — Script Portability Policy
403+
404+
| Rule | Detail |
405+
|------|--------|
406+
| Default: POSIX-compatible | Shell scripts in source trees, CI pipelines, `Makefile` targets, and documentation examples **must** be written to the POSIX sh subset unless a shell-native feature is required. POSIX scripts run correctly in Bash and Brush without modification. |
407+
| Nushell / Ion native variants when needed | When a task cannot be expressed cleanly in POSIX sh (structured data pipelines, typed parameters, Nushell modules), provide a Nushell (`.nu`) and/or Ion-native variant alongside the POSIX version. Do not force POSIX-only idioms that degrade the Nushell or Ion experience. |
408+
| No Bashisms in shared scripts | Bash-only extensions (`[[ ]]`, `(( ))`, process substitution `<(...)`, `${var^^}`, indexed arrays) are prohibited in files intended for all four shells. Bash-specific scripts are permitted only when explicitly scoped (e.g., `#!/usr/bin/env bash` shebang, clearly labeled). |
409+
| Graceful shell detection | Tools that need runtime shell detection must inform the user or degrade gracefully rather than silently failing in non-Bash environments. |
410+
411+
---
412+
413+
## §8 — Privacy-Friendly Application (PFA) Policy
399414

400415
Every Spacecraft Software application must satisfy **all three** PFA requirements:
401416

@@ -410,7 +425,7 @@ or networking, verify all three PFA requirements are met.
410425

411426
---
412427

413-
## §8 — Key Bindings
428+
## §9 — Key Bindings
414429

415430
All interactive applications must support **both**:
416431

@@ -421,7 +436,7 @@ All interactive applications must support **both**:
421436

422437
---
423438

424-
## §9 — Spacecraft Software Color Palette (WCAG-Compliant)
439+
## §10 — Spacecraft Software Color Palette (WCAG-Compliant)
425440

426441
The **only** permitted colors for Spacecraft Software interfaces and documents:
427442

@@ -440,7 +455,7 @@ No alternative background is permitted. This is non-negotiable.
440455
For document/file generation → load the `spacecraft-document-format` skill.
441456
For IDE/terminal themes → load the `spacecraft-theme-factory` skill.
442457

443-
### §9.1 — Steelbore Theme (Application Theming Standard)
458+
### §10.1 — Steelbore Theme (Application Theming Standard)
444459

445460
When building a new Spacecraft Software application (GUI, TUI, or web), all palette
446461
references **must** be accessed through a named theme called **`Steelbore`** rather than
@@ -468,7 +483,7 @@ swap the theme, not every hex literal.
468483

469484
---
470485

471-
## §10 — Typography (FOSS-Licensed Fonts Only)
486+
## §11 — Typography (FOSS-Licensed Fonts Only)
472487

473488
Acceptable font licenses: **OFL, Apache 2.0, Ubuntu Font License, CC0-1.0**
474489

@@ -483,34 +498,34 @@ verify they are available on Google Fonts or another FOSS-licensed repository.
483498

484499
---
485500

486-
## §11 — UI/UX Design System
501+
## §12 — UI/UX Design System
487502

488503
- **Material Design** is the required component system for all graphical applications.
489-
Theme Material components with the §9 color palette.
504+
Theme Material components with the §10 color palette.
490505
- **WCAG 2.1 Level AA** contrast is the minimum for all color pairings.
491506
Any new color additions must be WCAG-verified before adoption.
492507
- **Accessibility:** screen readers, keyboard-only navigation, and system accessibility
493508
preferences (reduced motion, high contrast) must all be respected.
494509

495510
---
496511

497-
## §12 — Date, Time & Units
512+
## §13 — Date, Time & Units
498513

499-
### §12.1 — Date & Time Format Rules
514+
### §13.1 — Date & Time Format Rules
500515

501516
| Concern | Rule | Example |
502517
|--------------|------------------------------------------------------------------|------------------------------|
503518
| Date format | ISO 8601 only: `YYYY-MM-DD` | `2026-03-08` |
504519
| Time format | 24-hour only: `HH:MM:SS` — AM/PM is **never** permitted | `14:30:00` |
505520
| Timestamp | Combined ISO 8601 UTC: `YYYY-MM-DDTHH:MM:SSZ` | `2026-03-08T14:30:00Z` |
506-
| Timezone | **UTC Z is the default and preferred primary** for general-purpose, cross-system, and machine-readable timestamps. A project whose core domain is inherently local-time-bound (e.g., solar/prayer-time calculations) may declare local time as its primary record instead — a documented exception, not a free choice. See §12.2 and §12.2.1 | `Z` not `+00:00` |
521+
| Timezone | **UTC Z is the default and preferred primary** for general-purpose, cross-system, and machine-readable timestamps. A project whose core domain is inherently local-time-bound (e.g., solar/prayer-time calculations) may declare local time as its primary record instead — a documented exception, not a free choice. See §13.2 and §13.2.1 | `Z` not `+00:00` |
507522
| Duration | ISO 8601 duration format only | `PT1H30M` not "1h 30m" |
508523
| Units | Metric (SI) primary; imperial in parentheses only if locale requires | `100 km (62 mi)` |
509524

510525
Apply these conventions to all generated code, documentation, comments, and any
511526
user-facing strings. Never output AM/PM time, non-ISO dates, or imperial-primary units.
512527

513-
### §12.2 — UTC Z Timezone Policy
528+
### §13.2 — UTC Z Timezone Policy
514529

515530
**UTC Z is the default and preferred timezone for stored, transmitted, logged,
516531
and committed timestamps across Spacecraft Software projects.** It is the
@@ -522,11 +537,11 @@ as a secondary, human-convenience field — but UTC Z remains the authoritative
522537
record.
523538

524539
This is a strong default, not a universal mandate forced onto every domain
525-
regardless of fit — §12.2.1 documents the exception that lets a project whose
540+
regardless of fit — §13.2.1 documents the exception that lets a project whose
526541
domain is genuinely local-time-bound use local time as its primary record instead.
527542

528543
**Rules for projects under the UTC Z default — apply unless a project has filed
529-
the §12.2.1 exception:**
544+
the §13.2.1 exception:**
530545

531546
| Rule | Detail |
532547
|------|--------|
@@ -537,7 +552,7 @@ the §12.2.1 exception:**
537552
| Commit timestamps use UTC | `GIT_COMMITTER_DATE` and `GIT_AUTHOR_DATE` must be UTC when set programmatically. |
538553
| File metadata written by Spacecraft Software tools | mtime/ctime written by Spacecraft Software tools must be UTC-sourced. |
539554

540-
### §12.2.1 — Domain Exception: Inherently Local-Time-Bound Projects
555+
### §13.2.1 — Domain Exception: Inherently Local-Time-Bound Projects
541556

542557
A project whose core domain is fundamentally defined by **local civil or solar
543558
time** — not by a moment in absolute (UTC) time — may declare local time as the
@@ -554,7 +569,7 @@ would misrepresent what the data actually is.
554569
or user convenience.
555570
2. **Keep the default everywhere else.** General-purpose machinery within the
556571
same project — logs, commit timestamps, internal cross-system APIs,
557-
telemetry — still follows the §12.2 UTC Z default. The exception covers the
572+
telemetry — still follows the §13.2 UTC Z default. The exception covers the
558573
domain data itself, not the whole project.
559574
3. **Preserve UTC derivability.** Store or compute the IANA timezone (e.g.,
560575
`Africa/Cairo`) alongside the local value, so a UTC instant remains derivable
@@ -563,15 +578,15 @@ would misrepresent what the data actually is.
563578
convenient" or "our users are mostly in one timezone" do not qualify — the
564579
domain itself must be inherently local-time-bound.
565580

566-
### §12.3 — Local Time as Optional Companion
581+
### §13.3 — Local Time as Optional Companion
567582

568-
**For projects under the UTC Z default**12.2), local time expressed as a UTC
583+
**For projects under the UTC Z default**13.2), local time expressed as a UTC
569584
offset is permitted as an **optional companion** to the UTC Z primary value — in
570585
human-facing display, in API responses (as an additional field, never replacing
571586
the UTC Z field), and in stored records where timezone context aids human
572587
readers. The UTC Z value is always present and always authoritative; the
573588
local-time companion is supplemental only. (A project operating under the
574-
§12.2.1 domain exception inverts these roles for its domain data — local time is
589+
§13.2.1 domain exception inverts these roles for its domain data — local time is
575590
primary there, with UTC kept derivable rather than displayed as authoritative.)
576591

577592
- The `--absolute-time` flag (defined in `spacecraft-cli-standard` §3) disables
@@ -583,7 +598,7 @@ primary there, with UTC kept derivable rather than displayed as authoritative.)
583598
4. Never persist or transmit the local-time rendering.
584599
- JSON/machine output (`--format json/jsonl/yaml/csv`) MUST always use UTC + `Z`.
585600

586-
### §12.4 — Duration Format
601+
### §13.4 — Duration Format
587602

588603
Durations follow ISO 8601 duration notation:
589604

@@ -596,7 +611,7 @@ Durations follow ISO 8601 duration notation:
596611
Prose forms like "1h 30m", "90 minutes", "1.5 hours" are **forbidden** in
597612
machine-readable output. They are acceptable in `--help` text only.
598613

599-
### §12.5 — Rust Implementation Guidance
614+
### §13.5 — Rust Implementation Guidance
600615

601616
When writing Rust code that handles time:
602617

@@ -612,14 +627,14 @@ When writing Rust code that handles time:
612627

613628
---
614629

615-
## §13 — Attribution, Maintainer & Contact
630+
## §14 — Attribution, Maintainer & Contact
616631

617632
**Maintainer:** Mohamed Hammad
618633
**Contact:** [Mohamed.Hammad@SpacecraftSoftware.org](mailto:Mohamed.Hammad@SpacecraftSoftware.org)
619634
**Copyright:** Copyright (C) 2026 Mohamed Hammad & Spacecraft Software | **License:** GPL-3.0-or-later
620635
**Website:** [https://SpacecraftSoftware.org/](https://SpacecraftSoftware.org/)
621636

622-
### §13.1 — Project Pages
637+
### §14.1 — Project Pages
623638

624639
Each Spacecraft Software project has a dedicated subdomain following the pattern
625640
`https://<ProjectName>.SpacecraftSoftware.org/`. Use the project-specific URL in all
@@ -653,7 +668,7 @@ project-level outputs; use `https://SpacecraftSoftware.org/` only for umbrella r
653668

654669
When a new project is created, add its subdomain to this table immediately.
655670

656-
### §13.2 — Mandatory Attribution in Project Outputs
671+
### §14.2 — Mandatory Attribution in Project Outputs
657672

658673
Every Spacecraft Software product **must** surface the following attribution in at least one
659674
of: `--help` output, `--version` output, README, or About/Info screen.
@@ -693,16 +708,22 @@ https://<ProjectName>.SpacecraftSoftware.org/
693708
"maintainer": "Mohamed Hammad <Mohamed.Hammad@SpacecraftSoftware.org>",
694709
"website": "https://<ProjectName>.SpacecraftSoftware.org/"
695710
```
711+
- **Email obfuscation in plain-text prose.** In plain-text prose contexts (README body,
712+
CONTRIBUTING.md, human-readable documentation) where the address is not a clickable
713+
link, `Mohamed.Hammad [at] SpacecraftSoftware.org` is permitted as a scraper-resistant
714+
form. `# Maintainer:` lines in PKGBUILDs and `SPDX-FileCopyrightText` headers **must**
715+
always use the full address — those formats are parsed by `makepkg`/`pkgcheck` and
716+
`reuse lint` respectively, and obfuscation breaks them.
696717

697-
### §13.3 — Third-Party Attribution
718+
### §14.3 — Third-Party Attribution
698719

699720
Spacecraft Software artifacts must give credit where credit is due. When a project
700721
or skill **substantially builds on third-party work**, that credit appears
701722
in a `CREDITS.md` at the artifact's root — `<project-root>/CREDITS.md` for
702723
projects, `<skill-name>/CREDITS.md` for skills.
703724

704-
`CREDITS.md` is the inbound counterpart to §13.2's outbound attribution:
705-
§13.2 tells consumers who maintains Spacecraft Software; §13.3 tells consumers whose
725+
`CREDITS.md` is the inbound counterpart to §14.2's outbound attribution:
726+
§14.2 tells consumers who maintains Spacecraft Software; §14.3 tells consumers whose
706727
work Spacecraft Software stands on.
707728

708729
**Triggers** (any one obligates a `CREDITS.md`):
@@ -744,7 +765,7 @@ shaped the Spacecraft Software artifact.
744765

745766
---
746767

747-
## §14 — Compliance Checklist (Audit Gate)
768+
## §15 — Compliance Checklist (Audit Gate)
748769

749770
Before finalising **any** Spacecraft Software artifact, mentally verify:
750771

@@ -758,14 +779,15 @@ Before finalising **any** Spacecraft Software artifact, mentally verify:
758779
- [ ] **§5** Project Posture: README/NOTICE/CONTRIBUTING present; default personal-hobby stance applied; general-use carve-outs declared in project README
759780
- [ ] **§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
760781
- [ ] **§6.1** POSIX-compliant CLI/system tools
761-
- [ ] **§7** PFA: no tracking, minimal permissions, local storage default
762-
- [ ] **§8** CUA + Vim-like key bindings planned/implemented
763-
- [ ] **§9** Spacecraft Software color palette used; Void Navy background mandatory; new apps expose colors via a named `Steelbore` theme (§9.1) — no bare hex literals in UI logic
764-
- [ ] **§10** FOSS-licensed fonts only (Share Tech Mono / Inconsolata)
765-
- [ ] **§11** Material Design UI/UX; WCAG 2.1 AA verified
766-
- [ ] **§12** ISO 8601 dates; 24h time; UTC Z is the default primary timestamp (companion local time with UTC offset permitted, never a replacement) — unless the project filed the §12.2.1 domain exception for inherently local-time-bound data; ISO 8601 durations; metric units
767-
- [ ] **§13** Attribution present: maintainer name (`Mohamed Hammad`), contact (`Mohamed.Hammad@SpacecraftSoftware.org`), and project URL in `--version` / README / About
768-
- [ ] **§13.3** Third-party work credited in `CREDITS.md` at project/skill root when triggers apply; deeper `references/ATTRIBUTION.md` present where reference content is adapted from external sources
782+
- [ ] **§7** Shell scripts are POSIX-compatible; Nushell/Ion native variants provided where shell-native idioms are required; no Bashisms in shared scripts
783+
- [ ] **§8** PFA: no tracking, minimal permissions, local storage default
784+
- [ ] **§9** CUA + Vim-like key bindings planned/implemented
785+
- [ ] **§10** Spacecraft Software color palette used; Void Navy background mandatory; new apps expose colors via a named `Steelbore` theme (§10.1) — no bare hex literals in UI logic
786+
- [ ] **§11** FOSS-licensed fonts only (Share Tech Mono / Inconsolata)
787+
- [ ] **§12** Material Design UI/UX; WCAG 2.1 AA verified
788+
- [ ] **§13** ISO 8601 dates; 24h time; UTC Z is the default primary timestamp (companion local time with UTC offset permitted, never a replacement) — unless the project filed the §13.2.1 domain exception for inherently local-time-bound data; ISO 8601 durations; metric units
789+
- [ ] **§14** Attribution present: maintainer name (`Mohamed Hammad`), contact (`Mohamed.Hammad@SpacecraftSoftware.org`), and project URL in `--version` / README / About
790+
- [ ] **§14.3** Third-party work credited in `CREDITS.md` at project/skill root when triggers apply; deeper `references/ATTRIBUTION.md` present where reference content is adapted from external sources
769791
- [ ] **§6.3** All commits to Spacecraft Software Git remotes cryptographically signed with the `Mohamed.Hammad@SpacecraftSoftware.org` key and showing "Verified" on the hosting platform; rewrites preserve signatures; programmatic and assistant-driven commits signed too
770792

771793
If any item is not applicable to the current artifact type (e.g., color palette
@@ -775,12 +797,13 @@ for a pure Rust library), note it as N/A rather than silently skipping it.
775797

776798
## Skill Cross-References
777799

778-
| Task | Load this skill |
779-
|---------------------------------------|------------------------------|
780-
| Writing any Rust code | `microsoft-rust-guidelines` |
781-
| Generating DOCX / ODT / PDF documents | `spacecraft-document-format` |
782-
| Creating IDE / terminal themes | `spacecraft-theme-factory` |
783-
| All other Spacecraft Software work | `spacecraft-standard` |
800+
| Task | Load this skill |
801+
|---------------------------------------|----------------------------------------------------|
802+
| Writing any Rust code | `microsoft-rust-guidelines` |
803+
| Writing or reviewing shell scripts | `spacecraft-cli-shell` + `spacecraft-cli-preference` |
804+
| Generating DOCX / ODT / PDF documents | `spacecraft-document-format` |
805+
| Creating IDE / terminal themes | `spacecraft-theme-factory` |
806+
| All other Spacecraft Software work | `spacecraft-standard` |
784807

785808
---
786809

0 commit comments

Comments
 (0)