Commit Graph
14682 Commits
Author SHA1 Message Date
Prageeth Panicker 37ac7c794e fix(web-app-decidim): fix database service key and compose.yml issues
- Change database service key from 'database' to 'postgres' to match
  new service registry lookup (database_service.py)
- Replace dmbs_excl.yml.j2 include with explicit redis depends_on to
  avoid empty YAML key from broken shared-database host lookup
- Add subnet 192.168.104.176/28 for web-app-decidim to 10_networks.yml
  to fix bare 'default:' network key in compose.yml on Fedora
2026-04-16 18:50:09 +00:00
kevinveenbirkenbachandClaude Opus 4.7 b948657048 chore(claude): allow *.windows.net in sandbox network
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-16 20:02:42 +02:00
kevinveenbirkenbach 4ee8441e33 Merge branch 'main' into fix/free-disk-space/138 2026-04-16 19:48:05 +02:00
kevinveenbirkenbachandClaude Opus 4.7 3e212a16db test(urls-reachable): treat all 5xx as warnings, not failures
5xx responses signal an upstream-side problem rather than a stale link
in this repository, so they shouldn't fail the URL reachability check.
Generalises the previous 500/503 special case to every 5xx code.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-16 19:44:38 +02:00
kevinveenbirkenbach 738432d4d3 Merge branch 'infinito-nexus:main' into main 2026-04-16 19:44:20 +02:00
kevinveenbirkenbachandClaude Opus 4.7 595b8fdfe7 chore(mailmap): map Environment Test sandbox identity to Kevin
Sandbox commits authored as "Environment Test
<environment-test@example.invalid>" are mine — fold them into my real
identity for git log/shortlog/blame and the GitHub UI without
rewriting history.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-16 19:37:18 +02:00
kevinveenbirkenbachandClaude Opus 4.7 3375498119 chore(claude): drop redundant Bash(curl*) ask rule
Sandbox network gate already bounds curl to allowedDomains, so the
interactive prompt added no real protection on top. Remove the rule
and the matching docs row.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-16 19:33:38 +02:00
kevinveenbirkenbachandClaude Opus 4.7 4e1be21da3 chore(claude): generalize sandbox allowedDomains via subdomain wildcards
Collapse explicit per-host entries into *.parent.tld patterns where the
sandbox only needs reach to a single domain family (Ansible, AWS, Docker,
Gitea, GitHub + githubusercontent, gstatic, hCaptcha, infinito, npm,
pythonhosted, Taiga). Apex domains stay listed bare. Sorted ASC with the
wildcard block first.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-16 19:32:07 +02:00
kevinveenbirkenbachandClaude Opus 4.7 764060c793 chore(claude): expand sandbox network/write paths, ignore host artefacts
Network gate does not honor wildcards, so allowedDomains is enumerated
explicitly for every host the agent + tooling actually need. Adds
~/.cache/pip, ~/.venvs, ~/.ansible to allowWrite so the pre-commit
make test hook can install the editable package and run ansible.

Adds host shell / editor / tooling state files to .gitignore (and the
auto-generated .dockerignore mirror) so they never become part of the
working tree. Switches the dependabot coverage test to git ls-files
with an os.walk fallback that derives its skip list from the live
.gitignore, so it stays correct in container test environments
without .git/ while still ignoring untracked host artefacts.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-16 19:24:31 +02:00
Environment TestandClaude Opus 4.6 e2dbbceb6a chore(sandbox): add cross-distro installer for bwrap/socat via make agent-install
Adds scripts/install/sandbox.sh, a distro-aware installer for the OS-level
dependencies the Claude Code sandbox backend needs (bubblewrap, socat),
and exposes it through a new `make agent-install` target. Documents the
target in docs/contributing/tools/make.md, scripts/install/README.md, and
the Claude sandbox guide so contributors on a fresh host can bring up a
working sandbox without hand-installing distro packages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 18:06:57 +02:00
Environment TestandClaude Opus 4.6 65cf9caff7 chore(claude): restructure agent docs, harden sandbox config, update settings
- Move docs/contributing/tools/agents/claude.md to claude/settings.md
- Split sandbox explanations into claude/sandbox.md, add claude/README.md as index
- Enable OS-level sandbox ("sandbox.enabled: true") for project-wide filesystem isolation
- Fail-closed on missing backend ("sandbox.failIfUnavailable: true") to prevent false-security state when bwrap/sandbox-exec is absent
- Add deny rules: "git clean*", "git branch -D*"
- Remove redundant "Read(~/.cache/pre-commit/**)" allow entry
- Update CLAUDE.md to instruct agent to summarize live permission state from settings.json at session start
- Update AGENTS.md and common.md references to new doc paths
- Normalize .md formatting per documentation.md rules (em dash removal, headline emojis)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 16:55:45 +02:00
kevinveenbirkenbach cdcf431b40 Merge pull request #146 from infinito-nexus/dependabot/npm_and_yarn/roles/test-e2e-playwright/files/playwright/test-1.59.1
build(deps-dev): bump @playwright/test from 1.58.2 to 1.59.1 in /roles/test-e2e-playwright/files
2026-04-16 16:52:09 +02:00
Environment TestandClaude Opus 4.6 118d9b0e69 chore(claude): tighten gh workflow perms, consolidate /tmp grant, sort settings
- Split Bash(gh workflow *) into list/view (allow), run (ask), enable/disable (deny)
- Add Bash(break) to allow list
- Remove duplicate /tmp grant from permissions.additionalDirectories; rely on sandbox.filesystem.allowWrite
- Add AGENTS.md "Temporary Files" rule requiring agents to write transient files only under /tmp
- Reorder .claude/settings.json allow entries into logical sections (Git, GitHub CLI, Build, Python, Ansible, Docker, Shell, Read, Web)
- Document new gh workflow entries, break, and Temporary Files cross-link in docs/contributing/tools/agents/claude.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 16:10:39 +02:00
Environment TestandClaude Opus 4.6 96e85a4fbf fix(web-app-baserow): retry bootstrap admin until Django migrations complete
Bootstrap ran immediately after compose up and raced the container
entrypoint that creates auth_user, failing with psycopg2 UndefinedTable
on fresh deploys. Retries the script up to 60 times at 5s intervals.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 15:56:52 +02:00
Environment Test dfa8cd99bb Merge branch 'main' into fix/free-disk-space/138 2026-04-16 14:00:27 +02:00
kevinveenbirkenbachandClaude Opus 4.6 d6487a7457 chore(claude): allow echo in Bash permissions
Split compound commands like `ls ... || echo ...` need `echo*` to match
the right-hand subcommand without approval prompts. Documented in
docs/contributing/tools/agents/claude.md.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 12:28:43 +02:00
kevinveenbirkenbach 34ddc4d2d2 Merge branch 'main' into fix/users-applications.yml
# Conflicts:
#	group_vars/all/00_general.yml
#	roles/web-app-dashboard/templates/playwright.env.j2
#	roles/web-app-nextcloud/config/main.yml
#	roles/web-app-nextcloud/templates/playwright.env.j2
2026-04-16 11:54:20 +02:00
kevinveenbirkenbach efc651a057 Merge branch 'main' of https://github.com/kevinveenbirkenbach/infinito-nexus-core 2026-04-16 11:31:31 +02:00
kevinveenbirkenbach 30b4138c86 Updated skills-lock.json 2026-04-16 11:30:41 +02:00
kevinveenbirkenbachandClaude Opus 4.6 f04bae680e chore(skills): symlink .claude/skills -> .agents/skills
Claude Code discovers project skills under .claude/skills/, but
`skills experimental_install` writes to .agents/skills/. Add a
relative symlink so installed skills (caveman, compress, ...) are
picked up without extra copy step.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:30:41 +02:00
kevinveenbirkenbachandClaude Opus 4.6 83d88a28fc chore(skills): symlink .claude/skills -> .agents/skills
Claude Code discovers project skills under .claude/skills/, but
`skills experimental_install` writes to .agents/skills/. Add a
relative symlink so installed skills (caveman, compress, ...) are
picked up without extra copy step.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 11:29:55 +02:00
kevinveenbirkenbach 28f79922c6 Updated skills-lock.json 2026-04-16 11:20:09 +02:00
kevinveenbirkenbach 1f017c94e4 Merge branch 'main' into fix/users-applications.yml 2026-04-16 11:16:21 +02:00
kevinveenbirkenbach 4088e24ffc Merge pull request #156 from kevinveenbirkenbach/fix/nextcloud-talk
Fix/nextcloud talk
2026-04-16 08:07:02 +02:00
kevinveenbirkenbach 93f757f5d6 Merge branch 'main' into fix/nextcloud-talk 2026-04-16 08:00:07 +02:00
Environment TestandClaude Opus 4.6 27565e4332 chore(claude): allow direct script exec and chmod under scripts/
Adds `Bash(scripts/*)` so repository helper scripts can be invoked
directly by path (shebang-based), required by inner-loop workflows
such as the Playwright spec rerunner. Adds `Bash(chmod +x scripts/*)`
so newly added scripts can be made executable without approval prompts.

Documents both entries in docs/contributing/tools/agents/claude.md
next to the existing `bash scripts/*` and `source scripts/*` rows.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 00:24:55 +02:00
Environment TestandClaude Opus 4.6 31620bd827 chore(claude): allow pkill -f and pre-commit cache reads
Adds `Bash(pkill -f *)` to the allowlist so stuck background commands
(pre-commit hooks, `make test`, `git commit`) can be aborted without an
approval prompt. Broad wildcard consciously accepted — narrow per-pattern
entries required repeated allowlist edits for every new abort scenario.

Adds `Read(~/.cache/pre-commit/**)` so pre-commit's stashed patch files
can be reapplied via `git apply` after a manually killed hook run, and
uses `~` instead of a hardcoded username path.

Documents both entries in docs/contributing/tools/agents/claude.md,
including the explicit risk note that `pkill -f` with a regex can
terminate every user-owned process and should use the narrowest pattern
possible.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 00:24:55 +02:00
Environment TestandClaude Opus 4.6 7c9b9c7922 chore(claude): generalize awk permission, drop stale entries
Replaces two over-specific `Bash(awk ...)` allowlist entries (full paths
and exact patterns that would never match again) with a single
`Bash(awk*)` entry next to `jq*`, consistent with how `grep*`, `find*`,
and `sort*` are allowed. Removes the broken `Read(//var/lib/infinito/logs/**)`
entry: `/var/lib/infinito/` is a named Docker volume defined in
compose.yml and never exists on the host, so host-scoped read access
is meaningless (and the path had a double slash).

Documents the new `awk*` entry in docs/contributing/tools/agents/claude.md
with an explicit note that awk's `system()` and `"cmd" | getline` put
it in the same risk class as the already-allowed `find -exec`.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 00:24:54 +02:00
Environment TestandClaude Opus 4.6 d6ca27d638 chore(claude): allow scripts/ source+bash, prefer make targets
Adds `Bash(bash scripts/*)` and `Bash(source scripts/*)` to the Claude
Code allowlist so repository helper scripts (e.g. env exports in
scripts/meta/env) can run without approval prompts, while still keeping
arbitrary paths scoped to review.

Documents both permissions in docs/contributing/tools/agents/claude.md,
including the caveat that `source` bypasses the allowlist for nested
commands.

Extends CLAUDE.md with an explicit rule that agents MUST prefer `make`
targets over direct docker/ansible/python/script invocations whenever
an equivalent target exists.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 00:24:54 +02:00
kevinveenbirkenbach f01f8f0e86 Merge branch 'main' into fix/nextcloud-talk 2026-04-16 00:21:31 +02:00
kevinveenbirkenbach ad5f9c8b27 Merge branch 'main' into feature/web-app-decidim/add-role 2026-04-16 00:16:27 +02:00
kevinveenbirkenbachandClaude Opus 4.6 4d696b12e2 test(urls): classify 418 and 451 as warnings, document status codes
Extends _WARNING_STATUS_CODES with 418 (I'm a teapot) and 451
(Unavailable For Legal Reasons) so they no longer fail the reachability
check. Inline-documents each status code in both _OK_STATUS_CODES and
_WARNING_STATUS_CODES, and updates the module docstring and failure
message accordingly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 00:16:17 +02:00
kevinveenbirkenbachandClaude Opus 4.6 8e7d67865f test(urls): classify 418 and 451 as warnings, document status codes
Extends _WARNING_STATUS_CODES with 418 (I'm a teapot) and 451
(Unavailable For Legal Reasons) so they no longer fail the reachability
check. Inline-documents each status code in both _OK_STATUS_CODES and
_WARNING_STATUS_CODES, and updates the module docstring and failure
message accordingly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 00:15:20 +02:00
kevinveenbirkenbachandClaude Opus 4.6 4870372510 test(urls): classify 418 and 451 as warnings, document status codes
Extends _WARNING_STATUS_CODES with 418 (I'm a teapot) and 451
(Unavailable For Legal Reasons) so they no longer fail the reachability
check. Inline-documents each status code in both _OK_STATUS_CODES and
_WARNING_STATUS_CODES, and updates the module docstring and failure
message accordingly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 00:07:35 +02:00
kevinveenbirkenbachandClaude Opus 4.6 18587b9a02 docs: align touched READMEs with documentation.md rules
- Drop heading emoji in docs/agents/ (parser rule)
- Add Credits block to role READMEs missing it
- Fix stray backtick in sys-token-store README
- Replace bare URLs in matrix Installation.md with named links

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 00:05:07 +02:00
kevinveenbirkenbach 262e1b43fc Merge branch 'main' into fix/users-applications.yml
# Conflicts:
#	docs/contributing/design/services.md
#	plugins/lookup/applications_current_play.py
#	plugins/lookup/service.py
#	roles/sys-stk-backend/lookup_plugins/service_should_load.py
#	roles/sys-stk-backend/tasks/_load_service.yml
#	roles/sys-stk-backend/vars/main.yml
#	roles/sys-svc-compose/templates/base.yml.j2
#	roles/sys-svc-mail/tasks/01_core.yml
#	roles/sys-utils-service-loader/tasks/load_frontend_service.yml
#	tests/unit/plugins/lookup/test_applications_current_play.py
#	tests/unit/plugins/lookup/test_service.py
#	tests/unit/roles/sys-stk-backend/lookup_plugins/test_service_should_load.py
2026-04-15 23:59:54 +02:00
Environment TestandClaude Opus 4.6 5703a94956 feat(web-app-nextcloud): assert HPB signaling and recording backend positive version markers
Beyond the existing error-string absence check, require the Talk admin page
to render at least two "OK: Running version: X" markers after the test
buttons are clicked. Those markers come from the auto-run reachability
checks that spreed fires on mount for the HPB signaling server and the
recording backend. TURN/STUN are left to the error-absence check because
the Playwright container can't rely on WebRTC UDP reachability to coturn.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 23:58:42 +02:00
kevinveenbirkenbachandClaude Opus 4.6 b70a783423 refactor(lookups): migrate to runtime applications/users lookups
Replaces inline `applications`/`users` merging with dedicated lookup
plugins and runtime hydration. Introduces `add_csp_hash` filter,
integrates sort into `find_dock_val_by_bkp_entr`, splits the Keycloak
one-shot realm import into `05a_realm_import_run.yml`, and fixes the
Mastodon administrator task YAML. Removes obsolete `csp_hashes` filter,
`sys-token-store` Jinja filter, and empty CLI setup modules.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 23:44:19 +02:00
Prageeth Panicker d12922aba1 fix(web-app-decidim): fix organization host and selector issues
- Set organization host to match DECIDIM_BASE_URL domain on every deploy
- Use state: attached for session_user_email waitFor
- Root cause: Decidim redirected to /system/admins/sign_in when org host
  did not match the access domain, causing #session_user_email not to exist
2026-04-15 21:00:46 +00:00
Environment TestandClaude Opus 4.6 176340db3b chore(claude): allow direct script exec and chmod under scripts/
Adds `Bash(scripts/*)` so repository helper scripts can be invoked
directly by path (shebang-based), required by inner-loop workflows
such as the Playwright spec rerunner. Adds `Bash(chmod +x scripts/*)`
so newly added scripts can be made executable without approval prompts.

Documents both entries in docs/contributing/tools/agents/claude.md
next to the existing `bash scripts/*` and `source scripts/*` rows.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 22:39:58 +02:00
Environment TestandClaude Opus 4.6 e24715adbe feat(web-app-nextcloud): click Talk test-server buttons and verify no error
Extend the Talk admin Playwright check to also click every "Test server" /
"Test this server" button on the admin page and fail if any of the known
spreed error strings (Cannot connect, No working ICE, Server seems to be a
Signaling server, Testing server seems to be broken) appear afterwards. This
verifies the HPB signaling / STUN / TURN endpoints are actually reachable,
not only that the configured values are rendered.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 22:02:32 +02:00
Environment TestandClaude Opus 4.6 e4de893368 fix(web-app-nextcloud): SSO-only Talk admin spec and safer plugin config defaults
Rewrite loginToStandaloneNextcloud to drive the OIDC flow (Nextcloud -> Keycloak
-> Nextcloud) instead of the native credential form, which is hidden by
oidc_login_hide_password_form. Add section-divider and WHY comments to make the
spec easier to read.

Provide defaults for the compose.services.oidc.flavor lookup so oidc_login stays
enabled when the key is absent, and default user_ldap to enabled when the LDAP
service config is missing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 20:49:17 +02:00
Environment TestandClaude Opus 4.6 a07ef379ed chore(scripts): drop unused CA trust env pass-through from Playwright rerunner
The rendered .env already contains the deploy-time CA trust values and the
spec uses ignoreHTTPSErrors, so duplicating the Ansible task's -e wiring
never adds anything in the inner-loop case.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 20:31:03 +02:00
Environment TestandClaude Opus 4.6 53efeb7eb7 docs(agents): add Playwright Spec Loop with rerunner script
Adds the documented inner-loop workflow for iterating role-local
Playwright specs against a live stack without a full redeploy, plus
the helper script that reuses the existing staging dir, rendered .env,
and container image defaults so no new TEST_E2E_PLAYWRIGHT_* override
mechanism is introduced.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 20:22:26 +02:00
Environment TestandClaude Opus 4.6 00502ed9e6 fix(web-app-keycloak): retry bootstrap admin login until Keycloak is ready
Retries kcadm config credentials up to 30 times at 5s intervals to
tolerate the 503 window after compose up while the server is still
initializing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 19:00:28 +02:00
Environment TestandClaude Opus 4.6 c64c80cdb8 docs(agents): make .claude/settings.json the shared permission policy
Adds a Permission Model section to AGENTS.md that binds all agents
(Claude Code, Codex, Gemini, or any other) to the allow/ask/deny
entries in .claude/settings.json, even when the agent's own runtime
does not consult that file. Spells out how patterns are matched, that
deny overrides allow, that ask requires a per-conversation
confirmation, and that anything not in allow defaults to ask.

Makes .claude/settings.json the single source of truth for automated
execution policy in this repository and points to the per-entry
rationale in docs/contributing/tools/agents/claude.md.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 17:27:17 +02:00
Environment TestandClaude Opus 4.6 63c42154d2 chore(claude): allow pkill -f and pre-commit cache reads
Adds `Bash(pkill -f *)` to the allowlist so stuck background commands
(pre-commit hooks, `make test`, `git commit`) can be aborted without an
approval prompt. Broad wildcard consciously accepted — narrow per-pattern
entries required repeated allowlist edits for every new abort scenario.

Adds `Read(~/.cache/pre-commit/**)` so pre-commit's stashed patch files
can be reapplied via `git apply` after a manually killed hook run, and
uses `~` instead of a hardcoded username path.

Documents both entries in docs/contributing/tools/agents/claude.md,
including the explicit risk note that `pkill -f` with a regex can
terminate every user-owned process and should use the narrowest pattern
possible.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 17:20:44 +02:00
Environment TestandClaude Opus 4.6 8f4b0eda00 chore(dockerignore): mirror *.lock ignore from .gitignore
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 17:11:40 +02:00
Environment TestandClaude Opus 4.6 7584380573 chore(claude): generalize awk permission, drop stale entries
Replaces two over-specific `Bash(awk ...)` allowlist entries (full paths
and exact patterns that would never match again) with a single
`Bash(awk*)` entry next to `jq*`, consistent with how `grep*`, `find*`,
and `sort*` are allowed. Removes the broken `Read(//var/lib/infinito/logs/**)`
entry: `/var/lib/infinito/` is a named Docker volume defined in
compose.yml and never exists on the host, so host-scoped read access
is meaningless (and the path had a double slash).

Documents the new `awk*` entry in docs/contributing/tools/agents/claude.md
with an explicit note that awk's `system()` and `"cmd" | getline` put
it in the same risk class as the already-allowed `find -exec`.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 16:42:40 +02:00
Environment TestandClaude Opus 4.6 f0609c91a3 chore(gitignore): ignore *.lock files
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 12:54:32 +02:00