pull.updated carries what the controller maps a PR onto the module graph with: module_dirs at the head (issue 278), removed, and merge_check (whether the head has a merge-check.sh). Every PR the forge holds is announced; the controller decides.
A verdict sets mesh/merge-gate (the gate: modules moved, dependents, the change plan's summary) and mesh/repo-check (the repository's own merge-check.sh). A change that builds something gets its change plan as a comment; a failing/erroring layer gets the check's account.
New tools gitea_branch_protection_get / gitea_branch_protection_set (edit the branch's rule — required statuses replaced, everything else kept — or create one that refuses direct pushes unless push=true; optional block_admin_override). Pure body logic in protection.ts, tested.
merge-check.sh is the catalogue's own layer: every manifest through the running controller's module check, the touched Go modules' tests (-race when gcc); TypeScript modules and unfetchable deps said as not tested.
Tested: node --test for pulls/protection (the pre-existing client test a commit status is set on the commit fails as on main: client.ts imports ./token.js, which strip-types cannot resolve); tsc clean in the TypeScript toolchain.
Pairs with mesh-controller #101. Do not merge before review.
Implements the forge side of hq ADR 0238.
- `pull.updated` carries what the controller maps a PR onto the module graph with: `module_dirs` at the head (issue 278), `removed`, and `merge_check` (whether the head has a merge-check.sh). Every PR the forge holds is announced; the controller decides.
- A verdict sets `mesh/merge-gate` (the gate: modules moved, dependents, the change plan's summary) and `mesh/repo-check` (the repository's own merge-check.sh). A change that builds something gets its change plan as a comment; a failing/erroring layer gets the check's account.
- New tools `gitea_branch_protection_get` / `gitea_branch_protection_set` (edit the branch's rule — required statuses replaced, everything else kept — or create one that refuses direct pushes unless `push=true`; optional `block_admin_override`). Pure body logic in `protection.ts`, tested.
- `merge-check.sh` is the catalogue's own layer: every manifest through the running controller's module check, the touched Go modules' tests (-race when gcc); TypeScript modules and unfetchable deps said as not tested.
Tested: `node --test` for pulls/protection (the pre-existing client test `a commit status is set on the commit` fails as on main: client.ts imports ./token.js, which strip-types cannot resolve); tsc clean in the TypeScript toolchain.
Pairs with mesh-controller #101. Do not merge before review.
The controller now decides what a pull request's check runs from the mesh's module
graph, so the announcement carries the changed directories that hold a module at the
head and whether the head has a merge-check.sh. A verdict sets mesh/merge-gate (the
gate, with the modules it judged) and mesh/repo-check (the repository's own tests).
gitea_branch_protection_get/set let the operator's agent make those statuses required.
The catalogue's merge-check.sh leaves the gate to the build seat and keeps its own layer:
every manifest through module check, and the touched Go modules' tests.
The controller asks its planner what a pull request reaches, as if merged: a module whose
manifest the change deletes is one the merge removes, and the plan's dependents are said
on the gate's status beside the modules it moves.
The gate's status says what the change does and how it was judged; a change that builds
something gets its plan as a comment — the tiers, what each machine receives, and what
is not an ordinary send.
Deliverynovox/mesh-catalog@cc1305a3541d — superseded since 2026-10-06T23:05:28Z
Groupfeat/the-graph-decides-what-is-checked, in order:
Transitions
2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#98's head announced
2026-10-06 23:05 proposed → checked (checked): the verdict names this commit
2026-10-06 23:05 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-06 23:05 ready → superseded (new-head): a newer head of the same pull request
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-catalog@cc1305a3541d` — **superseded** since 2026-10-06T23:05:28Z
**Group** `feat/the-graph-decides-what-is-checked`, in order:
**Transitions**
- 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#98's head announced
- 2026-10-06 23:05 proposed → checked (checked): the verdict names this commit
- 2026-10-06 23:05 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-06 23:05 ready → superseded (new-head): a newer head of the same pull request
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Implements the forge side of hq ADR 0238.
pull.updatedcarries what the controller maps a PR onto the module graph with:module_dirsat the head (issue 278),removed, andmerge_check(whether the head has a merge-check.sh). Every PR the forge holds is announced; the controller decides.mesh/merge-gate(the gate: modules moved, dependents, the change plan's summary) andmesh/repo-check(the repository's own merge-check.sh). A change that builds something gets its change plan as a comment; a failing/erroring layer gets the check's account.gitea_branch_protection_get/gitea_branch_protection_set(edit the branch's rule — required statuses replaced, everything else kept — or create one that refuses direct pushes unlesspush=true; optionalblock_admin_override). Pure body logic inprotection.ts, tested.merge-check.shis the catalogue's own layer: every manifest through the running controller's module check, the touched Go modules' tests (-race when gcc); TypeScript modules and unfetchable deps said as not tested.Tested:
node --testfor pulls/protection (the pre-existing client testa commit status is set on the commitfails as on main: client.ts imports ./token.js, which strip-types cannot resolve); tsc clean in the TypeScript toolchain.Pairs with mesh-controller #101. Do not merge before review.
Delivery
novox/mesh-catalog@cc1305a3541d— superseded since 2026-10-06T23:05:28ZGroup
feat/the-graph-decides-what-is-checked, in order:Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.