From 97989285c257172d9c9705e5cbb0a8952b2d3096 Mon Sep 17 00:00:00 2001 From: Jakob Wennberg <149234542+jakobwennberg@users.noreply.github.com> Date: Thu, 7 May 2026 22:11:33 +0200 Subject: [PATCH] chore(compliance): consume erp-mafia/compliancemaxx@v1 (#418) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore(compliance): consume erp-mafia/compliancemaxx@v1 Adds the consumer side of the new compliancemaxx orchestrator: - .github/workflows/compliance-pr.yml — single-job advisory check that calls `uses: erp-mafia/compliancemaxx@v1` on every PR. Threshold + skill selection live in .compliance/config.yml. `fail-on-findings: false` keeps it strictly advisory while findings bed in; flip to true after triage. - .compliance/config.yml — bootstrap config: all 5 skills enabled (oss-license, owasp-asvs-v5, iso-27001-2022, soc2, gdpr), severity_threshold_to_block=critical, no suppressions yet. The orchestrator code, skill manifests, and reference docs live in the new public repo: https://github.com/erp-mafia/compliancemaxx Co-Authored-By: Claude Opus 4.7 (1M context) * chore: retrigger compliance check * chore(compliance): add full-swarm workflow (nightly + dispatch + label) Adds the LLM-powered deep_audit alongside the existing PR-mode advisory check. Triggers: - 02:00 UTC nightly cron - workflow_dispatch (manual) - PRs labeled `compliance:full-audit` Authenticates to AWS Bedrock via the existing AWS_ACCESS_KEY_ID/SECRET repo secrets (same path swedish-compliance-review.yml already uses). `fail-on-findings: false` keeps it observational while findings bed in. Co-Authored-By: Claude Opus 4.7 (1M context) --------- Co-authored-by: Claude Opus 4.7 (1M context) --- .compliance/config.yml | 22 ++++++++++ .github/workflows/compliance-pr.yml | 30 ++++++++++++++ .github/workflows/compliance-swarm.yml | 57 ++++++++++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 .compliance/config.yml create mode 100644 .github/workflows/compliance-pr.yml create mode 100644 .github/workflows/compliance-swarm.yml diff --git a/.compliance/config.yml b/.compliance/config.yml new file mode 100644 index 00000000..3420a70a --- /dev/null +++ b/.compliance/config.yml @@ -0,0 +1,22 @@ +# yaml-language-server: $schema=../.claude/skills/compliance-swarm/.compliance/config.schema.yml + +# Bootstrap config for gnubok itself. Threshold starts at "critical" so the +# advisory PR check warns loudly without blocking merges. Tighten to "high" +# once findings are triaged and suppressions are in place. + +enabled_skills: + - oss-license-compliance + - owasp-asvs-v5-compliance + - iso-27001-2022-compliance + - soc2-cicd-compliance + - gdpr-cicd-compliance + +asvs_level: L2 +soc2_categories: [security, confidentiality] +severity_threshold_to_block: critical +llm_provider: bedrock +llm_model: eu.anthropic.claude-sonnet-4-6 + +# Add suppressions here as triage progresses. Each rule needs a justification +# and (for ISO/SOC 2 controls) a risk_id pointing at a Risk Register entry. +suppressions: [] diff --git a/.github/workflows/compliance-pr.yml b/.github/workflows/compliance-pr.yml new file mode 100644 index 00000000..212f04ff --- /dev/null +++ b/.github/workflows/compliance-pr.yml @@ -0,0 +1,30 @@ +name: compliance — PR mode (advisory) + +on: + pull_request: + types: [opened, synchronize, reopened] + +permissions: + contents: read + pull-requests: write + security-events: write + +concurrency: + group: compliance-pr-${{ github.ref }} + cancel-in-progress: true + +jobs: + compliance: + name: PR static checks (advisory) + runs-on: ubuntu-latest + timeout-minutes: 8 + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: erp-mafia/compliancemaxx@v1 + with: + mode: pr + base: ${{ github.event.pull_request.base.sha }} + fail-on-findings: false # advisory while bedding in; flip to true after triage diff --git a/.github/workflows/compliance-swarm.yml b/.github/workflows/compliance-swarm.yml new file mode 100644 index 00000000..a55a9969 --- /dev/null +++ b/.github/workflows/compliance-swarm.yml @@ -0,0 +1,57 @@ +name: compliance — full swarm + +# Full hybrid audit: deterministic scanners + LLM-driven deep_audit checks +# (RoPA drift, AGPL §13 evaluation, IDOR/access-control reasoning, ISMS clause +# review, change-management bypass detection). +# +# Triggers: +# - Nightly cron at 02:00 UTC +# - workflow_dispatch (run anytime) +# - PRs labeled `compliance:full-audit` + +on: + schedule: + - cron: '0 2 * * *' + workflow_dispatch: + inputs: + reason: + description: 'Why are you running this manually?' + required: false + default: '' + pull_request: + types: [labeled] + +permissions: + contents: read + pull-requests: write + security-events: write + +concurrency: + group: compliance-swarm-${{ github.ref }} + cancel-in-progress: false + +jobs: + swarm: + name: Full hybrid audit + if: | + github.event_name != 'pull_request' + || github.event.label.name == 'compliance:full-audit' + runs-on: ubuntu-latest + timeout-minutes: 60 + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: erp-mafia/compliancemaxx@v1 + with: + mode: swarm + llm-provider: bedrock + fail-on-findings: false # observational while bedding in + env: + AWS_REGION: eu-north-1 + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + # Override default model if desired: + # COMPLIANCE_BEDROCK_MODEL: 'eu.anthropic.claude-sonnet-4-6'