docs: weekly MODULE_AUDIT and TODOs refresh (July 26, 2026) - #137
Merged
Conversation
Re-verify every open July 19 finding against current source and review the week's new surface (Periscope migration #94, Settings drill-in #111, developer HUD #115, navigation restructure #119, log-viewer tooling #107, String Catalog symbols #124, Gregorian calendars, previews, Bumper Bowling #127). Structural changes: LogKit and LogViewerUI are gone (Periscope replaced them), so the inventory drops to 14 SPM library targets; counts refreshed to ~359 source / ~198 test files. Adds a section for the new Bumper Bowling rule set. Two new high findings: - where.gregorian_calendar only matches an explicit `Calendar` base, so it misses the implicit `.current` form that is the only one left in the tree — the rule is green in CI while seven production sites drift, and RULES.md still claims violations are intentionally visible. - CalendarDay.displayDate resolves day labels through Calendar.current, which renders a date centuries off on a non-Gregorian device. Retires the finding for the missing Where app README, the cold-launch reason misclassification, preview coverage, the string-key facades, the SwiftData browser, and the widget stale-snapshot policy — all verified fixed. Co-authored-by: Kyle Van Essen <k@kve.me>
Retire what landed: the WhereModel break-up (now 185 lines of process-lifetime state after the WhereServices/WhereSession split), the SwiftData browser (shipped as Shared/SwiftDataInspector in Settings -> Developer), the @_spi(Testing) migration, and the two stale items whose subject no longer exists (the WhereModel 'controller' guard, hoisting Calendar.current onto the controller). File this week's findings: the CalendarDay.displayDate calendar bug and the Bumper rule blind spot that hides it, the tracking-toggle serialization race and its binding split, PresenceTimelineList showing empty during load plus the shared ReportLoadGate that would cover all five gates, soft-deleting untracked regions now that the picker reaches the hard delete, the two Core failure paths that report benign defaults, LocationNamer cancellation, and a batch of smaller convention/test/docs items. Also pins the exact remaining waitForOneRunloop call sites in the P0. Co-authored-by: Kyle Van Essen <k@kve.me>
Adds a P1 for the orphan sweep closing spans whose relaunch policy can't be decoded — a try? decode failure skips the survivesRelaunch branch, so the span is orphan-closed as though it opted out, silently. Adds three P2s: LogInspectorModel re-querying full subtrees on every commit (it never got the afterSequence cursor the other live models did), SpanHistoryModel bucketing an undecodable SpanEnded under a message-derived name with no log, and a test pinning open-span containment semantics. Sharpens the two density items with what the audit confirmed: the viewer's density picker has no effect on span-tree rows, and the drill-ins override the viewer's seeded density rather than inheriting it (SpanHistoryView too). Co-authored-by: Kyle Van Essen <k@kve.me>
…tion The July 26 refresh removed those sections — the modules were deleted when Periscope replaced them — so the root AGENTS.md example no longer holds. Keep the useful half of the caveat (the audit is current to its header date, not to HEAD) without pinning it to an example that goes stale on the next refresh. Co-authored-by: Kyle Van Essen <k@kve.me>
kyleve
marked this pull request as ready for review
July 26, 2026 17:29
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Weekly read-only audit refresh. Every open July 19 finding was re-verified against current source, and the week's new surface was reviewed: the Periscope migration (#94), Settings drill-in (#111), developer HUD (#115), navigation restructure (#119), log-viewer tooling (#107), String Catalog symbols (#124), the Gregorian-calendar pass (
fe99dde), preview coverage (52f0136), Bumper Bowling (#127), and catalog serialization (#135). No source changed.Structural changes to the audit
LogKitandLogViewerUIare gone — Periscope replaced them, so their sections are removed and the inventory drops to 14 SPM library targets. Counts refreshed to ~359 source / ~198 test files (WhereUI 84 → 113, WhereCore 70 → 87, PeriscopeTools 15 → 24, RegionKit 9 → 13).Two new high findings
where.gregorian_calendarenforces nothing. The rule filtersMemberAccessExprSyntaxonbase == "Calendar", so it matches a spelled-outCalendar.currentbut not the implicit-member form (calendar: Calendar = .current,in: .current) — which, after the Gregorian call-site pass, is the only form left in the tree. CI hard-gatesbumper lintatseverity: .errorand is green, which confirms it finds nothing while seven production sites drift..bumper/RULES.mdalso claims three calendar violations and some preview-coverage violations are "left visible during this bootstrap"; both claims are stale.CalendarDay.displayDateresolves throughCalendar.current.startOfDay(in:)interprets the day's Gregorian Y-M-D as that calendar's components, so on a Buddhist-era device every day label flowing through the helper — relabel, logged days, resolution details, the region drill-in — renders a date ~543 years off.DateRangeFormatting.abbreviatedandPresenceTimeline.stintsalso default to.current.The three highs carried from July 19 are all still open: daily-summary staleness, the WhereUI tracking-toggle race, and the LifecycleKit terminal-phase race (now described precisely —
runSteps' cancellation check sits at the top of the loop, so a cancel during the final step'sminVisiblehold is never observed before it returns.completed).Retired as verified fixed
The Where app
README.md; the cold-launch reason misclassification (.undetermined+completedStepIDs);#Previewcoverage across WhereUI/WhereWidgets; the hand-maintained string-key facades; the in-app SwiftData browser; the widget post-midnight snapshot policy (now documented as intentional degradation); andSharedItemLoaderwarning logs.TODOs.md
Where/TODOs.md— retires theWhereModelbreak-up (now 185 lines of process-lifetime state), the SwiftData browser, the@_spi(Testing)migration, and two items whose subject no longer exists (theWhereModel"controller" guard, hoistingCalendar.currentonto the controller). Files this week's findings, pins the exact remainingwaitForOneRunloopcall sites, and promotes soft-deleting untracked regions now that the shipped picker reaches the hard delete.Shared/Periscope/TODOs.md— adds a P1 (the orphan sweep closing spans whosesurvivesRelaunchpolicy couldn't be decoded, silently) and three P2s (LogInspectorModelre-querying full subtrees per commit,SpanHistoryModelswallowing anSpanEndeddecode failure, and a test pinning open-span containment). Sharpens the two density items with the user-visible consequence.Root
AGENTS.md— its description of the audit cited the LogKit/LogViewerUI sections as an example of stale content surviving a refresh; this refresh removed them, so the caveat is rewritten to keep the useful half without an example that goes stale again.Verification
Static analysis only — the Cloud agent runs Linux, so no
tuist test,bumper lint, or simulator runs. CI status onmainwas read viagh(green) which is what lets the "the Gregorian rule finds nothing" conclusion stand. Changes are markdown-only, so./swiftformat --lintand./xcstrings --lintare unaffected.Note
Low Risk
Documentation and backlog updates only; no runtime, security, or data-path changes.
Overview
Markdown-only weekly audit refresh (July 26, 2026): no application code changes.
MODULE_AUDIT.mdis rewritten for the week’s landings—Periscope replacing LogKit/LogViewerUI (14 SPM targets, refreshed file counts), new Bumper Bowling coverage, and re-verification of July 19 findings. The report adds two high items (where.gregorian_calendarblind to implicit.current,CalendarDay.displayDateusingCalendar.current), keeps three prior highs open with sharper LifecycleKit wording, and marks several items fixed (app README,.undeterminedlaunch, previews, String Catalog symbols, SwiftData browser, etc.).Where/TODOs.mdandShared/Periscope/TODOs.mdabsorb new P0/P1/P2 work from the audit; completed Where items (WhereModelsplit, SwiftData browser,@_spi) move to Completed issues.Root
AGENTS.mdupdates theMODULE_AUDIT.mdcaveat: findings are current to the audit header date, notHEAD, without the removed LogKit/LogViewerUI example.Reviewed by Cursor Bugbot for commit bc73f04. Bugbot is set up for automated code reviews on this repo. Configure here.