Commit Graph
14682 Commits
Author SHA1 Message Date
kevinveenbirkenbach 243eb1db68 fix(web-app-friendica): run console from Friendica workdir via absolute path
docker exec resolves argv[0] against the container's default WORKDIR
instead of the Friendica app dir, so 'bin/console' fails with
"OCI runtime exec failed: no such file or directory". Add --workdir and
invoke console via its absolute path so the addon sync lands
deterministically regardless of the container's default cwd.
2026-04-17 22:15:37 +02:00
kevinveenbirkenbach d96dbd1cfe fix(web-app-bigbluebutton): retry ALTER USER past compose restart race
Postgres inside the bbb compose stack is briefly unavailable while the
container restarts after the password sync triggers handler reloads.
The single-shot psql call then fails with "connection refused" and the
whole play aborts. Add retries/until so the sync waits through the
transient shutdown window before failing.
2026-04-17 22:11:56 +02:00
kevinveenbirkenbachandClaude Opus 4.7 d22b111017 docs(claude): tighten CLAUDE.md, add tail -f hint rule
Collapse Permission State Announcement from the four-item enumeration
to a one-paragraph rule (sandbox paths + allow/ask/deny counts). Tighten
the multi-statement ban while keeping the anti-loophole clause for
causally-dependent chains. Drop the stale curl/gh api example from the
ask-list pointer. Add a new rule: when a command streams output to a
/tmp/<name>.log, announce the concrete tail -f command so the operator
can follow live.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 21:27:10 +02:00
kevinveenbirkenbachandClaude Opus 4.7 12f43f70ac docs(agents): mandate FULL_CYCLE=true for fresh-purged deploys
Flip the default so every make deploy-fresh-purged-apps invocation in
the agent Role Loop and Playwright Spec Loop carries FULL_CYCLE=true.
Pass 1 failure aborts via set -euo pipefail before pass 2 runs, so the
flag is free on the failure path and is the only verification that the
update code path still works on the success path.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 21:27:10 +02:00
kevinveenbirkenbachandClaude Opus 4.7 2a1dfc04e3 chore(claude): generalize gh run/issue allow patterns
Collapse six literal XDG_CACHE_HOME=/tmp/gh-cache gh run/issue list
allow entries into XDG_CACHE_HOME=* gh run list *, XDG_CACHE_HOME=*
gh issue list *, gh run *, and gh issue *. Plain gh run * / gh issue *
are safe because every mutating verb is caught by gh * <verb>* ask or
gh issue transfer* deny. Env-prefix variants stay narrow (no broader
than list) because env prefix bypasses subcommand ask/deny patterns.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 21:27:10 +02:00
kevinveenbirkenbachandClaude Opus 4.7 297e8e0769 chore(claude): allow gh api *, ask mutation flags
Allow read-only gh api GETs (plus XDG_CACHE_HOME=* prefix variant) so
log-fetch invocations with env prefix + redirect stop prompting. Route
every implicit-POST shape through ask: -f/-F/--field/--raw-field/--input
body flags and graphql*. Path-based deny rules keep precedence.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 21:27:10 +02:00
kevinveenbirkenbachandClaude Opus 4.7 6f9dfb22bf docs(claude): tighten CLAUDE.md, add tail -f hint rule
Collapse Permission State Announcement from the four-item enumeration
to a one-paragraph rule (sandbox paths + allow/ask/deny counts). Tighten
the multi-statement ban while keeping the anti-loophole clause for
causally-dependent chains. Drop the stale curl/gh api example from the
ask-list pointer. Add a new rule: when a command streams output to a
/tmp/<name>.log, announce the concrete tail -f command so the operator
can follow live.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 20:57:18 +02:00
kevinveenbirkenbachandClaude Opus 4.7 c36ec1a378 docs(agents): mandate FULL_CYCLE=true for fresh-purged deploys
Flip the default so every make deploy-fresh-purged-apps invocation in
the agent Role Loop and Playwright Spec Loop carries FULL_CYCLE=true.
Pass 1 failure aborts via set -euo pipefail before pass 2 runs, so the
flag is free on the failure path and is the only verification that the
update code path still works on the success path.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 20:41:46 +02:00
kevinveenbirkenbachandClaude Opus 4.7 0778631aa6 chore(claude): generalize gh run/issue allow patterns
Collapse six literal XDG_CACHE_HOME=/tmp/gh-cache gh run/issue list
allow entries into XDG_CACHE_HOME=* gh run list *, XDG_CACHE_HOME=*
gh issue list *, gh run *, and gh issue *. Plain gh run * / gh issue *
are safe because every mutating verb is caught by gh * <verb>* ask or
gh issue transfer* deny. Env-prefix variants stay narrow (no broader
than list) because env prefix bypasses subcommand ask/deny patterns.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 20:17:24 +02:00
kevinveenbirkenbachandClaude Opus 4.7 fab538b6d3 chore(claude): allow gh api *, ask mutation flags
Allow read-only gh api GETs (plus XDG_CACHE_HOME=* prefix variant) so
log-fetch invocations with env prefix + redirect stop prompting. Route
every implicit-POST shape through ask: -f/-F/--field/--raw-field/--input
body flags and graphql*. Path-based deny rules keep precedence.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 19:49:54 +02:00
kevinveenbirkenbach 71163d84d8 Merge branch 'main' into fix/free-disk-space/138 2026-04-17 19:07:53 +02:00
kevinveenbirkenbachandClaude Opus 4.7 a7cd24b9cb docs(actions): add SPOT catalog and push-trigger-pull procedure
Centralise the full GitHub Actions workflow catalog in
docs/contributing/tools/actions.md as the single source of truth, link
pipeline.md and workflow.md to it, and introduce
docs/agents/action/push-trigger-pull.md as the authoritative procedure
for the push to draft CI to ready-for-review loop. Retire the stale
flat docs/contributing/tools/agents/claude.md and drop docs README
page-inventories that violate the readme_md.md scope rule.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 17:40:28 +02:00
kevinveenbirkenbachandClaude Opus 4.7 7218af12a8 docs(actions): add SPOT catalog and push-trigger-pull procedure
Centralise the full GitHub Actions workflow catalog in
docs/contributing/tools/actions.md as the single source of truth, link
pipeline.md and workflow.md to it, and introduce
docs/agents/action/push-trigger-pull.md as the authoritative procedure
for the push to draft CI to ready-for-review loop. Retire the stale
flat docs/contributing/tools/agents/claude.md and drop docs README
page-inventories that violate the readme_md.md scope rule.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 17:38:33 +02:00
kevinveenbirkenbachandClaude Opus 4.7 13d36a1479 docs(agents): tighten AGENTS.md and CLAUDE.md for parser clarity
AGENTS.md:
- Replace "SPOT" with "single source of truth"
- Split loading rules: CONTRIBUTING.md, docs/contributing/ walk, docs/agents/ walk — each an explicit MUST
- Add Tool-Specific Extensions section binding Claude Code → CLAUDE.md, Gemini CLI → GEMINI.md
- Extend reload trigger to cover tool-specific extension file
- Make sandbox.network bullet prescriptive (replace "govern" with conditional MUSTs)
- Drop architectural description from permission model intro
- Fix Temporary Files: treat settings.json as SPOT, stop duplicating allowWrite contents
- Collapse redundant Role-Specific bullets

CLAUDE.md:
- Strip rhetorical amplifiers; rule-form only
- Forbid multi-statement chains with any separator (;, newline, &&, ||), subshells and brace groups included
- Forbid shell heredoc for file creation; direct to Write/Edit
- Drop recap bullets already covered by explicit rules above

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 14:12:24 +02:00
kevinveenbirkenbachandClaude Opus 4.7 75d229a5f1 chore(claude): allow PYTHONPATH=* python *
Mirrors the XDG_CACHE_HOME=* gh run view * precedent: leading env-prefixes fall out of the auto-allow heuristic. Narrow namespace, sandbox boundaries still bound every write / read / network call.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 14:12:24 +02:00
kevinveenbirkenbachandClaude Opus 4.7 ed34db2e8c chore(claude): allow tail *
Parallel to head *: tail is the right-hand-side twin that lives after && / | and would otherwise decline auto-allow.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 14:12:23 +02:00
kevinveenbirkenbachandClaude Opus 4.7 b125bbd360 docs(agents): tighten AGENTS.md and CLAUDE.md for parser clarity
AGENTS.md:
- Replace "SPOT" with "single source of truth"
- Split loading rules: CONTRIBUTING.md, docs/contributing/ walk, docs/agents/ walk — each an explicit MUST
- Add Tool-Specific Extensions section binding Claude Code → CLAUDE.md, Gemini CLI → GEMINI.md
- Extend reload trigger to cover tool-specific extension file
- Make sandbox.network bullet prescriptive (replace "govern" with conditional MUSTs)
- Drop architectural description from permission model intro
- Fix Temporary Files: treat settings.json as SPOT, stop duplicating allowWrite contents
- Collapse redundant Role-Specific bullets

CLAUDE.md:
- Strip rhetorical amplifiers; rule-form only
- Forbid multi-statement chains with any separator (;, newline, &&, ||), subshells and brace groups included
- Forbid shell heredoc for file creation; direct to Write/Edit
- Drop recap bullets already covered by explicit rules above

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 14:08:07 +02:00
kevinveenbirkenbachandClaude Opus 4.7 741d137cdc chore(claude): allow PYTHONPATH=* python *
Mirrors the XDG_CACHE_HOME=* gh run view * precedent: leading env-prefixes fall out of the auto-allow heuristic. Narrow namespace, sandbox boundaries still bound every write / read / network call.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 13:29:06 +02:00
kevinveenbirkenbachandClaude Opus 4.7 d24df34b8f chore(claude): allow tail *
Parallel to head *: tail is the right-hand-side twin that lives after && / | and would otherwise decline auto-allow.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 13:23:57 +02:00
kevinveenbirkenbachandClaude Opus 4.7 77bd915195 chore(claude): allow pkill *, forbid ; statement chains
- Allow Bash(pkill *) so host-process termination (stuck ansible/make runs) does not prompt
- Add explicit CLAUDE.md rule forbidding ; multi-statement chains (same root cause as loop rule: auto-allow heuristic declines compound lines)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 13:09:06 +02:00
kevinveenbirkenbachandClaude Opus 4.7 d3e524dbca chore(claude): allow pkill *, forbid ; statement chains
- Allow Bash(pkill *) so host-process termination (stuck ansible/make runs) does not prompt
- Add explicit CLAUDE.md rule forbidding ; multi-statement chains (same root cause as loop rule: auto-allow heuristic declines compound lines)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 13:04:25 +02:00
kevinveenbirkenbachandClaude Opus 4.7 ff7512c1bc docs(claude): add security.md, allow docker *, gate docker synonyms
- Allow Bash(docker *) under test-only host assumption; keep run/build/push/login in ask
- Catch synonyms: docker container run, docker image build, docker buildx build, docker image push
- New security.md enumerates 9 trust assumptions as single source for rationale
- Shorten settings.md rationales to link by assumption number (DRY)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 11:39:14 +02:00
kevinveenbirkenbachandClaude Opus 4.7 a9a5cf0c94 docs(claude): add security.md, allow docker *, gate docker synonyms
- Allow Bash(docker *) under test-only host assumption; keep run/build/push/login in ask
- Catch synonyms: docker container run, docker image build, docker buildx build, docker image push
- New security.md enumerates 9 trust assumptions as single source for rationale
- Shorten settings.md rationales to link by assumption number (DRY)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 11:35:54 +02:00
kevinveenbirkenbachandClaude Opus 4.7 76ad0e7081 chore(claude): refine Bash permissions (echo/head allow, loops deny, drop /tmp/* scoping)
- Add Bash(echo *) and Bash(head *) to allow list for chained stdout/read primitives.
- Move Bash(for *)/Bash(while *)/Bash(until *) to deny: hard-enforces the
  CLAUDE.md loop-forbidden rule so violations fail fast and force refactor
  to single-command / grep / xargs forms.
- Drop redundant /tmp/* scoping from Bash(XDG_CACHE_HOME=* gh run view *)
  and Bash(tee *); sandbox.filesystem.allowWrite is the authoritative
  write boundary, so path restrictions on the allow rule added only
  maintenance, no safety.
- Update docs/contributing/tools/agents/claude/settings.md to match.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 09:47:17 +02:00
kevinveenbirkenbachandClaude Opus 4.7 63df1ed34a chore(claude): refine Bash permissions (echo/head allow, loops deny, drop /tmp/* scoping)
- Add Bash(echo *) and Bash(head *) to allow list for chained stdout/read primitives.
- Move Bash(for *)/Bash(while *)/Bash(until *) to deny: hard-enforces the
  CLAUDE.md loop-forbidden rule so violations fail fast and force refactor
  to single-command / grep / xargs forms.
- Drop redundant /tmp/* scoping from Bash(XDG_CACHE_HOME=* gh run view *)
  and Bash(tee *); sandbox.filesystem.allowWrite is the authoritative
  write boundary, so path restrictions on the allow rule added only
  maintenance, no safety.
- Update docs/contributing/tools/agents/claude/settings.md to match.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 09:46:21 +02:00
kevinveenbirkenbachandClaude Opus 4.7 918d560587 chore(claude): allow Bash(make *) and Bash(tee /tmp/*)
Why: `make` invocations and `… 2>&1 | tee /tmp/<log>` pipelines regularly
fall outside the sandbox auto-allow heuristic and trigger unnecessary
approval prompts. Adding targeted allow entries removes the friction
while keeping the write scope of `tee` bounded to /tmp.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 09:12:39 +02:00
kevinveenbirkenbachandClaude Opus 4.7 3f15165771 docs(claude): forbid shell for/while loops, mandate grep for content search
Why: per-file grep wrapped in loops repeatedly triggered sandbox approval
prompts. Tighten CLAUDE.md to make the loop ban absolute and point to
grep / the Grep tool as the required alternative.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 09:12:38 +02:00
kevinveenbirkenbachandClaude Opus 4.7 fa10c3c9bc test(e2e): add playwright specs for keycloak, matomo, openwebui, discourse + extend dashboard
Closes Verification checkboxes in requirement 003. Each spec exercises
the `lookup('applications')` + `lookup('users')` pathway end-to-end:
login via lookup('users'), OIDC round-trip from dashboard (where the
app supports it), canonical-domain DOM assertion, and a full CSP
assertion covering every directive emitted by csp_filters.build_csp_header
(15 directives), meta-parity, enforced policy (not Report-Only), and
zero securitypolicyviolation events.

The dashboard spec is extended in place with the CSP + canonical-domain
assertions while keeping its existing login/logout coverage.

rerun-spec.sh is pointed at the Jinja template + the staged copy of
package.json (the repo has templates/package.json.j2, not files/package.json),
so the inner spec-only iteration loop works without re-deploying.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 08:53:47 +02:00
Prageeth Panicker 71700fe868 fix(web-app-decidim): address all reviewer feedback
- Remove sidekiq from config (disabled service)
- Remove biber user creation - users access via OIDC
- Refactor tasks/main.yml to use sys-stk-full with flush_handlers pattern
- Fix database service key: 'database' -> 'postgres'
- Restore dmbs_excl.yml.j2 include in compose template
- Add subnet to 10_networks.yml to fix bare default network key
- Remove SSL cert env vars (handled by NGINX proxy)
- Keep DECIDIM_FORCE_SSL for correct URL generation
- Use robust selectors in Playwright (getByLabel + input[type=password])
- Remove biber from Playwright tests and env template
2026-04-17 06:03:20 +00:00
kevinveenbirkenbach 292cdcd5f2 Merge branch 'main' into fix/free-disk-space/138 2026-04-17 03:59:11 +02:00
kevinveenbirkenbachandClaude Opus 4.7 fbc934ba1a chore(claude): allow Bash(make *) and Bash(tee /tmp/*)
Why: `make` invocations and `… 2>&1 | tee /tmp/<log>` pipelines regularly
fall outside the sandbox auto-allow heuristic and trigger unnecessary
approval prompts. Adding targeted allow entries removes the friction
while keeping the write scope of `tee` bounded to /tmp.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 02:48:35 +02:00
kevinveenbirkenbachandClaude Opus 4.7 4dfd30d142 docs(requirements/003): add Clarifications section and refine CSP scope
Narrow CSP directive list to what csp_filters.build_csp_header actually
emits today, and record the binding implementation decisions (personas,
realms, iteration mode, batching, credential sources) under a new
Clarifications subsection so they supersede ambiguous checkbox reads.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 02:41:17 +02:00
kevinveenbirkenbachandClaude Opus 4.7 ac417eb0f2 docs(claude): forbid shell for/while loops, mandate grep for content search
Why: per-file grep wrapped in loops repeatedly triggered sandbox approval
prompts. Tighten CLAUDE.md to make the loop ban absolute and point to
grep / the Grep tool as the required alternative.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 02:39:08 +02:00
kevinveenbirkenbachandClaude Opus 4.7 7d8b0a0235 chore(pre-commit): run make test-lint on md-only commits
Markdown-only commits previously skipped every hook because the single
make-test hook excludes .md/.rst/.txt. Add a guarded make-test-lint hook
that triggers only when no non-md file is staged, so md-only commits
still run lint. Mixed commits stay covered by make test via its test-lint
dependency.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 01:48:24 +02:00
kevinveenbirkenbachandClaude Opus 4.7 4f7dfddb27 docs(requirements/003): extend Verification with E2E flow, CSP, and CI gate specs
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 01:30:38 +02:00
kevinveenbirkenbachandClaude Opus 4.7 2ae1d40e38 chore(pre-commit): run make test-lint on md-only commits
Markdown-only commits previously skipped every hook because the single
make-test hook excludes .md/.rst/.txt. Add a guarded make-test-lint hook
that triggers only when no non-md file is staged, so md-only commits
still run lint. Mixed commits stay covered by make test via its test-lint
dependency.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 00:48:17 +02:00
kevinveenbirkenbachandClaude Opus 4.7 f8829c7129 docs(requirements/003): add lookup-only contributor docs and tick off criteria
Create contributor rules for the applications and users lookup plugins so
contributors understand the lookup-only access pattern and are not tempted
to reintroduce inline data in the removed group_vars files. Mark all 34
acceptance criteria in requirement 003 as satisfied.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 00:36:13 +02:00
kevinveenbirkenbach 59173f7274 Merge branch 'main' into fix/users-applications.yml 2026-04-17 00:02:48 +02:00
kevinveenbirkenbachandClaude Opus 4.6 f90c5960c5 fix(docker_cards): use get_merged_applications for reliable iframe lookup
Raw `variables.get("applications")` returns unrendered placeholder inside
nested template lookups, causing get_app_conf to silently return False for
all apps. Switch to get_merged_applications which merges role defaults with
inventory overrides, fixing iframe rendering for mailu and other apps.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 23:49:05 +02:00
kevinveenbirkenbachandClaude Opus 4.7 cb3d0399bb chore(claude): add gh run list + grep + wc allows, sort permissions.allow
Add explicit Bash allow entries for command shapes that slip past the
sandbox auto-allow heuristic: `gh run list *` (jq pipes in --jq string
confuse the parser), `grep *` (to back the new CLAUDE.md rule against
for-loops around per-file greps), and `wc *` (read-only, any flag).

Reorder permissions.allow strictly ASC so the Bash entries live
alongside the other allow rules in sort order, matching how ask/deny
are laid out. Document the three new entries in settings.md and add
the "prefer flat commands" guidance to CLAUDE.md Code Execution.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-16 23:45:01 +02:00
kevinveenbirkenbachandClaude Opus 4.7 7e246e0806 chore(claude): allow gh run view + wc -l bash workarounds
Add explicit Bash allow entries for command shapes where sandbox
auto-allow does not fire reliably (env-variable prefix, output
redirect, &&-chained subcommands). Document the rationale in the
settings reference so future additions follow the same pattern.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-16 23:45:00 +02:00
kevinveenbirkenbachandClaude Opus 4.7 de131678e4 chore(claude): add gh run list + grep + wc allows, sort permissions.allow
Add explicit Bash allow entries for command shapes that slip past the
sandbox auto-allow heuristic: `gh run list *` (jq pipes in --jq string
confuse the parser), `grep *` (to back the new CLAUDE.md rule against
for-loops around per-file greps), and `wc *` (read-only, any flag).

Reorder permissions.allow strictly ASC so the Bash entries live
alongside the other allow rules in sort order, matching how ask/deny
are laid out. Document the three new entries in settings.md and add
the "prefer flat commands" guidance to CLAUDE.md Code Execution.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-16 23:29:53 +02:00
kevinveenbirkenbachandClaude Opus 4.7 9e073c2687 chore(claude): allow gh run view + wc -l bash workarounds
Add explicit Bash allow entries for command shapes where sandbox
auto-allow does not fire reliably (env-variable prefix, output
redirect, &&-chained subcommands). Document the rationale in the
settings reference so future additions follow the same pattern.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-16 23:15:31 +02:00
kevinveenbirkenbach a964856fc8 Merge branch 'main' into fix/free-disk-space/138 2026-04-16 22:56:08 +02:00
kevinveenbirkenbach 42e28e6263 docs(agents/cheatsheet): add operator prompt cheatsheet for agent workflows
Copy-paste prompt templates with selection matrix routing each workflow
to its SPOT procedure file. Covers development, iteration, testing,
refactor, debug (pipeline/local/log), commit, PR, and requirements.
2026-04-16 22:55:30 +02:00
kevinveenbirkenbachandClaude Opus 4.7 48ccda7288 docs(agents/debug): split debug runbook into local/pipeline/log scopes
Replace the single docs/agents/action/debug.md with a debug/ directory
hosting three distinct workflows: local-deploy debugging, fully
automated CI pipeline triage via gh, and inspection of operator-placed
log files. Add full pipeline triage flow (enumerate failed runs and
children, classify branch-caused vs external, dedup-then-create issues
on s.infinito.nexus, iterate per role batches with APPS cap, push the
fix branch, file follow-up issues for unresolved root causes).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-16 22:34:41 +02:00
kevinveenbirkenbachandClaude Opus 4.7 ee30f6d446 chore(claude): tighten gh permission rules and lint settings.json sort order
Consolidate gh ask/deny entries via namespace-wildcard patterns, cover
compound subcommands (item-*, field-*, mark-template*), and add a lint
test that enforces ASCII-sorted permission and sandbox arrays in
.claude/settings.json.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-16 21:47:14 +02:00
kevinveenbirkenbachandClaude Opus 4.7 25f01ccfc4 chore(claude): allow *.windows.net in sandbox network
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-16 21:47:13 +02:00
kevinveenbirkenbachandClaude Opus 4.7 faf73471fa chore(claude): tighten gh permission rules and lint settings.json sort order
Consolidate gh ask/deny entries via namespace-wildcard patterns, cover
compound subcommands (item-*, field-*, mark-template*), and add a lint
test that enforces ASCII-sorted permission and sandbox arrays in
.claude/settings.json.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-16 21:41:48 +02:00
kevinveenbirkenbachandClaude Opus 4.6 e2016cd320 fix(users-applications): unify runtime lookup of users/applications
Lookups for 'service', 'service_registry', and 'applications_current_play'
always re-derive the merged applications mapping from inventory+role defaults
instead of trusting the passed kwargs, which could be shadowed or left
unrendered by nested template evaluations.

Dashboard/keycloak tests now consume the administrator password via
lookup('users','administrator').password so the rendered Playwright .env
matches the realm user provisioned by Ansible. Remove the hardcoded
DASHBOARD_KEYCLOAK_TEST_LOGIN_PASSWORD / KEYCLOAK_LOCAL_REALM_ADMIN_PASSWORD
overrides that previously masked the mismatch.

run_one.yml: drop users/applications from the template vars block. Those
entries created a shadowing context that broke nested lookup('users', ...)
inside lookup('template', ...).

utils/runtime_lookup_data: decrypt Ansible 2.19 EncryptedString values at
the lookup boundary and try templar rendering before falling back to
aggregated defaults when override mappings arrive as placeholders.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 21:21:09 +02:00