|
| 1 | +# Handoff — 1.19.1 bug series (2026-10-14) |
| 2 | + |
| 3 | +## Objective |
| 4 | + |
| 5 | +Ship 1.19.1 with every open bug carrying a verdict. The series below is on |
| 6 | +`main`. The release |
| 7 | +has not been dispatched: it waits for the owner's explicit "yes". |
| 8 | + |
| 9 | +## Verified state |
| 10 | + |
| 11 | +| commit | what | production delta | tests + docs | |
| 12 | +|---|---|---|---| |
| 13 | +| `1bd80d66` | plugin `pyproject.toml` keeps the pin's full X.Y.Z under pyproject-fmt (main's pre-commit job was red since 1.19.0) | +4/−0 | — | |
| 14 | +| `f57d4b9c` | 26 bugs, each with a gate that fails on `23a36c4a` and passes after: `Fixes` #318 #391 #401 #402 #410 #411 #413 #425 #428 #439 #440 #444 #449 #452 #456 #463 #472 #473 #474 #479 #481 #486 #496 #497 #519 #520; `Refs` #484 #521 | +809/−133 | +1314/−29 | |
| 15 | +| `c46fd079` | Go callers from syntax facts (`go_bindings.rs`), root #506; no filed bug depends on it | +646/−20 | +85/−0 | |
| 16 | + |
| 17 | +Before the series: |
| 18 | + |
| 19 | +- State B (tree after `f57d4b9c`): full `cargo test --release` 3554 passed, 0 |
| 20 | + failed (YAML corpus 2943/2943); `pre-commit run --all-files` clean. |
| 21 | +- State C (tree after `c46fd079`, the full state): 3555 passed, 0 failed; pytest |
| 22 | + 990 passed / 4 skipped; pre-commit clean. |
| 23 | + |
| 24 | +## Remaining work |
| 25 | + |
| 26 | +1. **CI, not yet checked.** Look at the GitHub `diffctx CI` run for `c46fd079` |
| 27 | + (`gh run list -R nikolay-e/diffctx --commit |
| 28 | + c46fd079806370ba87bc6745b1e31a4b7a6877ac`). |
| 29 | + GitHub runs only the pushed head, so B is covered by the run on C. |
| 30 | +2. **Ledger.** The verdict for each of the 75 milestone bugs lives in the |
| 31 | + session scratchpad as |
| 32 | + `ledger_1191.md`. Copy it into the private audits repo as |
| 33 | + `diffctx/issues/LEDGER_1.19.1_2026-10-14.md`, commit there, and push. It |
| 34 | + records 26 fixed, |
| 35 | + 13 closed with evidence, 2 partial, 7 roots, and 27 deferred (each with its |
| 36 | + mechanism). |
| 37 | +3. **Close-out comments.** |
| 38 | + - #318: the impact half is fixed; the pack half is #331's class. |
| 39 | + - #484: what landed and what remains (recall of files over the 100 KB cap). |
| 40 | + - #521: what landed; the bash grammar failure is upstream. |
| 41 | + - Confirm that the 26 `Fixes` issues auto-closed on GitHub. |
| 42 | +4. **Release 1.19.1, only on the owner's "yes".** |
| 43 | + 1. Epoch-squash the commits after the 1.19.0 release into one epoch. No |
| 44 | + session trailer. |
| 45 | + Back up a bundle first. Lift branch protection on both remotes and restore |
| 46 | + it afterwards. |
| 47 | + Re-pin the bitcheck tags in the same sweep. |
| 48 | + 2. Dispatch `cd.yml`. |
| 49 | + 3. Verify PyPI, npm, crates, ghcr, Docker Hub, the MCP registry and the |
| 50 | + GitHub release assets. |
| 51 | + 4. Update the `diffctx@diffctx` plugin and check, under `/bin/bash`, the MCP |
| 52 | + `serverInfo` |
| 53 | + version and one PreToolUse and one PostToolUse hook run. |
| 54 | + 5. `cargo clean` the stale profiles in `target/`. |
| 55 | +5. **Leftovers.** |
| 56 | + - The 1.18.4 plugin cache directory and the uv cache: clear both once no live |
| 57 | + session runs |
| 58 | + 1.18.4 (`uv cache clean diffctx`). |
| 59 | + - `diffctx@synced`, still at 1.18.2, comes from the claude.ai account; only |
| 60 | + the owner can |
| 61 | + update or remove it. |
| 62 | + - A dirty-tree build is installed as a global uv tool (`diffctx`, |
| 63 | + `diffctx-mcp`). After the |
| 64 | + release, remove it (`uv tool uninstall diffctx`) so the plugin is again the |
| 65 | + only install. |
| 66 | + |
| 67 | +## Known problems |
| 68 | + |
| 69 | +- Deferred bugs with their starting points are in the ledger. The largest are |
| 70 | + #331 (pack/locate |
| 71 | + run no reverse discovery), #398 (Python module-level assignments are not |
| 72 | + definitions), and |
| 73 | + #484 (files over the size cap are named but not read). |
| 74 | +- About #398: turning module assignments into fragments flipped the corpus case |
| 75 | + `builders/python_import_module_path` and moved 447 fragment hashes. It needs |
| 76 | + an oracle decision. |
| 77 | + |
| 78 | +## Do not redo |
| 79 | + |
| 80 | +- The 26 fixes and their gates. |
| 81 | +- The re-verification of the 63 pre-existing bugs (scout fixtures are in the |
| 82 | + session scratchpad). |
| 83 | +- The global install sweep across every surface. |
0 commit comments