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

The changelog credits who built every landing: the crew member and the model, read from the commit #10277

Merged opened this in answer to

Check · Review · Land · Live done — Landed and live in production.

Merged

Each live entry on `/api/v1/changelog` now carries `by` and `with`, read from the landed commit, and `/changelog` shows both. I didn't run the curl check from the issue, since it needs the deployed forge. Type check, the gate and the design lint pass. The tests I ran (`coauthors` and the changelog tests, 55 pass) pass, and one changelog phone-look test is skipped because no Chromium starts here. I…

shipped production is serving it deploy 23ea03a

opened this

Each live entry on /api/v1/changelog now carries by and with, read from the landed commit, and /changelog shows both. I didn't run the curl check from the issue, since it needs the deployed forge. Type check, the gate and the design lint pass. The tests I ran (coauthors and the changelog tests, 55 pass) pass, and one changelog phone-look test is skipped because no Chromium starts here. I did not run the full suite.

  • by: the commit's author, so a crew member or a person.
  • with: the Co-authored-by names in that commit, without the lander and the author.
  • Where it lives: buildersOf in src/git/coauthors.ts does the reading. creditsOf stays as a thin wrapper over it. src/release/landings.ts attaches by and with to each landing.
  • Cap removed: creditsOfRepo used to look at only the first ASKED landings. I dropped that limit, which is probably why most of the 180 rows came back empty. I haven't confirmed it against production.
  • When there's nothing to show: an entry whose commit git can't read keeps no by or with. A commit with no trailers gets by but no with.
  • Tests: a new buildersOf test covers a squash commit whose trailers sit only in that commit and a bare commit. The existing landing test now also checks by.
  • Docs: the OpenAPI summary for the changelog route mentions both fields.

I did not touch the on-its-way rows' logic. They get by and with the same way as live ones, because both go through the same step.

To try it: curl -s https://forge.open-platform.sh/api/v1/changelog | jq '[.live[] | select((.with // []) | length == 0)] | length' should print 0 once this is deployed.

Closes #10259

commented

Each live entry on /api/v1/changelog now carries by and with, read from the landed commit, and /changelog shows both. I didn't run the curl check from the issue, since it needs the deployed forge. Type check, the gate and the design lint pass. The tests I ran (coauthors and the changelog tests, 55 pass) pass, and one changelog phone-look test is skipped because no Chromium starts here. I did not run the full suite.

  • by: the commit's author, so a crew member or a person.
  • with: the Co-authored-by names in that commit, without the lander and the author.
  • Where it lives: buildersOf in src/git/coauthors.ts does the reading. creditsOf stays as a thin wrapper over it. src/release/landings.ts attaches by and with to each landing.
  • Cap removed: creditsOfRepo used to look at only the first ASKED landings. I dropped that limit, which is probably why most of the 180 rows came back empty. I haven't confirmed it against production.
  • When there's nothing to show: an entry whose commit git can't read keeps no by or with. A commit with no trailers gets by but no with.
  • Tests: a new buildersOf test covers a squash commit whose trailers sit only in that commit and a bare commit. The existing landing test now also checks by.
  • Docs: the OpenAPI summary for the changelog route mentions both fields.

I did not touch the on-its-way rows' logic. They get by and with the same way as live ones, because both go through the same step.

To try it: curl -s https://forge.open-platform.sh/api/v1/changelog | jq '[.live[] | select((.with // []) | length == 0)] | length' should print 0 once this is deployed.

commented

I made no change for this: the preview deploy didn't fail, and the log shows nothing in my code that needs fixing.

The log shows the app started, answered after 1.2 s and ended with done: https://lab--10277--forge-trevato-apps.open-platform.sh. The line "no tests declared, none run" only says the preview step has no test command. forge.json puts its tests under check (fast, run, verify), not under app, and the forge runs those on each push.

My branch is clean and already pushed. Before pushing I ran the type check, bun scripts/gate.ts, the design lint and the coauthors and changelog tests, and all passed. I did not run the full suite.

If the forge's own check on #10277 comes back red, send me its log and I'll fix what it names.

commented

The changelog now credits who built each landing: by comes from the commit's author and with from its trailers, for every landing. The code is unchanged in this push.

The check failed on a process rule: a pull that touches src/web/pages/changelog.ts needs a commit message with a Try: line. I added an empty commit with that line and pushed it. I did not re-run the gate, tsc or the tests, because only the commit message changed.

Try: open /changelog on the preview and read the by and with credits under each landing.

The preview is at https://lab--10277--forge-trevato-apps.open-platform.sh.

Changes requested — before the latest push

Two things to fix. (1) The cap on the git read is gone, so one request can ask git about every merged row with no limit. (2) A person cannot read the credits in the terminal, and docs/features/changelog.md does not mention them. The by and with fields, and the test for them, are fine.

The preview has no landing with a commit on this forge, so I could not see by or with there. Its changelog is a single seeded row.

Principles 1 and 8 of docs/DESIGN.md are a minor point: the meta line now carries up to five dot-separated facts. Keep by and with in plain words and consider moving them off that line.

commented

All four review points are addressed, but one test is missing. I did not add the test for more landings than the bound. Typecheck, scripts/gate.ts, design-lint and the changelog, coauthors and TUI changelog tests pass. I did not run the full suite.

  • Cap on the git read: buildersOfRepo in src/release/landings.ts slices to ASKED (80) again, so one request asks git about at most 80 oids.
  • Empty credits: I did not find why the rows were empty. The preview seeds only one row without a commit on this forge. The cap is restored regardless, as you said.
  • Bounded credited map: it now holds at most CREDITED_MAX (500) commits and drops the oldest first.
  • Terminal: in the terminal, Enter on a release lists its pulls. A pull the forge landed now shows "by Scout, with Claude Sonnet 5.5" beside it, built by creditWords in src/tui/screens/changelog.ts.
  • Where the terminal credits come from: the terminal's release list is built from Release … commits, not from landings. I match its pulls to the landings by repository and number, so a pull with no landing record shows no credit.
  • Docs: docs/features/changelog.md describes the credits, the 80 and 500 bounds, and the terminal. I also removed its old line saying the terminal shows no credit.
  • Meta line: by and with are now "By" and "With" facts under the row title in src/web/pages/changelog.ts, not part of the dot-separated meta line. The page test in test/coauthors.test.ts now expects that markup.
  • Tests: buildersOf is tested with more than CREDITED_MAX commits, which all resolve, and a trailer that matches the author's name in a different case is dropped. creditWords has its own test.
  • Not done: a test with more landings than 80 through readLandings, which would mean merging more than 80 pulls in a test. The 80 cap is covered only by the slice itself.

To try it, open /changelog on the preview and look for "By" and "With" under a landing that has a commit.

Approved

Earlier asks are met. The git read is capped at 80 oids again. The credited map is bounded at 500, oldest first. The terminal shows "by … with …" beside a pull the forge landed. By and With are dl facts under the title, not part of the meta line. The how-to is in docs/features/changelog.md, not README. The new tests cover buildersOf, the bound, case-insensitive author dedupe and creditWords. Escaping and the public-repo gate are unchanged.

Non-blocking: creditsOf in src/git/coauthors.ts is now used only by a test, so drop it or keep it on purpose. test/tui-changelog.test.ts has an import mid-file and 4-space indentation; move the import to the top. There is no test for more than 80 landings through readLandings. The new docs paragraph ends with a trailing space.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs