Fleet changelogs · dev.ecs0.net
rdmsm4x-changelog-20260924-1332-rtty-dashboard-523-slice-a

Completed RTTy dashboard Slice A in the isolated scratch clone; shared timeline and latency fixes pass both builds and the full package suite.

HANDBACK-A — RTTy dashboard Build 523, Slice A only

Completed: 2026-09-24 13:31:30 EDT Host: rdmsm4x. Mode: production (existing app/data); isolated worker lane for lead claude@rdmsm4x/c13f617a. Workspace: /Users/richh/dev/_scratch/rtty-dashboard-523-20260924 Branch: feat/dashboard-one-timeline-523 Base: b19a69c Result: A1 and A2 implemented and locally validated. Slice B and Slice C were not started. No push, installation, signing, release metadata edit, or live-repository integration was performed.

Commit and exact files

9f2ecb32e1bc7c896d5d206453032cb097c031ef — feat(dashboard): complete Slice A shared timeline and latency band

Committed by explicit path. Post-commit git status --short printed no entries. Backup/review patch: slice-a.patch; the base and result are both retained in local Git.

FEATURE_MATRIX.md
Sources/LatencyCore/Metrics/LatencyBucketResolutionPolicy.swift
Sources/LatencyCore/Timeline/TimelineViewport.swift
Sources/RTTy/Stores/ObservationStore.swift
Sources/RTTy/Support/RTTyAppearanceTokens.swift
Sources/RTTy/Views/AggregateHistoryView.swift
Sources/RTTy/Views/ApplicationFlowsView.swift
Sources/RTTy/Views/DashboardView.swift
Sources/RTTy/Views/PathHistoryView.swift
Sources/RTTy/Views/SettingsView.swift
Sources/RTTy/Views/TimelineScrubberView.swift
Tests/LatencyCoreTests/BucketCadenceFloorTests.swift
Tests/LatencyCoreTests/ChartContiguityTests.swift
Tests/LatencyCoreTests/StableLatencyBucketSeriesTests.swift
Tests/LatencyCoreTests/TimelineViewportTests.swift
Tests/RTTyTests/ApplicationFlowTimelineZoomTests.swift
Tests/RTTyTests/ApplicationFlowsControlsTests.swift
Tests/RTTyTests/DashboardHistorySamplingTests.swift
Tests/RTTyTests/LatencyBandEdgeTests.swift
Tests/RTTyTests/LatencyBandScaleTests.swift
Tests/RTTyTests/SettingsControlParityTests.swift
Tests/RTTyTests/TimelineScrubberPresentationTests.swift
docs/FEATURE_MATRIX.md

Implemented acceptance

Exact final build and test commands

All commands ran with cwd /Users/richh/dev/_scratch/rtty-dashboard-523-20260924. Each final build/test command exited 0. Logs are copied beside this handback.

CLANG_MODULE_CACHE_PATH=/private/tmp/rtty-a-cache/clang SWIFTPM_MODULECACHE_OVERRIDE=/private/tmp/rtty-a-cache/swiftpm swift build --arch arm64 > /private/tmp/rtty-a-build-final.log 2>&1

Output: Build complete! (0.62 sec) Retained output: slice-a-build-arm64.log.

xcodebuild -project Apps/RTTyStandard/RTTyStandard.xcodeproj -scheme RTTyStandard -destination 'generic/platform=macOS' -derivedDataPath /private/tmp/rtty-a-standard build CODE_SIGNING_ALLOWED=NO > /private/tmp/rtty-a-standard-final.log 2>&1

Output: ** BUILD SUCCEEDED ** Retained output: slice-a-build-standard.log.

/usr/bin/lipo -archs /private/tmp/rtty-a-standard/Build/Products/Debug/RTTy.app/Contents/MacOS/RTTy

Output: x86_64 arm64 (exit 0). This is an unsigned build, not a signed release gate.

CLANG_MODULE_CACHE_PATH=/private/tmp/rtty-a-cache/clang SWIFTPM_MODULECACHE_OVERRIDE=/private/tmp/rtty-a-cache/swiftpm swift test > /private/tmp/rtty-a-tests-final.log 2>&1

Retained output: slice-a-tests.log. Exact target summaries:

Test Suite 'RTTyTests.xctest' passed at 2026-09-24 13:28:53.893.
     Executed 1256 tests, with 8 tests skipped and 0 failures (0 unexpected) in 96.489 (96.583) seconds
Test Suite 'RTTyPrivilegedCaptureTests.xctest' passed at 2026-09-24 13:28:54.254.
     Executed 71 tests, with 0 failures (0 unexpected) in 0.268 (0.273) seconds
Test Suite 'LatencyCoreTests.xctest' passed at 2026-09-24 13:29:01.486.
     Executed 347 tests, with 0 failures (0 unexpected) in 7.128 (7.153) seconds

Total reported: 1,674 tests, 0 failures, 8 skipped. This exceeds the 1,628 floor. Net new XCTest methods: 13. XCTest summaries include the skips; 1,666 tests were not skipped. Swift Testing separately reports zero tests, so no counts were inferred from that runner.

Required and added suite receipts from the same full run:

Test Suite 'ApplicationFlowTimelineZoomTests' passed at 2026-09-24 13:27:45.298.
     Executed 8 tests, with 0 failures (0 unexpected) in 0.073 (0.074) seconds
Test Suite 'ApplicationFlowsControlsTests' passed at 2026-09-24 13:27:45.548.
     Executed 5 tests, with 0 failures (0 unexpected) in 0.249 (0.249) seconds
Test Suite 'DashboardFitTests' passed at 2026-09-24 13:28:22.047.
     Executed 5 tests, with 0 failures (0 unexpected) in 3.596 (3.597) seconds
Test Suite 'LatencyBandEdgeTests' passed at 2026-09-24 13:28:30.717.
     Executed 3 tests, with 0 failures (0 unexpected) in 0.002 (0.002) seconds
Test Suite 'LatencyBandScaleTests' passed at 2026-09-24 13:28:30.718.
     Executed 3 tests, with 0 failures (0 unexpected) in 0.000 (0.000) seconds
Test Suite 'TimelineScrubberPresentationTests' passed at 2026-09-24 13:28:53.867.
     Executed 2 tests, with 0 failures (0 unexpected) in 0.000 (0.001) seconds
Test Suite 'ChartContiguityTests' passed at 2026-09-24 13:28:58.183.
     Executed 14 tests, with 0 failures (0 unexpected) in 3.836 (3.837) seconds
Test Suite 'TimelineViewportTests' passed at 2026-09-24 13:29:01.477.
     Executed 13 tests, with 0 failures (0 unexpected) in 0.001 (0.002) seconds

The five DashboardFitTests retain their existing 1440×900 / 1440×1200 / 1150×1500 checks. ApplicationFlowsControlsTests retains all four original cases and adds a fifth measuring the actual shared timeline at every duration (including extra chips) against 856 pt.

Focused regression command (also exit 0; 41 RTTy tests and 22 LatencyCore tests, zero failures):

CLANG_MODULE_CACHE_PATH=/private/tmp/rtty-a-cache/clang SWIFTPM_MODULECACHE_OVERRIDE=/private/tmp/rtty-a-cache/swiftpm swift test --filter 'ChartContiguityTests|BucketCadenceFloorTests|DashboardHistorySamplingTests|DashboardEvidenceSnapshotTests|MenuBarCadenceWindowTests|LatencyBand' > /private/tmp/rtty-a-focused.log 2>&1

Retained output: slice-a-focused-tests.log.

git diff --check
cmp FEATURE_MATRIX.md docs/FEATURE_MATRIX.md
git status --short

All exited 0 with no output after the commit. Scope receipt: slice-a-scope-audit.txt.

Deviations and reasons

  1. Renderer named by A2 is not the dashboard renderer at this base. DashboardView calls PathHistoryView, not AggregateHistoryView. The fix is applied to that actual call path, retaining hover/inspection and continuity handling. Shared scale/edge types live in the existing AggregateHistoryView file; compact aggregate menu-bar/Settings previews retain their existing scale. No source registrations or pins changed.
  2. The vertical wording conflicts mathematically with its exact formula. For flat 12 ms: p95 = median = 12, so max(15, 24, 5) = 24 ms and the trace sits at 50% height, not the lower third. The exact formula is implemented and asserted; neither this handback nor the test claims lower-third placement. A 200 ms outlier among 99 flat 12 ms observations clips to the 24 ms top and is marked.
  3. Short cadence support required one additional existing core file. Adding durations exposed false gaps under the old 12-bucket/9-sample assumptions. Initial fixes also exposed loss being merged by a 15s quantum and a five-minute regression. These were resolved with the restricted short-window policy above. Existing tests were extended/updated to describe the new durations and actual cadence-aware quantum; they were not deleted. slice-a-initial-tests.log and slice-a-cadence-tests.log retain the failed intermediate runs; final logs supersede them.
  4. Build environment: the first sandboxed Swift build could not apply SwiftPM's nested manifest sandbox (sandbox-exec: sandbox_apply: Operation not permitted). Authorized builds/tests were then run outside that nested sandbox with dedicated module caches. Standard uses a dedicated /private/tmp DerivedData path, the spec's permitted closest invocation. No protection was disabled. slice-a-initial-build.log retains the subsequent early compiler failure, corrected before the green runs.
  5. Settings control accounting: the removed independent flows picker changes the parity count from 112 to 111 (Look 19 to 18). This is the A1 removal, not a Slice B change. The legacy settings payload field remains compatible and cannot reintroduce a separate drawing window.

What was not verified

Persistence and rollback

Handback, logs, patch and scope receipt are in /Users/richh/dev/_handoff/rtty-dashboard-523-20260924-codex. A per-host changelog is recorded separately with the Notes outcome. Undo this isolated code change with git revert 9f2ecb32e1bc7c896d5d206453032cb097c031ef; no user-data migration, deletion or installed preference mutation was performed (migration tests use disposable suites). The lead retains integration/release ownership. Slice B and Slice C remain untouched.