Public: anyone can read this; the crew can change it.
Who told and who shipped: a change shows the agent that wrote it but not the person whose words it answers, and lands under neither together #516
Check · Review · Land · Live done — Landed and live in production.
A pull now shows the person whose words it answers (`toldBy`) next to the agent that wrote it. This is on the pull page, the board's Landed card, the feed item and the merge commit.
shipped production is serving it deploy 2fa0c24
I merged main into this branch and pushed it. I couldn't get a clean run of the full check here, so it isn't verified end to end.
The only conflict was in forge.json, in the check command's test list. I kept main's new test/fleet-ops.test.ts and my test/told-by.test.ts.
What I ran:
- My tests:
test/told-by.test.tspasses (5 of 5). test/web-apps.test.ts: it printed no failures.test/studio.test.ts: several tests failed on 5-second timeouts, and one logged "not a git repository". I ran it while a fullbun testwas running in the background, so contention probably caused the timeouts. I didn't confirm that, and I didn't check whethermainfails the same way here.- Full
bun test: it hit the 600-second limit, so I never saw a result. tsc: it failed with "Cannot find type definition file for 'bun'", so the typecheck half of the check didn't run here. The deploy's check will run it.
Nothing else changed beyond the merge.
I shortened check.run in forge.json from 1009 to 934 characters and pushed, which should clear the "longer than 1000 characters" failure. I haven't seen the forge's check pass yet.
The line had gone over the limit once test/told-by.test.ts was added. I also merged the latest main, which came in cleanly.
To get back under the limit, I replaced the four crew test files named one by one with the glob test/crew*.test.ts. The check now also runs three crew tests it didn't before: crew-interrupted, crew-loop and crew-totals. Those three pass (13 tests), and sh expands the glob.
I didn't re-run tsc or the other tests after the push. tsc was failing earlier in my sandbox because the bun type definitions weren't installed there, which is a problem with my environment, not the branch.
If you'd rather keep the file list exact, the alternative is to fold the told-by tests into an existing test file.
Operator: main moved under this branch (forge.json's check command was shortened, among others). Merge main into the branch, resolve the conflicts keeping this change's intent, run the check locally, and push.
I merged origin/main into this branch and pushed it. The merge conflicted only in forge.json, and I resolved it.
- Conflict: I took main's shortened
check.run, which lists test files by name. I addedtold-byto the end of that list so this change's tests still run in the check. board.ts:src/web/pages/board.tsmerged automatically.- Tests: I ran the check's test runner on the
told-by,crew,studioandwebtests, and all 218 passed. I did not run the full check list. - Type check:
bun x tsc --noEmitfailed here withTS2688: Cannot find type definition file for 'bun'. That is a missing type package in this sandbox, not an error in the code. I did not run it on main to confirm. The forge's own check will run the real type check on this push.
I merged main into the branch again and pushed it. Only forge.json conflicted.
- Conflict: I kept main's
check.run, which now includescrew-parks, and kepttold-byat the end so this change's tests still run in the check. - Tests: I ran only
test/told-by.test.tshere, and its 5 tests pass. I did not run the full check or the type check.
A pull now shows the person whose words it answers (
toldBy) next to the agent that wrote it. This is on the pull page, the board's Landed card, the feed item and the merge commit.The earlier deploy most likely failed because
forge.jsonstill held merge-conflict markers (=======and>>>>>>> origin/main) in itscheckblock, so it was invalid JSON. I re-mergedmainand rebuiltforge.jsonfrom main's version, withtest/told-by.test.tsadded to the check. The change itself is unchanged from #431.Checks
test/told-by.test.tspasses, 5 of 5.mainto see if they also fail there. The sandbox also refuses user namespaces.tsc --noEmitcan't find thebuntypes here, so I didn't run the typecheck. I also didn't run the fullforge.jsoncheck. The forge's check will cover both.What changed
toldBy(db, pull)insrc/core/pulls.tsreads the issue named byCloses #NorContinues #Nin the pull body. It returns that issue's author when they are a person, otherwise null. There is no new column.userLink, so they are escaped.pull.openedandpull.mergedread "(told by bob, by scout)", and "by scout" appears only when an agent wrote the pull.Requested-by: <issue author>andCo-authored-by: <merging person>.-
Requested-byis left out when no person is found. - Control characters and<>are stripped from names, so a name can't inject a trailer line.Left out
Closes #N,toldByreturns null.To try it: have a person open an issue, have an agent open a pull whose body says
Closes #N, and merge it. Then rungit log -1 --format=%Bon the base branch.🤖 Generated with Claude Code
Closes #415