Fleet changelogs · dev.ecs0.net
rdmsm4x-changelog-20260910-1515-rtty-506-prepared-held

rdmsm4x — RTTy Build 506 prepared, gated, and HELD; icon adopted; App Store target unblocked

Written 2026-09-10 on rdmsm4x by claude@rdmsm4x (Claude Opus 5, release executor). Work window 13:20:04 – 15:20 EDT.

One line: RTTy 0.3.831 Build 506 was prepared, the new app icon adopted across every icon surface, and a real App Store build break found and fixed — then Rich held the release at 15:04 EDT, so nothing was notarized and nothing was deployed. All six hosts remain on Build 505.

Scope

Host that did the work: rdmsm4x (macOS 27.0 build 26A428, Apple Silicon, Xcode 27 beta 6 selected). Repository ~/dev/apps/RTTy. No other host was modified; no /Applications bundle on any host was replaced.

Commits (all pushed to origin, backup, fleet)

Commit What
73bc648 chore(release): prepare RTTy 0.3.831 build 506 candidate — VERSION 0.3.830→0.3.831, BUILD_NUMBER 505→506, both xcconfigs regenerated, six policy-fixture literals moved, trust chain re-rendered (graph then verifier bundle). Also moved EXPECTED_COMPILER_INPUT_COUNT 125→126 / EXPECTED_BUILD_INPUT_COUNT 156→157 for ApplicationFlowRateScale.swift (2bafe37, PR #42), and registered that file in project.yml + regenerated the Standard xcodeproj, which PR #42 had not done.
8a2ddc3 feat(icon): Rich's 2026-09-10 app icon on every icon surface — 39 files.
9460db3 fix(standard): register the two PR #42 sources the App Store target never compiled — the gate-4 fix.

71eab80 (the lead's SESSION-STATE checkpoint) landed between mine and swept my staged git mv renames into itself; nothing was lost, the tree was verified file-by-file afterwards.

The icon (Rich, 13:37 and 13:39 EDT)

Source ~/Desktop/RTTy_stitched_091026_exec-e499c933-…png, retained verbatim as Design/icons/RTTy_app_icon_091026_stitched.png, SHA-256 fe9c78ce6b7047df82af7705dfa9c06b7f7d174ffbe3785882c714ff23b3ea18. The 1024 master is the repo normalizer's deterministic output, SHA-256 5b1ba56f1456cb615073bcd7fa6f317e4710f54601988143f18403a3910131be, identical across two runs. On Rich's "use it for all icon places within the app", ONE source now feeds BOTH appearance masters — the light/dark specialization was removed deliberately, at his instruction.

Artifact Before After
light + dark 1024 masters d65f7f86… / 8b017356… 5b1ba56f… (both)
RTTy.icns and RTTy-dark.icns 155ba5f4… / (dark) 7bd033da… (both)
Standard AppIcon catalog 10 renditions all 10 changed
Mobile AppIcon, 3 × RTTyBrandMark imagesets old masters new master
tvOS brand assets + 2 previews old regenerated
Icon Composer RTTy.icon Assets 3e637957… / 8b017356… (two generations stale) 5b1ba56f…

Nothing deleted: superseded files were MOVED to RTTy-light-1024-superseded-20260909.png, RTTy-dark-1024-superseded-20260902.png, RTTy-superseded-20260909.icns, RTTy-dark-superseded-20260902.icns, and every old normalizer case stays registered so the previous art regenerates byte-for-byte. Tests/ScriptTests/icon_pipeline_test.sh rc=0.

Deliberately NOT changed, with reasons: the menu-bar status item (it renders a latency chart and reads no icon asset — grepped); Web/rtty-site/public/icon.png (its own documented lineage in Web/rtty-site/ASSET-PROVENANCE.md, separate nested repo, not "within the app"); rtty-layered-chart-1024.png (a renderer reference, not app-icon art).

Release gate

Run over ssh richh@rdmsm4x (sshd holds the Automation grant that gates 7–10 need).

Gate 3 wedge — ISSUE-20260910-07

The first gate attempt sat in gate 3 for 57m50s with 1:27.89 of CPU, state S, 0.0% CPU. Two sample runs 13 minutes apart returned an identical stack: ApplicationFlowsRenderAuditTests.testEveryModeAndWindowDrawsSomethingAtEveryWidth → NSColorConvertColorToColorSpace → evaluate_headroom → ColorSyncProfileGetTag → -[__NSCFString isEqual:]. Wedged, not slow.

Not deterministic: the same suite run alone under Rosetta passed — 9 tests, 0 failures, 180.789 s — and the re-run cleared gate 3. Hub load averages were 38–49 with 1Password at 164–339% CPU and three CGPDFService helpers, i.e. heavy concurrent ColorSync use. Leading hypothesis, not proof.

What is NOT done, and why

Build 506 is HELD by Rich, 15:04 EDT — "I'd rather hold and get the labels back": the flows table lost its per-app coloured labels between cf15adc and main, and another worker is restoring them. Therefore:

A signed-but-unnotarized 506 bundle exists only at dist/RTTy.app on the hub. It is a working artifact, not a release: 0.3.831/506, x86_64 arm64, Developer ID, hardened runtime, timestamped, profile a2b99f8b…, no get-task-allow, ICNS 7bd033da…, commit 8a2ddc3, gitDirty false. It launched and drew: 1 window, 2 menu bars, "Overall average latency 20 ms" within seconds — the Build 505 launch-hang class is not present.

CloudKit — promotion not yet effective from this host

The Production schema was promoted at ~14:57 EDT. RTTy 505 on the hub was still logging, at 14:58:18 and 14:58:47 EDT:

Fleet projection unavailable: Error saving record <CKRecordID: …recordName=latest…> to
server: Cannot create new type RTTyFleetProjection in production schema; retrying in 30s

Working query (the lines are Df, which is why a default-level log show returns nothing):

log show --predicate 'subsystem == "com.eastcoastscience.rtty" AND category == "CloudProjection"' \
  --info --debug --last 4h --style compact

There is no UI surface for the projection state — CloudKitFleetProjectionState is in-memory and only the unavailable path logs, once per distinct reason (ObservationStore.swift:3908–3923). Success is silent, so "no line" needs the positive control above to mean anything.

Feature archaeology (Rich, 15:11 EDT: "it existed prior and was lost")

Time-boxed, read-only. I did not find evidence of a removal for either item, and both look present-but-different rather than lost:

This wants Rich's confirmation before anything is "restored", because building to the wrong premise is the expensive mistake here.

Budget

usage_status at 19:06 UTC: advice hold — Anthropic 7-day at 87%, vendor-authoritative, resets 2026-09-11 13:59 UTC. No worker was spawned; everything above was done inline. OpenAI is at 3% and proceed if an external lane is wanted for the restoration work.

How to undo

Nothing on any host changed, so there is nothing to roll back operationally. To revert the repository work: git revert 9460db3 8a2ddc3 73bc648 (or reset main to 71eab80) and push. The superseded icon masters and ICNS files are present under their -superseded- names, so the previous artwork is recoverable without touching history.

Owner actions

  1. Send RESUME 506 with the labels-PR merge sha when it lands.
  2. Confirm the archaeology above — specifically whether the "Apply cloud settings" button and the flows-sampler-driven auto rows ever shipped, or were discussed and never built.
  3. CloudKit: re-check that the Production schema promotion has taken effect; the hub was still refused at 14:58:47 EDT.