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
Check · Review · Land · Live done — Landed and live in production.
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
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: theCo-authored-bynames in that commit, without the lander and the author.- Where it lives:
buildersOfinsrc/git/coauthors.tsdoes the reading.creditsOfstays as a thin wrapper over it.src/release/landings.tsattachesbyandwithto each landing. - Cap removed:
creditsOfRepoused to look at only the firstASKEDlandings. 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
byorwith. A commit with no trailers getsbybut nowith. - Tests: a new
buildersOftest covers a squash commit whose trailers sit only in that commit and a bare commit. The existing landing test now also checksby. - 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.
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.
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.
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.
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:
buildersOfRepoinsrc/release/landings.tsslices toASKED(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
creditedmap: it now holds at mostCREDITED_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
creditWordsinsrc/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.mddescribes the credits, the 80 and 500 bounds, and the terminal. I also removed its old line saying the terminal shows no credit. - Meta line:
byandwithare now "By" and "With" facts under the row title insrc/web/pages/changelog.ts, not part of the dot-separated meta line. The page test intest/coauthors.test.tsnow expects that markup. - Tests:
buildersOfis tested with more thanCREDITED_MAXcommits, which all resolve, and a trailer that matches the author's name in a different case is dropped.creditWordshas 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.
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.
Each live entry on
/api/v1/changelognow carriesbyandwith, read from the landed commit, and/changelogshows 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 (coauthorsand 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: theCo-authored-bynames in that commit, without the lander and the author.buildersOfinsrc/git/coauthors.tsdoes the reading.creditsOfstays as a thin wrapper over it.src/release/landings.tsattachesbyandwithto each landing.creditsOfRepoused to look at only the firstASKEDlandings. I dropped that limit, which is probably why most of the 180 rows came back empty. I haven't confirmed it against production.byorwith. A commit with no trailers getsbybut nowith.buildersOftest covers a squash commit whose trailers sit only in that commit and a bare commit. The existing landing test now also checksby.I did not touch the on-its-way rows' logic. They get
byandwiththe 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