Skip to content

docs: weekly TODOs re-verification and MODULE_AUDIT refresh (August 2, 2026) - #171

Draft
cursor[bot] wants to merge 4 commits into
mainfrom
cursor/todo-triage-weekly-pass-cd91
Draft

docs: weekly TODOs re-verification and MODULE_AUDIT refresh (August 2, 2026)#171
cursor[bot] wants to merge 4 commits into
mainfrom
cursor/todo-triage-weekly-pass-cd91

Conversation

@cursor

@cursor cursor Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

The weekly todo-triage pass. INBOX.md was empty, so this is steps 2–5: re-verify the open backlog against current source, review the week's landings, rewrite the audit from what the backlog now says, and fix the docs the week invalidated.

The heaviest week the repo has had — 359 → 501 source files, 14 → 19 library targets, three new modules (Flyover, Inspector's boot runtime, LifecycleKitUI), demo mode reshaping composition around WhereScope, and spans pushed through every expensive path in the app.

What moved in the backlog

Every open item in all 11 TODOs.md files was read against current source. Most citations moved and are corrected; the verdicts that changed:

Closed: WherePreferences.init(store:) lost its parameter default (#150), IntentSnippets' preview literal is localized, the LocationsView/YearView empty-state snapshot cases exist, and SnapshotCase now rebuilds content per configuration.

Corrected rather than carried:

  • The "one remaining isCapturingSnapshot read that isn't a stand-in" claim was wrongLaunchSplashView reads it twice more. Both are sanctioned carve-outs (a wall-clock timer and a motion end-state), which is the distinction the old wording lost. CalendarContentView's scroll skip is still the real exception.
  • Periscope's "no eager store handle" item described a WhereModel that no longer exists; Add demo mode, and open nothing until the user picks a world #150 replaced the bare Optional<PeriscopeStore> with a typed LogStoreState. The consumer side is honest now; the async make() that forces the state machine is what's still open.
  • The SnapshotKit shared-content item is half fixed — SnapshotCase is no longer the culprit, one runner call site is.
  • The where.gregorian_calendar P0 said "seven production sites"; it's four shipped sites plus preview fixtures, and there are now zero explicit Calendar.current spellings left, so the rule's match set is provably empty.

Three new findings:

  1. WhereTests double-links LifecycleKit beside WhereUI, and never imports it (Project.swift:311-315) — exactly what the "Never double-link a product WhereUI already carries" rule forbids. It slipped past because the rule's prose scopes itself to the unitTests helper's extraPackageProducts and WhereTests is hand-rolled, and because the guard test lives in WhereUITests. WhereTests is in Stuff-iOS-Tests, which is where the failure reproduces.
  2. A store opened without a resolvable URL silently loses remote-change observation in release (SwiftDataStore.swift:222-229) — the else branch is a bare assertionFailure, so a debug build traps and a release build returns a store that never sees a share-extension add or a CloudKit sync.
  3. Flyover shipped 50 sources against 10 namesake test files — the largest untested surface in the repo. Opened Shared/Flyover/TODOs.md for it.

What the audit now says

Rewritten from the refreshed backlog. Two things worth flagging in the report itself rather than only in the diff:

  • The July 26 pass listed the LifecycleKit terminal-phase race as an open high against a tree where Typed LifecycleKit: compile-checked launch plans, engine/UI split, Where migration #116 had already fixed it that same day. The new report says so instead of quietly dropping it.
  • The severity-count tables are gone. They mixed filed items with findings folded into module summaries, so they couldn't be reconciled against the backlog — which is the only place a finding lives. A top-findings table of pointers replaces them.

It also records what verified clean, which a backlog has no room for — including Inspector's twelve data-deletion safety invariants, each checked against code individually rather than sampled, and all twelve enforced.

Docs

  • Where/AGENTS.md documented Inspector's boot runtime but not Flyover, which landed the same week.
  • WhereUI/AGENTS.md claimed views don't branch on \.isCapturingSnapshot. Three do; the rule is now stated as the carve-out it actually is, with the one real exception named so it doesn't read as precedent.
  • SnapshotKitTesting/AGENTS.md quoted settle-cost percentages measured over 260 references; it's 273 now. Dated the measurement and added a tripwire rather than restating stale numbers as current.
  • Root AGENTS.md listed the image suites that don't link WhereUI; Flyover's is a third.

Regenerated the CLAUDE.md mirrors with ./sync-agents.

Verification

This pass ran on Linux, so it is static analysis only — no test, build, or bumper lint run backs any runtime claim, and the audit's Limitations section says so. What did execute: ./swiftformat --lint (clean, 0/818) and ./attribution --check (clean, 7 credits). CI on main was read via gh and is green through 0cce6578, which is what lets the "the Gregorian rule finds nothing" conclusion stand.

Every claim published here was spot-checked against source by hand after the verification fan-out, not taken from it directly.

Markdown only — no code changes.

Open in Web View Automation 

Weekly triage pass. Corrects every citation that moved under the ~29
commits since the July 26 audit, records what shipped, and files three
new findings.

Root TODOs.md:
- Sharpen the where.gregorian_calendar P0 with the four shipped
  implicit-member sites the rule can't see (the old "seven" predates the
  call-site pass) and the current rule line.
- New P1: WhereTests double-links LifecycleKit beside WhereUI and never
  imports it, which the documented rule forbids. It slipped past because
  the rule's prose scopes itself to the unitTests helper's
  extraPackageProducts and WhereTests is a hand-rolled target; the guard
  test lives in WhereUITests, so nothing catches it.
- Correct ./test's affected_bundles range and the StuffTestHost scene-name
  duplicate line.

Where/TODOs.md:
- Two new WhereCore items: a store opened without a resolvable URL
  silently loses remote-change observation in release (assertionFailure is
  debug-only), and DemoDataBuilder's comment claims a reconcile the bulk
  ingest doesn't do.
- Record what closed: WherePreferences.init(store:) lost its default,
  IntentSnippets' preview literal is localized, and the LocationsView /
  YearView empty-state snapshot cases exist.
- Correct the "one remaining isCapturingSnapshot read" claim, which was
  wrong: LaunchSplashView reads it twice more. Both are sanctioned
  carve-outs, which is the distinction the old wording lost.
- Sharpen the launch notification-prompt P1 with why it hits every fresh
  install (all three preferences default to true).
- Re-cite the broken-snapshot cluster; the blank VoiceOver calendar
  references are confirmed not re-recorded (LFS pointer sizes).
Periscope: re-measure Periscope.swift (931 lines, State still flat) and
PeriscopeStore.swift (1230) for the decomposition item; correct the
survivesRelaunch warn cite; record that #154's budgeted launch spans made
the pre-store-attach P0 more expensive, since a launch span's began and
ended now land in different places; recount the hosting smoke tests
(18/9 -> 20/10); file SpanHistoryModel under the rebuild-per-commit item.

Correct the "no eager store handle" item, which described a WhereModel
that no longer exists: #150 replaced the bare Optional<PeriscopeStore>
with a typed LogStoreState. The consumer side is honest now; the async
make() that forces the state machine is what's still open.

SnapshotKit: the shared-content item is half fixed. SnapshotCase rebuilds
per access; the runner still hoists one AnyView out of the configuration
loop, which is the remaining call site.

SnapshotKitTesting: the settle-floor item counted 260 references and 22
floor-bound configurations. It's 273 and 24 now, and the Flyover canvas
is the new one. Flag the timing percentages as needing re-measurement
rather than quietly restating them.

New Shared/Flyover/TODOs.md: the module landed this week with 50 sources
and 10 namesake test files, and its invalid-catalog view reports an issue
count without the issues.

Also re-cite LifecycleKit, Broadway, CreditKit, and Inspector.
Where/AGENTS.md described Inspector's boot runtime but not Flyover, which
landed the same week and which WhereUI also builds on. Both are now one
section, with the split that matters: Flyover knows nothing about Where,
so the seeded demo world and the never-activate rule stay WhereUI's.

WhereUI/AGENTS.md claimed views don't read isCapturingSnapshot to branch
themselves. Three do. Two are sanctioned (LaunchSplashView freezes a
wall-clock timer and pins a motion phase, which is what the flag is for);
CalendarContentView's scroll skip is the one that isn't, and is filed.
State the rule as the carve-out it actually is, and name the exception so
it doesn't read as precedent.

SnapshotKitTesting/AGENTS.md quoted settle-cost percentages measured over
260 references. Flyover and Inspector brought their own bundles, so it is
273 now — date the measurement and add the tripwire rather than restating
numbers as if they were current.

Root AGENTS.md listed the image suites that don't link WhereUI; Flyover's
is a third.

Regenerated the CLAUDE.md mirrors with ./sync-agents.
The tree moved further in one week than in any before it: 359 -> 501
source files, 14 -> 19 library targets, three new modules. The report is
derived from the TODOs.md files as they now stand, so every finding it
points at is a real item rather than a restated body.

Two things worth calling out in the report itself rather than only in the
diff. The July 26 pass listed the LifecycleKit terminal-phase race as an
open high against a tree where #116 had already fixed it that same day;
this pass says so instead of quietly dropping it. And the severity-count
tables are gone: they mixed filed items with findings folded into module
summaries, so they could not be reconciled against the backlog, which is
the only place a finding lives. A top-findings table of pointers replaces
them.

Records what was verified clean, which is the part a backlog has no room
for — including Inspector's twelve data-deletion safety invariants, each
checked against code individually rather than sampled, and all twelve
enforced.

Limitations are honest about the Linux VM: no test, build, or bumper run
backs any runtime claim. What did execute is named (swiftformat --lint,
attribution --check, gh for CI status).
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.

1 participant