diff --git a/.bumpversion.toml b/.bumpversion.toml index 4dc7268..889868d 100644 --- a/.bumpversion.toml +++ b/.bumpversion.toml @@ -2,15 +2,10 @@ # SPDX-License-Identifier: Apache-2.0 [tool.bumpversion] -current_version = "1.3.5" +current_version = "1.4.0" parse = "(?P\\d+)\\.(?P\\d+)\\.(?P\\d+)" serialize = ["{major}.{minor}.{patch}"] -[[tool.bumpversion.files]] -filename = "CHANGELOG.md" -search = "## [{current_version}]" -replace = "## [{new_version}]" - [[tool.bumpversion.files]] filename = "package.json" search = '"version": "{current_version}"' @@ -28,4 +23,4 @@ regex = true # bump-my-version does NOT manage these files; they are listed here for discoverability. # --------------------------------------------------------------------------- [tool.bumpversion.custom_variables.core_version] -current = "0.10.4" +current = "0.11.0" diff --git a/.gitignore b/.gitignore index 2b1e42c..810aefb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,36 +1,70 @@ # SPDX-FileCopyrightText: 2026 PythonWoods # SPDX-License-Identifier: Apache-2.0 -# Python bytecode +# ============================================================================ +# Zenzic Action — Git Ignore Rules +# ============================================================================ + +# ──────────────────────────────────────────────────────────────────────────── +# Environment Configuration +# ──────────────────────────────────────────────────────────────────────────── +.env +.env.local +.zenzic.local.toml +.zenzic.dev.toml + +# ──────────────────────────────────────────────────────────────────────────── +# AI Orchestration & Private Workspace (Zero-Leak Governance) +# ──────────────────────────────────────────────────────────────────────────── +# Private Tech Lead workspace +.architect/ +# Local AI routing rules (Trade Secret) +.clinerules +# Cursor AI rules (Trade Secret) +.cursorrules +# AI Primers and Memory ledgers +.github/agents/ +# Legacy draft vaults +.draft/ + +# ──────────────────────────────────────────────────────────────────────────── +# Python, Testing & Coverage +# ──────────────────────────────────────────────────────────────────────────── __pycache__/ *.pyc - -# nox .nox/ - -# Coverage artefacts (Determinism Invariant — never tracked) +.pytest_cache/ +.hypothesis/ coverage.json coverage.xml htmlcov/ .coverage .coverage.* +mutmut* +.mutmut-cache/ -# Misc -.DS_Store -.zenzic.local.toml -.zenzic.dev.toml +# ──────────────────────────────────────────────────────────────────────────── +# Zenzic Artifacts (Machine Silence) +# ──────────────────────────────────────────────────────────────────────────── +# e.g., zenzic-results.sarif +*.sarif +# Zenzic local cache (external links, etc.) +.zenzic_cache/ +# Derived local metadata +.zenzic-score.json -# EPOCH 4 — draft vault (git-ignored, local reference only) -.draft/ +# ──────────────────────────────────────────────────────────────────────────── +# IDEs & Operating System +# ──────────────────────────────────────────────────────────────────────────── +.DS_Store +.vscode/ +.idea/ +*.swp -# --- Ephemeral Artifacts (Machine Silence) --- -zenzic-results.sarif -mutmut* -.mutmut-cache/ -.pytest_cache/ -.hypothesis/ +# ============================================================================ +# End of .gitignore +# ============================================================================ -# VS Code Copilot agent definitions (local-only) +# AI Agent Private Memory +.clinerules .github/agents/ -.zenzic_cache/ -.zenzic_cache/ diff --git a/.zenzic.toml b/.zenzic.toml index 5917985..13a0e32 100644 --- a/.zenzic.toml +++ b/.zenzic.toml @@ -64,7 +64,7 @@ default_locale = "en" # --- BRAND INTEGRITY --- [project_metadata] release_name = "Magnetite" -badge_stamp_files = ["README.md", "README.it.md"] +badge_stamp_files = ["README.md"] [governance] # --------------------------------------------------------------------------- diff --git a/CHANGELOG.md b/CHANGELOG.md index f2a15b1..b438446 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,9 +3,7 @@ # Changelog -All notable changes to zenzic-action are documented here. -Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). -Versions follow [Semantic Versioning](https://semver.org/). +All notable changes to zenzic-action are documented in this file. The project adheres to Semantic Versioning. Major releases represent breaking changes to inputs/outputs, minor releases introduce new options or core package bumps, and patch releases address bug fixes. Format follows Keep a Changelog. --- @@ -15,44 +13,7 @@ No changes yet. --- -## [1.3.5] - 2026-06-09 +## Historical Releases -### Changed - -- **Operational governance docs:** Added explicit branch-protection policy to `README.md` and `README.it.md`, including required checks for `main` (`Verify (ubuntu-latest, true)`, `Lint PR Title`, `Check DCO`) and fail-closed workflow selection rules. -- **Core pin:** Zenzic Core pinned to `0.10.4`. - ---- - -## [1.3.5] - 2026-06-07 - -### Changed - -- Disabled dependency caching in `setup-uv` to prevent noisy warnings on non-Python repositories. - ---- - -## [1.3.5] - 2026-06-07 - -### Deprecated - -- **Versions v1.3.0 and older are officially deprecated.** They contained a critical bug in the bash wrapper that injected an invalid `--config` flag, causing false-positive Exit 2 crashes. Users pinned to exact patch versions must upgrade to `v1.3.1` or use the major tag `@v1`. - -### Added - -- `guard-scan` input: run `zenzic guard scan` before the main quality gate. -- `cap-exceeded` output: exposes suppression-cap failures for downstream workflow logic. -- Sovereign Job Summary output for every critical non-zero exit code. - -### Changed - -- Runtime governance parity: wrapper executes score governance checks after `check all`. -- ADR-037 alignment: `release_name` in `.zenzic.toml` set to semantic version form. -- ADR-089 alignment: GitHub Actions dependencies pinned to immutable SHA-40. -- Final Guard documentation aligned to the actual `just verify` recipe sequence. - -### Security - -- Explicitly documented non-suppressible action boundary for exits 2 and 3. -- Forwarding contract for security-related runtime flags is enforced end-to-end. -- Inherited governance semantics from core: additive `brand_obsolescence` merge behavior. +- v1.3.x archive: [changelogs/v1.3.md](./changelogs/v1.3.md) +- Archive index: [changelogs/README.md](./changelogs/README.md) diff --git a/CONTRIBUTING.it.md b/CONTRIBUTING.it.md deleted file mode 100644 index f2f6a9e..0000000 --- a/CONTRIBUTING.it.md +++ /dev/null @@ -1,108 +0,0 @@ - - -# Contribuire a zenzic-action - -Grazie per il tuo contributo alla GitHub Action ufficiale di Zenzic. - -## Dipendenza Core - -La distribuzione runtime per gli utenti a valle resta agganciata alle release -pubblicate di Zenzic. I quality gate del repository (self-check, just, nox), -invece, usano il modello sovrano locale-core condiviso. - -La risoluzione della branch parity in CI segue questa precedenza: - -1. Override esplicito tramite la repository variable `ZENZIC_CORE_REF`. -2. Parità di nome del branch (`github.base_ref` o `github.ref_name`). -3. Fallback su `main` se il branch target non esiste in core. - -Usa `ZENZIC_CORE_REF` quando la nomenclatura dei branch di zenzic-action -diverge da quella dei repository core (ad esempio, branch di release -dell'action vs. branch di release del core). - -La governance dell'override è obbligatoria (fail-closed): quando -`ZENZIC_CORE_REF` è impostata, sono richieste le seguenti repository variables: - -1. `ZENZIC_CORE_REF_TICKET` (ticket di change/audit) -2. `ZENZIC_CORE_REF_REASON` (giustificazione esplicita) -3. `ZENZIC_CORE_REF_APPROVER` (owner che ha approvato) -4. `ZENZIC_CORE_REF_EXPIRES_ON` (data UTC in formato `YYYY-MM-DD`) - -Se i metadati mancano, sono malformati, scaduti o il branch non esiste in -core, la CI si arresta con un errore esplicito. - -## Policy di Governance Enterprise e Contributo - -Per garantire la sicurezza, l'integrità architetturale e la conformità legale di Zenzic, tutti i contributi devono aderire alle seguenti linee guida di Governance Enterprise: - -1. **Issue-First Policy (Prima le Issue)**: Nessuna Pull Request sarà presa in carico, revisionata o discussa se non preceduta da una Issue corrispondente discussa e approvata dai maintainer. Collega sempre l'Issue approvata nella descrizione della tua PR. -2. **Firma Crittografica Obbligatoria**: Tutti i commit devono essere firmati crittograficamente tramite chiavi GPG, SSH o S/MIME (mostrati come "Verified" su GitHub). I commit non firmati verranno respinti automaticamente dal gate di merge. -3. **Clausola "No AI Slop"**: Applichiamo una policy severa contro il codice generato da intelligenza artificiale non verificato. I contributor devono comprendere appieno, saper spiegare e giustificare dal punto di vista architetturale ogni singola riga di codice proposta nella PR. La proposta di codice non compreso porterà al rifiuto immediato del contributo. -4. **Developer Certificate of Origin (DCO)**: Tutti i commit devono includere la riga `Signed-off-by:` (usando `git commit -s`) per certificare la conformità con la DCO. -5. **Conventional Commits**: I messaggi di commit devono seguire rigorosamente la specifica Conventional Commits (es. `feat: add block anchor support (#123)`). - -## Setup Iniziale - -Installa gli hook pre-commit (una sola volta dopo il clone): - -```bash -uvx pre-commit install # commit-stage: hygiene + zenzic self-check -uvx pre-commit install -t pre-push # pre-push: 🛡️ Final Guard runs `just verify` -``` - -Configura la firma SSH dei commit (obbligatoria — tutti i commit devono apparire come **Verified** su GitHub): - -```bash -# Configurazione globale una-tantum (salta se già configurata) -git config --global gpg.format ssh -git config --global user.signingkey ~/.ssh/id_ed25519.pub # adatta il percorso se necessario -git config --global commit.gpgsign true -``` - -Registra poi la tua chiave pubblica come **Signing Key** (non Authentication Key) su -. I commit firmati con una chiave non registrata -verranno rifiutati dal ruleset del branch. - -## Verifica Locale - -Usa `just` per eseguire i self-test prima di aprire una PR: - -```bash -just lint # fast pass: pre-commit hooks only -just verify # full gate: pre-commit + Zenzic check + integration tests -``` - -Entrambi devono passare con zero errori prima di aprire o aggiornare una PR. - -## Maintainer Only: Workflow Hardening - -### Immutable Pre-Commit Hooks (ADR-089) - -Tutte le chiavi `rev:` in `.pre-commit-config.yaml` devono puntare a un -**pin immutabile a commit hash**, mai a un tag semantico (`v1.2.3`). I tag git -sono mutabili: un maintainer upstream (o un attaccante) può spostare un tag -silenziosamente, avvelenando il Gate 2 locale senza alcun diff in questo -repository. - -Questa è una **policy CI interna del progetto zenzic-action**, non una regola -pubblica del linter Zenzic. Enforcement: `just check-pinning` (dipendenza di -`just verify`); le violazioni sollevano `[ADR-089] FATAL` in pre-push. - -La finestra di esposizione locale è più piccola di quella GHA perché -`pre-commit` congela i repo degli hook in `~/.cache/pre-commit/` finché -l'utente non lancia `autoupdate` o `clean`; GitHub Actions invece ri-risolve -il ref a ogni esecuzione. Il pinning è comunque obbligatorio in locale per la -sicurezza dei nuovi clone e per la parità con l'enforcement ADR-089 remoto. - -**Aggiornare gli hook pinned.** Non eseguire mai il `pre-commit autoupdate` -nudo — riscrive le SHA tornando a tag mutabili. Usa sempre: - -```bash -uvx pre-commit autoupdate --freeze -``` - -Questo preserva il commento di annotazione `# vX.Y.Z`. Committa il diff e -ri-verifica con `just check-pinning`. diff --git a/README.it.md b/README.it.md deleted file mode 100644 index f5737b8..0000000 --- a/README.it.md +++ /dev/null @@ -1,226 +0,0 @@ - - - - -

- - - - Zenzic / action - - -

- -

Il punto di enforcement deterministico per l'integrità della documentazione in CI. I codici di uscita sono contrattuali — exit 2 e 3 sopravvivono a fail-on-error: false.

- -

- ci-status - - zenzic-audit - - zenzic-score - action version - zenzic on PyPI - license - REUSE 3.x compliant -

- ---- - -Esegui i check Zenzic in CI e fai emergere i risultati direttamente in GitHub Code Scanning — senza leggere log. - -**Contratto exit code.** Il wrapper propaga i codici di uscita di Zenzic senza rimappatura. Exit 1 (qualità) obbedisce a `fail-on-error`. Exit 2 (credenziale) ed exit 3 (path traversal) terminano il job indipendentemente da `fail-on-error: false` o `--exit-zero` — i finding di sicurezza non vengono mai soppressi al boundary di enforcement. - -## Funzionalità Principali - -| Funzionalità | Descrizione | -|---|---| -| Install zero-setup | `uvx zenzic` — nessuna toolchain Python richiesta sul runner | -| Output SARIF | I finding alimentano direttamente GitHub Code Scanning | -| Contratto Exit Code | Gli incidenti di sicurezza (exit 2/3) non vengono mai soppressi da `fail-on-error` | -| Modalità Sovereign Audit | `audit: "true"` bypassa tutte le soppressioni — rivela il vero stato della documentazione | -| Check integrità SARIF | Valida il JSON prima dell'upload; emette `::warning` se troncato da SIGKILL | -| Annotation PR | Finding inline sul diff, codificati a colori per severità | -| Version pinning | Pin a una release esatta per gate CI deterministici e riproducibili | -| **Prosa pulita** | `[governance.directory_policies]` in `.zenzic.toml` concede esenzioni zero-debt a pattern di percorso | - -## Quick Start - -La configurazione minimale — zero setup Python, SARIF su Code Scanning in un solo step: - -```yaml title=".github/workflows/docs.yml" -- uses: actions/checkout@v6 - -- name: Run Zenzic Documentation Quality Gate - uses: PythonWoods/zenzic-action@v1 - with: - version: "0.10.4" - format: sarif - upload-sarif: "true" - permissions: - contents: read - security-events: write -``` - -Metti un file `.zenzic.toml` nella root del repository e l'action lo trova automaticamente — nessun input `config-file` richiesto. Esegui `zenzic init` una volta per fare scaffolding della configurazione se le tue docs sono fuori dalla cartella `docs/` di default. - -Per la configurazione avanzata (Configuration Discovery, Override Sovrano, scoring del Quality Gate, audit notturno), consulta la [documentazione di Zenzic Action](https://zenzic.dev/it/docs/reference/zenzic-action). - ---- - -## Policy Branch Protection (Operativa) - -Per il repository `zenzic-action`, proteggi `main` e abilita **Require status checks to pass before merging**. - -Check obbligatori: - -- `Verify (ubuntu-latest, true)` -- `Lint PR Title` -- `Check DCO` - -Intento operativo: - -- `Verify (ubuntu-latest, true)` è il gate di integrità funzionale per runtime action e comportamento del wrapper. -- `Lint PR Title` e `Check DCO` applicano governance e tracciabilità legale su ogni PR. - -Regola fail-closed: - -- Ogni check obbligatorio deve girare su `pull_request`. -- Non configurare la branch protection con check obbligatori provenienti da workflow solo tag, solo release o solo schedule. - ---- - -## Inputs - -| Input | Default | Descrizione | -|---|---|---| -| `version` | `0.10.4` | Versione di Zenzic da installare. Pin a una release specifica per esecuzioni deterministiche. Imposta `latest` per valutazione continua. | -| `format` | `sarif` | Formato di output: `text`, `json`, o `sarif`. | -| `sarif-file` | `zenzic-results.sarif` | Path di output SARIF (quando `format: sarif`). Deve essere un path **relativo** dentro il workspace. | -| `upload-sarif` | `true` | Carica SARIF su GitHub Code Scanning. | -| `strict` | `false` | Tratta i warning come errori. | -| `fail-on-error` | `true` | Fa fallire lo step del workflow sui finding. | -| `config-file` | *(auto)* | Path opzionale a un file di configurazione. Auto-scopre `.zenzic.toml` → `.github/.zenzic.toml` se omesso. | -| `audit` | `false` | Modalità sovereign audit: bypassa tutti i `zenzic:ignore` e `per_file_ignores`. Rivela il vero stato non filtrato della documentazione. Raccomandato per build notturne e workflow di security review. | -| `diff-base` | *(snapshot)* | Path a un file di baseline JSON per `zenzic diff`. Usa un artifact dal branch `main` per bloccare PR che aumentano il debito tecnico. Se omesso, usa `.zenzic-score.json`. | -| `guard-scan` | `false` | Esegue `zenzic guard scan` come step Defense-in-Depth **prima** del gate principale. Rileva credenziali hardcodate e pattern vietati che hanno bypassato i pre-commit hook. I finding di sicurezza falliscono con exit 2/3 e non sono governati da `fail-on-error`. | - -## Outputs - -| Output | Descrizione | -|---|---| -| `sarif-file` | Path al file SARIF generato. | -| `findings-count` | Numero totale di finding. | -| `score` | Documentation Quality Score (0–100). Disponibile con `format: json` o quando `diff-base` è impostato. | -| `suppression-debt-pts` | Punti di Debito Tecnico detratti dal punteggio per soppressioni attive. `0` quando non ci sono soppressioni. | -| `cap-exceeded` | `"true"` quando il CAP di soppressione è stato superato e ha bloccato la build; `"false"` altrimenti. | - -## Workflow Avanzati - -### Blocco della Regressione del Debito - -Blocca le pull request che aumentano il debito documentale. Salva una baseline da `main` come artifact del workflow; il job di quality-gate la scarica e fallisce se `zenzic diff` rileva un calo del punteggio. - -```yaml -jobs: - baseline: - runs-on: ubuntu-latest - if: github.ref == 'refs/heads/main' - steps: - - uses: actions/checkout@v4 - - name: Save score baseline - uses: PythonWoods/zenzic-action@v1 - with: - format: json - save: "true" - - uses: actions/upload-artifact@v4 - with: - name: zenzic-baseline - path: .zenzic-score.json - - quality-gate: - runs-on: ubuntu-latest - if: github.event_name == 'pull_request' - steps: - - uses: actions/checkout@v4 - - uses: actions/download-artifact@v4 - with: - name: zenzic-baseline - - name: Block debt regression - uses: PythonWoods/zenzic-action@v1 - with: - format: json - diff-base: .zenzic-score.json -``` - -### Audit Sovrano Notturno - -Esegui ogni notte un audit completo non filtrato per rivelare il vero stato della documentazione — bypassando tutti i commenti `zenzic:ignore` e i `per_file_ignores`. I finding soppressi nel CI quotidiano sono visibili qui. - -```yaml -on: - schedule: - - cron: "0 3 * * *" # 03:00 UTC ogni giorno - -jobs: - sovereign-audit: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Audit sovrano (nessuna soppressione) - uses: PythonWoods/zenzic-action@v1 - with: - audit: "true" - format: sarif - upload-sarif: "true" -``` - -### Utilizzo degli Output dell'Action - -Cattura `score`, `suppression-debt-pts` e `cap-exceeded` per logica condizionale o reportistica downstream. - -```yaml -steps: - - uses: actions/checkout@v4 - - - name: Zenzic quality gate - id: zenzic - uses: PythonWoods/zenzic-action@v1 - with: - format: json - fail-on-error: "false" - - - name: Report score - run: | - echo "Score: ${{ steps.zenzic.outputs.score }}/100" - echo "Suppression debt: ${{ steps.zenzic.outputs.suppression-debt-pts }} pts" - - - name: Fallisci se il CAP di soppressione è superato - if: steps.zenzic.outputs.cap-exceeded == 'true' - run: | - echo "::error::Suppression CAP superato — build bloccata." - exit 1 -``` - ---- - -## Codici di Uscita - -| Codice | Significato | Sopprimibile? | -|:---:|---|:---:| -| `0` | Tutti i check superati | — | -| `1` | Finding di documentazione (link rotti, orfani, CAP soppressioni) | Sì (`fail-on-error: "false"`) | -| **`2`** | **Credenziale rilevata (Z201)** | **Mai** | -| **`3`** | **Path traversal rilevato (Z202/Z203)** | **Mai** | - ---- - -Per la governance avanzata (Scoring & Debt, Sovereign Audit, Quality Gate PR blocking), consulta la -[documentazione di Zenzic Action](https://zenzic.dev/it/docs/reference/zenzic-action). - -Per gli internals dell'architettura di sicurezza (contratto exit code, Root-First discovery, guardia integrità SARIF), -consulta l'[Engineering Ledger](https://zenzic.dev/it/developers/explanation/adr-vault). - -## Licenza - -Apache-2.0 — vedi [LICENSE](LICENSE). diff --git a/README.md b/README.md index ae65911..c281a7b 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ The minimal configuration — zero Python setup, SARIF to Code Scanning in one s - name: Run Zenzic Documentation Quality Gate uses: PythonWoods/zenzic-action@v1 with: - version: "0.10.4" + version: "0.11.0" format: sarif upload-sarif: "true" permissions: @@ -94,7 +94,7 @@ Fail-closed rule: | Input | Default | Description | |---|---|---| -| `version` | `0.10.4` | Zenzic version to install. Pin to a specific release for reproducible CI. Set `latest` for continuous evaluation. | +| `version` | `0.11.0` | Zenzic version to install. Pin to a specific release for reproducible CI. Set `latest` for continuous evaluation. | | `format` | `sarif` | Output format: `text`, `json`, or `sarif`. | | `sarif-file` | `zenzic-results.sarif` | SARIF output path (when `format: sarif`). Must be a **relative** path inside the workspace. | | `upload-sarif` | `true` | Upload SARIF to GitHub Code Scanning. | diff --git a/RELEASE.md b/RELEASE.md index 55a7d86..d2ecaee 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -7,7 +7,7 @@ | Field | Value | | :------ | :--------- | | Version | v1.1.0 | -| Date | 2026-06-09 | +| Date | 2026-06-13 | | Status | Stable | ## Release Checklist diff --git a/action.yml b/action.yml index b2de682..9dcb9b8 100644 --- a/action.yml +++ b/action.yml @@ -16,7 +16,7 @@ inputs: version: description: "Zenzic version to use. Defaults to latest stable." required: false - default: "0.10.4" # x-zenzic-core-pin + default: "0.11.0" # x-zenzic-core-pin format: description: "Output format: 'text', 'json', or 'sarif'." required: false diff --git a/changelogs/README.md b/changelogs/README.md new file mode 100644 index 0000000..ef83d9b --- /dev/null +++ b/changelogs/README.md @@ -0,0 +1,10 @@ + + + +# Historical Changelog Archives + +This directory contains per-minor-version changelog archives for zenzic-action. We divide our release history into archives to ensure that the main root changelog remains concise, readable, and focused on the current active release cycle. For the current release history, see the [main Changelog](../CHANGELOG.md). Older releases are listed below. + +| Version | Period | Archive | +|---------|--------|---------| +| v1.3.x | 2026-06-06 to 2026-06-09 | [v1.3.md](./v1.3.md) | diff --git a/changelogs/v1.3.md b/changelogs/v1.3.md new file mode 100644 index 0000000..7ea7534 --- /dev/null +++ b/changelogs/v1.3.md @@ -0,0 +1,71 @@ + + + +# Changelog Archive: v1.3.x + +## [1.3.5] - 2026-06-09 + +### Changed + +- **Operational governance docs:** Added explicit branch-protection policy to `README.md` and `README.it.md`, including required checks for `main` (`Verify (ubuntu-latest, true)`, `Lint PR Title`, `Check DCO`) and fail-closed workflow selection rules. +- **Core pin:** Zenzic Core pinned to `0.10.4`. + +--- + +## [1.3.4] - 2026-06-08 + +### Changed + +- **Core pin:** Zenzic Core pinned to `0.10.3`. +- **Governance:** Added conventional commits and commit signing setup documentation to `CONTRIBUTING.md` and `CONTRIBUTING.it.md`. + +--- + +## [1.3.3] - 2026-06-07 + +### Changed + +- **Core pin:** Zenzic Core pinned to `0.10.2`. + +--- + +## [1.3.2] - 2026-06-07 + +### Changed + +- Disabled dependency caching in `setup-uv` to prevent noisy warnings on non-Python repositories. + +--- + +## [1.3.1] - 2026-06-07 + +### Deprecated + +- **Versions v1.3.0 and older are officially deprecated.** They contained a critical bug in the bash wrapper that injected an invalid `--config` flag, causing false-positive Exit 2 crashes. Users pinned to exact patch versions must upgrade to `v1.3.1` or use the major tag `@v1`. + +### Added + +- `guard-scan` input: run `zenzic guard scan` before the main quality gate. +- `cap-exceeded` output: exposes suppression-cap failures for downstream workflow logic. +- Sovereign Job Summary output for every critical non-zero exit code. + +### Changed + +- Runtime governance parity: wrapper executes score governance checks after `check all`. +- ADR-037 alignment: `release_name` in `.zenzic.toml` set to semantic version form. +- ADR-089 alignment: GitHub Actions dependencies pinned to immutable SHA-40. +- Final Guard documentation aligned to the actual `just verify` recipe sequence. + +### Security + +- Explicitly documented non-suppressible action boundary for exits 2 and 3. +- Forwarding contract for security-related runtime flags is enforced end-to-end. +- Inherited governance semantics from core: additive `brand_obsolescence` merge behavior. + +--- + +## [1.3.0] - 2026-06-06 + +### Changed + +- Update action configuration to Magnetite codename. diff --git a/justfile b/justfile index 9692ee6..0d745aa 100644 --- a/justfile +++ b/justfile @@ -50,7 +50,7 @@ pin-core version: fi echo "Aligning Zenzic Core pin to {{version}}..." uv run python scripts/pin_core.py {{version}} - git add action.yml README.md README.it.md .bumpversion.toml + git add action.yml README.md .bumpversion.toml git commit -m "chore(deps): pin zenzic core to {{version}}" # Simulate a Zenzic Core pin realignment and print the diff without writing files diff --git a/package.json b/package.json index 4f1f260..07660a6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zenzic-action", - "version": "1.3.5", + "version": "1.4.0", "private": true, "description": "Official GitHub Action for Zenzic — Documentation Quality Gate", "license": "Apache-2.0", diff --git a/scripts/pin_core.py b/scripts/pin_core.py index de8d867..06eed77 100644 --- a/scripts/pin_core.py +++ b/scripts/pin_core.py @@ -82,18 +82,7 @@ def main() -> int: replacement=rf"\g<1>{version}\g<2>", min_matches=1, ), - FileUpdate( - path=repo_root / "README.it.md", - pattern=re.compile(r'(^\s{4}version: ")\d+\.\d+\.\d+("$)', re.MULTILINE), - replacement=rf"\g<1>{version}\g<2>", - min_matches=1, - ), - FileUpdate( - path=repo_root / "README.it.md", - pattern=re.compile(r'(\| `version` \| `)\d+\.\d+\.\d+(`)'), - replacement=rf"\g<1>{version}\g<2>", - min_matches=1, - ), + FileUpdate( path=repo_root / ".bumpversion.toml", pattern=re.compile(