docs: weekly backlog re-verification and MODULE_AUDIT refresh (August 30, 2026) - #299
Conversation
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>
|
@codex please resolve the conflicts |
Unable to CompleteI 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
|
|
@cursoragent pls resolve merge conflicts |
|
Merge conflicts on PR #299 are resolved. What conflicted: Resolution:
Pushed as commit |
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>


Summary
TODOs.mdfiles against current source.INBOX.mdwas empty, so nothing was promoted.SnapshotProvidingitem said three Settings drill-ins lacked image coverage and were "the only" ones. There are five.MODULE_AUDIT.mdfor August 30 from the refreshed backlog.Why
The weekly
todo-triagepass. 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 onmain, 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
formatjob — 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's126exit status for an unlaunchable command, and Linux reports127. 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-agentsis#!/usr/bin/env rubyand dies on a bare Linux shell, while its sibling./attributionis a bash wrapper that reaches the pinned Ruby throughmise exec --and works fine. Two Ruby-implemented commands, one documented as working on Linux, and only one of them arranged to.Review focus
SnapshotProvidingcorrection (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) andRegionsSettingsView(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.swiftwith a#Previewand no conformance, then intersect withSettingsView.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.\.accessibilityReduceMotiondirectly 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. AndLocationCardsReconciliationModifier'sassertionFailurearms read as swallowed errors until you noticeTask.sleepandTask.checkCancellationthrow onlyCancellationError, making them the impossible-state case the repo's own rule assigns toassertionFailure. Please push back if you read either differently.AGENTS.mdis 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 theformatjob's six checking steps and CircleCI's build-once handoff..circleci/config.ymlnow readsparallelism: 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..animation(_:value:)around the cardForEach; it shipped an explicit interpolated layout, and thematchedTransitionSourceconflict the item flagged is now a written rule. The closure note says so rather than pretending the item predicted it.None. Markdown only — backlog files, the audit report, root
AGENTS.md, one moduleAGENTS.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 gitignoredCLAUDE.mdmirrors cleanly after theAGENTS.mdedits.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)./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 --lintcannot 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.StoredLogEventcarriesspanIDandspanExitModebut notspanRelaunchPolicy;LogSpan.swift:643isend(for:)'s unmatched-begin warning, not a relaunch-path warning; the journal-ingest deletes are at:61and: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.affected_bundlestoTools/test_runner.pywith 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.