Fleet changelogs · dev.ecs0.net
rdmsm4x-changelog-20260828-2000-logtty-resume-signed-build20

logTTY resume pass — ground truth, signed build 20, documentation conformance

2026-08-28 19:51 EDT – 20:00 EDT · rdmsm4x · Claude session (resume, per Rich's request to pick the project back up)

What was done

  1. Ground truth re-established. swift build clean; swift test 238 tests / 33 suites / 5 targets, 0 failures; all three Tests/ScriptTests/*.sh PASS; script/verify_product_identity.sh PASS; git diff --check clean.
  2. Produced a current, correctly signed release build. ./script/build_and_run.sh --release (run in the Aqua session, not SSH — signing requires it) → ~/dev/apps/logTTY/dist/logTTY-0.1.1-20.zip:
    • Bundle ID com.eastcoastscience.logTTY, version 0.1.1, build 20
    • lipo -archs → x86_64 arm64 (universal2)
    • codesign -dvvv → Authority=Apple Development: Richard Doty (S65Q255HA8), TeamIdentifier=ZU2882L4HT, Runtime Version=14.0.0 (hardened runtime) — not ad-hoc
    • Designated requirement: identifier "com.eastcoastscience.logTTY" and anchor apple generic and certificate leaf[subject.CN] = "Apple Development: Richard Doty (S65Q255HA8)" and certificate 1[...] exists
    • Metadata.appintents correctly absent — the macOS app declares zero AppIntent/AppShortcutsProvider symbols, so there is nothing to emit
    • Info.plist has 0 *UsageDescription keys — new finding, filed
    • Not installed anywhere this pass; local install/runtime proof remains open (ISSUES.md LTTY-O02)
  3. Verified mobile App Intents metadata post-rename. Built Apps/LogTTYMobile/LogTTYMobile.xcodeproj (LogTTYMobileApp, Debug, iphonesimulator). ExtractAppIntentsMetadata wrote a populated Metadata.appintents/ declaring LogTTY.OpenLogTTYIntent under the current bundle ID com.eastcoastscience.logTTY.mobile; zero Logstreamed strings in the binary. First evidence for the renamed app — everything previously on disk predated the rename.
  4. Resolved from ISSUES.md:
    • SESSION-STATE.md had never been updated to match the 2026-08-23 canonical-root decision (~/dev/apps/logTTY) — it still named the retired ~/dev/logTTY-app root, five days after four other files were corrected. Fixed.
    • The "masked main ref" fleet-watch incident (loose vs. packed-refs mismatch, raised by offhost_watch.zsh on rdmbair15m5) is not a real repo condition — it's normal git behavior (packed-refs only updates on git pack-refs/gc; the loose ref is always authoritative and runs ahead after any commit). Filed a todo item against the watcher itself rather than working around it in this repo: ~/dev/todo/items/20260828-fleet-offhost-watch-packed-refs-false-positive.md (relayed to fleet/ISSUES.md automatically).
    • Mobile App Intents metadata (see #3).
    • LTTY-O02 (produce/validate a current signed build) — evidence-complete for the build itself; install/runtime proof intentionally left open (out of scope this pass).
  5. Documentation conformance raised 6/10 → 8/10 against ~/dev/lib/app-baseline/PROJECT_DOCUMENTATION_PROTOCOL.md §7. FEATURE_MATRIX.md's ad hoc section headers were converted to the fixed status vocabulary (Working/Working (qualified)/Partial/Foundation/Documented only/Planned/Blocked) with an explicit per-row boundary column (delegated to a scoped subagent; verified after). Remaining fails: item 7 (no test ties INTERFACES.md's App Intents claim to the actual metadata processor output) and items 8/9 (no dev.ecs0.net page exists for this project yet — deliberately not built this pass).
  6. New open finding filed: Info.plist declares zero *UsageDescription keys against ~/dev/apps/CLAUDE.md §9's requirement.
  7. Replaced ~/dev/data/project-docs/logTTY.json with current evidence (build/test/commit, 10 curated features, git/libraries enrichment blocks).
  8. Committed: 1645e6d "Resume pass: re-establish ground truth, sign a real release build, close five documentation gaps" (5 files, docs only — no source changed). Not pushed (repo policy: publication is Rich's call).

Deliberately left open / not attempted

Needs Rich's decision

None new this pass. Existing open decisions in DECISIONS.md stand: CloudKit container name (shared with RTTy/RDReceipt, blocked on team provisioning) and whether the Direct channel ships with the privileged helper enabled.

Evidence / files touched