Skip to content

docs: weekly MODULE_AUDIT and TODOs refresh (July 26, 2026) - #137

Merged
kyleve merged 4 commits into
mainfrom
cursor/module-audit-and-todos-f6df
Jul 26, 2026
Merged

docs: weekly MODULE_AUDIT and TODOs refresh (July 26, 2026)#137
kyleve merged 4 commits into
mainfrom
cursor/module-audit-and-todos-f6df

Conversation

@cursor

@cursor cursor Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

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

  • LogKit and LogViewerUI are 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).
  • New section for Bumper Bowling, the repo-owned architecture lint that landed this week.

Two new high findings

  1. where.gregorian_calendar enforces nothing. The rule filters MemberAccessExprSyntax on base == "Calendar", so it matches a spelled-out Calendar.current but 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-gates bumper lint at severity: .error and is green, which confirms it finds nothing while seven production sites drift. .bumper/RULES.md also claims three calendar violations and some preview-coverage violations are "left visible during this bootstrap"; both claims are stale.
  2. CalendarDay.displayDate resolves through Calendar.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.abbreviated and PresenceTimeline.stints also 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's minVisible hold is never observed before it returns .completed).

Retired as verified fixed

The Where app README.md; the cold-launch reason misclassification (.undetermined + completedStepIDs); #Preview coverage 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); and SharedItemLoader warning logs.

TODOs.md

Where/TODOs.md — retires the WhereModel break-up (now 185 lines of process-lifetime state), the SwiftData browser, the @_spi(Testing) migration, and two items whose subject no longer exists (the WhereModel "controller" guard, hoisting Calendar.current onto the controller). Files this week's findings, pins the exact remaining waitForOneRunloop call 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 whose survivesRelaunch policy couldn't be decoded, silently) and three P2s (LogInspectorModel re-querying full subtrees per commit, SpanHistoryModel swallowing an SpanEnded decode 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 on main was read via gh (green) which is what lets the "the Gregorian rule finds nothing" conclusion stand. Changes are markdown-only, so ./swiftformat --lint and ./xcstrings --lint are unaffected.

Open in Web View Automation 

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.md is 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_calendar blind to implicit .current, CalendarDay.displayDate using Calendar.current), keeps three prior highs open with sharper LifecycleKit wording, and marks several items fixed (app README, .undetermined launch, previews, String Catalog symbols, SwiftData browser, etc.).

Where/TODOs.md and Shared/Periscope/TODOs.md absorb new P0/P1/P2 work from the audit; completed Where items (WhereModel split, SwiftData browser, @_spi) move to Completed issues.

Root AGENTS.md updates the MODULE_AUDIT.md caveat: findings are current to the audit header date, not HEAD, 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.

cursoragent and others added 4 commits July 26, 2026 13:21
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
kyleve marked this pull request as ready for review July 26, 2026 17:29
@kyleve
kyleve merged commit 70c661d into main Jul 26, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants