The operator decided 2026-10-26: the forge account the mesh's tools act as (mesh-tools) reads every repository. Until now it read the novox organisation's repositories (through its team) and public ones, so a user's private repositories (car-hunter, snake) answered 404 to the tools, the indexer and the checker, and the grants part composes their modules with no authority (issue 1945's gaps).
modules/gitea/readall.ts (new): with the module's existing administrator login, adds mesh-tools as a read-only collaborator on each repository it cannot read (one repository at a time, no organisation membership), checks each grant by reading the permission back, and says each refusal in the forge's words. A repository whose permission cannot be read is a refusal for that repository alone; the pass goes on.
When: one pass at the start (not awaited; asked again a minute apart until one pass ran), and on the forge's events: a repository made, a fork, or the first event of a repository not yet seen readable. Not caught: a repository made private after it was seen readable (the forge sends no visibility event): granted at the next start or by gitea_grant_read, and shown by gitea_unreadable_repos meanwhile.
Tools: gitea_unreadable_repos (each repository the account cannot read, its permission and why) and gitea_grant_read (the same grant by hand, all or named repositories).
The administrator login is used for these four calls only; it never reaches a log or a tool answer.
Tests: two cases in test/tools-account.test.ts against an extended fake forge (start pass over six repositories; events, a refused grant, a 500 on one permission read). npm test 204 of 204; the new rows fail without the change.
Rule bent (rules-are-weighed): no try before this pull request. The try at 0e7e220d was stranded by the bus reload at 13:26 (issue 734, fix in progress) and the checker hands back the stranded run for this repository; the merge check is the gate.
Reviewed-by: review-forgeread@shanks at b4a7bb9dea
The operator decided 2026-10-26: the forge account the mesh's tools act as (`mesh-tools`) reads every repository. Until now it read the novox organisation's repositories (through its team) and public ones, so a user's private repositories (car-hunter, snake) answered 404 to the tools, the indexer and the checker, and the grants part composes their modules with no authority (issue 1945's gaps).
- `modules/gitea/readall.ts` (new): with the module's existing administrator login, adds `mesh-tools` as a read-only collaborator on each repository it cannot read (one repository at a time, no organisation membership), checks each grant by reading the permission back, and says each refusal in the forge's words. A repository whose permission cannot be read is a refusal for that repository alone; the pass goes on.
- When: one pass at the start (not awaited; asked again a minute apart until one pass ran), and on the forge's events: a repository made, a fork, or the first event of a repository not yet seen readable. Not caught: a repository made private after it was seen readable (the forge sends no visibility event): granted at the next start or by `gitea_grant_read`, and shown by `gitea_unreadable_repos` meanwhile.
- Tools: `gitea_unreadable_repos` (each repository the account cannot read, its permission and why) and `gitea_grant_read` (the same grant by hand, all or named repositories).
- The administrator login is used for these four calls only; it never reaches a log or a tool answer.
Tests: two cases in test/tools-account.test.ts against an extended fake forge (start pass over six repositories; events, a refused grant, a 500 on one permission read). `npm test` 204 of 204; the new rows fail without the change.
Rule bent (rules-are-weighed): no try before this pull request. The try at 0e7e220d was stranded by the bus reload at 13:26 (issue 734, fix in progress) and the checker hands back the stranded run for this repository; the merge check is the gate.
Reviewed-by: review-forgeread@shanks at b4a7bb9dea506ee73cb2a86663d9be5fc17b922c
Deliverynovox/mesh-catalog@b4a7bb9dea50 — merged since 2026-10-26T12:46:40Z
Source — source.main moved to novox/mesh-catalog@a4f5df797b. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.
Transitions
2026-10-26 12:45 (new) → proposed (announced): novox/mesh-catalog#495's head announced
2026-10-26 12:45 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
2026-10-26 12:46 ready → merged (merged): on the trunk its modules follow: merged there
The commit's note under refs/notes/mesh-plan keeps every transition of this change up to its merge: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-catalog@b4a7bb9dea50` — **merged** since 2026-10-26T12:46:40Z
**Source** — source.main moved to novox/mesh-catalog@a4f5df797b68. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves.
**Transitions**
- 2026-10-26 12:45 (new) → proposed (announced): novox/mesh-catalog#495's head announced
- 2026-10-26 12:45 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
- 2026-10-26 12:46 ready → merged (merged): on the trunk its modules follow: merged there
The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `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.
The operator decided 2026-10-26: the forge account the mesh's tools act as (
mesh-tools) reads every repository. Until now it read the novox organisation's repositories (through its team) and public ones, so a user's private repositories (car-hunter, snake) answered 404 to the tools, the indexer and the checker, and the grants part composes their modules with no authority (issue 1945's gaps).modules/gitea/readall.ts(new): with the module's existing administrator login, addsmesh-toolsas a read-only collaborator on each repository it cannot read (one repository at a time, no organisation membership), checks each grant by reading the permission back, and says each refusal in the forge's words. A repository whose permission cannot be read is a refusal for that repository alone; the pass goes on.gitea_grant_read, and shown bygitea_unreadable_reposmeanwhile.gitea_unreadable_repos(each repository the account cannot read, its permission and why) andgitea_grant_read(the same grant by hand, all or named repositories).Tests: two cases in test/tools-account.test.ts against an extended fake forge (start pass over six repositories; events, a refused grant, a 500 on one permission read).
npm test204 of 204; the new rows fail without the change.Rule bent (rules-are-weighed): no try before this pull request. The try at
0e7e220dwas stranded by the bus reload at 13:26 (issue 734, fix in progress) and the checker hands back the stranded run for this repository; the merge check is the gate.Reviewed-by: review-forgeread@shanks at
b4a7bb9deaDelivery
novox/mesh-catalog@b4a7bb9dea50— merged since 2026-10-26T12:46:40ZSource — source.main moved to novox/mesh-catalog@a4f5df797b. Whether it reached the machines is
mesh-delivery-view's, derived fromsource.main, the wants and the haves.Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition of this change up to its merge:git log --notes=mesh-plan.