Commit Graph
14682 Commits
Author SHA1 Message Date
kevinveenbirkenbachandClaude Opus 5.5 6baa7dc72f Merge remote-tracking branch 'origin/main' into update/docker-image-versions-web-app-baserow-20261002-4836a00
The validation job asserts that main is fully merged into the PR head,
so the branch has to carry the current main before CI can pass.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-04 03:11:57 +02:00
infinito-nexus-updater[bot] c2162e98ba update(images): update Docker image versions (web-app-baserow) 2026-10-04 03:11:56 +02:00
evangelostsak e7a1d079f0 fix(swarm-zombie): leave the mesh out of the throwaway cluster
The drill hands the deploy every group-conditional service in disable=,
and this branch made the mesh one of them. Its row is planned at index 0 of
sweep 0 with the axis on auto, which is the half of the rotation that
carries the mesh, so the lab brought svc-net-wireguard up while the same
run asked for the wireguard service to be switched off. The deploy refuses
that combination, and every workspace job that drills a swarm cluster died
on it:

  service 'wireguard' is disabled, but provider role 'svc-net-wireguard'
  is still active

The axis is now pinned off for the drill, which is the state those jobs ran
in before the mesh existed: they exercise the workspace tooling on each
distro, and the deploy matrix is what proves the mesh. An operator who
wants the other arm passes vpn=enforced.
2026-10-04 02:34:23 +02:00
kevinveenbirkenbachandClaude Opus 5.5 4a2f733f10 docs(mcp): regenerate the audit report for the jenkins 2.580.1-lts bump
test_the_committed_report_is_freshly_generated compares the committed
table against a fresh render. The image updater edits only
meta/services.yml, so the jenkins row still read 2.568.3-lts.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-04 02:20:20 +02:00
kevinveenbirkenbachandClaude Opus 5.5 5ce9eafb98 Merge remote-tracking branch 'origin/main' into update/docker-image-versions-web-app-jenkins-20261002-49ea518
The validation job asserts that main is fully merged into the PR head,
so the branch has to carry the current main before CI can pass.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-04 02:20:06 +02:00
kevinveenbirkenbachandClaude Opus 5.5 89ba31f18c docs(mcp): regenerate the audit report for the hermes v2026.9.24 bump
test_the_committed_report_is_freshly_generated compares the committed
table against a fresh render. The image updater edits only
meta/services.yml, so the hermes row still read v2026.9.7.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-04 02:19:55 +02:00
kevinveenbirkenbachandClaude Opus 5.5 7aabcfa9d3 Merge remote-tracking branch 'origin/main' into update/docker-image-versions-web-app-hermes-20261002-a0605c9
The validation job asserts that main is fully merged into the PR head,
so the branch has to carry the current main before CI can pass.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-04 02:19:47 +02:00
evangelostsak bb484ecb8f Merge remote-tracking branch 'upstream/main' into feature/svc-net-wireguard
One conflict, in the generated role table of README.md. Both sides changed
the same rows: upstream swapped WordPress's Mailu dependency for Stalwart,
while this branch replaced the three svc-net-wireguard-{core,plain,
firewalled} rows with the single svc-net-wireguard it deploys.

Resolved by regenerating rather than by hand, since make readme-index owns
that table and gates it with --check. The regenerated table carries both
sides and the check reports it up to date.

README.md was the only file both sides touched, and nothing in the tree
still names the three replaced roles.
2026-10-04 02:18:03 +02:00
kevinveenbirkenbachandClaude Opus 5.5 cb5591c93d docs(mcp): regenerate the audit report for the prometheus v3.15.0 bump
test_the_committed_report_is_freshly_generated compares the committed
table against a fresh render. The image updater edits only
meta/services.yml, so the prometheus row still read v3.14.0.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-04 02:06:29 +02:00
kevinveenbirkenbachandClaude Opus 5.5 21850ace37 Merge remote-tracking branch 'origin/main' into update/docker-image-versions-web-app-prometheus-20261002-e2015e1
The validation job asserts that main is fully merged into the PR head,
so the branch has to carry the current main before CI can pass.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-04 02:06:21 +02:00
evangelostsak 25c7fdd1a5 test(mesh): pin the switched host to a tty-free transport
The carriage returns a pty adds are invisible until a role parses its own
output, so the absence of the tty is asserted where the transport is
written rather than left to the next role that reads stdout.
2026-10-03 23:20:26 +02:00
evangelostsak 9accaee134 fix(mesh): stop the mesh transport adding carriage returns
Ansible appends -tt to any task it cannot pipeline when the task escalates,
and ansible.builtin.script is one of those, so the deploy over the mesh ran
those tasks on a pty. A pty ends every line with a carriage return, while
the container connection this transport replaces returned bare newlines. A
role that reads its own stdout therefore started failing for no reason other
than the deploy having moved onto the mesh: the Matomo bootstrap parsed a
perfectly good token as empty, because its regex anchors each line and a
trailing carriage return defeats that anchor.

The host the tool switches now asks for no tty, so the mesh returns the same
bytes the connection it replaced did, and no role has to learn about the
transport underneath it.

Taken from the connection plugin rather than guessed: the tty is added when
the task cannot pipeline and escalates, and the option carrying it is
exposed per host as ansible_ssh_use_tty.
2026-10-03 23:20:26 +02:00
kevinveenbirkenbach 564c667cfb Merge pull request #777 from infinito-nexus/dependabot/npm_and_yarn/npm_and_yarn-c12db4747a
chore(deps-dev): bump fast-uri from 3.1.7 to 3.1.8 in the npm_and_yarn group across 1 directory
2026-10-03 21:52:10 +02:00
kevinveenbirkenbach e05ed7e899 Merge pull request #769 from infinito-nexus/update/docker-image-versions-svc-ai-ollama-20261002-12ec169
update(images): update Docker image versions (svc-ai-ollama)
2026-10-03 21:50:58 +02:00
kevinveenbirkenbach 21d2c01c66 Release version 15.0.0 v15.0.0 2026-10-03 21:21:58 +02:00
dependabot[bot] 7fd3af2250 chore(deps-dev): bump fast-uri
Bumps the npm_and_yarn group with 1 update in the / directory: [fast-uri](https://github.com/fastify/fast-uri).


Updates `fast-uri` from 3.1.7 to 3.1.8
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.7...v3.1.8)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.8
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-03 19:20:40 +00:00
kevinveenbirkenbachandClaude Opus 5.5 eb8550517d ci(web-app-stalwart): stop pulling deprecated Mailu into the deploy round
Deprecated roles are no longer tested, but Stalwart variant 1 still switched its mailu service key on so CI co-deployed Mailu for the migration e2e. The override and the static mailu key, whose only purpose was that pull, are gone, and the generated cosmos drops the mailu node.

The migration gate keeps only the check that services.stalwart.migration.import_mailu stays declared and off by default. The operator-side import (12_import_mailu.yml, migrate_from_mailu.py) still runs when web-app-mailu is in the inventory; the e2e harness under files/test/ and templates/test.env.j2 now skips itself and is left for removal.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-03 21:11:51 +02:00
kevinveenbirkenbachandClaude Opus 5.5 42bdf4321f docs(roles): stop testing deprecated roles
lifecycle.md said a deprecated role is still covered by the test suite while the tested envelope already left it out. A deprecated role is now untested: the matrix-deploy MUST NOT exercise it and a failure in it MUST NOT block a release, while planned, pre-alpha and eol stay open to best-effort runs. The complexity legend says untested too.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-03 21:11:51 +02:00
kevinveenbirkenbachandClaude Opus 5.5 6fc03364c7 feat(web-app-mailu): deprecate Mailu in favour of Stalwart
Stalwart is the default mail provider, so Mailu moves from maintenance to deprecated. Its README carries the Deprecated banner lifecycle.md requires, pointing at web-app-stalwart and its "Migration from Mailu" section; MAIL_PROVIDER: web-app-mailu keeps routing mail to Mailu until an install has moved.

deprecated sits outside the tested lifecycle envelope, so Mailu leaves the CI deploy discovery and the generated role table of the root README.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-03 21:11:51 +02:00
kevinveenbirkenbachandClaude Opus 5.5 80082553c7 docs(roles): point the allowed lifecycle values at lifecycle.md
layout.md listed six of the nine lifecycle stages the layout lint accepts and left out rc, maintenance and eol. It now defers to the stages in lifecycle.md, which already define every value, deprecated included, with its criteria.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-03 21:11:50 +02:00
kevinveenbirkenbachandClaude Opus 5.5 b1311c8f87 test(ci): pin every release tag to the subject the push workflow recognises
entry-push-latest.yml lets a push to main cancel the running pipeline only when its head commit starts with the release subject pkgmgr writes. The new integration test reads that prefix from the workflow and the tag schema from scripts/github/resolve/release/tag.sh, then requires every release tag from v13.0.0 on to sit on "Release version X.Y.Z". Six tags between v10.1.0 and v11.6.0 carry "Release X.Y.Z", so the check starts at the first tag of the uniform run.

call-test.yml now checks out with full history and tags, the pair detect-release already relies on; a depth-1 checkout carries no tags and would skip the test. Forks and tagless clones skip it on purpose.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-03 19:57:30 +02:00
kevinveenbirkenbachandClaude Opus 5.5 52fe3c9c2c style: apply make autoformat to the merged Stalwart and Tor files
Formatter output only: the parsed YAML and the Python AST of every touched file equal their previous versions.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-03 19:57:30 +02:00
kevinveenbirkenbachandClaude Opus 5.5 d3ca143343 docs(roles): regenerate READMEs for Stalwart as the mail provider
MAIL_PROVIDER moved to web-app-stalwart without a make docs run, so every generated README still drew Mailu as the email dependency. This is the generator output for the current tree: the root role table and each role cosmos now name Stalwart, Mailu loses its dependents, and Stalwart gains its swarm marker, the Tor dependencies and the 0..0 edges.

The hand-written cosmos of svc-net-tor-smtp gives way to the generated one, which no longer shows the SOCKS5 hop through svc-net-tor because the role does not declare that dependency.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-03 19:57:30 +02:00
kevinveenbirkenbachandClaude Opus 5.5 9281a17195 ci(push): let a release push on main supersede the running run and deploy every chunk
A push to main whose head commit starts with "Release version " (the subject pkgmgr writes for every release) now cancels the main run in progress, so the release starts at once instead of queueing behind it. Every other push to main still leaves the running pipeline alone.

When the pushed main commit carries a vX.Y.Z tag, the orchestrator runs with chunk_gate false: every chunk deploys and reports, and a failed chunk still turns the run red, so release-guard and release-version stay skipped.

entry-cancel-superseded.yml mirrors the new rule behind its push guard, parenthesised so && does not bind the release clause; the mirror test composes the expected rule the same way.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-03 19:57:30 +02:00
kevinveenbirkenbach 4ee3912bd9 Merge branch 'main' of github.com:infinito-nexus/core 2026-10-03 19:57:30 +02:00
kevinveenbirkenbach 492d289d45 Merge branch 'main' of github.com:infinito-nexus/core 2026-10-03 19:57:29 +02:00
kevinveenbirkenbachandClaude Opus 5.5 4ac188022c chore(agents): mirror the store-i18n sandbox and permission policy
Takes the agent policy from the feature/store-i18n worktree over unchanged:

- rm -rf* leaves the deny list.
- Edit and Write on any .claude/*.json now ask for confirmation.
- The sandbox network allowlist trades the single 127.0.0.6:8097 entry for 127.0.0.1 to 127.0.0.12 and localhost on every port, so sandboxed commands reach local services and published compose ports.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-03 19:57:29 +02:00
kevinveenbirkenbach 329841777a Merge pull request #776 from infinito-nexus/update/docker-image-versions-svc-net-tor-smtp-20261003-7a95437
update(images): update Docker image versions (svc-net-tor-smtp)
2026-10-03 18:38:41 +02:00
infinito-nexus-updater[bot] 646123e8bc update(images): update Docker image versions (svc-net-tor-smtp) 2026-10-03 08:27:12 +00:00
kevinveenbirkenbach 4edcbbf8cf Merge pull request #765 from infinito-nexus/dependabot/npm_and_yarn/npm_and_yarn-903ed42b99
chore(deps-dev): bump brace-expansion from 5.0.9 to 5.0.12 in the npm_and_yarn group across 1 directory
2026-10-03 10:24:33 +02:00
kevinveenbirkenbach f3cd673cda Merge pull request #768 from infinito-nexus/update/repository-refs-pkgmgr-20261002-1be0adf
update(repos): bump git refs to latest semver tags (pkgmgr)
2026-10-03 10:21:34 +02:00
evangelostsak 9d4c631b17 fix(user): keep the login banner off non-interactive stdout
sshd starts bash in a way that sources ~/.bashrc even for a single
remote command, and this file printed its banner unconditionally. Every
command Ansible runs over SSH therefore returned the banner on stdout, and a
task that parses its own output read that instead: the Matomo bootstrap
asserted on stdout='unknown': unknown terminal type., which is 
failing when there is no terminal to clear.

The deploy never saw it while the roles were installed over the container
connection, where no login shell is involved. Now that the applications are
deployed over the mesh, every such task reads the banner.

Reproduced and fixed against the rendered template: sourcing it
non-interactively with TERM=unknown printed the terminal error and the whole
banner before, and prints nothing now, while an interactive shell is
unchanged.

The narration comment above the colour block goes with it: the guard moved it
off the file header, where the comment lint allows it, into mid-code, where
it is what that lint calls narration.
2026-10-03 08:55:36 +02:00
evangelostsak 2c896219de fix(mesh): refresh the package index in the bootstrap pass
The bootstrap is now the first thing to touch a node, and it installed
the WireGuard tooling on an index nothing had fetched: every meshed row died
in ten minutes with 'No package matching wireguard-tools is available' on
all four hosts.

The deploy never hit this because user-root pulls in sys-svc-ssh, which
refreshes the index before the run's first install. The bootstrap skipped
that role, so the ordering the deploy relies on was missing. It now runs the
same prefix the constructor does -- root, administrator, then the mesh --
rather than repeating the refresh somewhere else.
2026-10-03 03:34:44 +02:00
evangelostsak ddad025336 Merge remote-tracking branch 'origin/main' into feature/svc-net-wireguard 2026-10-03 02:32:22 +02:00
evangelostsak e456b1eee6 Merge remote-tracking branch 'origin/main' into feature/svc-net-wireguard
One conflict, in the MCP exclusion list of requirement 035. Both sides
edited the same line: main added svc-net-tor-smtp, this branch replaced the
three svc-net-wireguard-{core,plain,firewalled} entries with the single
svc-net-wireguard it deploys. Resolved to the union of both — 24 entries —
which is what the merged tree actually holds.

Everything else merged clean and was checked for overlap rather than
assumed: no reference anywhere still names the three replaced roles;
matrix.py kept main's PRIMARY_APPS alongside the reordered round, and the
bootstrap pass does not need it, since only one template reads it and
group_vars defaults it empty; and main's ansible.cfg addition sits in
[defaults], so the ssh_args the mesh tool derives its own connection
settings from are untouched.
2026-10-03 02:29:45 +02:00
kevinveenbirkenbach f0ba16976c Merge pull request #774 from infinito-nexus/update/docker-image-versions-web-app-socialhome-20261002-6168e6f
update(images): update Docker image versions (web-app-socialhome)
2026-10-03 02:16:45 +02:00
evangelostsak 28ed194f8a docs(037): record the single deploy over the mesh
Why the first pass stops at the mesh, and what the meshed row therefore
stops covering: the second deploy itself, so no re-run proving a redeploy
changes nothing, and no async update pass. Every direct-transport row still
deploys twice, so that coverage moves across the axis rather than
disappearing.
2026-10-03 02:09:16 +02:00
evangelostsak 28f263f730 perf(swarm-test): deploy the roles once, over the mesh
The round replaces its first deploy with the mesh bootstrap and keeps the
deploy after the seam as the only one that installs the applications: the
same roles at 2.98s a task instead of 0.74s, some five thousand tasks of it,
which is most of why a meshed variant 0 ran past the 20400s budget.

The backup node and the DR drill move behind that pass, because there is
nothing to back up before it; they are held together in one step so the two
call sites do not drift. Credentials still reset before the deploy that has
to carry them.

A direct-transport round is untouched and still deploys twice.
2026-10-03 02:09:16 +02:00
evangelostsak 1ba9c081ed feat(swarm-test): bring the mesh up as a pass of its own
A meshed round deployed every role twice, once over the container
connection and once again over the tunnel, which left the most expensive
transport carrying nothing but idempotence checks. The first pass now brings
up the mesh and nothing else, so the pass after the seam is the only one
that deploys the applications.

The converge drops the backup inventory with it. That node is deployed after
the rotation now, so it renders the current mesh on its first run and has
nothing to converge from.
2026-10-03 02:09:16 +02:00
evangelostsak da7745e104 feat(mesh): let the play create the account the tunnel is entered by
The pass that moves the deploy onto the mesh logs in as administrator, so
whichever pass brings the mesh up has to create that account. It is guarded
rather than unconditional: the converge reaches nodes that already have it,
and the controller play would otherwise grow an account it never uses.
2026-10-03 02:09:16 +02:00
infinito-nexus-updater[bot] 33d9bf3f42 update(images): update Docker image versions (web-svc-collabora) 2026-10-02 20:09:46 +00:00
infinito-nexus-updater[bot] 3bbb2ed8e9 update(images): update Docker image versions (web-app-socialhome) 2026-10-02 20:09:40 +00:00
infinito-nexus-updater[bot] da025160cc update(images): update Docker image versions (web-app-prometheus) 2026-10-02 20:09:35 +00:00
infinito-nexus-updater[bot] 44f57c82da update(images): update Docker image versions (web-app-openbao) 2026-10-02 20:09:27 +00:00
infinito-nexus-updater[bot] 22b162c4ee update(images): update Docker image versions (web-app-jenkins) 2026-10-02 20:09:19 +00:00
infinito-nexus-updater[bot] cf2be2acbf update(images): update Docker image versions (web-app-hermes) 2026-10-02 20:09:14 +00:00
infinito-nexus-updater[bot] a04fecfb8c update(images): update Docker image versions (svc-ai-ollama) 2026-10-02 20:09:06 +00:00
infinito-nexus-updater[bot] 8746022aac update(repos): bump git refs to latest semver tags (pkgmgr) 2026-10-02 20:09:01 +00:00
kevinveenbirkenbach a3e05f91a9 Merge pull request #766 from infinito-nexus/update/docker-image-versions-web-app-stalwart-20261002-c99e971
update(images): update Docker image versions (web-app-stalwart)
2026-10-02 21:43:34 +02:00
infinito-nexus-updater[bot] da0ac5a1e5 update(images): update Docker image versions (web-app-stalwart) 2026-10-02 15:43:48 +00:00