Skip to content

docs(rate-of-closure, #4103): refresh the handoff doc (and correct its mypy advice) - #4546

Merged
dieterolson merged 3 commits into
mainfrom
docs/roc-handoff-refresh
Aug 18, 2026
Merged

docs(rate-of-closure, #4103): refresh the handoff doc (and correct its mypy advice)#4546
dieterolson merged 3 commits into
mainfrom
docs/roc-handoff-refresh

Conversation

@dieterolson

Copy link
Copy Markdown
Collaborator

Twenty slices have merged since src/rate_of_closure/AGENT_HANDOFF.md was last accurate. Repo policy is that it's current-state-only and updated every PR, so this brings it back.

The correction that matters

The doc told the next agent:

mypy 1.13 crashes on Python 3.13 for multi-file sets here. Check files individually; CI runs 3.12 and reports normally.

That advice is wrong, and following it is what made #4531 fail quality-gate. CI passes every changed file to one invocation with MYPYPATH=src:src/python/src, so imports inside the changed set resolve. Checking files one at a time degrades those same imports to Any — it invents no-any-return findings CI doesn't have, and hides the redundant-cast findings it does.

Replaced with the exact reproduction, including that Python 3.12 is required (a 3.13 batch run hits the internal error and tells you nothing) and that CI excludes tests/ from mypy entirely.

The remaining-work table, re-measured

It listed ui/pyqt6 and web/ as wholly outstanding. Re-measured against origin/main, ~60 files remain — and they are not blocked on effort but on one thing, which I established rather than assumed:

Wiring CameraViewportMixin into simulation_view and flight_view passes 20 of 20 camera GUI tests. It also regresses three main-owned tests, and reproducing the branch's Face-On behaviour needs ~20 further ui/pyqt6 files that delete shipped work — flight_explorer_run.py (−324), flight_view_bundle.py (−200), club_view_render.py (−185), flight_view_inspector.py (−157). That makes it its own epic, not a slice.

New traps recorded

  • pathlib.write_text rewrites LF files as CRLF on Windows — turned a four-line edit into an 834-line phantom diff
  • detect_secrets scan writes native separators, so it must run before baseline normalisation, never after
  • A purely-additive file can still be wrong. PrimaryViewTabs.test.tsx and TorqueProfilePanel.test.tsx both add lines, delete none, and fail against main's unchanged components. Hence the prune tooling now refuses to delete any file present on origin/main.

One rule rebalanced

The doc's "the branch is not uniformly newer than main" rule is right, but applying it as an absolute cost two good ports. Added its converse: deletions aren't automatically disqualifying — the bar is running main's entire existing suite green against the swapped-in version before adding any new tests. #4542 (flight integrator) and #4545 (capabilityOptimizer) both cleared it.

Verification

  • 149 lines, inside the 150-line policy in CLAUDE.md
  • Every claim re-measured against origin/main rather than carried forward
  • SPEC.md: exactly one insertion (row 1.17.39)
  • No code changes

🤖 Generated with Claude Code

…tate

Twenty slices have merged since this was last accurate. The remaining-work
table is re-measured against origin/main and now names the real blocker:
the ~60 files left are not blocked on effort but on the camera-controls
cluster, which is a reimplementation rather than a migration -- wiring
CameraViewportMixin into simulation_view and flight_view passes 20 of 20
camera GUI tests while regressing three main-owned ones, and reproducing
the branch's Face-On behaviour needs ~20 further ui/pyqt6 files that delete
shipped work.

Corrects one entry that was actively harmful. The doc told the next agent
to check mypy files individually, which is exactly what made #4531 fail
quality-gate: CI passes every changed file to one invocation with
MYPYPATH=src, so per-file checking invents no-any-return findings CI does
not have and hides the redundant-cast findings it does. The replacement
gives the exact command, including that Python 3.12 is required.

Adds the traps found since -- pathlib.write_text rewriting LF as CRLF, the
detect_secrets scan/normalise ordering, and purely-additive files that
still fail against main -- and balances the "branch is not uniformly newer"
rule with its converse, since applying it blindly cost two good ports.
Deletions are not disqualifying; the bar is main's whole suite green
against the swapped-in version first, as #4542 and #4545 both cleared.

149 lines, inside the 150-line policy. No code changes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@dieterolson
dieterolson enabled auto-merge (squash) August 18, 2026 15:53
codex-scheduled and others added 2 commits August 18, 2026 10:24
#4536 landed while this PR was open, so the table would have merged already
stale. Re-measured against origin/main: 52 files, not ~60, and the split
moved -- 19 tests, 18 web/src, 15 elsewhere.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@dieterolson
dieterolson merged commit 71ed07e into main Aug 18, 2026
14 of 16 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.

1 participant