Tracking issue: #27
- Status: accept the distribution implementation. Public visibility, license selection, Developer ID signing, notarization, and hardware launch tests remain explicit owner-controlled publication gates.
- Functional benefit: maintainers can produce independently verified Apple Silicon and Intel app archives, or use the same path with real Developer ID and notarization credentials for public releases.
- Measured cost: zero worker runtime code.
Sources/,Package.swift, andapp/Info.plistare identical to the accepted config-defaults branch. - Reason: all new work is in release scripts, CI, and documentation. Separate single-architecture archives avoid the installed-size cost of a universal binary.
| Role | Branch | Commit | Dirty |
|---|---|---|---|
| Runtime base | refactor/standardize-config-defaults |
8ac3154774e0e17a28f9830c6de4336fbc964468 |
no |
| Candidate | release/public-distribution-readiness |
7189fa5 |
no |
This branch is stacked on #26 because public archives must use the neutral
config/defaults.json resource. A tree comparison confirms no runtime source,
package target, or bundle metadata changes after that base.
| Item | Value |
|---|---|
| Mac | MacBook Pro Mac16,8 |
| Host architecture | arm64 |
| macOS | 26.5.1 (25F80) |
| Swift | Apple Swift 6.3.2, Swift 5.9 package mode |
| Local signing | ad-hoc validation only |
| Config SHA-256 | b25df5cf7b6d9baa14a32efb3ddd883eefa0820ba2e9dbd2218e575c32d1f75a |
The user config remained byte-for-byte unchanged. No Apple certificate or notarization credential was available or fabricated.
scripts/build-release-app.shcross-compiles one requested architecture and signs the helper, settings executable, and app bundle.scripts/package-release.shbuilds separatearm64andx86_64archives, optionally notarizes and staples them, and writes verified checksums.scripts/verify-release.shextracts a fresh archive and checks bundle structure, exact architecture, signatures, privacy exclusions, embedded user paths, and test-framework linkage.- CI builds both ad-hoc validation archives independently and uploads them as workflow artifacts. It does not publish a GitHub release.
docs/PUBLIC_RELEASE.mddocuments credentials, signed release commands, Gatekeeper verification, publication checks, and owner-controlled blockers.- The repository description and technical topics were populated. Visibility remains private and no license was selected without owner approval.
| Artifact | Architecture | Executable bytes | Archive bytes |
|---|---|---|---|
| Helper | arm64 | 432840 unsigned / 448496 signed | included below |
| Settings app | arm64 | 755824 unsigned / 769552 signed | 438956 |
| Helper | x86_64 | 442008 unsigned / 463744 signed | included below |
| Settings app | x86_64 | 746568 unsigned / 770704 signed | 450569 |
The Intel and Apple Silicon numbers are not runtime regressions: they are
different instruction sets and code-signature envelopes. Each installed app
contains exactly one architecture. The worker source is unchanged from #26,
and neither helper links XCTest or Testing.
The lightweight source archive was 81858 bytes and excluded .build, .git,
.github, dist, tests, performance probes, user config, retired
machine-specific defaults, and personal paths.
-
swift build -
swift build -c release - generated defaults check
- shell syntax checks
- workflow YAML parse
- fresh arm64 archive extraction and verification
- fresh x86_64 archive extraction and verification
- exact architecture checks for both executables in both archives
- nested ad-hoc signature verification
- checksums generated and checked
- source archive privacy/exclusion scan
- Start, Status, Stop lifecycle; no remaining process after Stop
- no worker runtime-source diff from #26
- GitHub Actions: 34 tests plus arm64 and x86_64 archive jobs
- Developer ID signature and Apple notarization with owner credentials
- Gatekeeper first launch on a clean Apple Silicon Mac
- Gatekeeper first launch on a clean Intel Mac
- signed-out release-link verification after publication
Local swift test remains unavailable because the selected standalone Command
Line Tools installation does not provide XCTest. GitHub Actions supplies unit
tests and cross-architecture packaging checks.
Strict idle and active-event benchmarks were not repeated because the
candidate has no diff under Sources/, Package.swift, or app/Info.plist.
Running the same executable again would measure machine noise rather than a
distribution change. The lifecycle smoke test still stopped the worker
completely, and the existing #26 measurement remains applicable.
- No worker polling loop, timer, thread, or event-tap change
- No automatic startup, launch agent, or login item
- No updater, telemetry, or app runtime network code
- No normal background logging
- No credentials stored in source or artifacts
- Validation archives clearly identify ad-hoc signing
- Notarization fails closed without a Developer ID identity
- Release checks modify no user config
- Separate architecture archives avoid universal-binary disk overhead
Notarization itself contacts Apple only when a maintainer explicitly provides a keychain profile to the release script. That deployment action is not linked into or callable by the app.
The engineering branch is ready, but an official public release must not be claimed until the owner:
- chooses a license or deliberately documents proprietary source terms;
- changes repository visibility from private when ready;
- supplies a Developer ID Application identity and notarization profile;
- completes signed first-launch tests on real Apple Silicon and Intel Macs;
- verifies release links while signed out of GitHub.
| Combination | Base | Candidate | Result |
|---|---|---|---|
| Runtime features | #26 accepted tree | 7189fa5 |
no runtime diff |
No runtime interaction branch is required for distribution-only files.