---
@@ -63,30 +63,31 @@ referenced ecosystem tools are third-party projects.
---
-## v0.5.0a1 Highlights — The Sentinel
-
-- **Hybrid Adaptive Engine**: `scan_docs_references` is the single unified
- entry point for all scan modes. The engine selects sequential or parallel
- execution automatically based on repository size (threshold: 50 files). No
- flags required — Zenzic is fast by default.
-- **`AdaptiveRuleEngine` with eager pickle validation**: all rules are validated
- for pickle-serializability at construction time. A non-serialisable rule raises
- `PluginContractError` immediately — before any file is scanned.
-- **`zenzic.rules` entry-point group**: core rules (`VSMBrokenLinkRule`) are
- registered as first-class plugins. Third-party packages can extend Zenzic by
- registering under the same group and enabling their plugin ID in `zenzic.toml`.
-- **`zenzic plugins list`**: new command that displays every rule registered in
- the `zenzic.rules` entry-point group — Core rules and third-party plugins.
-- **`pyproject.toml` support (ISSUE #5)**: embed Zenzic config in `[tool.zenzic]`
- when `zenzic.toml` is absent. `zenzic.toml` always wins if both exist.
-- **Performance telemetry**: `scan_docs_references(verbose=True)` prints engine
- mode, worker count, elapsed time, and estimated speedup to stderr.
-- **`PluginContractError`**: new exception for rule contract violations.
-- **Plugin documentation**: `docs/developers/plugins.md` (EN + IT) — full
- contract, packaging instructions, and `pyproject.toml` registration examples.
-- **Release-track clarification**: the 0.4.x cycle is considered abandoned
- (exploratory with repeated breaking changes); 0.5.x is the active
- stabilization line.
+## v0.5.0a3 Highlights — The Sentinel
+
+- **Smart Initialization**: `zenzic init` detects `pyproject.toml` and offers to
+ embed config as `[tool.zenzic]` instead of a standalone `zenzic.toml`. Use
+ `--pyproject` to skip the prompt. Engine auto-detection in both modes.
+- **Sentinel UI**: monolithic Indigo banner, traceback gutter with 2-space
+ padding (`│ 16 ❱`), surgical caret underlines, and vertical breathing
+ between findings.
+- **Agnostic Target**: `zenzic check all README.md` or `zenzic check all content/`
+ scopes audits to a single file or directory. `VanillaAdapter` auto-selected for
+ out-of-docs targets.
+- **Plugin SDK**: `zenzic init --plugin ` scaffolds a ready-to-edit rule
+ package. `zenzic.rules` public namespace is stable — `BaseRule`, `RuleFinding`,
+ `CustomRule`, `Violation`, `Severity`.
+- **Hybrid Adaptive Engine**: `scan_docs_references` selects sequential or parallel
+ execution automatically based on repository size (threshold: 50 files).
+ Deterministic two-phase anchor validation eliminates race-induced false positives.
+- **Z001/Z002 Split**: broken links (Z001 error) vs orphan-page links (Z002 warning).
+ Without `--strict`, orphan warnings don't block the build.
+- **Mutation-tested**: 86.7% mutation score (242/279 killed on `rules.py`).
+ 706 tests, Hypothesis property-based testing with tiered profiles.
+- **`pyproject.toml` config**: embed Zenzic config in `[tool.zenzic]` when
+ `zenzic.toml` is absent. `zenzic.toml` always wins if both exist.
+- **Zenzic Shield**: credential detection (7 secret families) + path traversal
+ protection. Exit code 2 reserved for security events.
---
@@ -106,10 +107,6 @@ Zenzic provides an extensive, engineering-grade documentation portal:
---
-![Zenzic CLI Output][screenshot]
-
----
-
## What Zenzic checks
| Check | CLI command | What it detects |
@@ -331,25 +328,25 @@ fallback — for all documentation systems.
```bash
# Zero-install, one-shot audit
-uvx zenzic check all
+uvx --pre zenzic check all
# Global CLI tool — available in any project
-uv tool install zenzic
+uv tool install --pre zenzic
# Project dev dependency — version-pinned in uv.lock
-uv add --dev zenzic
+uv add --dev --pre zenzic
```
### With `pip`
```bash
# Global install (consider a virtual environment)
-pip install zenzic
+pip install --pre zenzic
# Inside a virtual environment (recommended)
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
-pip install zenzic
+pip install --pre zenzic
```
### Lean & Agnostic by Design
@@ -509,10 +506,10 @@ silently collapsed into a generic "file not found".
```yaml
- name: Lint documentation
- run: uvx zenzic check all
+ run: uvx --pre zenzic check all
- name: Check references and run Shield
- run: uvx zenzic check references
+ run: uvx --pre zenzic check references
```
Full workflow: [`.github/workflows/zenzic.yml`][ci-workflow]
@@ -569,6 +566,16 @@ nox -s preflight # zenzic check all (self-check)
---
+## Visual Tour
+
+The full Sentinel audit: banner, gutter context, caret underlines, and quality score breakdown.
+
+
+
+
+
+---
+
## Contributing
We welcome bug reports, documentation improvements, and pull requests. Before you start:
@@ -606,7 +613,6 @@ Apache-2.0 — see [LICENSE][license].
[docs-cicd]: https://zenzic.pythonwoods.dev/ci-cd/
[docs-arch]: https://zenzic.pythonwoods.dev/architecture/
[docs-contributing]: https://zenzic.pythonwoods.dev/community/contribute/
-[screenshot]: docs/assets/screenshots/screenshot.svg
[ci-workflow]: .github/workflows/zenzic.yml
[contributing]: CONTRIBUTING.md
[license]: LICENSE
diff --git a/docs/ci-cd.md b/docs/ci-cd.md
index 4648f36..9ba6e5f 100644
--- a/docs/ci-cd.md
+++ b/docs/ci-cd.md
@@ -85,10 +85,10 @@ The simplest integration — fails the build on any documentation error.
- uses: actions/checkout@v6
- name: Lint documentation
- run: uvx zenzic check all --strict
+ run: uvx --pre zenzic check all --strict
- name: Check references and run Shield
- run: uvx zenzic check references
+ run: uvx --pre zenzic check references
```
=== "astral-sh/setup-uv (pinned version)"
@@ -118,10 +118,10 @@ The simplest integration — fails the build on any documentation error.
enable-cache: true
- name: Lint documentation
- run: uvx zenzic check all --strict
+ run: uvx --pre zenzic check all --strict
- name: Check references and run Shield
- run: uvx zenzic check references
+ run: uvx --pre zenzic check references
```
The `enable-cache: true` option caches the uv tool cache across runs,
@@ -152,7 +152,7 @@ jobs:
- name: 🛡️ Run Zenzic Score
id: zenzic_step
run: |
- uvx zenzic score --save # threshold read from fail_under in zenzic.toml
+ uvx --pre zenzic score --save # threshold read from fail_under in zenzic.toml
SCORE=$(jq '.score' .zenzic-score.json)
echo "SCORE=$SCORE" >> "$GITHUB_OUTPUT"
@@ -191,8 +191,8 @@ jobs:
```yaml
- name: Detect score regression
run: |
- uvx zenzic score --save # update snapshot
- uvx zenzic diff --threshold 5 # fail if score drops > 5 points
+ uvx --pre zenzic score --save # update snapshot
+ uvx --pre zenzic diff --threshold 5 # fail if score drops > 5 points
```
Combine with branch protection rules to block merges that degrade documentation quality.
diff --git a/docs/configuration/index.md b/docs/configuration/index.md
index 8db2243..2004a84 100644
--- a/docs/configuration/index.md
+++ b/docs/configuration/index.md
@@ -11,7 +11,7 @@ Zenzic reads a single `zenzic.toml` file at the repository root. All fields are
!!! tip "Zero configuration"
- Most projects need no `zenzic.toml` at all. Run `uvx zenzic check all` — if it passes,
+ Most projects need no `zenzic.toml` at all. Run `uvx --pre zenzic check all` — if it passes,
you're done. Only add configuration when you need to customise specific behaviour.
---
diff --git a/docs/guide/index.md b/docs/guide/index.md
index da8171e..bfa3179 100644
--- a/docs/guide/index.md
+++ b/docs/guide/index.md
@@ -14,7 +14,7 @@ Zenzic is a **CI-first documentation linter** for any Markdown-based project. It
!!! tip "Zero install — run it now"
```bash
- uvx zenzic check all
+ uvx --pre zenzic check all
```
`uvx` downloads and runs Zenzic in a throwaway environment. Nothing is installed on your system.
diff --git a/docs/index.md b/docs/index.md
index 5274c78..a589413 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -27,7 +27,7 @@ Catch broken links, orphan pages, and leaked credentials — before your users d
-{ .zz-hero__screenshot }
+{ .zz-hero__screenshot }
diff --git a/docs/it/ci-cd.md b/docs/it/ci-cd.md
index d901d45..09af2bd 100644
--- a/docs/it/ci-cd.md
+++ b/docs/it/ci-cd.md
@@ -82,10 +82,10 @@ L'integrazione più semplice — blocca la build a qualsiasi errore di documenta
- uses: actions/checkout@v6
- name: Lint documentazione
- run: uvx zenzic check all --strict
+ run: uvx --pre zenzic check all --strict
- name: Controllo riferimenti e Shield
- run: uvx zenzic check references
+ run: uvx --pre zenzic check references
```
=== "astral-sh/setup-uv (versione fissata)"
@@ -115,10 +115,10 @@ L'integrazione più semplice — blocca la build a qualsiasi errore di documenta
enable-cache: true
- name: Lint documentazione
- run: uvx zenzic check all --strict
+ run: uvx --pre zenzic check all --strict
- name: Controllo riferimenti e Shield
- run: uvx zenzic check references
+ run: uvx --pre zenzic check references
```
L'opzione `enable-cache: true` mantiene la cache degli strumenti uv tra
@@ -149,7 +149,7 @@ jobs:
- name: 🛡️ Calcola Zenzic Score
id: zenzic_step
run: |
- uvx zenzic score --save # soglia letta da fail_under in zenzic.toml
+ uvx --pre zenzic score --save # soglia letta da fail_under in zenzic.toml
SCORE=$(jq '.score' .zenzic-score.json)
echo "SCORE=$SCORE" >> "$GITHUB_OUTPUT"
@@ -188,8 +188,8 @@ jobs:
```yaml
- name: Rileva regressione del punteggio
run: |
- uvx zenzic score --save # aggiorna snapshot
- uvx zenzic diff --threshold 5 # fallisce se il punteggio scende > 5 punti
+ uvx --pre zenzic score --save # aggiorna snapshot
+ uvx --pre zenzic diff --threshold 5 # fallisce se il punteggio scende > 5 punti
```
Combina con le branch protection rules per bloccare i merge che degradano la qualità della documentazione.
diff --git a/docs/it/configuration/index.md b/docs/it/configuration/index.md
index 0c6e075..1e71400 100644
--- a/docs/it/configuration/index.md
+++ b/docs/it/configuration/index.md
@@ -13,7 +13,7 @@ opzionali — Zenzic funziona senza alcun file di configurazione.
!!! tip "Configurazione zero"
La maggior parte dei progetti non ha bisogno di alcun `zenzic.toml`. Esegui
- `uvx zenzic check all` — se passa, hai finito. Aggiungi configurazione solo quando
+ `uvx --pre zenzic check all` — se passa, hai finito. Aggiungi configurazione solo quando
devi personalizzare un comportamento specifico.
---
diff --git a/docs/it/guide/index.md b/docs/it/guide/index.md
index 41c3016..f84a7aa 100644
--- a/docs/it/guide/index.md
+++ b/docs/it/guide/index.md
@@ -14,7 +14,7 @@ Zenzic è un **linter di documentazione CI-first** per qualsiasi progetto basato
!!! tip "Zero installazione — eseguilo ora"
```bash
- uvx zenzic check all
+ uvx --pre zenzic check all
```
`uvx` scarica ed esegue Zenzic in un ambiente temporaneo. Nessuna installazione richiesta.
diff --git a/docs/it/index.md b/docs/it/index.md
index aff9b67..7f3c9dd 100644
--- a/docs/it/index.md
+++ b/docs/it/index.md
@@ -27,7 +27,7 @@ Intercetta link non validi, pagine orfane e credenziali esposte — prima dei tu
-{ .zz-hero__screenshot }
+{ .zz-hero__screenshot }
diff --git a/docs/it/usage/index.md b/docs/it/usage/index.md
index cd88be1..1459569 100644
--- a/docs/it/usage/index.md
+++ b/docs/it/usage/index.md
@@ -24,7 +24,7 @@ Il repository include fixture mantenuti e allineati ai contratti documentati:
!!! tip "Vuoi eseguirlo subito?"
```bash
- uvx zenzic check all
+ uvx --pre zenzic check all
```
Nessuna installazione richiesta. `uvx` scarica ed esegue Zenzic in un ambiente temporaneo.
@@ -38,7 +38,7 @@ Il repository include fixture mantenuti e allineati ai contratti documentati:
=== ":simple-astral: uv"
```bash
- uvx zenzic check all
+ uvx --pre zenzic check all
```
`uvx` risolve ed esegue Zenzic da PyPI in un ambiente temporaneo. Nulla viene installato sul
@@ -48,7 +48,7 @@ Il repository include fixture mantenuti e allineati ai contratti documentati:
=== ":simple-pypi: pip"
```bash
- pip install zenzic
+ pip install --pre zenzic
zenzic check all
```
@@ -60,7 +60,7 @@ Il repository include fixture mantenuti e allineati ai contratti documentati:
=== ":simple-astral: uv"
```bash
- uv tool install zenzic
+ uv tool install --pre zenzic
zenzic check all
```
@@ -72,7 +72,7 @@ Il repository include fixture mantenuti e allineati ai contratti documentati:
```bash
python -m venv ~/.local/zenzic-env
source ~/.local/zenzic-env/bin/activate # Windows: .venv\Scripts\activate
- pip install zenzic
+ pip install --pre zenzic
```
Installa in un virtual environment dedicato, poi aggiungi la directory `bin/` al `PATH`.
@@ -82,7 +82,7 @@ Il repository include fixture mantenuti e allineati ai contratti documentati:
=== ":simple-astral: uv"
```bash
- uv add --dev zenzic
+ uv add --dev --pre zenzic
uv run zenzic check all
```
@@ -95,7 +95,7 @@ Il repository include fixture mantenuti e allineati ai contratti documentati:
```bash
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
- pip install zenzic
+ pip install --pre zenzic
zenzic check all
```
@@ -109,7 +109,7 @@ Questo significa che **non è necessario installare** MkDocs, Material for MkDoc
```bash
# Fare il lint di qualsiasi progetto MkDocs — nessun extra necessario
-uvx zenzic check all
+uvx --pre zenzic check all
```
!!! note "Adapter di terze parti"
diff --git a/docs/usage/index.md b/docs/usage/index.md
index f4da4b2..9c613a9 100644
--- a/docs/usage/index.md
+++ b/docs/usage/index.md
@@ -24,7 +24,7 @@ The repository ships maintained fixtures that mirror the documented contracts:
!!! tip "Just want to run it now?"
```bash
- uvx zenzic check all
+ uvx --pre zenzic check all
```
No installation required. `uvx` downloads and runs Zenzic in a throwaway environment.
@@ -38,7 +38,7 @@ The repository ships maintained fixtures that mirror the documented contracts:
=== ":simple-astral: uv"
```bash
- uvx zenzic check all
+ uvx --pre zenzic check all
```
`uvx` resolves and runs Zenzic from PyPI in a throwaway environment. Nothing is installed on
@@ -48,7 +48,7 @@ The repository ships maintained fixtures that mirror the documented contracts:
=== ":simple-pypi: pip"
```bash
- pip install zenzic
+ pip install --pre zenzic
zenzic check all
```
@@ -60,7 +60,7 @@ The repository ships maintained fixtures that mirror the documented contracts:
=== ":simple-astral: uv"
```bash
- uv tool install zenzic
+ uv tool install --pre zenzic
zenzic check all
```
@@ -72,7 +72,7 @@ The repository ships maintained fixtures that mirror the documented contracts:
```bash
python -m venv ~/.local/zenzic-env
source ~/.local/zenzic-env/bin/activate # Windows: .venv\Scripts\activate
- pip install zenzic
+ pip install --pre zenzic
```
Install into a dedicated virtual environment, then add the `bin/` directory to your `PATH`.
@@ -82,7 +82,7 @@ The repository ships maintained fixtures that mirror the documented contracts:
=== ":simple-astral: uv"
```bash
- uv add --dev zenzic
+ uv add --dev --pre zenzic
uv run zenzic check all
```
@@ -95,7 +95,7 @@ The repository ships maintained fixtures that mirror the documented contracts:
```bash
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
- pip install zenzic
+ pip install --pre zenzic
zenzic check all
```
@@ -109,7 +109,7 @@ This means you **do not need to install** MkDocs, Material for MkDocs, or any ot
```bash
# Lint any MkDocs project — no extras needed
-uvx zenzic check all
+uvx --pre zenzic check all
```
!!! note "Third-party engine adapters"