Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,8 +163,8 @@ Each of these was hit or nearly hit, and each is cheap to re-trip.
- **A filter whose precondition is unstated.** The outward pass reads an absent `X-Blog-Check` as a visitor, and the field exists only because the edge is configured to log it, so a stopped capture reads as a day of real traffic. Recorded in [`OPERATIONS.md`](./OPERATIONS.md) beside the filter.
- **A tool that reports success having done nothing.** `git-restore-mtime` v2022.12 printed `1,052 files to be processed`, processed none, and exited 0 for four releases. The remedy is the same in kind: assert the outcome rather than the exit status, which is what both release paths now do.
- **A correct prediction can be discarded because the world disagrees with it.** This is the inverse of the trap above, and its remedy is not more caution, because caution is what produces it. Checking a claim against measurement and dropping it when the two disagree is the right instinct; what is missing is asking **which of the two is more likely to be wrong** before assuming it is the prediction. A number derived from first principles that contradicts the world is at least as likely to be a finding about the world.
- **Nearly tripped here, on 1,052.** It was derived three ways before any deploy proved it, and the host measured 0 shared inodes across every release for weeks. The tempting reading was that the estimate was wrong. It was exact, and the world was broken: the restore had never run. Treating the disagreement as a defect rather than as an error in the arithmetic is what found it.
- The host tripped it in the other direction on the same mechanism, striking a `~670 M for ten releases` figure as wrong when it had been right all along and had simply never once been true. Recorded there beside its own resolution; kept here because the shape is re-trippable by this repository, which carries several counts derived rather than observed.
- **Nearly tripped here, on 1,052.** It was derived three ways before any deploy proved it, and the host measured zero shared inodes across every release for weeks. The tempting reading was that the estimate was wrong. It was exact, and the world was broken: the restore had never run. Treating the disagreement as a defect rather than as an error in the arithmetic is what found it.
- The host tripped it in the other direction on the same mechanism, striking its estimate of ~670 MB for ten releases as wrong when it had been right all along and had simply never once been true. Recorded there beside its own resolution; kept here because the shape is re-trippable by this repository, which carries several counts derived rather than observed.
- **The hub authors `scripts/pr_review.py`, and hand-rolling the review loop re-discovers its bugs.** One `status` call reports rounds, head coverage, unresolved threads, suppressed findings across every round, and whether a request was ever picked up. `wait` runs the backoff in-process, so a review wait costs one turn rather than one per poll. It is read-only by design and the mutations stay explicit, so fetch and run it rather than reimplementing it. Its README documents the traps below as the reason it exists.
- **A review request can sit forever without being picked up, which looks exactly like patience.** Copilot raises a `copilot_work_started` timeline event within about half a minute of accepting; a request that never draws one is not slow, it is inert, and elapsed time cannot tell them apart. The event is REST-only. Recover by clearing the request with `union: false` and an empty `botIds`, then requesting again, after reading the pending set so a human reviewer is not dropped.
- **The Copilot reviewer's login differs by API, and a wrong-form filter reads as a clean review.** REST reports `copilot-pull-request-reviewer[bot]`, GraphQL omits the suffix. A filter written in the other form matches nothing, and an empty result is indistinguishable from no findings. Assert the filter matched before trusting what it returned.
Expand Down