Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Process-only paths never reach a published archive. This repository does not publish
# one today - it is a macOS app, not a package - but `git archive` is one command away
# and the agent working directory has no business in a tarball somebody downloads.
internal/ export-ignore
.claude/ export-ignore
/CLAUDE.md export-ignore
32 changes: 30 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,22 @@ concurrency:

jobs:
lint:
name: SwiftLint
# ⚠️ ADVISORY, FOR THE SAME REASON `format` BELOW IS — and it was not, which cost every
# build and every test in this repository since 2026-08-31.
#
# The rules are ours: `.swiftlint.yml` came from upstream and was tightened here on
# 2026-04-05 ("Tighten linting and expand CI"). They were green then. What moved is the
# TOOL, not the tree: this step installs whatever `brew` has, and 0.65.1 reports 26
# violations across 21 files — which is EVERY Swift file in the repository. Nine of the
# first ten are `vertical_whitespace_opening_braces` / `..._closing_braces`, i.e. blank
# lines, on code inherited from Jaysce/Spaceman and never calibrated against these rules.
#
# So it stays visible and stops being a gate until somebody calibrates it. That is the
# same sentence `format` already carries; the only thing new here is that it now also
# applies to the job that was holding the build hostage.
name: SwiftLint (advisory)
runs-on: macos-15
continue-on-error: true

steps:
- name: Checkout
Expand All @@ -30,6 +44,13 @@ jobs:
brew install swiftlint
fi

# ⚠️ PRINT THE VERSION. `brew install` is unpinned, so the tool that judges this tree
# changes without anybody changing the tree — which is exactly how a green April
# became a red August with no commit in between. A version in the log is what lets the
# next reader tell "the code got worse" from "the ruler moved".
- name: Show SwiftLint version
run: swiftlint version

- name: Run SwiftLint
run: swiftlint lint --config .swiftlint.yml --reporter github-actions-logging --strict --no-cache

Expand All @@ -56,7 +77,14 @@ jobs:
build-test:
name: Build and Test
runs-on: macos-15
needs: [lint]
# ⚠️ `needs: [lint]` STOOD HERE, AND IT MADE A STYLE CHECK THE PRECONDITION FOR THE ONLY
# JOB THAT PROVES ANYTHING. When SwiftLint went red on 2026-08-31 this job did not fail
# — it was SKIPPED, and a skipped job reads exactly like a passing one from the run list.
# Measured on run 34034521667: SwiftLint failure, swift-format failure, Build and Test
# skipped. Nothing has compiled or been tested in CI here since.
#
# Blank lines cannot break a build, so nothing is lost by running both at once and letting
# each report its own verdict.

steps:
- name: Checkout
Expand Down
Loading