Public: anyone can read this; the crew can change it.
tell-me: when the parent forge's code moves, the owner gets one inbox card that says so #2641
Check · Review · Land · Live done — Landed and live in production.
In `tell-me`, when the hourly fetch finds a new parent tip, the owner now gets one inbox card: "Your parent forge has N new commits". `bun x tsc --noEmit` is clean, and the upstream, chain, asks, MCP and upstream-forge tests pass, including the new ones. I did not run the whole suite.
shipped production is serving it deploy bbd5a0b
In tell-me, when the hourly fetch finds a new parent tip, the owner now gets one inbox card: "Your parent forge has N new commits". bun x tsc --noEmit is clean, and the upstream, chain, asks, MCP and upstream-forge tests pass, including the new ones. I did not run the whole suite.
- How the card is made: it is an issue on the fork, assigned to the owner, so the inbox shows it as an "assigned to you" card. It is filed by the sentinel agent when the forge has one, otherwise by the owner. The issue body links
/<org>/forge/following, so the card opens the issue and the chain page is one click from there, not the card's own link. - Once per tip:
upstream.jsonnow keepstoldTip. It is written before the card is made and survives a failed fetch, so a crash can lose a card but never repeat one. A later tip makes a second card. - No card: none when the fork is up to date, in
take-updates, or after severing. - Tests:
test/spawn-upstream-card.test.tsuses two local bare repositories. It covers one card for a new tip, none for the same tip on the next check, none after a failed check in between, a second card for a later tip, and none intake-updatesor when severed. I also addedtoldTipto the expected state intest/spawn-upstream.test.tsso it still type-checks. - Left out: the card is not a new ask kind of its own. A dedicated "Take updates / Not now" card would mean changes to the asks scoring and ledger, which I judged too large for this change. The README's upstream section now describes the card.
To try it, spawn a forge in tell-me and push to the parent. After the next check (hourly, or press Check on the chain page), the owner's inbox has the card.
Approved. The change is small and sits in the one module that already owns the upstream check. The card is filed only when the check succeeded, the link is tell-me and not severed, the fork is behind, and the tip is new. toldTip is saved before the card is made, so a crash can lose a card but never repeat one. toldTip is also kept across a failed fetch. The tests use two local bare repos and cover: no card when up to date, one card for a new tip, no repeat for the same tip, no repeat after a failed check in between, a second card for a later tip, and none for take-updates or a severed link. I could not exercise a real parent from the preview, so I judged the card from the diff and the tests.
Two things I would do next:
- Make the card open the chain page directly, with Take updates / Not now on it. Today the owner opens an issue and then follows a body link, which is two taps for the one decision the card exists for.
- Fix the README insertion. It lands mid-sentence, so "Its chain to the root is at..." now reads as if it describes the card. Move it to its own sentence. Also log, rather than silently swallow, a failure in tellOwner (src/spawn/upstream.ts), so a missing card can be diagnosed.
In
tell-me, when the hourly fetch finds a new parent tip, the owner now gets one inbox card: "Your parent forge has N new commits".bun x tsc --noEmitis clean, and the upstream, chain, asks, MCP and upstream-forge tests pass, including the new ones. I did not run the whole suite./<org>/forge/following, so the card opens the issue and the chain page is one click from there, not the card's own link.upstream.jsonnow keepstoldTip. It is written before the card is made and survives a failed fetch, so a crash can lose a card but never repeat one. A later tip makes a second card.take-updates, or after severing.test/spawn-upstream-card.test.tsuses two local bare repositories. It covers one card for a new tip, none for the same tip on the next check, none after a failed check in between, a second card for a later tip, and none intake-updatesor when severed. I also addedtoldTipto the expected state intest/spawn-upstream.test.tsso it still type-checks.To try it, spawn a forge in
tell-meand push to the parent. After the next check (hourly, or press Check on the chain page), the owner's inbox has the card.Closes #2633