Forge database pool caps are config values, and a changed value recreates the forge (issue 1966, recovery) #633

Merged
mesh-tools merged 1 commits from fix/1966-gitea-pool-config into main 2026-11-08 03:41:24 +00:00
Member

Recovery fix under issue 1966 (notes 86-89), recovery-fixes-merge-and-tell.

Cause. #632 wrote the forge's store pool cap (MAX_OPEN_CONNS 40, MAX_IDLE_CONNS 10, CONN_MAX_LIFETIME 5m) as literals into modules/gitea/files/server.env, an env-file docker reads only when the container is created. The container server names no restart-on, so the delivery to novox at 03:20 local wrote the file and left the running container as it was: docker_inspect shows no GITEA__database__MAX_OPEN_CONNS in its environment, and the forge held 55-67 of the store's 100 connections in bursts.

Change. The shape ADR 0348 decides: three gitea config values (database-max-open-connections 40, database-max-idle-connections 10, database-connection-lifetime 5m, not trusted, each describing the store's shared 100 connections), placed into server.env with ${config:...}; the container server declares restart-on: ["server-env"], so a changed value recreates it (mesh-host's apply recreates a container for a changed restart-on resource). Changing the cap is then one mesh-config.config set.

Evidence. pool-cap.test.ts proves the placements, defaults and restart-on, and fails with either part taken out; gitea's 217 tests pass; the manifest validator (mesh-delivery main 68581be, with the 60 seat definitions) accepts all 144 manifests in the change and the trunk alike.

Undo. Revert this merge; the literals of #632 return.

Reviewed-by: mesh-code-reviewer@shanks at 4becc7bd83

https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5

Recovery fix under issue 1966 (notes 86-89), recovery-fixes-merge-and-tell. **Cause.** #632 wrote the forge's store pool cap (MAX_OPEN_CONNS 40, MAX_IDLE_CONNS 10, CONN_MAX_LIFETIME 5m) as literals into `modules/gitea/files/server.env`, an env-file docker reads only when the container is created. The container `server` names no `restart-on`, so the delivery to novox at 03:20 local wrote the file and left the running container as it was: `docker_inspect` shows no `GITEA__database__MAX_OPEN_CONNS` in its environment, and the forge held 55-67 of the store's 100 connections in bursts. **Change.** The shape ADR 0348 decides: three gitea config values (`database-max-open-connections` 40, `database-max-idle-connections` 10, `database-connection-lifetime` 5m, not trusted, each describing the store's shared 100 connections), placed into `server.env` with `${config:...}`; the container `server` declares `restart-on: ["server-env"]`, so a changed value recreates it (mesh-host's apply recreates a container for a changed restart-on resource). Changing the cap is then one `mesh-config.config` set. **Evidence.** pool-cap.test.ts proves the placements, defaults and restart-on, and fails with either part taken out; gitea's 217 tests pass; the manifest validator (mesh-delivery main 68581be, with the 60 seat definitions) accepts all 144 manifests in the change and the trunk alike. **Undo.** Revert this merge; the literals of #632 return. Reviewed-by: mesh-code-reviewer@shanks at 4becc7bd83125880ec001a84a5d115e2b3d551e2 https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
mesh-tools added 1 commit 2026-11-08 02:50:41 +00:00
Forge database pool caps are config values and a change recreates the forge (issue 1966, recovery)
mesh/delivery merged: source.main moved to novox/mesh-catalog@53d173aa7de5
mesh/check checking 4becc7bd8312 on 53d173aa7de5
4becc7bd83
The caps were literals in server.env and the container named no restart-on, so a changed env-file never reached the running forge. They are now three gitea config values placed with ${config:...}, and the server container restarts on server-env.

Claude-Session: https://claude.ai/code/session_01NcbgfFfQ4Z9UE5jK32PmE5
Author
Member

Delivery novox/mesh-catalog@4becc7bd8312 — merged since 2026-11-08T03:41:33Z

Source — source.main moved to novox/mesh-catalog@53d173aa7d. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.

Transitions

  • 2026-11-08 02:50 (new) → proposed (announced): novox/mesh-catalog#633's head announced
  • 2026-11-08 02:50 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-11-08 03:41 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@4becc7bd8312` — **merged** since 2026-11-08T03:41:33Z **Source** — source.main moved to novox/mesh-catalog@53d173aa7de5. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Transitions** - 2026-11-08 02:50 (new) → proposed (announced): novox/mesh-catalog#633's head announced - 2026-11-08 02:50 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-11-08 03:41 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-tools merged commit 53d173aa7d into main 2026-11-08 03:41:24 +00:00
mesh-tools deleted branch fix/1966-gitea-pool-config 2026-11-08 03:41:24 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-catalog#633