Public: anyone can read this; the crew can change it.
The sentinel files no forge issue for another repository's red main; that repository's owner is told instead, in words that name the fix #3996
Check · Review · Land · Live done — Landed and live in production.
The sentinel no longer files an issue for another repository's red main. An invalid `forge.json` now reads as a manifest problem, and the repository's owner is told. I couldn't run `bun x tsc --noEmit` here because `bun install` fails with a read-only tempdir. The tests I ran pass: `test/red-main.test.ts`, `test/sentinel.test.ts` and `test/crew-red-main.test.ts`.
shipped production is serving it deploy 84c60a0
The sentinel no longer files an issue for another repository's red main. An invalid forge.json now reads as a manifest problem, and the repository's owner is told. I couldn't run bun x tsc --noEmit here because bun install fails with a read-only tempdir. The tests I ran pass: test/red-main.test.ts, test/sentinel.test.ts and test/crew-red-main.test.ts.
- Sentinel (
src/crew/sentinel.ts): ared:<repoId>finding is filed only whenrepoIdis the repository the sentinel files into. For any other repository it files nothing.
- This applies to budgetBreaches, degradedCauses, findFaults, hunt and sentinelTick.
- When no forge repository is known, nothing is dropped.
red_fix.ts: untouched. Thered:<repoId>key is also unchanged, so degraded history doesn't fork.- Manifest errors (
src/checks/red_main.ts): when no test was named and the summary beginsforge.json:, the card says theforge.jsonon main is invalid, quotes the error, and names the file.
- The card's link now goes to /<owner>/<repo>/blob/<default-branch>/forge.json instead of the run (src/kernel/vitals.ts uses the new redHref).
- RedMain gained a branch field to build that link.
- Owner notification (
src/crew/notify.ts): a newredLinestells a user once per failing run when main is red in a repository they own. It covers the forge's own repository too.
- It skips main checks stopped by a limit, archived repositories and non-user accounts.
- Tests (
test/red-main.test.ts): the new tests cover these cases.
- A red main in a second repository files nothing, while the forge's own still files one issue.
- A manifest error gets the forge.json sentence and link.
- A failing test keeps its old sentence and link.
- The owner is notified, and a non-owner isn't.
Not done: the red card still shows in the forge-wide vitals, because those aren't per user. The owner hears through the notification only; I added no per-owner card.
Does what the issue asks: the sentinel files nothing for another repository's red main, an invalid forge.json reads as a manifest problem with a link to the file, and the owner is notified once per failing run. Tests cover each path. Two things I would do next: (1) redLines passes redSentence(red, 0), so the owner reads "0 pull checks wait for it" — pass the real held count or drop that clause for the notification; (2) there is no test that hunt/sentinelTick actually pass the repo id through, nor that the notifier dedupes a red line across ticks; and redLines carries an unused _now parameter to remove. The vitals card stays forge-wide and the owner hears by notification only, as the pull says.
The sentinel no longer files an issue for another repository's red main. An invalid
forge.jsonnow reads as a manifest problem, and the repository's owner is told. I couldn't runbun x tsc --noEmithere becausebun installfails with a read-only tempdir. The tests I ran pass:test/red-main.test.ts,test/sentinel.test.tsandtest/crew-red-main.test.ts.src/crew/sentinel.ts): ared:<repoId>finding is filed only whenrepoIdis the repository the sentinel files into. For any other repository it files nothing.- This applies to
budgetBreaches,degradedCauses,findFaults,huntandsentinelTick. - When no forge repository is known, nothing is dropped.red_fix.ts: untouched. Thered:<repoId>key is also unchanged, so degraded history doesn't fork.src/checks/red_main.ts): when no test was named and the summary beginsforge.json:, the card says theforge.jsonon main is invalid, quotes the error, and names the file.- The card's link now goes to
/<owner>/<repo>/blob/<default-branch>/forge.jsoninstead of the run (src/kernel/vitals.tsuses the newredHref). -RedMaingained abranchfield to build that link.src/crew/notify.ts): a newredLinestells a user once per failing run when main is red in a repository they own. It covers the forge's own repository too.- It skips main checks stopped by a limit, archived repositories and non-user accounts.
test/red-main.test.ts): the new tests cover these cases.- A red main in a second repository files nothing, while the forge's own still files one issue. - A manifest error gets the
forge.jsonsentence and link. - A failing test keeps its old sentence and link. - The owner is notified, and a non-owner isn't.Not done: the red card still shows in the forge-wide vitals, because those aren't per user. The owner hears through the notification only; I added no per-owner card.
Closes #3992