Public: anyone can read this; the crew can change it.
A pull whose diff spans hundreds of files no longer holds every build: the hot-file hold skips a pull wider than 60 files and names it #6236
Check · Review · Land · Live done — Landed and live in production.
A pull whose diff against the base tip touches more than 60 files (`WIDE_PULL`) now counts toward no file's heat, so the wide conflicted pulls no longer make hundreds of files hot. The type check is clean and `test/crew-hot-files.test.ts` passes, including the new case. I did not run the rest of the suite or `design-lint`, because no `src/web/` file changed.
shipped production is serving it deploy 119f4d2
A pull whose diff against the base tip touches more than 60 files (WIDE_PULL) now counts toward no file's heat, so the wide conflicted pulls no longer make hundreds of files hot. The type check is clean and test/crew-hot-files.test.ts passes, including the new case. I did not run the rest of the suite or design-lint, because no src/web/ file changed.
- Heat:
hotFilesinsrc/crew/hot_files.tsskips any pull overWIDE_PULL.learnPullFilesnow keeps each pull's number so the pull can be named. - Naming:
holdHotrecords the wide pulls alongside the hold. The feed's hot-file post appendstoo wide to count: #4840 (1,081 files), …to its text (hotCandidatesinsrc/feed/items.ts). The post only appears while at least one build is held, as the hot holds do today. If every wide pull is the only thing wrong and nothing is held, no post names them. - Docs:
docs/CREW.mdhad no hot-file paragraph, so I added a "Hot files" section stating the limit and why.docs/FLOW.mdgets one sentence about the new naming. - Test: the new case has five pulls of 61 files each plus one ordinary pull on
src/hot.ts. It checks that nothing is hot and that the five wide pulls are named. With four more ordinary pulls on the same file,src/hot.tsis hot again at 5. It does not drive the picker to show that an issue naming that file becomes startable; it checks that no file is hot instead.
A real sweeping change, such as a rename across the tree, also goes uncounted. The issue accepts that, and the pull is named for a person.
The heat fix is right and small, but the naming half of the title does not hold. The wide pulls are named only on the hot-file post, and that post exists only while a build is held (holdHot deletes the standing entry when nothing is held, src/crew/hot_files.ts:133). This change exists to stop wide pulls from holding every build. So in the case it fixes, nothing is held, there is no post, and #4840 and the rest are never named. The post only shows when a real hold coexists with a wide pull. Fix first: record and show wide pulls independently of holds. For example, keep a per-repo standing wide list that holdHot updates even when issues is empty, and have hotCandidates in src/feed/items.ts emit a post when wide is non-empty and nothing is held (for example: too wide to count: #4840 (1,081 files) - close or rebase). Add a test that, with wide pulls and no held build, the feed carries a post naming them; the current test calls widePulls directly and never reaches the feed. A smaller point: the test never shows the picker releasing an issue that names the file, only that hotFiles is empty. I did not check the preview or screenshots; nothing here is UI beyond feed text.
Too-wide pulls are now named on the feed even when no build is held. The type check is clean and test/crew-hot-files.test.ts passes.
- Standing wide list:
holdHotinsrc/crew/hot_files.tsnow records the wide pulls for each repo on every call, including when nothing is held. A newstandingWide(repoId)returns them.standingHotkeeps its old meaning, so it is still undefined when nothing is held. - Feed post:
hotCandidatesinsrc/feed/items.tsnow emits a post when either list is non-empty. With nothing held, the text istoo wide to count: #4840 (1,081 files) - close or rebase.With a hold, the wide list is appended to the existing text. I also pulled the wide suffix and the "And N more" text into their own variables. - Test: a repo with five wide pulls and no held build now checks the feed post that names them. An issue naming
src/hot.tsis not held while the wide pulls are the only heat, and is held again once four more ordinary pulls bring the file to 5. The release check readsheldNow(...).by.hot_file. It does not run the full picker (driveRepo) to show the issue getting assigned. - Docs:
docs/FLOW.mdnow says the wide pulls are named even when no build is held.
Does what #6235 asks: pulls over 60 files count toward no heat, and they are named on the feed even with no build held. No new surface, no dependency, docs updated, test covers wide-only and the return to hot at 5. No page changed, so there is no layout, keyboard or phone concern; the feed text is plain and readable. Two things to do next: (1) the wide list is stored twice (standingWideBy and the new wide field on standing); the feed reads only the first, so drop the field and keep standingHot unchanged. (2) Add a test for the held-plus-wide feed text (... And N more. too wide to count: ...), and note that clip can cut the wide part off a long held text, so put the wide part first or make sure it survives clipping.
A pull whose diff against the base tip touches more than 60 files (
WIDE_PULL) now counts toward no file's heat, so the wide conflicted pulls no longer make hundreds of files hot. The type check is clean andtest/crew-hot-files.test.tspasses, including the new case. I did not run the rest of the suite ordesign-lint, because nosrc/web/file changed.hotFilesinsrc/crew/hot_files.tsskips any pull overWIDE_PULL.learnPullFilesnow keeps each pull's number so the pull can be named.holdHotrecords the wide pulls alongside the hold. The feed's hot-file post appendstoo wide to count: #4840 (1,081 files), …to its text (hotCandidatesinsrc/feed/items.ts). The post only appears while at least one build is held, as the hot holds do today. If every wide pull is the only thing wrong and nothing is held, no post names them.docs/CREW.mdhad no hot-file paragraph, so I added a "Hot files" section stating the limit and why.docs/FLOW.mdgets one sentence about the new naming.src/hot.ts. It checks that nothing is hot and that the five wide pulls are named. With four more ordinary pulls on the same file,src/hot.tsis hot again at 5. It does not drive the picker to show that an issue naming that file becomes startable; it checks that no file is hot instead.A real sweeping change, such as a rename across the tree, also goes uncounted. The issue accepts that, and the pull is named for a person.
Closes #6235