2026-03-28 - 2026-09-28
Overview
120 Pull requests merged by 2 users
Merged
#124 The forge announces every merge, whoever made it
Merged
#123 nats declares the certificate directory it mounts
Merged
#122 nats serves the mesh's existing broker certificate
Merged
#121 nats declares the upstream image it is built from
Merged
#120 lavinmq, amqp-ping and amqp-email-forwarder leave the catalogue
Merged
#119 lavinmq holds mesh-broker again, now the check reads the store
Merged
#118 Undo: claiming mesh-broker made lavinmq unbuildable
Merged
#117 lavinmq keeps mesh-broker until something else can take it
Merged
#116 The Go base has to be 1.26 for what compiles the controller's code
Merged
#115 The nats module, and every manifest's event names made local
Merged
#113 fail2ban never bans a tunnel peer: ignoreip names the mesh range
Merged
#112 Rename seat claims to mesh-*/node-*; retire verdaccio (ADR 0121)
Merged
#111 dnsmasq owns its resolver format: node-zones is a template (ADR 0120)
Merged
#110 The uplink's managers are modules: networkmanager, systemd-networkd, dhcpcd (hq ADR 0117)
Merged
#109 dnsmasq: the operator's own names have a home the mesh never rewrites
Merged
#108 mssql: its data is placed — the last /services placement retires
Merged
#107 sshd: the operator's door is a module
Merged
#106 dnsmasq: the runtime's DNS is written into daemon.json, never over it
Merged
#105 mailu: the smtp provision serves the name its certificate answers to
Merged
#104 Six modules name no /var/lib: the root is a place, the maps reference it
Merged
#103 mailu: seventeen data directories are placed, not stated
Merged
#102 nextcloud: it lives under its own name, and html is placed
Merged
#101 gitea: its data and grants are placed, not stated
Merged
#100 mongodb: its data directory is placed, not stated
Merged
#99 portainer: its data directory is placed, not stated
Merged
#98 only-office: its directories are placed, not stated
Merged
#97 Module data lives in /var/lib, now that nothing is mid-cutover
Merged
#96 A bucket is the one the mesh derives, and the photos module named another
Merged
#95 lavinmq: the broker TLS directory is the operator's, read by whoever needs it
Merged
#94 route-adapter: write a body limit as the predecessor's buffering middleware
Merged
#59 nextcloud: real mesh module, MariaDB→PostgreSQL, S3 via _FILE secrets
Merged
#58 minio: the real 4-node/8-drive erasure-coded cluster, both public routes, verified live on novox
Merged
#55 postgres: declare the data directory's real owner; keycloak: use the port template
Merged
#93 mailu: one WEBMAIL_ADDRESS, the mesh's container name
Merged
#69 The npm registry is a seat gitea holds, and gitea holds the git seat a build's source can live on
Merged
#92 mailu certifies itself, take two — the fall-through is now a behaviour
Merged
#91 mailu: back to the copied cert — the edge's fall-through is a belief, not a behaviour
Merged
#90 mailu certifies itself: the edge passes unknown ACME tokens through now
Merged
#89 portainer: serve its public name, hold its real data, run the image the machine runs
Merged
#88 only-office: pin the machine side of its port
Merged
#87 invoicing: MONGO_DB says the granted database's name
Merged
#86 invoicing: the photos lessons, applied before its window
Merged
#85 mongodb: the server container is mongodb-server, not the predecessor's name
Merged
#84 Every credential provider says whether it still holds a consumer (hq issue 120)
Merged
#83 mailu: the queue is root's and traversable, which is postfix's own convention
Merged
#82 mailu: cert flavor while the predecessor's proxy owns the challenge path
Merged
#81 automx: the seed writes the schema 2021.6 reads
Merged
#80 automx: the schema its seed writes belongs to one automx2, so that one is named
Merged
#79 mailu: the containers are named by the vocabulary 2024.06 reads
Merged
#78 mailu: every container asks the module's own resolver, pinned where they can find it
Merged
#77 mailu: the admin API answers on 8080 since 2024.06
Merged
#76 automx: the launcher's wrapper is written by the build that ships it
Merged
#75 mailu: pin exactly what phase 1 verified
Merged
#74 mailu: 2024.06 closes 110/143/587 by default; parity says open them
Merged
#73 mailu: the manifest matches the machine, provides smtp, and carries automx
Merged
#72 gitea: the package team may read code, and its units are reconciled
Merged
#70 route-proxy binds the mesh's own authority for internal names; gitea's internal-API refusal joins its route
Merged
#71 gitea: a consumer's user is actually created, and a failed create says why
Merged
#68 minio: declare the route contribution it has always needed, scoped from PR #58
Merged
#67 route-proxy: the trust step skips the fetch when the CA names no roots to get
Merged
#66 route-proxy: the server container resolves its own built artifact
Merged
#65 public-acme: the roots field is named roots, not root
Merged
#64 route-proxy: declare the build context its own Dockerfile has always needed
Merged
#63 builder is a real built module now, not handed over
Merged
#62 minio: install mc in the runtime image, declare its region
Merged
#61 builder: consume package-registry as a real mesh grant, not a hand-faked one
Merged
#60 gitea: listens its real internal ssh port (22), not 2222
Merged
#57 minio: repin to pgsty's fork, build the runtime sidecar, move data off HAL's live drive
Merged
#54 4 modules: persistent data is a directory bind, never a named volume
Merged
#53 11 modules: a container's ports say the software's port, not the machine's
Merged
#52 postgres: the provisioner connects to mesh-store's actual port, not a hardcoded 5432
Merged
#51 gitea: the token needs read:user, not just write:repository and write:issue
Merged
#49 The forge mints its own API token with the admin account the vault delivers
Merged
#50 Convert the resolver from the module it replaces: forward, answer at 127.0.0.1, point the runtime at it
Merged
#48 The artifact store's seat is one per mesh
Merged
#46 Convert mssql from the module it replaces, not from a blank page
Merged
#45 Pin the analytics module to the version the machine it replaces is running
Merged
#44 Pin the package registry to the version the machine it replaces is running
Merged
#43 Pin the forge to the version the machine it replaces is running
Merged
#42 route-adapter: provide route by writing into the predecessor's proxy (hq ADR 0104)
Merged
#41 The store keeps the vector extension the predecessor's database had
Merged
#40 The forge's own address follows the port the node gave it (hq issue 088)
Merged
#39 The builder's package binding is settable per node (hq issue 085)
Merged
#38 Adoption mode: guards, and a filter unit that never flushes the ruleset (hq ADR 0100, 0103)
Merged
#37 n8n and baserow no longer take the shared cache (issue 081)
Merged
#36 redis: a consumer's ACL loses the dangerous category (issue 080)
Merged
#35 route-proxy: the trust gate names the binding it reads; the server names the gate (ADR 0099)
Merged
#34 Multiple fixes: five modules keep their secrets from the vault (ADR 0094), the authority makes its own root (076), the builder on the host network, route-proxy declares its bases
Merged
#33 The controller's manifest lives in the controller's repository, not here (hq issue 072)
Merged
#32 Six modules take their secrets from files; the rest say precisely why not (issue 041)
Merged
#31 The controller reads its credentials from files; every other env-file secret says why
Merged
#30 Add mesh-vault; redis, postgres and lavinmq take their passwords from files
Merged
#29 minio: pull image from quay.io (docker.io denies anonymous pulls)
Merged
#28 Correct lavinmq Dockerfile's stale MESH_TOOL_MODULES comment (061 review)
Merged
#27 The mesh builds its own catalogue (issue 060)
Merged
#26 Refs name the registry; lavinmq's runtime runs its provisioner (042/048/061)
Merged
#25 Foundation modules claim a mesh-scoped seat named after their server
Merged
#24 The adopted broker declares its amqps bus port (5671) in listens
Merged
#23 Foundation modules adopted, and the mesh-controller/foundation rename
Merged
#22 Modules compile in the toolchain and ship on the runtime
Merged
#21 The catalogue holds the module graph, and the modules that make it build themselves
Merged
#20 module fixes from the whole-mesh dry-run: fail2ban capability + tool-runtime credential wiring
Merged
#19 local model: an ollama provider + a local-model consumer (ADR 0055)
Merged
#18 openai-consumer: the static-key model-access consumer (ADR 0050)
Merged
#17 model-usage: the vendor-neutral usage store (ADR 0054)
Merged
#16 anthropic model-access: manager + consumer modules
Merged
#15 lavinmq: a user-facing AMQP provider (vhost-per-login)
Merged
#14 route-proxy: the native ingress module (drop traefik)
Merged
#13 fix: postgres consumers connect to the mesh-named db (the login), not a hardcoded name
Merged
#12 fix: DB/cache/store providers must serve their port (migration blocker)
Merged
#11 Convert confluence + jira on the tools-only template
Merged
#10 Convert gitlab — the tools-only external-SaaS exemplar (23 tools, lab-proven)
Merged
#9 Convert baserow, letta, invoicing (DB/S3 consumers)
Merged
#8 mosquitto: run-once dynsec bootstrap + fix the exit-0-on-failure provisioner
Merged
#7 Servarr events entrypoints don't crash the runtime when unconfigured
Merged
#6 Media modules access the shared library, they do not own it (ADR 0051)
Merged
#5 Resync hq ADR references (0044-0054 -> 0039-0049)
Merged
#4 Convert four more hal modules: bookshelf, unifi, fail2ban, marrytts
Merged
#3 Convert four hal modules: lidarr, mongodb, mssql, mosquitto
Merged
#2 audit-logger: the assigned-module manifest (ADR 0048)
1 Pull request proposed by 1 user
Proposed
#114 ssh-client module: the mesh owns ~/.ssh (to-be 29) — HOLD until to-be 29 deploy