Skip to content

chore: adopt §6.5 text file format (LF, UTF-8, final newline) - #81

Closed
UnbreakableMJ wants to merge 5 commits into
tsowell:mainfrom
UnbreakableMJ:chore/6.5-text-file-format
Closed

UnbreakableMJ wants to merge 5 commits into
tsowell:mainfrom
UnbreakableMJ:chore/6.5-text-file-format

Conversation

@UnbreakableMJ

Copy link
Copy Markdown

Adopts Steelbore Standard §6.5 — Text File Format (added at Standard v1.51).

What

File Purpose
.gitattributes * text=auto eol=lf — normalizes every text file to LF in the repo and on checkout
.editorconfig charset = utf-8, end_of_line = lf, insert_final_newline = true, trim_trailing_whitespace = true
.github/workflows/text-file-format.yml Fails CI on a CR byte in a tracked text file

Why

.gitattributes is the mandatory half because it is the only mechanism independent of a contributor's core.autocrlf — which defaults to true on Windows and rewrites the working tree on checkout. The contributor's editor shows nothing unusual; the commit that leaves their machine rewrites every line of every file they touched, and the reviewer gets a whole-file diff with the real change buried in it. The failure is silent where it originates and expensive where it lands.

.editorconfig reaches the other half of the problem: editors that never consult Git, where the file is created wrong before Git ever sees it.

Both config files are only advisory to the tools that read them, so §6.5 makes the CI gate the binding part. git grep -I skips binaries and honors .gitattributes, so a pinned CRLF exception is invisible to it and no exclusion list is needed.

The gate ships as its own workflow rather than a step inserted into an existing one, so the check is byte-identical across every repository in the rollout and no existing workflow is touched.

Risk

Configuration only — no file contents change. This repository was verified to have zero CRLF bytes in tracked text files before the change, so there is no renormalization commit and no diff noise. Repositories that do carry CRLF content are handled in a separate wave, because .gitattributes does not retroactively fix blobs already stored with CRLF — that needs git add --renormalize.

🤖 Generated with Claude Code

https://claude.ai/code/session_01XGgUmYtDJxo8EMKyB5LdoV

UnbreakableMJ and others added 5 commits June 24, 2026 01:42
Bring this wiremix fork under the Spacecraft Software umbrella, conforming to
The Steelbore Standard, the CLI Standard (SFRS), and the Agentic CLI layer.

- Relicense the combined work to GPL-3.0-or-later, preserving upstream
  MIT/Apache attribution. REUSE/SPDX two-tag headers on every file; `reuse
  lint` clean. Remove committed merge artifacts (stream.rs.orig/.rej).
- Add a machine-readable noun-verb CLI (src/cli/) alongside the untouched TUI:
  node/device/link/metadata/server commands, schema/describe, the JSON
  envelope, canonical exit codes, structured tips-thinking errors, and
  agent-env detection. Built on the existing wirehose/View layer so the CLI
  and TUI agree on volume (cubic), routing, mute, and defaults.
- Add the `steelbore` built-in theme (Standard 11 palette; opt-in).
- Add a Texinfo manual (doc/wiremix.texi) and Makefile (info/html/pdf).
- Add packaging definitions (Guix/Nix/PKGBUILD) and posture/agent files
  (NOTICE, CONTRIBUTING, CREDITS, AGENTS.md, SKILL.md); update README/CLAUDE.md.
- CI: add a `reuse` lint job and CLI tests; bump log/tracing-subscriber so
  `cargo audit` reports no vulnerabilities.

Forked from upstream wiremix by Thomas Sowell; see CREDITS.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Functional changes layered on the Spacecraft Software compliance pass.

- Make `steelbore` the default theme (Standard §11); the upstream
  terminal-default look stays available with `-t default`.
- CLI: target nodes/devices by `--name <substring>` (case-insensitive) or the
  tokens `@DEFAULT_SINK@` / `@DEFAULT_SOURCE@`, in addition to a numeric id.
- CLI: per-channel `node set-volume <id> <pct...>` and a new `node balance`
  command; both route to device/node volumes exactly as the TUI does.
- TUI: `,` / `.` shift a stereo node's balance, shown as an L/R readout on the
  volume row; `/` enters incremental search/filter (Esc clears, Enter keeps).

Per-file licensing: files modified here are flipped to GPL-3.0-or-later,
preserving the upstream copyright line.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a third frontend alongside the TUI and CLI: an optional Slint desktop
GUI behind the `gui` cargo feature. It drives the same wirehose Session +
view::View core (commands via View/CommandSender, never pipewire directly),
so the TUI (src/app.rs) and CLI (src/cli/) are untouched and the default
build pulls in neither Slint nor a graphics stack.

- ui/main.slint: tabbed mixer (Playback/Recording/Output/Input/
  Configuration) with volume sliders, mute, default selection, routing/
  target and device-profile dropdowns, mono/stereo VU meters; Void Navy /
  Molten Amber theme; accessibility enabled.
- src/gui/main.rs: mpsc event pump on a slint::Timer, State updates, lazy
  capture eligibility -> live meters, View projection into Slint models,
  controls routed back through View command methods. Separate peaks model
  so meter updates never reset the volume sliders; row-index callbacks map
  to ObjectId via lists cached at projection time.
- build.rs: compile the .slint only when the `gui` feature is enabled.

The `gui` feature needs Rust >= 1.88 (current Slint); the core TUI/CLI MSRV
(1.74) is unchanged. flake.lock is bumped to a nixpkgs shipping a new-enough
rustc; Cargo.lock is updated for the Slint dependency tree.

Docs: README (Desktop GUI section + intro), CHANGELOG (Unreleased),
AGENTS.md, and the project CLAUDE.md. REUSE/SPDX headers on all new files
(reuse lint passes); rustfmt clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
"SFRS" was introduced by mistake — it only ever meant "a feature
(description/specification)," never a real external standard name.
Every mention now reads "the CLI Standard" / "the Spacecraft Software
Dual-Mode Self-Documenting CLI Standard (v1.0.0)", following the
construct-repo a301baf naming precedent.
The Steelbore Standard v1.51 added §6.5: every text file in a Spacecraft
Software source tree is LF-terminated, UTF-8 without BOM, and ends with a
newline, with `.gitattributes` and `.editorconfig` required at the root and
a CI gate that fails on a CR byte.

`.gitattributes` is the mandatory half because it is the only mechanism
independent of a contributor's `core.autocrlf`, which defaults to true on
Windows and rewrites the working tree on checkout — the commit that leaves
that machine then rewrites every line of every file touched, and the
reviewer gets a whole-file diff with the real change buried in it.
`.editorconfig` reaches editors that never consult Git.

Both config files are advisory to the tools that read them, so the gate is
what makes the rule binding. It ships as its own workflow rather than a step
inside an existing one, so the check is identical across every repository.

This repository has no CRLF in tracked content today, so this is
configuration only — no file contents change.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XGgUmYtDJxo8EMKyB5LdoV
@UnbreakableMJ

Copy link
Copy Markdown
Author

Closing — opened in error by automation against the wrong base repository. This change was intended for our own fork only, not for upstream. Apologies for the noise.

@UnbreakableMJ
UnbreakableMJ deleted the chore/6.5-text-file-format branch September 12, 2026 18:48
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