Skip to content

docs: weekly backlog re-verification and MODULE_AUDIT refresh (August 30, 2026) - #299

Merged
kyleve merged 4 commits into
mainfrom
cursor/todo-triage-weekly-pass-6e43
Aug 31, 2026
Merged

docs: weekly backlog re-verification and MODULE_AUDIT refresh (August 30, 2026)#299
kyleve merged 4 commits into
mainfrom
cursor/todo-triage-weekly-pass-6e43

Conversation

@cursor

@cursor cursor Bot commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Re-verified every open item in all 13 TODOs.md files against current source. INBOX.md was empty, so nothing was promoted.
  • Closed one item — the Locations ranking-reorder P2, by PR feat(WhereUI): animate live location ranking overtakes #289 — and filed one, covering four macOS-coupled edges in the retained-tool layer that PR test(Scripts): harden retained tooling foundation #283 turned into CI gates.
  • Corrected a claim the backlog had been repeating for five audits: the SnapshotProviding item said three Settings drill-ins lacked image coverage and were "the only" ones. There are five.
  • Corrected the repo's Linux capability docs, which PR test(Scripts): harden retained tooling foundation #283 invalidated by giving CI two gates that need neither Xcode nor a Swift toolchain.
  • Rewrote MODULE_AUDIT.md for August 30 from the refreshed backlog.

Why

The weekly todo-triage pass. The backlog is the source of truth and the audit is written from it, so the backlog was re-verified first and the report last. This covers a two-week window: the August 16 pass landed on main, but no audit ran on August 23.

The most consequential thing in this pass is a change in method rather than a finding. PR #283 made ShellCheck and the retained Python/Ruby tool suites steps in CI's format job — the first CI gates in this repo that need neither Xcode nor a Swift toolchain. So for the first time a Linux weekly pass could execute part of CI instead of only reading it. Running them is how the one new item was found, and it is not something reading would have produced: a test asserts bash's 126 exit status for an unlaunchable command, and Linux reports 127. CI cannot report this because CI only runs on macOS.

Three more macOS assumptions turned up beside it, all from one cause (Linux ships no /usr/bin/ruby, and the pinned one is reachable only through mise), so they are filed as one item with four halves rather than four near-duplicates. The tidiest of the four: ./sync-agents is #!/usr/bin/env ruby and dies on a bare Linux shell, while its sibling ./attribution is a bash wrapper that reaches the pinned Ruby through mise exec -- and works fine. Two Ruby-implemented commands, one documented as working on Linux, and only one of them arranged to.

Review focus

  • The SnapshotProviding correction (Where/TODOs.md) is the one worth reading closely. The item survived five audits because each pass re-checked the three screens it named and found them still true — a different question from the one the item claims to answer. EvidenceListView (Settings > Attachments) and RegionsSettingsView (Settings > Regions) were reachable the whole time. The fix is not a bigger number: the item now records how to derive it (list every *View.swift with a #Preview and no conformance, then intersect with SettingsView.destination(for:)), so the next pass re-runs a procedure instead of re-confirming a list. Worth agreeing that this is the right shape for a counted claim.
  • Two candidate findings were rejected rather than filed, and both are recorded in the audit so a later pass doesn't re-derive them. The new Ranking Animation Lab reads \.accessibilityReduceMotion directly rather than through @MotionIsStatic, which reads as a rule violation until you notice that rule is scoped to motion that never settles and that nothing in the lab plays without a tap — so no capture has motion to freeze. And LocationCardsReconciliationModifier's assertionFailure arms read as swallowed errors until you notice Task.sleep and Task.checkCancellation throw only CancellationError, making them the impossible-state case the repo's own rule assigns to assertionFailure. Please push back if you read either differently.
  • The root AGENTS.md is the one always-applied file changed here. Its Linux table gained three rows and now names the carve-outs instead of implying the layer is portable; the "Full build & test" section states the format job's six checking steps and CircleCI's build-once handoff.
  • The snapshot-parallelization half of the standing CI-docs P1 was sharpened rather than re-dated. .circleci/config.yml now reads parallelism: 4, so a reader arrives at a job that visibly is parallelized with nothing marking which axis is unsafe. Sharding by suite across isolated containers is safe and is what PR ci: build iOS tests once and shard snapshots #276 landed; parallelizing inside a container is not.
  • The closure is larger than the item asked for. PR feat(WhereUI): animate live location ranking overtakes #289 was asked (by the backlog) for an .animation(_:value:) around the card ForEach; it shipped an explicit interpolated layout, and the matchedTransitionSource conflict the item flagged is now a written rule. The closure note says so rather than pretending the item predicted it.

⚠️ Breaking changes

None. Markdown only — backlog files, the audit report, root AGENTS.md, one module AGENTS.md, and one skill.

Compatibility

No behavior, API, or wire-format changes. No Swift, YAML, or manifest edits.

Testing

Run on this branch:

  • ./swiftformat --lint — 0/1116 files require formatting, 128 skipped.
  • ./shellcheck — clean, exit 0.
  • ./attribution --check — up to date, 12 credits (up from 11: PR test(Scripts): harden retained tooling foundation #283 pinned ShellCheck as a development tool and re-ran the generator in the same change).
  • ./snapshot-shards check — plan valid, 47 suites in 3 planned shards plus intake (13/15/18/1).
  • mise exec -- ./sync-agents — regenerates the gitignored CLAUDE.md mirrors cleanly after the AGENTS.md edits.

Deliberately reported as failing, because it is the finding:

  • python3 -m unittest discover -s Tools/Tests -p 'test_*.py' — 1 failure of 64 (126 != 127).
  • The Ruby retained-tool suites — 12 failures and 1 error across 75 runs, all /usr/bin/env: 'ruby': No such file or directory.

Both are host-coupling in the tests, not defects in the commands under test, and both are filed in the root TODOs.md.

Not run, and why: the pass runs on Linux, which has no Swift toolchain, so ./test, ./test --architecture-only, and ./xcstrings --lint cannot execute here. No production Swift changed, so nothing in this diff can be exercised by them. The audit's Limitations section says the same, and now also says precisely which five checks were run — the first edition of that report able to make the claim.

What was verified rather than assumed

Every citation in every file was re-derived against source rather than carried forward. Corrections beyond the ones above:

  • Shared/Periscope/TODOs.md — three mis-citations fixed. StoredLogEvent carries spanID and spanExitMode but not spanRelaunchPolicy; LogSpan.swift:643 is end(for:)'s unmatched-begin warning, not a relaunch-path warning; the journal-ingest deletes are at :61 and :71, not :42-44.
  • Shared/Flyover/TODOs.md — fourteen test files, not twelve. The item's own body credited the two it wasn't counting, so a count and a body disagreed inside one bullet.
  • Shared/SnapshotKitTesting/AGENTS.md — the reference count read 466 in two bullets; the tree holds 472.
  • The affected-bundle-parser P2 — its "fragile embedded Python" premise is obsolete. PR refactor(Scripts): extract Xcode report policy #284 moved affected_bundles to Tools/test_runner.py with direct tests, so only the design question remains, and the item now says so instead of arguing from untestability.
  • ./test's line count — 722, having gone 869 → 941 → 722. Cited as 941 in a P2 whose argument leaned on the number.
Open in Web View Automation 

cursoragent and others added 3 commits August 30, 2026 13:40
Weekly todo-triage pass over all 13 TODOs.md files. INBOX.md was empty, so
nothing was promoted.

Closed:

- Where/TODOs.md: the Locations ranking-reorder P2, by PR #289. The item asked
  for an `.animation(_:value:)` around the card `ForEach`; what shipped is an
  explicit interpolated layout driven by a KeyframeAnimator, with counts, order,
  flourish, persistence, and haptics released through one reconciliation. The
  matchedTransitionSource conflict the item flagged is now a written rule.

Filed:

- TODOs.md: the retained-tool suites became CI gates in PR #283 and pass only
  on macOS. Four halves, one cause (no /usr/bin/ruby on Linux): a hardcoded
  126 exit status where Linux reports 127, a hermetic PATH that needs a system
  Ruby, `sync-agents` unable to find Ruby without `mise exec --` where its
  sibling `attribution` wraps that, and no .gitignore entry for __pycache__.
  Found by running the gates rather than reading them.

Corrected, not merely re-dated:

- Where/TODOs.md: the SnapshotProviding item claimed three Settings drill-ins
  lacked image coverage and were "the only" ones. There are five —
  EvidenceListView and RegionsSettingsView were never listed — plus ten further
  views with a bare #Preview. The item now records how to re-derive the count
  instead of carrying it.
- Shared/Flyover/TODOs.md: fourteen test files, not twelve.
- Shared/Periscope/TODOs.md: StoredLogEvent has no spanRelaunchPolicy column;
  LogSpan.swift:643 is end(for:)'s unmatched-begin warning, not a relaunch
  warning; the journal-ingest deletes are at :61 and :71.
- TODOs.md: the affected-bundle parser moved to Tools/test_runner.py with
  direct tests, so that P2's "fragile embedded Python" premise is obsolete and
  only its design question remains.
- TODOs.md: the "never parallelize the snapshot suite" half is sharpened —
  .circleci/config.yml now reads `parallelism: 4`, so a reader arrives at a job
  that visibly is parallelized with nothing marking the unsafe axis.

Citations re-derived across every file. Two candidate findings in the new
surface were raised and rejected against source rather than filed: the Ranking
Animation Lab's direct accessibilityReduceMotion read (the @MotionIsStatic rule
covers motion that never settles, and nothing in the lab plays without a tap)
and LocationCardsReconciliationModifier's assertionFailure arms (unreachable —
Task.sleep and checkCancellation throw only CancellationError — so this is the
impossible-state case the repo's rule assigns to assertionFailure).

Validation: ./swiftformat --lint, ./shellcheck, ./attribution --check, and
./snapshot-shards check all pass. Documentation-only change, so the Swift test
tiers cannot exercise it; the retained-tool suites were run and their two
macOS-coupled failures are the finding above.

Co-authored-by: Kyle Van Essen <k@kve.me>
PR #283 gave CI's format job two gates that need neither Xcode nor a Swift
toolchain, and PR #276 changed the iOS job topology. Three docs still described
the world before both.

- AGENTS.md: the "What works on Linux" table now lists ./shellcheck,
  ./attribution --check, and the retained Python tool tests alongside
  SwiftFormat, and names the three macOS-coupled carve-outs among them rather
  than implying the whole layer is portable. The agent-sync row takes the
  `mise exec --` prefix it actually needs. The "Full build & test" section
  states the format job's six checking steps and CircleCI's build-once handoff
  to a four-way-sharded snapshot job.
- .agents/skills/running-tests/SKILL.md: the Environment section claimed Linux
  could run SwiftFormat and sync-agents "only". Five things run there now.
- Shared/SnapshotKitTesting/AGENTS.md: the reference count read 466 as of
  2026-08-16 in two bullets; the tree holds 472.

Each claim was verified by running the command or reading the config it
describes, not inferred. The carve-outs are filed in TODOs.md.

Validation: ./swiftformat --lint, ./shellcheck, and ./attribution --check pass;
`mise exec -- ./sync-agents` regenerates the gitignored CLAUDE.md mirrors
cleanly. Documentation-only, so no test tier applies.

Co-authored-by: Kyle Van Essen <k@kve.me>
Rewritten from what the backlog now says, after the re-verification pass in
c2dc9cb. Header date August 30, prior date August 16 retained for the diff.

What the report now records:

- Counts re-derived rather than carried: 694 source / 368 test / 47
  image-snapshot Swift files (677 / 361 / 46 a fortnight ago), 472 reference
  images across 47 snapshot suites, 18 root commands, 12 attribution credits,
  ./test down to 722 lines.
- One closure and one filing, both explained: PR #289 closed the ranking-reorder
  P2 from inside a feature, and the retained-tool layer's macOS coupling was
  found by executing the gates.
- A new Method claim this report has never been able to make: five of CI's
  checks were actually run, so the Limitations section no longer says "nothing
  in this report was executed" and instead says precisely which five.
- The two rejected candidate findings, written down so a later pass does not
  re-derive and re-file them.
- Five cross-cutting themes, including one on why rejecting a finding is a
  result, and one on the SnapshotProviding item having been re-confirmed five
  times by checking the three screens it named rather than the question it
  claimed to answer.
- New shape this window: the .xcode-build-version renderer pin (27A5252f), the
  build-once CircleCI handoff with its four-way suite sharding and after-the-fact
  execution check, and the NO-CI opt-out marker.

No actionable items; every finding is a pointer into a TODOs.md.

Validation: documentation-only. ./swiftformat --lint, ./shellcheck, and
./attribution --check pass; every path and TODOs.md link the report cites was
checked to exist.

Co-authored-by: Kyle Van Essen <k@kve.me>
@cursor
cursor Bot marked this pull request as ready for review August 30, 2026 13:42
@kyleve

kyleve commented Aug 31, 2026

Copy link
Copy Markdown
Owner

@codex please resolve the conflicts

@chatgpt-codex-connector

Copy link
Copy Markdown

Unable to Complete

I could not resolve the PR conflicts because this checkout has no Git remote configured, and GitHub CLI has no authentication available. The supplied base commit is already an ancestor of the PR head, so the newer base revision that caused the GitHub conflict is not present locally.

No files were changed, no commit was created, and—per repository policy—no pull request was opened.

Checks

  • git status --short --branch — working tree is clean on work.
  • git merge-base --is-ancestor e2b4ecb10e80ec4cb5319e2707fc5c9e9223c3e5 HEAD — the supplied base SHA is already contained in the PR head.
  • ⚠️ git remote -v — no remote is configured, so the current target branch cannot be fetched.
  • ⚠️ gh pr view --json number,url,headRefName,headRefOid,baseRefName,baseRefOid,mergeable,mergeStateStatus,title — GitHub CLI is unauthenticated.
  • ⚠️ ./worktree --check-main — could not fetch origin/main because origin does not exist.

View task →

@kyleve

kyleve commented Aug 31, 2026

Copy link
Copy Markdown
Owner

@cursoragent pls resolve merge conflicts

@cursor

cursor Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor Author

Merge conflicts on PR #299 are resolved.

What conflicted: Shared/StuffCore/TODOs.md was changed on this branch but deleted on main when PR #300 removed the empty StuffCore module.

Resolution:

Pushed as commit 116816d9. GitHub now reports the PR as MERGEABLE (no conflicts). It is BLOCKED only while CI runs — that is expected, not a merge conflict.

Open in Web Open in Cursor 

Accept StuffCore removal from PR #300: delete Shared/StuffCore/TODOs.md
and refresh MODULE_AUDIT.md counts (20 SPM targets, 12 TODOs.md files,
two backlog closures).

Co-authored-by: Kyle Van Essen <k@kve.me>
@kyleve
kyleve enabled auto-merge (squash) August 31, 2026 23:09
@kyleve
kyleve merged commit 13b136d into main Aug 31, 2026
7 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