Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
330 commits
Select commit Hold shift + click to select a range
bbad844
docs: add QA report for the bouncer registration changes
Wikid82 Nov 3, 2026
f38e04f
fix: keep a working CrowdSec bouncer key and register through the sha…
Wikid82 Nov 3, 2026
76e690c
fix: update Caddy version to 2.11.8 in Dockerfile
Wikid82 Nov 4, 2026
e81d368
chore(docker): refresh bundled proxy toolchain image
Wikid82 Nov 4, 2026
b4d3526
chore(docker): refresh bundled proxy toolchain image (#1831)
Wikid82 Nov 4, 2026
38d911e
test: pin the CrowdSec rollback and archive limit behaviour
Wikid82 Nov 4, 2026
e35ca7c
fix: keep a failed CrowdSec import from leaving the configuration fol…
Wikid82 Nov 4, 2026
656da91
fix(security): harden input handling in the CrowdSec API
Wikid82 Nov 4, 2026
e7cae43
docs: describe the CrowdSec import limits and recovery
Wikid82 Nov 4, 2026
41fbbdc
fix: allow for archive headers in the import size check
Wikid82 Nov 4, 2026
67bc47e
fix: show a clear message when an import upload is too large
Wikid82 Nov 4, 2026
e6579c5
fix: keep the import error wording and cover the remaining archive fa…
Wikid82 Nov 4, 2026
0a2e1bc
test: cover the remaining CrowdSec page branches
Wikid82 Nov 4, 2026
30426f5
test: update the CrowdSec import refusal checks for the new limits
Wikid82 Nov 4, 2026
3394e98
docs: add QA report for the CrowdSec import changes
Wikid82 Nov 4, 2026
ec1ff4a
fix: stop key-leak log test colliding with random temp-dir digits
Wikid82 Nov 4, 2026
23a3be0
chore: update model from sonnet to opus in planning and supervisor ag…
Wikid82 Nov 4, 2026
3e4dd4b
fix: keep a failed CrowdSec import from leaving the configuration fol…
Wikid82 Nov 4, 2026
20271e1
chore: update lucide-react to version 1.68.0
Wikid82 Nov 4, 2026
6d817cb
chore: update typescript version to 7.1.0-dev.20261104.1
Wikid82 Nov 4, 2026
7565b65
fix(ci): enhance grype scan handling to tolerate specific exit codes
Wikid82 Nov 4, 2026
ed8f292
chore(deps): update backend indirect Go dependencies
Wikid82 Nov 4, 2026
6e04173
chore(security): ignore unfixed HIGH SQLite CVEs in Alpine image
Wikid82 Nov 4, 2026
c76283a
chore(ci): drop scan ignore lists from the toolchain key
Wikid82 Nov 4, 2026
1d12128
chore: allow capping semgrep workers in pre-commit hook
Wikid82 Nov 4, 2026
d24b01b
fix(ci): never skip the Docker build on manual dispatch
Wikid82 Nov 4, 2026
1609246
chore(docker): refresh bundled proxy toolchain image
Wikid82 Nov 4, 2026
0baa282
chore(docker): refresh bundled proxy toolchain image (#1835)
Wikid82 Nov 4, 2026
e6f1172
chore(models): update agent models to 'best' for planning, QA securit…
Wikid82 Nov 4, 2026
d798277
chore(agents): reduce dev-agent test and lint usage
Wikid82 Nov 4, 2026
fbeb8da
fix: read the CrowdSec engine address from one place
Wikid82 Nov 4, 2026
0785150
fix: refuse a CrowdSec preset apply at once while a hub restore runs
Wikid82 Nov 4, 2026
765d825
fix: try the hub mirror when a single hub item download fails
Wikid82 Nov 4, 2026
bc8e4bb
fix: give a hub upgrade the full first time share in the hub helper
Wikid82 Nov 4, 2026
87ed593
fix: log skipped export symlinks once and check the pid before a relo…
Wikid82 Nov 4, 2026
fe04028
test: cover the CrowdSec registration log arms and the enabled-module…
Wikid82 Nov 4, 2026
e59cea7
test: make the backup service tests independent of each other
Wikid82 Nov 4, 2026
771a60b
test: assert the registered bouncer badge in the CrowdSec UI states spec
Wikid82 Nov 4, 2026
ad71a24
docs: describe the CrowdSec engine address, restore busy answer and h…
Wikid82 Nov 4, 2026
ea4cb50
docs: replace the current plan with the CrowdSec leftovers plan
Wikid82 Nov 4, 2026
deeaaf3
fix: serve test engines at the local CrowdSec address and tidy review…
Wikid82 Nov 4, 2026
ea2abc8
docs: add the QA report for the CrowdSec leftovers
Wikid82 Nov 4, 2026
126784c
fix: tidy CrowdSec engine address, restore busy answer and hub fallba…
Wikid82 Nov 4, 2026
84a4094
chore(ci): update CodeQL action versions to v4.39.3
Wikid82 Nov 4, 2026
41b4a0c
fix(ci): update CodeQL action versions to v4.39.3
Wikid82 Nov 4, 2026
5843d02
docs: plan the WAF rule sets need rules fix
Wikid82 Nov 4, 2026
64fd2d2
test: pin the rule set fixtures that carry real rules
Wikid82 Nov 4, 2026
c314ffc
fix: refuse a WAF rule set without rules
Wikid82 Nov 4, 2026
6abbb38
fix: explain a selected WAF rule set that has no rules
Wikid82 Nov 4, 2026
5fa5fae
fix: remove the WAF preset that has no rules and require rules in the…
Wikid82 Nov 4, 2026
ab1bb3d
docs: say that a WAF rule set needs rules
Wikid82 Nov 4, 2026
e1008a7
docs: stop describing a bundled OWASP rule set
Wikid82 Nov 4, 2026
e908b56
chore(deps): update @tanstack/react-query to version 5.106.0
Wikid82 Nov 4, 2026
b2c0fe1
chore: update dockerfile-non-major
renovate[bot] Nov 4, 2026
42cea39
chore(docker): sync toolchain image pin to caddy-crowdsec-8929b2ed89c…
github-actions[bot] Nov 4, 2026
99c3db4
docs: add the QA report for the WAF rule set fix
Wikid82 Nov 4, 2026
623b5d8
chore(docker): add pinned SQLite version arg to patch Alpine CVEs
Wikid82 Nov 4, 2026
6f1975b
chore: update dockerfile-non-major (#1837)
Wikid82 Nov 4, 2026
f979555
chore(deps): update @tanstack/react-query to version 5.106.0
Wikid82 Nov 4, 2026
f7f19c0
chore: update dockerfile-non-major
renovate[bot] Nov 4, 2026
e7fa07b
chore(docker): sync toolchain image pin to caddy-crowdsec-8929b2ed89c…
github-actions[bot] Nov 4, 2026
cf753ff
chore(docker): add pinned SQLite version arg to patch Alpine CVEs
Wikid82 Nov 4, 2026
206ecd6
fix(ci): increase timeout for golangci-lint in quality checks
Wikid82 Nov 5, 2026
1f37a0c
chore: update NPM version to 12.2.2 in Dockerfile
Wikid82 Nov 5, 2026
e5e186a
chore: update npm installation to use dynamic version from build argu…
Wikid82 Nov 5, 2026
80407fb
chore(docker): update SQLite version to i3.53.4-r0
Wikid82 Nov 5, 2026
74070ab
Merge branch 'development' into fix/waf-rule-sets-need-rules
Wikid82 Nov 5, 2026
c5ccd83
chore: renew expired CodeQL cookie-secure suppression
Wikid82 Nov 5, 2026
94ec221
chore(ci): annotate blocking CodeQL gate findings with rule and location
Wikid82 Nov 5, 2026
5629dac
fix: rename test constant that tripped gosec G101
Wikid82 Nov 5, 2026
a7c1384
fix: require rules in a WAF rule set (#1838)
Wikid82 Nov 5, 2026
e8dd684
chore: update Caddy version to 2.11.9
Wikid82 Nov 5, 2026
ba1ab18
chore(docker): refresh bundled proxy toolchain image
Wikid82 Nov 5, 2026
ff52a02
chore(docker): refresh bundled proxy toolchain image (#1841)
Wikid82 Nov 5, 2026
893365f
chore(docker): remove Caddy candidate build args
Wikid82 Nov 5, 2026
271d635
chore(docker): refresh bundled proxy toolchain image
Wikid82 Nov 5, 2026
d36ded7
chore(docker): refresh bundled proxy toolchain image (#1842)
Wikid82 Nov 5, 2026
d08747b
docs: plan the security settings checks and leftovers
Wikid82 Nov 5, 2026
7559799
fix: reject out-of-range security settings values
Wikid82 Nov 5, 2026
0d54776
fix: restore only the settings a refused change touched
Wikid82 Nov 5, 2026
674505f
fix: keep the modified time of a restored security setting
Wikid82 Nov 5, 2026
57fbd4b
test: pin how each reader decides the security suite is on
Wikid82 Nov 5, 2026
1189593
refactor: read the security suite switch value one way
Wikid82 Nov 5, 2026
148436c
fix: make the break-glass disable switch the security suite off every…
Wikid82 Nov 5, 2026
120bff4
docs: describe the allowed security settings values
Wikid82 Nov 5, 2026
6e7f0b9
fix: write back blank values when a refused change is restored
Wikid82 Nov 5, 2026
b5c47db
docs: add the QA report for the security settings checks
Wikid82 Nov 5, 2026
085c7b1
fix: check security settings values and narrow the failed-apply resto…
Wikid82 Nov 5, 2026
c722a85
chore: add jsdom installation script for frontend dependencies
Wikid82 Nov 4, 2026
762a67f
chore(deps): update @tanstack/react-query to version 5.106.1
Wikid82 Nov 5, 2026
c7bf757
chore(deps): update vite to version 8.3.6
Wikid82 Nov 5, 2026
7aae98b
chore(deps): update typescript to version 7.1.0-dev.20261105.1
Wikid82 Nov 5, 2026
73f9895
chore(deps): update lucide-react to version 1.69.0
Wikid82 Nov 5, 2026
42dd172
test: redirect local key checks to mock LAPI for immediate responses
Wikid82 Nov 5, 2026
dec5840
chore(deps): update jsdom to version 31.0.0
Wikid82 Nov 5, 2026
2a8b090
fix: add the missing local-host labels to the German, Spanish, French…
Wikid82 Nov 5, 2026
015b788
test: restore security module keys through one shared snapshot after …
Wikid82 Nov 5, 2026
356cf65
test: stop a timing check and a typo from weakening the output limit …
Wikid82 Nov 5, 2026
fc8baa6
docs: correct the rate limiting, metrics and WAF notes
Wikid82 Nov 5, 2026
61ba9e9
docs: record the QA result for the security settings leftovers
Wikid82 Nov 5, 2026
41196d0
chore(deps): update Trivy version to v0.76.2 across workflows
Wikid82 Nov 5, 2026
b5e454c
fix: tidy security test helpers, translations and docs (#1849)
Wikid82 Nov 5, 2026
693859d
fix: count a host with its own WAF handler as protected in the securi…
Wikid82 Nov 5, 2026
ece1520
docs: record the QA result for the WAF status count fix
Wikid82 Nov 5, 2026
430181a
chore: update i18next and react-i18next to latest versions
Wikid82 Nov 5, 2026
a867e87
fix: count a host with its own WAF handler as protected (#1852)
Wikid82 Nov 5, 2026
3da0763
chore(deps): update go-sqlite3 to v1.14.53
Wikid82 Nov 5, 2026
77fbbb6
chore(deps): update zensical version in requirements and ensure insta…
Wikid82 Nov 5, 2026
029bfe7
docs: plan the lint sweep
Wikid82 Nov 5, 2026
c1061eb
chore: raise golangci-lint timeout for local lint targets
Wikid82 Nov 5, 2026
abef0a4
chore(frontend): fix import order, duplicate and type-only imports
Wikid82 Nov 5, 2026
5d555d5
refactor(frontend): apply unicorn and sonar lint fixes
Wikid82 Nov 5, 2026
8864d5e
test(frontend): wait for elements with findBy instead of waitFor and …
Wikid82 Nov 5, 2026
988cc13
chore(frontend): resolve unsafe and non-literal regex lint findings
Wikid82 Nov 5, 2026
3fcf505
test(frontend): fix testing-library and vitest hygiene findings
Wikid82 Nov 5, 2026
fe92812
fix: associate form labels with their controls
Wikid82 Nov 5, 2026
55e080f
fix: make clickable overlays keyboard and screen-reader accessible
Wikid82 Nov 5, 2026
20d01bd
refactor(frontend): remove effect-driven state sync in hooks and them…
Wikid82 Nov 5, 2026
967640d
refactor(frontend): derive form and dialog state instead of syncing i…
Wikid82 Nov 5, 2026
9fb4dba
chore: update Semgrep container image to version 1.184.0
Wikid82 Nov 5, 2026
3d0ade1
refactor(frontend): derive list and page state instead of syncing in …
Wikid82 Nov 5, 2026
57e827d
chore: update Playwright image to version 1.65.0
Wikid82 Nov 5, 2026
671c2f4
chore: update module github.com/aws/aws-sdk-go-v2/service/cloudwatchl…
renovate[bot] Nov 5, 2026
1c351f3
refactor(frontend): resolve remaining React compiler diagnostics
Wikid82 Nov 5, 2026
00f4105
chore: update playwright-core to version 1.65.0
Wikid82 Nov 5, 2026
3295182
chore(docker): sync toolchain image pin to caddy-crowdsec-7b8a6c0bd5a…
github-actions[bot] Nov 5, 2026
f09e7b9
chore: add a root ESLint config for the Playwright tests
Wikid82 Nov 5, 2026
c4db39c
chore: clear the root Playwright lint findings
Wikid82 Nov 5, 2026
a9e066b
chore: enforce the lint policy in lefthook and CI
Wikid82 Nov 5, 2026
deb4071
docs: describe the lint policy
Wikid82 Nov 5, 2026
1285242
docs: record the QA result for the lint sweep
Wikid82 Nov 5, 2026
6ca7a2c
chore(deps): bump @playwright/test to 1.65.0 and sync versions
Wikid82 Nov 5, 2026
f4355a0
chore(docker): update golang image digest for backend builder
Wikid82 Nov 5, 2026
2b99b88
chore: update Grype installation instructions and version to v0.121.2
Wikid82 Nov 5, 2026
8cc00bd
chore: update SYFT_VERSION to v1.57.0 in workflow files
Wikid82 Nov 5, 2026
33aef61
chore(docker): sync toolchain image pin to caddy-crowdsec-bce5079da99…
github-actions[bot] Nov 5, 2026
b824671
chore: update module github.com/aws/aws-sdk-go-v2/service/cloudwatchl…
Wikid82 Nov 5, 2026
19cd024
chore: update Semgrep container image to version 1.184.0
Wikid82 Nov 5, 2026
1b57c03
chore: update Playwright image to version 1.65.0
Wikid82 Nov 5, 2026
ca476c1
chore: update module github.com/aws/aws-sdk-go-v2/service/cloudwatchl…
renovate[bot] Nov 5, 2026
2ef5e92
chore: update playwright-core to version 1.65.0
Wikid82 Nov 5, 2026
16c161d
chore(docker): sync toolchain image pin to caddy-crowdsec-7b8a6c0bd5a…
github-actions[bot] Nov 5, 2026
f21e1e8
chore(deps): bump @playwright/test to 1.65.0 and sync versions
Wikid82 Nov 5, 2026
be7a477
chore(docker): update golang image digest for backend builder
Wikid82 Nov 5, 2026
15d710c
chore: update Grype installation instructions and version to v0.121.2
Wikid82 Nov 5, 2026
bf3cf60
chore: update SYFT_VERSION to v1.57.0 in workflow files
Wikid82 Nov 5, 2026
f4929fd
chore(docker): sync toolchain image pin to caddy-crowdsec-bce5079da99…
github-actions[bot] Nov 5, 2026
5985986
chore: update alpine docker tag to v3.24.4
renovate[bot] Nov 5, 2026
264be05
chore: add a root ESLint config for the Playwright tests
Wikid82 Nov 5, 2026
bce27a4
fix(deps): update Alpine image version to 3.24.4 in Dockerfile
Wikid82 Nov 5, 2026
3e8ca93
chore(docker): sync toolchain image pin to caddy-crowdsec-d81a5a8c75d…
github-actions[bot] Nov 5, 2026
642a122
chore(docker): sync toolchain image pin to caddy-crowdsec-d81a5a8c75d…
github-actions[bot] Nov 5, 2026
78cf5b9
Merge branch 'development' into chore/lint-sweep
Wikid82 Nov 5, 2026
29cee41
chore: restore the root lint config and ratchet after a merge conflict
Wikid82 Nov 6, 2026
308ae01
chore(frontend): order the AlertsList imports the way CI expects
Wikid82 Nov 6, 2026
fac0462
test: fill the proxy name and clean up through the API in the WAF rat…
Wikid82 Nov 6, 2026
db3c105
chore: update golang backend-builder image digest in Dockerfile
Wikid82 Nov 6, 2026
2b99092
chore: update node image digest for frontend builder in Dockerfile
Wikid82 Nov 6, 2026
143d41f
chore: update alpine docker tag to v3.24.4 (#1860)
Wikid82 Nov 6, 2026
d301400
Merge remote-tracking branch 'origin/development' into chore/lint-sweep
Wikid82 Nov 6, 2026
34c4fab
chore: update alpine image digest in Dockerfile
Wikid82 Nov 6, 2026
8d0f6e5
refactor(docker): centralize Go builder image into GOLANG_IMAGE ARG
Wikid82 Nov 6, 2026
dd51e81
chore(docker): sync toolchain image pin to caddy-crowdsec-79755fc3ad5…
github-actions[bot] Nov 6, 2026
23fc5f1
chore: enhance Dockerfile ARG tracking and toolchain grouping in reno…
Wikid82 Nov 6, 2026
95fa8f2
chore(docker): sync toolchain image pin to caddy-crowdsec-f86ad2b0a2c…
Wikid82 Nov 6, 2026
18e569b
fix(ci): skip toolchain pin sync when the branch tip moved past the b…
Wikid82 Nov 6, 2026
58a0962
chore: clear the frontend lint backlog and lint the root E2E tests (#…
Wikid82 Nov 6, 2026
3e3b5f3
chore: correct REPO_ROOT path resolution in charon_dep_update.sh
Wikid82 Nov 6, 2026
6297cf0
chore: propagate changes from main into development (#1864)
Wikid82 Nov 6, 2026
c623765
chore: update lucide-react to version 1.70.0
Wikid82 Nov 6, 2026
a9192d9
chore: update typescript version to 7.1.0-dev.20261106.1
Wikid82 Nov 6, 2026
ce65319
chore: update tailwindcss and related packages to version 4.3.5
Wikid82 Nov 6, 2026
d04b2a7
chore(ci): bump step-security/harden-runner to v2.22.4
Wikid82 Nov 6, 2026
dcce994
chore(docker): switch Renovate tracking from repology to apk
Wikid82 Nov 6, 2026
e023f53
chore: update eslint-plugin-import-x to version 4.18.0 and add update…
Wikid82 Nov 6, 2026
3626146
chore: update @tanstack/react-query to version 5.107.0
Wikid82 Nov 6, 2026
c5fe317
docs: add what's new pipeline and build versions spec
Wikid82 Nov 6, 2026
71ad816
test: pin what's new e2e runs to unversioned dev images
Wikid82 Nov 6, 2026
1e404af
refactor: centralize semver version checks in the version package
Wikid82 Nov 6, 2026
a2ac687
fix: cap and anchor the what's new changelog for every user
Wikid82 Nov 6, 2026
3e5da0e
chore: apply import-x/order autofix after the plugin bump
Wikid82 Nov 6, 2026
58cfca7
fix: make the what's new dialog safe to browse and render
Wikid82 Nov 6, 2026
6d16570
fix: show the running version and update status in the system setting…
Wikid82 Nov 6, 2026
e4103fc
fix(ci): generate clean changelog data and fail when it is missing
Wikid82 Nov 6, 2026
22ec244
feat: compare versions semantically in update checks and backup valid…
Wikid82 Nov 6, 2026
344b2e0
fix(ci): embed changelog data in release, development and pr images
Wikid82 Nov 6, 2026
fc25621
fix(ci): publish version tags for release images
Wikid82 Nov 6, 2026
6308979
fix(ci): smoke test what's new on built images before publishing and …
Wikid82 Nov 6, 2026
d59f167
feat(ci): stamp non-release builds with the released base version
Wikid82 Nov 6, 2026
75c85dd
docs: document the what's new pipeline and build-metadata versions
Wikid82 Nov 6, 2026
d59dbb5
docs: fix what's new popup wording, downgrade test steps, and spec co…
Wikid82 Nov 6, 2026
2919333
refactor(version): defer strict SemVer validation to x/mod/semver
Wikid82 Nov 6, 2026
9f513f6
fix(ci): tighten changelog guard sha and merge checks, order prerelea…
Wikid82 Nov 6, 2026
560dd36
chore(frontend): fix import ordering lint warnings
Wikid82 Nov 7, 2026
5928595
fix(security): harden Orthrus agent runtime privileges
Wikid82 Nov 7, 2026
bcca664
docs: record qa results, rework the downgrade check, and narrow new j…
Wikid82 Nov 7, 2026
27b34ac
chore(docs): update Orthrus agent image references in README and CHAN…
Wikid82 Nov 7, 2026
29463f1
docs: clarify Orthrus PGID vs socket path and add rootless Docker sec…
Wikid82 Nov 7, 2026
c098b19
fix(security): tighten ID parsing bounds in the Orthrus agent
Wikid82 Nov 7, 2026
8b1449d
fix(security): validate the Docker socket path in the Orthrus agent
Wikid82 Nov 7, 2026
b81cf19
test: silence gosec G101 on the userinfo URL fixture
Wikid82 Nov 7, 2026
8bdb05f
chore: update actions/add-to-project to version 2.0.1
Wikid82 Nov 7, 2026
cb66ec1
chore: update @tanstack/react-query to version 5.107.1
Wikid82 Nov 7, 2026
0f29472
chore: update @tanstack/react-query to version 5.107.1
Wikid82 Nov 7, 2026
f342bca
chore: update actions/add-to-project to version 2.0.1
Wikid82 Nov 7, 2026
35874b5
chore: update actions/add-to-project to version 2.0.1
Wikid82 Nov 7, 2026
13c6cd1
chore: update @tanstack/react-query to version 5.107.0
Wikid82 Nov 6, 2026
ff7e381
chore: update @tanstack/react-query to version 5.107.1
Wikid82 Nov 7, 2026
80aa6a2
fix: restore What's New and stamp builds with SemVer build-metadata v…
Wikid82 Nov 7, 2026
c4f7345
fix(security): harden Orthrus agent runtime privileges (#1874)
Wikid82 Nov 7, 2026
bb44fac
chore: update module github.com/aws/aws-sdk-go-v2/service/cloudwatchl…
renovate[bot] Nov 7, 2026
37f93ca
chore(docker): sync toolchain image pin to caddy-crowdsec-80d3f9c2938…
github-actions[bot] Nov 7, 2026
798ba95
chore: update module github.com/aws/aws-sdk-go-v2/service/cloudwatchl…
Wikid82 Nov 7, 2026
9765dce
fix: add Appearance to the Settings sidebar menu
Wikid82 Nov 7, 2026
eb7d5ba
fix: take a single backup for a bulk certificate delete
Wikid82 Nov 7, 2026
8b6cf3d
fix: use the bulk endpoint for bulk certificate deletion in the UI
Wikid82 Nov 7, 2026
08870cc
fix: delete orphaned certificates with one bulk request when removing…
Wikid82 Nov 7, 2026
199a12a
fix: bound the bulk delete request body, chunk large selections, and …
Wikid82 Nov 7, 2026
8aa1066
fix: take a single backup when bulk-deleting certificates (#1876)
Wikid82 Nov 7, 2026
fe7dd8a
fix: stop repeating the commit sha when the version already includes it
Wikid82 Nov 7, 2026
99b32f7
chore: update typescript version to 7.1.0-dev.20261107.1
Wikid82 Nov 7, 2026
22c2748
chore: update knip to version 6.44.2
Wikid82 Nov 7, 2026
026bf0d
fix(deps): update i18next and react-i18next to latest versions
Wikid82 Nov 7, 2026
5431c80
fix: update type definition for MonitorCard to use TFunction
Wikid82 Nov 7, 2026
10dbb45
fix(deps): update mongo-driver to v2.10.0 and sqlite to v1.62.0
Wikid82 Nov 7, 2026
74199b3
chore(deps): update i18next to version 27.0.1
Wikid82 Nov 7, 2026
af8d622
fix(deps): update kin-openapi to version 0.153.0
Wikid82 Nov 7, 2026
593444c
chore(docker): refresh bundled proxy toolchain image
Wikid82 Nov 7, 2026
1d7dcdd
chore(docker): refresh bundled proxy toolchain image (#1877)
Wikid82 Nov 7, 2026
e9930a9
chore(docker): update GeoLite2-Country.mmdb checksum
Wikid82 Nov 8, 2026
c2ebefe
chore(deps): add matchDepTypes for indirect dependencies in renovate …
Wikid82 Nov 8, 2026
1b05127
chore(docker): update GeoLite2-Country.mmdb checksum (#1878)
Wikid82 Nov 8, 2026
3d17b5f
chore: propagate changes from main into development (#1879)
Wikid82 Nov 8, 2026
1382ca1
fix: pin zlib in toolchain image
Wikid82 Nov 8, 2026
ea8cc2c
chore(docker): refresh bundled proxy toolchain image
Wikid82 Nov 8, 2026
b9aaea2
chore(docker): refresh bundled proxy toolchain image (#1880)
Wikid82 Nov 8, 2026
7a20d5d
fix(ci): add curl retries to Syft download in workflows
Wikid82 Nov 8, 2026
52ff8e4
chore(deps): update Hermes to v0.3.7 and add hermes.sh for module man…
Wikid82 Nov 8, 2026
e8a28c6
chore(deps): update gzip dependency to v1.2.10 and add gzip.sh for mo…
Wikid82 Nov 8, 2026
487bc52
chore(deps): update github.com/gin-contrib/sse to v1.2.1
Wikid82 Nov 8, 2026
8e48c42
chore(deps): reorganize scripts for managing Go module dependencies
Wikid82 Nov 8, 2026
24963f4
chore(deps): update TypeScript to v7.1.0-dev.20261108.1
Wikid82 Nov 8, 2026
dc98004
chore: update alpine:3.24.4 docker digest to f59abe6
renovate[bot] Nov 8, 2026
919f71f
chore(docker): sync toolchain image pin to caddy-crowdsec-a4f3ac6092c…
github-actions[bot] Nov 8, 2026
4f363f5
chore: update alpine:3.24.4 docker digest to f59abe6 (#1881)
Wikid82 Nov 8, 2026
3aa9088
chore(deps): update react-i18next to version 18.0.1
Wikid82 Nov 9, 2026
6860289
chore(deps): update dotenv to version 18.0.10
Wikid82 Nov 9, 2026
70031b1
ci: remove chore-based skip rules from docker build workflow
Wikid82 Nov 9, 2026
dafaf08
chore(docker): refresh bundled proxy toolchain image
Wikid82 Nov 9, 2026
c3856d8
chore(docker): refresh bundled proxy toolchain image (#1883)
Wikid82 Nov 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
25 changes: 16 additions & 9 deletions .claude/agents/backend-dev.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,23 @@ Your priority is writing code that is clean, tested, and secure by default.
- **Step 1 (The Contract Test)**: Create `internal/api/handlers/your_handler_test.go` FIRST. Write a test that asserts the Handoff Contract (JSON structure). Run the test — it MUST fail. Output "Test Failed as Expected".
- **Step 2 (The Interface)**: Define the structs in `internal/models` to fix compilation errors.
- **Step 3 (The Logic)**: Implement the handler in `internal/api/handlers`.
- **Step 4 (Lint and Format)**: Run `lefthook run pre-commit` to ensure code quality.
- **Step 5 (The Green Light)**: Run `go test ./...`. **CRITICAL**: If it fails, fix the *Code*, NOT the *Test*.
- **Step 4 (The Green Light)**: Run ONLY the tests for the packages you changed, e.g. `go test ./internal/<pkg>/... -run <TestName>` while iterating, then `go test ./internal/<pkg>/...` once for each touched package. **CRITICAL**: If it fails, fix the *Code*, NOT the *Test*.

3. **Verification (Definition of Done)**:
- Run `go mod tidy` and `go fmt ./...`.
- Run `go test ./...` to ensure no regressions.
3. **Verification**:
- Run `go mod tidy` and `go fmt ./...`, then `go build ./...`.
- **Conditional GORM Gate**: If task changes include `backend/internal/models/**` or GORM queries, run `./scripts/scan-gorm-security.sh --check` — zero CRITICAL/HIGH findings required.
- **Local Patch Coverage Preflight (MANDATORY)**: Run `bash scripts/local-patch-report.sh`. Verify `test-results/local-patch-report.md` and `test-results/local-patch-report.json` exist.
- **Coverage (MANDATORY)**: Run `scripts/go-test-coverage.sh`. Minimum 85% (`CHARON_MIN_COVERAGE`). Patch coverage must cover 100% of new/modified code.
- Run `lefthook run pre-commit` as final check.
- Write unit tests for all new/modified code (aim for 100% patch coverage), but do NOT measure it — see "Not your job".
</workflow>

<not-your-job>

Do NOT run these; they are expensive and handled elsewhere:
- `go test ./...` (full suite) — CI and `qa-security` run it.
- `scripts/go-test-coverage.sh` and `scripts/local-patch-report.sh` — `qa-security` runs them; if coverage falls short it sends the work back to you with the uncovered files.
- `lefthook run pre-commit` — it runs automatically when the main session commits. If the main session reports a hook failure, fix exactly what it reports.

</not-your-job>

<constraints>

- **`(security)` COMMIT SCOPE**: Use `feat(security): <subject>` / `fix(security): <subject>` only for genuinely security-relevant work — real vulnerability fixes or new protective mechanisms. Do NOT use it for ordinary bug fixes just to gain visibility; that dilutes the category's signal in the What's New changelog. Subject lines must stay vague by design: describe the category of issue and mitigation in general terms, never the specific vulnerability class, attack vector, or exact vulnerable code path (good: "harden input validation in the API layer"; bad: "fix SQL injection in host search filter").
Expand All @@ -51,5 +56,7 @@ Your priority is writing code that is clean, tested, and secure by default.
- **TERSE OUTPUT**: Do not explain the code. Output ONLY code blocks or command results.
- **NO CONVERSATION**: If the task is done, output "DONE". If you need info, ask the specific question.
- **USE DIFFS**: When updating large files (>100 lines), use targeted edits rather than rewriting the whole file.
- **FOREGROUND EXECUTION ONLY** (see `CLAUDE.md`): Run `go test`, `go-test-coverage.sh`, `local-patch-report.sh`, `lefthook run pre-commit`, and every other command in the foreground and block until it completes. Never background a long-running command and end your turn to "check back later" — if it needs longer than one call's timeout, re-issue a blocking wait until you have a real result.
- **QUIET OUTPUT**: Never use `go test -v`. Pipe test/build output through `| tail -40` and never paste long logs into your reply or reasoning.
- **RETRY CAP**: After 2 failed attempts to fix the same failure, stop and report the failure and your findings to the main session instead of looping.
- **FOREGROUND EXECUTION ONLY** (see `CLAUDE.md`): Run `go test` and every other command in the foreground and block until it completes. Never background a long-running command and end your turn to "check back later" — if it needs longer than one call's timeout, re-issue a blocking wait until you have a real result.
</constraints>
19 changes: 13 additions & 6 deletions .claude/agents/frontend-dev.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,19 +35,24 @@ You are a SENIOR REACT/TYPESCRIPT ENGINEER with deep expertise in:
- Add proper error boundaries and loading states.

3. **Testing**:
- **Run local patch preflight first**: `bash scripts/local-patch-report.sh`. Confirm artifacts exist.
- Use the report's uncovered file list to prioritize test additions.
- Write unit tests with Vitest and Testing Library.
- Cover edge cases and error states.
- Run tests with `npm test` in `frontend/` directory.
- Run ONLY the tests for files you touched: `cd frontend && npx vitest run <path/to/file.test.tsx>`. Never run the full `npm test` suite.

4. **Quality Checks**:
- Run `lefthook run pre-commit` to ensure linting and formatting.
- Run `cd frontend && npm run type-check` — fix all type errors.
- Run `scripts/frontend-test-coverage.sh` — minimum 85% coverage.
- Ensure accessibility with proper ARIA attributes.
</workflow>

<not-your-job>

Do NOT run these; they are expensive and handled elsewhere:
- Full `npm test` — CI and `qa-security` run it.
- `scripts/frontend-test-coverage.sh` and `scripts/local-patch-report.sh` — `qa-security` runs them; if coverage falls short it sends the work back to you with the uncovered files.
- `lefthook run pre-commit` — it runs automatically when the main session commits. If the main session reports a hook failure, fix exactly what it reports.

</not-your-job>

<constraints>

- **`(security)` COMMIT SCOPE**: Use `feat(security): <subject>` / `fix(security): <subject>` only for genuinely security-relevant work — real vulnerability fixes or new protective mechanisms. Do NOT use it for ordinary bug fixes just to gain visibility; that dilutes the category's signal in the What's New changelog. Subject lines must stay vague by design: describe the category of issue and mitigation in general terms, never the specific vulnerability class, attack vector, or exact vulnerable code path (good: "harden input validation in the API layer"; bad: "fix SQL injection in host search filter").
Expand All @@ -57,5 +62,7 @@ You are a SENIOR REACT/TYPESCRIPT ENGINEER with deep expertise in:
- **TANSTACK QUERY**: All API calls must use TanStack Query hooks.
- **TERSE OUTPUT**: Do not explain code. Output diffs or file contents only.
- **ACCESSIBILITY**: All interactive elements must be keyboard accessible.
- **FOREGROUND EXECUTION ONLY** (see `CLAUDE.md`): Run `npm test`, `frontend-test-coverage.sh`, `type-check`, `lefthook run pre-commit`, and every other command in the foreground and block until it completes. Never background a long-running command and end your turn to "check back later" — if it needs longer than one call's timeout, re-issue a blocking wait until you have a real result.
- **QUIET OUTPUT**: Pipe test/build output through `| tail -40`; never paste long logs into your reply or reasoning.
- **RETRY CAP**: After 2 failed attempts to fix the same failure, stop and report the failure and your findings to the main session instead of looping.
- **FOREGROUND EXECUTION ONLY** (see `CLAUDE.md`): Run `vitest`, `type-check`, and every other command in the foreground and block until it completes. Never background a long-running command and end your turn to "check back later" — if it needs longer than one call's timeout, re-issue a blocking wait until you have a real result.
</constraints>
2 changes: 1 addition & 1 deletion .claude/agents/planning.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
name: Planning
description: Principal Architect for technical planning and design decisions. Use when a new feature or significant change needs a detailed technical spec written to docs/plans/current_spec.md before implementation begins. Produces API contracts, DB schema, component designs, and commit slicing strategies.
model: sonnet
model: best
---

You are a PRINCIPAL ARCHITECT responsible for technical planning and system design.
Expand Down
2 changes: 1 addition & 1 deletion .claude/agents/playwright-dev.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ You do not write production code, strictly tests. If code changes are needed, re
```bash
.github/skills/scripts/skill-runner.sh docker-rebuild-e2e
```
- The container exposes: port 8080 (app), port 2020 (emergency), port 2019 (Caddy admin).
- The container exposes: port 8080 (app), port 2020 (emergency). Port 2019 (Caddy admin) stays inside the container.
- Verify container is healthy before proceeding.
- **ALWAYS use the skill above to rebuild — never `docker build`/`docker run`/`docker compose up` ad hoc.** The skill is what keeps the test environment consistent across runs (correct compose file, ports, profiles). Standing up a parallel or replacement container via raw commands has repeatedly caused environment drift (e.g. a container missing port 80, needed for WAF/proxy testing) and wasted rebuild cycles.
- **If the E2E environment itself needs to change** (ports, env vars, profiles, service definitions), edit `.docker/compose/docker-compose.playwright-local.yml` (and its CI counterpart, `.docker/compose/docker-compose.playwright-ci.yml`, if the change should also apply there) and rebuild via the skill. Do not spin up a separate one-off container to work around a compose file that needs updating — fix the compose file so the change is durable and every future rebuild picks it up.
Expand Down
2 changes: 1 addition & 1 deletion .claude/agents/qa-security.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
name: QA Security
description: Quality Assurance and Security Engineer for testing and vulnerability assessment. Use after implementation is complete to run security scans (CodeQL, Trivy, GORM), validate test coverage, write E2E tests, and produce QA reports. Must run last in the agent pipeline.
model: haiku
model: best
---

You are a QA AND SECURITY ENGINEER responsible for testing and vulnerability assessment.
Expand Down
2 changes: 1 addition & 1 deletion .claude/agents/supervisor.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
name: Supervisor
description: Code Review Lead for quality assurance and PR review. Use when reviewing a plan in docs/plans/current_spec.md or reviewing an implementation for adherence to project standards, security (OWASP Top 10), test coverage, and best practices. Read-only — does not modify code.
model: sonnet
model: best
---

You are a CODE REVIEW LEAD responsible for quality assurance and maintaining code standards.
Expand Down
23 changes: 11 additions & 12 deletions .docker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ Configure the application via `docker-compose.yml`:
| `CHARON_ENV` | `production` | Set to `development` for verbose logging (`CPM_ENV` supported for backward compatibility). |
| `CHARON_HTTP_PORT` | `8080` | Port for the Web UI (`CPM_HTTP_PORT` supported for backward compatibility). |
| `CHARON_DB_PATH` | `/app/data/charon.db` | Path to the SQLite database (`CPM_DB_PATH` supported for backward compatibility). |
| `CHARON_CADDY_ADMIN_API` | `http://localhost:2019` | Internal URL for Caddy API (`CPM_CADDY_ADMIN_API` supported for backward compatibility). Must resolve to an internal allowlisted host on port `2019`. |
| `CHARON_CADDY_ADMIN_API` | `http://localhost:2019` | Optional. Leave it out, or set it to `http://localhost:2019`. Charon always uses the Caddy built into this container, whose admin interface listens on the loopback address only. Any other address (such as a service name or another server) stops Charon at startup with an error. If a restart policy is set, the container keeps restarting and the error repeats in `docker logs`. (`CPM_CADDY_ADMIN_API` supported for backward compatibility.) |
| `CHARON_CADDY_CONFIG_ROOT` | `/config` | Path to Caddy autosave configuration directory. |
| `CHARON_CADDY_LOG_DIR` | `/var/log/caddy` | Directory for Caddy access logs. |
| `CHARON_CROWDSEC_LOG_DIR` | `/var/log/crowdsec` | Directory for CrowdSec logs. |
Expand Down Expand Up @@ -164,8 +164,8 @@ docker compose -f .docker/compose/docker-compose.yml logs app
**Debug**:

```bash
# View current Caddy config
curl http://localhost:2019/config/ | jq
# View current Caddy config (run inside the container)
docker exec charon wget -qO- http://127.0.0.1:2019/config/ | jq

# Check Charon logs
docker compose -f .docker/compose/docker-compose.yml logs app
Expand Down Expand Up @@ -204,23 +204,22 @@ make docker-build

## Security Considerations

1. **Caddy admin API**: Keep port 2019 internal (not exposed in production compose)
1. **Caddy admin interface**: Port 2019 listens on the loopback address only, so it is reachable only from inside the container. Nothing needs to be exposed.
2. **Management UI**: Add authentication (Issue #7) before exposing to internet
3. **Certificates**: Caddy stores private keys in `caddy_data` - protect this volume
4. **Database**: SQLite file contains all config - backup regularly

## Integration with Existing Caddy
## Migrating from an Existing Caddy Setup

If you already have Caddy running, you can point Charon to it:
Charon bundles its own Caddy, so it does not connect to a Caddy running somewhere else. To move an existing Caddy setup into Charon, use the Caddyfile import described in the [import guide](../docs/import-guide.md).

```yaml
environment:
- CPM_CADDY_ADMIN_API=http://your-caddy-host:2019
```
If you upgraded and Charon now stops at startup with this message:

If using a non-localhost internal hostname, add it to `CHARON_SSRF_INTERNAL_HOST_ALLOWLIST`.
```text
CHARON_CADDY_ADMIN_API must point at this container (localhost); using an external proxy is not supported: set it to http://localhost:2019 or remove it
```

**Warning**: Charon will replace Caddy's entire configuration. Backup first!
Open your `docker-compose.yml`, then either set `CHARON_CADDY_ADMIN_API` to `http://localhost:2019` or delete that line. A service name, a container hostname, or `127.1` in that setting is refused, so use `localhost` instead.

## Performance Tuning

Expand Down
42 changes: 39 additions & 3 deletions .docker/compose/.env.example
Original file line number Diff line number Diff line change
@@ -1,8 +1,44 @@
# Environment for docker-compose.local.yml
# Copy this file to .env in this directory (it is gitignored) and fill in the value.
# Compose reads .env from the compose file's directory automatically.
# Charon Environment Variables

# Emergency "break-glass" token used to regain access when an ACL locks you out.
# Keep it secret and rotate it periodically. Generate with:
# openssl rand -hex 32
CHARON_EMERGENCY_TOKEN=

# =============================================================================
# Orthrus Agent (optional, used by the orthrus service in these compose files)
# =============================================================================
# Plain-English guide: docs/features/orthrus.md

# User the agent runs as. Leave at 65532 unless you have a reason to change it.
# Never set this to 0 (the administrator account).
PUID=65532

# Group the agent runs as. Set it to your Docker socket's group so the agent can read it.
# Find it with: stat -c '%g' /var/run/docker.sock
PGID=

# Timezone for log timestamps (example: America/New_York)
TZ=UTC

# Path to the Docker socket on this machine (mounted read-only into the agent)
DOCKER_SOCK=/var/run/docker.sock

# Rootless Docker ONLY (leave commented out unless you run rootless Docker).
# If you use it, replace the PUID and PGID lines above with these, and set the
# number after /run/user/ to the output of `id -u`. Do NOT use these on normal
# (rootful) Docker: there, PUID=0 means real administrator.
# See docs/features/orthrus.md#rootless-docker
# PUID=0
# PGID=0
# ORTHRUS_ALLOW_ROOT=true
# DOCKER_SOCK=/run/user/1000/docker.sock

# Websocket address of your Charon server, e.g. wss://charon.example.com/api/v1/ws/orthrus/connect
ORTHRUS_SERVER_URL=

# Agent ID shown in Charon when you register the agent
ORTHRUS_AGENT_ID=

# One-time auth key from Charon. Leave blank here and paste your own key. Never commit a real key.
ORTHRUS_AUTH_KEY=
29 changes: 24 additions & 5 deletions .docker/compose/docker-compose.dev.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Development override - use with: docker-compose -f docker-compose.yml -f docker-compose.dev.yml up

services:
app:
charon:
# Override for local testing:
# CHARON_DEV_IMAGE=ghcr.io/wikid82/charon:dev
image: wikid82/charon:dev
Expand All @@ -13,7 +13,7 @@ services:
- "443:443"
- "443:443/udp"
- "8080:8080"
- "2019:2019" # Caddy admin API (dev only)
# Caddy admin API stays inside the container: docker compose exec app wget -qO- http://127.0.0.1:2019/config/
environment:
- CHARON_ENV=development
- CPM_ENV=development
Expand All @@ -23,12 +23,10 @@ services:
- CHARON_ENCRYPTION_KEY=your-32-byte-base64-key-here
- CHARON_DB_PATH=/app/data/charon.db
- CHARON_FRONTEND_DIR=/app/frontend/dist
- CHARON_CADDY_ADMIN_API=http://localhost:2019
- CHARON_CADDY_CONFIG_DIR=/app/data/caddy
# Security Services (Optional)
# 🚨 DEPRECATED: Use GUI toggle in Security dashboard instead
#- CPM_SECURITY_CROWDSEC_MODE=disabled # ⚠️ DEPRECATED
#- CPM_SECURITY_CROWDSEC_API_URL= # ⚠️ DEPRECATED
#- CPM_SECURITY_WAF_MODE=disabled
#- CPM_SECURITY_RATELIMIT_ENABLED=false
#- CPM_SECURITY_ACL_ENABLED=false
Expand All @@ -37,12 +35,33 @@ services:
# to docker-compose.override.yml and set your host's docker GID.
volumes:
# Dev flow uses direct local discovery. For real deployments Orthrus (docs/features/orthrus.md) is recommended.
- /var/run/docker.sock:/var/run/docker.sock:ro # For local container discovery
- crowdsec_data:/app/data/crowdsec
# Mount your existing Caddyfile for automatic import (optional)
# - ./my-existing-Caddyfile:/import/Caddyfile:ro
# - ./sites:/import/sites:ro # If your Caddyfile imports other files

orthrus:
image: wikid82/orthrus:latest
restart: always
container_name: orthrus
environment:
# User and group the agent runs as. PGID must match your Docker socket's group (see docs/features/orthrus.md).
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
# The websocket URL of your Charon instance. Use wss://charon.example.com when Charon is behind HTTPS (a reverse proxy with a certificate),
# or ws://<host>:<port> (e.g. ws://100.x.y.z:8080) when connecting to Charon directly over HTTP, such as on Tailscale or a Docker network.
# Charon itself does not serve TLS, so wss:// to its plain HTTP port fails with "first record does not look like a TLS handshake".
- ORTHRUS_SERVER_URL=${ORTHRUS_SERVER_URL}
# The agent ID shown when you registered this agent in Charon (Hecate -> Agent -> Add Agent)
- ORTHRUS_AGENT_ID=${ORTHRUS_AGENT_ID}
# The one-time auth key shown when you registered this agent
- ORTHRUS_AUTH_KEY=${ORTHRUS_AUTH_KEY}
volumes:
# Read-only access to the host Docker socket (DOCKER_SOCK in your .env). The agent is read-only by default;
# write access is an explicit per-agent opt-in in Charon (see docs/features/orthrus.md).
- ${DOCKER_SOCK}:/var/run/docker.sock:ro

volumes:
crowdsec_data:
driver: local
Loading
Loading