Skip to main content

Your Documentation, Fully Protected

Zenzic detects broken links, leaked credentials, and orphan pages before they reach production. No configuration required to start. No build engine invoked.


Experience it now — zero install required

uvx zenzic lab

zenzic lab launches an interactive showcase of every scanner in action: credential detection, broken links, orphan pages, path traversal guard enforcement. Run it against bundled fixtures and see the results in real time.

The full audit in one second — no installation, no setup:

uvx zenzic check all .

Learn more in the Interactive Lab tutorial


Two Instruments: Check and Score

zenzic check all is a binary gate. It emits a deterministic exit code based on findings detected within the analyzed scope. Exit 0 means no findings were detected.

Structural Integrity30 pts0 broken links
Navigation25 pts0 orphan pages
Content Excellence20 pts0 placeholders
Brand & Assets25 pts0 brand violations
🏆Quality Score:100 / 100◆ Zenzic Audit Badge
credential scanner: no credentials detected
path traversal guard: no path-traversal attempts
Files scanned: 47  ·  Elapsed: 0.28 s

zenzic score computes a 0–100 quality score using a weighted penalty model across four categories: Structural Integrity (30%), Navigation (25%), Brand & Assets (25%), Content Excellence (20%). A 100/100 means zero penalized findings within the analyzed scope. Excluded content is not evaluated. A score below 100/100 is a passing audit if it meets the configured fail_under threshold.

One absolute rule: any Z2xx finding collapses the score to 0/100 unconditionally, regardless of fail_under.

Full scoring model


Deterministic Failure Analysis: Before vs After Zenzic

ScenarioWithout Zenzic (Traditional Linter)With Zenzic
Broken LinkCI fails with generic error, no file/line/cause.ZenzicOutput: file, line, code (e.g. Z404), actionable fix, deterministic exit code.
Virtual Route (e.g. /blog/tags/python/)False positive (404): dynamic routes not resolved, forced to use ignore/regex.O(1) deterministic resolution via VRM: virtual route mapped to source_files without Node.js.
Credential LeakLinter may miss secrets in YAML/code blocks; no masking; incident may reach git history.Credential scanner: scans all content, masks secrets, halts pipeline (exitCode=2, Z201), never prints full secret.
Exit CodesNon-standard, ambiguous, or missing.Tiered: Z1xx (link integrity), Z2xx (security), Z4xx (structure), Z6xx (governance).

Example: ZenzicOutput for a Virtual Route finding

docs/guides/setup.md:14Z101Broken link → 'install.md' (target not found)
docs/guides/old-api.mdZ402Orphan page — not reachable from any navigation
docs/reference/config.md:3Z501Placeholder: "TODO: describe this parameter"
2 errors1 warningScore: 67 / 100Files: 42 · Elapsed: 0.31 s

This is not a lint check. It is a non-negotiable security gate.

How to act when credential scanner blocks a secret


Four Entry Points

Tutorials →From zero to a passing audit in 3 minutes.
How-to →Integrate with GitHub Actions for automated CI/CD checks.
Reference →Every flag, every Zxxx code, every option.
Explanation →How findings reduce the 100-point baseline and how fail_under sets your CI threshold.

Native GitHub Integration

.github/workflows/zenzic.yml

- uses: PythonWoods/zenzic-action@<version>

with:
format: sarif
upload-sarif: "true"

Findings appear as inline Pull Request annotations and in the Security tab — no log parsing, no custom scripts, no post-processing. The official PythonWoods/zenzic-action handles installation, execution, and SARIF 2.1.0 upload in a single workflow step.

Cross-platform verified: Ubuntu · Windows · macOS · Python 3.10–3.14.


"The Code is Law. The Documentation is Truth. Zenzic is vigilant."