docs: split tracking into TODO.md (actionable) / DEFERRED.md (registry) / docs/dev-status.md (split 2/3) - #705
Conversation
…nuity) Pure git mv, no content change. The next commit trims DEFERRED.md to the deferral/decision registry and recreates TODO.md as the actionable-only backlog - keeping the rename its own commit lets git pair the bulk of the content (the deferred tables) with its history. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H8PDhdrdQH2DM8yAeEnib7
…y) / docs/dev-status.md (2/3) TODO.md is now the actionable backlog only (9 rows incl. a new tracking-contract guard-test row; priority-ordered, Medium first). DEFERRED.md (renamed from TODO.md in the previous commit for blame continuity) becomes the deferral & decision registry: Paper-gated (15) / Needs external reference (18) / Parked (36) / Version-gated (1, v4 ledger cross-linked) / Decision record (8). The two user-facing Known-Limitations rows fold into Parked; the "Deprecated Code" section is superseded by the CI-enforced docs/v4-deprecations.yaml ledger (M-001/M-002). Monitoring moves to the repo-internal docs/dev-status.md (module table refreshed: +_rdrobust_port/changes_in_changes/datasets/ rdd/rdplot, practitioner.py 1511->2113; added to conf.py exclude_patterns so the -W docs build has no orphan). Pointer sweep (~70 sites incl. four distinct stale phrasings: "TODO.md", bare "tracked in TODO", "TODO row NN", "TODO Deferred -> Parked"): source docstrings + runtime rejection messages, REGISTRY.md, METHODOLOGY_REVIEW.md, performance docs, api RST, paper reviews, tutorial notebooks 23+27, v4-design, and the v4 ledger notes now point at DEFERRED.md / TODO.md / docs/dev-status.md per row destination. The triple_diff conley message + its match="TODO" test pin updated as a pair (test renamed ..._deferred_pointer). CLAUDE.md gains the tracking-file map + decisions rule (behavioral -> REGISTRY Note; engineering -> DEFERRED.md Decision record; ledger = lifecycle authority with M-xxx cross-links); dev-checklists' stale "Tech Debt from Code Reviews" pointer fixed. Correctness fixes folded in: the stale "joint-Stute deferred" claim (shipped in Phase 3 via stute_joint_pretest) unstaled; four doc-referenced follow-ups that had NO row now have rows (SpilloverDiD Wave E.3 finite_mask parity, SpilloverDiD covariates= scope cut, SpilloverDiD vcov-reconstruction tests, HAD Theorem-6 covariates extension); the HAD row corrected against the shipped NotImplementedError trap; the MPD weighted-CR2-BM REGISTRY note rewritten to the verified survey-variance precedence contract (needs_survey_vcov is unconditionally True - no bare weights= on MultiPeriodDiD.fit); two investigated-and-parked rows moved out of Paper-gated; df_convention flip note repointed at ledger M-004..M-006. All 131 moved table rows byte-identical to the pre-split file (verified mechanically); exceptions are the two reshaped Known-Limitations rows and the practitioner.py line-count refresh. PR-1 (#698) taught the review contract to credit rows in either file; this PR removes its transitional comment wording. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H8PDhdrdQH2DM8yAeEnib7
Overall assessment✅ Looks good — no unmitigated P0/P1 findings. Executive summary
Methodology
Code QualityNo findings. Modified Python code contains pointer/message changes only. PerformanceNo findings. No executable performance paths changed. MaintainabilityNo additional findings. The planned tracking-contract guard is appropriately tracked in Tech Debt
SecurityNo findings. The workflow change is comment-only and introduces no execution or permission changes. Documentation/Tests
Test execution was unavailable because |
…CI review R1) The "TODO § Won't-fix / waived" section-style phrasing (REGISTRY Subpopulation note + the TestZeroWeightPsuConventionWaiver docstring and assertion message) now names DEFERRED.md § "Decision record — won't-fix / waived". Class-closing grep for section-style TODO references is empty; waiver tests pass (3/3). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H8PDhdrdQH2DM8yAeEnib7
|
🔁 AI review rerun (requested by @igerber) Head SHA: Overall assessment✅ Looks good — no unmitigated P0/P1 findings. Executive summary
Methodology
Code QualityNo findings. Modified Python behavior is limited to pointer/error-message text. PerformanceNo findings. MaintainabilityNo findings. The tracking split has clear ownership rules and matching cross-references. Tech DebtNo findings. Counts reconcile to 9 actionable rows and deferred sections of 15/18/36/1/8 rows. SecurityNo findings. The workflow modification is comment-only. Documentation/TestsNo findings. The previous P2 is resolved at
|
Summary
TODO.mdbecomes the actionable backlog only (9 rows, priority-ordered);DEFERRED.md(agit mvof the old TODO.md, kept as its own commit so blame follows the bulk) becomes the deferral & decision registry (Paper-gated 15 / Needs-external-reference 18 / Parked 36 / Version-gated 1 / Decision record 8); monitoring and current-state notes move to the repo-internaldocs/dev-status.md(added toconf.pyexclude_patternsfor the-Wbuild; module table refreshed with 5 newer modules and current line counts).triple_diffconley rejection message and itsmatch="TODO"test pin are updated as a pair.docs/v4-deprecations.yamlstays the lifecycle authority withM-xxxcross-links); dev-checklists' stale "Tech Debt from Code Reviews" pointer fixed. The old "Deprecated Code" section is superseded by ledger ids M-001/M-002.stute_joint_pretest); four doc-referenced follow-ups that had no tracking row now have rows (SpilloverDiD finite_mask parity / covariates= scope cut / vcov-reconstruction tests; HAD Theorem-6 covariates); the MPD weighted-CR2-BM REGISTRY note rewritten to the verified survey-variance precedence contract (needs_survey_vcovis unconditionally True;MultiPeriodDiD.fit()exposessurvey_design=, not bareweights=); two investigated-and-parked rows moved out of Paper-gated.practitioner.pyline-count refresh.Known residual (deliberate): the
DIFF_DIFF_SOLVE_OLS_FASTPATHanddf_conventionrows keep their implementation-work detail alongsideM-xxxcross-links - per the CLAUDE.md rule codified here, the ledger owns lifecycle state while rows own execution work. A tracking-contract guard test enforcing this division is filed as an actionable TODO.md row.Merge-strategy note: this PR is intentionally two commits (pure rename + restructure). Squash-merging collapses them, so
git log --follow DEFERRED.mdwon't pair the rename (recoverable viagit blame -C -C); "Rebase and merge" preserves the rename natively. Maintainer's choice.Methodology references (required if estimator / math changes)
estimators.py/survey.py/linalg.py)Validation
tests/test_triple_diff.py(conley-rejection pointer pin updated with its message; test renamed..._deferred_pointer); docstring-only updates in 8 other test files. Runs: targeted suites over every touched estimator surface (triple_diff/spillover/stacked/wooldridge/imputation/two_stage/efficient_did/had conley-vcov-trends paths - 400+ tests),pytest tests/test_openai_review.py -m ''(264 passed), collection checks on all docstring-edited test files,mypy diff_diff(zero), black/ruff on touched files,make -C docs html SPHINXOPTS="-W"(green -dev-status.mdexcluded like the other repo-internal docs), and a mechanical row-integrity check (131/131 moved rows byte-identical).Security / privacy
🤖 Generated with Claude Code
https://claude.ai/code/session_01H8PDhdrdQH2DM8yAeEnib7