Commit Graph
214 Commits
Author SHA1 Message Date
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 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
kevinveenbirkenbach 59173f7274 Merge branch 'main' into fix/users-applications.yml 2026-04-17 00:02:48 +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
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 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 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
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
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 1f017c94e4 Merge branch 'main' into fix/users-applications.yml 2026-04-16 11:16:21 +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
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
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 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 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 a2275e6991 docs(make): pass variables after target to match Bash(make*) permission
Reorders all documented and scripted `make` invocations from the
`VAR=value make target` shell-env prefix form to the make-native
`make target VAR=value` form. GNU Make auto-exports both command-line
and inherited shell-env variables to recipe shells, so the change is
purely about command-line shape: only the make-suffix form starts with
`make` and is therefore matched by the `Bash(make*)` permission entry
in .claude/settings.json, avoiding unnecessary approval prompts for
agent runs.

Adds an explicit CLAUDE.md rule with ✅/❌ examples and the underlying
reason (permission prefix match, not Makefile semantics).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 12:28:44 +02:00
Environment TestandClaude Opus 4.6 8e57ab3ec8 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-15 11:38:03 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 2309ba8e11 chore(claude): allow Bash(wait*) for background task synchronization
Adds the shell built-in `wait` to the Claude Code allow-list so the agent
can block on background commands started via run_in_background without
prompting for operator approval. Documents the new entry in the Claude
Code settings reference.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 23:12:32 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 3b19a92390 chore(claude): allow Bash(wait*) for background task synchronization
Adds the shell built-in `wait` to the Claude Code allow-list so the agent
can block on background commands started via run_in_background without
prompting for operator approval. Documents the new entry in the Claude
Code settings reference.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 23:11:54 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 0fe7c5fd6f docs(claude): document settings permissions and restructure agent docs
- Extend .claude/settings.json with git mv, rm, cherry-pick, apply, gh run, gh api, bash -n
- Add make chmod-scripts target and document it in make.md
- Move docs/contributing/tools/agents.md to agents/common.md
- Add docs/contributing/tools/agents/README.md and claude.md with full permission reference in table format
- Fix relative links in common.md after directory move

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 20:56:37 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 5cebe3ea63 feat(ci): add CI_CANCEL_IN_PROGRESS variable and restructure branch docs
- Use vars.CI_CANCEL_IN_PROGRESS in entry-push-latest.yml so cancellation
  can be disabled per-repo without changing workflow code
- Move docs/contributing/tools/github/branch.md into branch/ subdirectory
  as security.md; add configuration.md for CI repository variables and
  README.md as directory index
- Fix all cross-references in SECURITY.md, pipeline.md, branch.md,
  pull-request.md, workflow.md, and repository.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 22:18:02 +02:00
Environment Test 212cc39052 test(external): split live registry checks
Keep live registry lookups out of the default make test flow.

Add a dedicated external suite, workflow, and docs so the check stays opt-in but still gates code CI when enabled.
2026-04-10 22:31:42 +02:00
Environment TestandClaude Sonnet 4.6 0b8e16a45d test(lint): add markdown link checker and fix all broken links
Add tests/lint/repository/test_markdown_links.py — a hard-fail lint
test that scans all git-tracked markdown files for broken relative and
repo-root-absolute links. Skips external URLs, anchor-only links, fenced
code blocks, and placeholder targets.

Apply documentation.md rules to all staged files: add emojis after
headlines in docs files, remove emojis from role README headings,
standardize Credits sections to the canonical format, remove empty
sections and orphaned sentences referring to missing documentation files,
fix raw URLs and incorrect link text across role READMEs and docs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 22:00:46 +02:00
Environment TestandClaude Sonnet 4.6 83262816a3 docs(contributing): apply documentation.md rules across all staged files
- Move emojis after headline text (CONTRIBUTING.md, actions/, design/, tools/, tests/)
- Replace em dashes with colons, semicolons, or complete sentences throughout
- Add missing emojis to all headlines in exceptions.md, principles.md, services.md, shell.md, setup.md, pull-request.md, commit.md, act.md, docker.md, pr/README.md
- Update H1 titles to reflect renamed directories (actions/, design/)
- Fix broken relative links in workflow.md after directory moves
- Fix full-path link texts in services.md (style.css.md, javascript.js.md)
- Fix broken principles.md link to lint.md after testing/ → actions/testing/ move

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 21:06:17 +02:00
Environment Test 80fe5e3846 docs: add scope README docs under docs
- document docs README purpose and scope in a dedicated SPOT
- add scope-focused README.md files across docs directories
- remove lint rule that banned README.md files under docs
2026-04-10 17:23:10 +02:00
Environment TestandClaude Sonnet 4.6 5c1a963d30 docs(tools): restructure security and framework docs, add cleanup workflow
- Move flow/security/ghcr.md to tools/ghcr/authentication.md
- Move flow/security/mirror-cleanup.md to tools/ghcr/cleanup.md
- Move flow/security/branch.md to tools/github/branch.md
- Move flow/security/repository.md to tools/github/repository.md
- Move code/frameworks/ansible.md to tools/ansible.md
- Merge code/frameworks/Makefile.md into tools/make.md and extract file rules to artefact/files/makefile.md
- Rename tools/makefile.md to tools/make.md
- Add .github/workflows/images-mirror-cleanup.yml for manual GHCR cleanup
- Apply documentation.md standards: emojis on headlines, no em dashes, filename link text
- Fix all cross-references broken by directory restructuring

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 16:31:22 +02:00
Environment TestandClaude Sonnet 4.6 6c8547c6a4 feat(skills): add agent skills install/update pipeline and caveman docs
- Add scripts/install/skills/install.sh to restore skills from
  skills-lock.json via npx skills experimental_install
- Add scripts/install/skills/update.sh to update all skills by
  re-running skills add for each source in skills-lock.json
- Add make install-skills and make update-skills targets
- Add .github/workflows/update-skills.yml for daily automated updates
  matching Dependabot schedule (00:00 UTC), opens PR on lock changes
- Add docs/agents/meta/caveman.md as SPOT for caveman mode, startup
  notification, and token-budget tier progression
- Update AGENTS.md with RFC 2119-compliant skills installation check
- Update docs/agents/action/commit.md: replace ALWAYS with MUST
- Update pyproject.toml: respect-gitignore = true, exclude .agents
- Track skills-lock.json and add .agents to .gitignore

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 12:54:43 +02:00
Environment TestandClaude Sonnet 4.6 83f7010e3b feat(autoformat): add make autoformat target with dedicated script
Adds scripts/lint/autoformat.sh that checks tool availability before
running ruff, shfmt, and shellcheck autofixes. Updates Makefile with
the new autoformat target, documents it in makefile.md, and adds a
commit.md rule requiring autoformat to be run before every commit.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 11:49:56 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 821c3c53b6 feat(pre-commit): introduce pre-commit hook enforcement and modular environment test suite
- Add .pre-commit-config.yaml running make test on non-doc changes
- Add pre-commit to pyproject.toml dev dependencies
- Add scripts/install/pre-commit.sh for hook registration
- Add install-python-dev Makefile target; wire into environment-bootstrap
- Rename setup-development → mark-development (env.ci override marker)
- Refactor scripts/tests/environment.sh into modular 00–10 scripts with orchestrator
- Add 09_commit.sh validating pre-commit enforcement and --no-verify bypass
- Update docs/agents/action/commit.md and testing.md for new hook behavior
- Update makefile.md, setup.md, installation.md accordingly

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-08 16:58:24 +02:00
kevinveenbirkenbach 862493f4e2 Refactor network stack refresh helpers 2026-03-31 23:55:35 +02:00
kevinveenbirkenbach 03c58e24bf Refine IPv6 disable flow for local development 2026-03-31 23:33:14 +02:00
kevinveenbirkenbach b199d08745 docs(workflows): clarify act matrix filtering 2026-03-30 20:29:28 +02:00
kevinveenbirkenbachandClaude Sonnet 4.6 10b889e76f refactor(deploy): single deploy-fresh-purged-apps target with FULL_CYCLE flag
Consolidates into one target. FULL_CYCLE defaults to false (deploy only);
set FULL_CYCLE=true for deploy + update pass. Extracts run_pass function
in fresh-purged-app.sh to eliminate duplicated init+deploy logic. Updates
makefile.md, playwright.md, iteration.md, and environment.sh with correct
FULL_CYCLE usage.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 17:14:44 +02:00