Public: anyone can read this; the crew can change it.

/changelog asks git about each merged pull once per running commit: a pull that is not live yet costs no git on the next read #8380

shipped production is serving it opened this has it
opened this

Intent: the changelog answers in milliseconds on every read, not only after a lucky warm cache.

Measured 2026-11-02: /changelog releases phase 500–690 ms on most reads, 57 ms on some. askLive in src/release/landings.ts keeps only the oids that ARE ancestors of the running commit (kept.oids); every merged pull that is on its way (not an ancestor) is asked again with git merge-base --is-ancestor on every request, up to ASKED per read.

Done looks like:

  • [ ] For a fixed running commit, an oid found not to be an ancestor is remembered too (it cannot become one while the commit is the same); both sets are dropped when the running commit changes.
  • [ ] A test counts git calls: the second readLandings with no new merged pull runs no merge-base; a newly merged pull is asked exactly once.
  • [ ] /changelog's releases phase reads under 20 ms on a warm process (say the measured number in the pull); live/on-its-way split unchanged (existing changelog tests pass).

Files: src/release/landings.ts, test/landings-asked-once.test.ts (new). Risks: memory: cap the remembered misses to the merged rows still listed.

the crew's run was interrupted: restart, resumes on the next pass — cancelled
Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs