release: v0.7.0 — Quartz Maturity (Stable) — Documentation Portal#44
Merged
Conversation
package.json: 0.0.0 -> 0.7.0 (mirrors core library release). package-lock.json: updated accordingly.
…/D092)
docusaurus.config.ts contains three independent changes:
1. i18n fix (D090): Added explicit path: "it" to localeConfigs.it — without
this, Docusaurus derives path from htmlLang ("it-IT") and silently serves
English content for all /it/ routes. Critical correctness fix.
2. Blog plugin (D092): Activated "The Zenzic Journal" blog. Changed from
blog: false to full plugin config with RSS feeds, postsPerPage: 5,
routeBasePath: "blog", blogTitle: "The Zenzic Journal".
3. Navbar badge (D088): Updated version badge label from v0.6.2 to v0.7.0.
Added "Journal" nav item linking to /blog/.
…D094)
Activates the Zenzic Engineering blog with 4 posts from the Obsidian arc:
2026-04-08 Part 1: Your Docs Are a Leaking Pipe
2026-04-15 Part 2: Ripping the Foundation Out of a Security Tool
2026-04-16 Part 3: AI-Driven Siege — Shield Postmortem (ZRT-006/007)
2026-04-22 Beyond the Siege: Why v0.7.0 Is the New Standard (exclusive)
Each post merges the Dev.to + Medium versions into a definitive edition.
Posts 1-3 include cross-published footers. All carry {/* truncate */} markers.
authors.yml: pythonwoods entry with https://github.com/PythonWoods.png avatar.
…lossary EN+IT (D087) finding-codes.mdx (EN+IT): - Z404 section rewritten as engine-agnostic: per-engine field tables, per-engine remediation snippets (Docusaurus, MkDocs, Zensical) - Shield bypass hardening section: 8-step normalization pipeline + ZRT-006/006b/007/007b table (already present, now confirmed current) ecosystem.mdx + safe-harbor.mdx (EN+IT): updated to reflect Z404 universal coverage and Standalone as canonical engine identity. glossary.mdx: Z404, Shield bypass hardening terms added.
faqs.mdx (EN+IT): new entry "My Italian pages show English content" explaining the htmlLang vs path mismatch root cause and the explicit path: "it" fix. README.md: §10 Troubleshooting — new "i18n Silent Fallback Trap" section. §11 PR Checklist — new i18n content verification item. discovery.mdx: updated to reflect Standalone Mode terminology and v0.7.0 engine coverage.
first-audit.mdx: install command updated from --pre to stable release, engine references include Standalone as option, Z404 check shown in walkthrough. examples.mdx: mkdocs-z404 and zensical-z404 fixtures documented; Standalone Mode example updated from vanilla/ reference.
Hero.tsx: updated headline and CTA copy for v0.7.0 "Quartz Maturity". Quickstart.tsx: install command uses stable release, Z404 added to feature list. index.tsx: updated feature cards to include universal Z404 and Lab acts 9-10.
.github/workflows/release.yml: new workflow for automated GitHub releases
on tag push (v*). Builds the Docusaurus site and attaches brand-kit.zip.
scripts/bump-version.sh: version bump helper — updates package.json,
docusaurus.config.ts badge (>v{old}< pattern), and i18n/en/code.json.
justfile: added release, verify-full, and bump recipes for v0.7.0 workflow.
en/code.json: new keys for Journal nav label, blog sidebar labels, and v0.7.0 Quartz Maturity badge. it/code.json: Italian translations provided for all new keys.
…ocial card (D096) Add static/assets/brand/zenzic-brand-system.html — a hardware-manual precision brand reference document modeled on the PythonWoods brand system format. Sections: - Logomark: The Zenzic Artifact (4-quadrant slash identity) — dark bg, light bg, favicon sizes (48/32/16 px), horizontal wordmark (dark + light variants) - Social Card: 1200×630 OG image inline SVG (v0.7.0 · Quartz Maturity) - Sentinel Palette: Identity (Harbor Cyan #38bdf8, Sentinel Indigo #4f46e5), Signals (Blood #FF3B30, Magenta #FF2D73), Surface (Obsidian, Slate, Zinc, Ghost) - Typography: Barlow Condensed (display), IBM Plex Mono (code/UI/labels), scale specimen - Badges: Shield + Score static SVG references with dynamic Shields.io pointer - Usage Laws: Do / Do Not / Voice — three-column precision table Style: IBM Plex Mono body, Barlow Condensed section headers, 1px separator rules, 9px/11px all-caps tracked labels, Obsidian dark theme (#0B0C0F base). Linked from docs/community/brand-kit.mdx and i18n/it equivalent using pathname:/// prefix (bypasses Docusaurus onBrokenLinks check for static assets). Build verified [SUCCESS] EN + IT.
…+ badge stretch fix
bump-version.sh step 7: update static/assets/brand/zenzic-brand-system.html
- Replace v{OLD} → v{NEW} for every version occurrence in the file
- Extract codename from quoted badge string (e.g. "Quartz Maturity")
and replace all three case variants used in the HTML:
Title Case, ALL CAPS, all lowercase
- Gracefully skips if pattern not found (⚠ warning, no crash)
Verified: dry-run hits 4 replacements across title, page-title, social card SVG,
and typography specimen.
brand-system.html fixes:
- Typography System: aligned to actual site font stack
Inter 700/600/500/400 (headings + body) — matches custom.css
JetBrains Mono (code/UI) — matches custom.css
IBM Plex Mono retained for brand-system labels only (section headers)
Removed Barlow Condensed from type specimens (was incorrect — not used in site UI)
Scale specimen updated: 32/24/16/14/12/9 with correct font per role
- Badges: added align-items:flex-start to .badge-item to prevent SVG horizontal stretch
…l surfaces Social card SVG (social-card.svg): - Background: #0d1117 (GitHub Dark) → #09090b (Sentinel Lead canonical) - Decorative circle: #161b22 → #111118 - Version text: v0.6.1 · OBSIDIAN GLASS → v0.7.0 · OBSIDIAN MATURITY Brand System HTML (zenzic-brand-system.html): - CSS vars: --obsidian #09090b, --slate #0f0f13 (match --ifm-background-surface-color) - Inline social card SVG: same alignment (#09090b bg, #111118 circle) - Palette Surface swatches: renamed to 'Sentinel Lead #09090b (Primary BG)' and 'Void #0f0f13 (Surface)' — exact values from custom.css dark theme Sentinel Lead (#09090b) is now the single canonical background token across: custom.css [data-theme=dark] --ifm-background-color .zz-homepage background-color social-card.svg fill zenzic-brand-system.html --obsidian var
…llow-up)
Audit result:
✓ zenzic-icon-512.png — aligned
✓ zenzic-nav-dark.png — aligned
✓ zenzic-nav-light.png — aligned
✓ zenzic-wordmark.png — aligned
✗ social-card.png — v0.6.1 · OBSIDIAN GLASS (stale)
✗ social-card-light.svg+png — 'DOCUMENTATION SECURITY LAYER' (legacy tagline)
Fixes:
- social-card.png: regenerated from D097 SVG (v0.7.0 · OBSIDIAN MATURITY, bg #09090b)
- social-card-light.svg: tagline corrected
'DOCUMENTATION SECURITY LAYER' → 'THE SAFE HARBOR FOR MARKDOWN DOCUMENTATION'
+ added version line: v0.7.0 · OBSIDIAN MATURITY (Indigo #4f46e5)
- social-card-light.png: regenerated via cairosvg (1200×630)
bump-version.sh steps 8 + 9:
Step 8 — update v{old} in both social-card.svg and social-card-light.svg;
also replace codename ALL-CAPS variant in SVG text elements
Step 9 — auto-regenerate both PNGs via cairosvg after SVG update;
graceful fallback with install instructions if cairosvg absent
Step 9 expanded — MANIFEST-driven brand PNG regeneration via cairosvg (pure Python): - 4 brand PNGs: icon-512 (512×512), nav-dark/light (640×180), wordmark (600×120) - 2 social card PNGs: dark + light (1200×630) - Mirror copies: static/brand/png/ → static/assets/brand/png/ via shutil.copy2 Step 10 new — brand-kit.zip rebuilt via Python zipfile stdlib: - Mirrors build-assets.js logic: static/brand/ (prefix: brand) + static/assets/social/ (prefix: social) - Pure Python: zipfile.ZipFile + ZIP_DEFLATED — zero Node/subprocess dependency - Runs after every bump ensuring zip always contains fresh PNGs Also: brand PNGs and brand-kit.zip regenerated from current SVG sources (dry-run verified). Zero subprocess calls throughout — aligned with Zenzic determinism pillar.
Architectural Gaps & Technical Debt — Resolved section (EN + IT): BRAND-001 (D096): brand-system.html static asset — pathname:/// pattern, font alignment BRAND-002 (D097): Sentinel Lead #09090b unified across social-card.svg, brand-system.html CSS vars, inline SVG; PNGs regenerated INFRA-001 (D097 follow-up): bump-version.sh MANIFEST-driven PNG pipeline (cairosvg pure Python, 6 PNGs, shutil mirrors, zipfile ZIP_DEFLATED), zero subprocess — aligned with Pillar 2 Commits referenced: 1603dc4, 1224309, 070021d, 1cd712f
D098 — Sidebar & archive: blogSidebarTitle: 'All posts', blogSidebarCount: 'ALL' admonitions: true explicit in blog config D099 — Journal Taxonomy (4-post structure): blog/2026-01-15: v0.6.0a1 The Sentinel (engineering) — Alpha Chronicle :::info blog/2026-03-15: v0.6.1rc2 Obsidian Bastion (security) — RC Chronicle :::info blog/2026-04-16: Operation Obsidian Stress post-mortem (security, post-mortem) blog/2026-04-22: v0.7.0 Quartz Maturity (release) — stable announcement tags.yml: semantic registry (release/security/engineering/community/post-mortem) existing posts: tags migrated to semantic vocabulary D100 — UI Hardening: tags.yml: emoji removed from labels → no more broken anchor (#FFFD) warnings custom.css: semantic tag colours (indigo/blood/cyan/slate/emerald) custom.css: blog list card layout (border separator, margin, hover cyan title) custom.css: article header border-bottom Indigo accent custom.css: Sentinel Lead background on blog hero containers i18n: 4 IT translations in docusaurus-plugin-content-blog (full parity) Build: EN + IT SUCCESS, zero broken anchors
Admonitions (EN + IT, all 10 blocks):
Reformed to :::info[Title] bracket syntax + mandatory blank lines inside.
Before: ':::info Title\nContent\n:::' → After: ':::info[Title]\n\nContent\n\n:::'
Covers: Part1/Part2/Part3/v0.7.0 :::info, Methodology :::note,
v0.6.0a1/v0.6.1rc2 Chronicle blocks (EN + IT)
Title rename (EN + IT):
blog/2026-04-22: 'Beyond the Siege...' → 'Zenzic v0.7.0 — Quartz Maturity'
i18n/it: 'Oltre l'Assedio...' → 'Zenzic v0.7.0 — Quartz Maturity'
CSS border hardening (custom.css):
article separator: rgba(100,116,139,0.2) → rgba(255,255,255,0.07) (ethereal)
article header: rgba(79,70,229,0.15) → rgba(255,255,255,0.08) (shadow, not cut)
hover glow: rgba(79,70,229,0.35) → rgba(79,70,229,0.2) (restrained)
Removed duplicate header rule, unified into single block after tag colours
authors.yml: image_url https://github.com/PythonWoods.png confirmed correct (no change)
social-card: all posts use social-card.png #09090b confirmed (no change)
…hint - Blog prose column capped at 820px (narrower than docs for readability) - article header::before: radial-gradient ellipse 70%×120% at 50% 0% rgba(79,70,229,0.05) → transparent — Indigo at 5%, intuition of light - isolation: isolate on article header to contain ::before z-index
Left = Light = Primary (Read the full docs →) Right = Dark/Outline = Secondary (Star on GitHub) Mirrors Hero section hierarchy: action first, social second. EN + IT handled via existing Translate IDs (no code.json changes needed).
Task 1 - Truth Sync: blog/2026-04-22: 1,046 tests -> 1,130+ tests (v0.7.0 announcement) blog/2026-04-16: 1,046 passing tests -> 1,130+ passing tests (postmortem) Task 2 - Layout Purge: Remove inline social-card hero image from all 6 EN blog posts Remove inline social-card hero image from all 4 IT blog posts OG image: tag preserved in frontmatter for social sharing custom.css: blog post prose paragraph breathing room (1.4rem gap, 1.8 lh) Task 3 - Obsidian Admonitions: custom.css: .alert base background -> rgba(79,70,229,0.03) Indigo glass custom.css: .alert base border -> 1px solid rgba(79,70,229,0.2) Indigo veil Left accent border retains per-type color via --ifm-alert-border-color Build: EN + IT SUCCESS, typecheck clean
Task 1 - Adaptive CSS Variables (custom.css):
:root: light-mode primary -> #3730a3 (Indigo inchiostro, WCAG 7.9:1 on white)
[data-theme=light]: --obsidian-accent: #0891b2 (Cyan profondo)
--obsidian-blood: #991b1b (Rosso mattone)
[data-theme=dark]: --obsidian-accent: #06b6d4 (Cyan elettrico)
--obsidian-blood: #8b0000 (Sangue profondo)
Replace 5x hardcoded #22d3ee with var(--obsidian-accent) across:
- Engineering tag chip
- Blog list card h2 hover
- Sidebar "All posts" link hover
- Sidebar year group link hover
- Archive card title hover
Task 2 - Brand System Accessibility (zenzic-brand-system.html):
New §08 "Accessibility & Themes" section:
- Side-by-side dark/light panel with swatch + ratio per colour
- CSS Variable Contract table (variable / dark / light / role)
- Law: never hardcode accent hex in component styles
Build: EN + IT SUCCESS, typecheck clean
Replace background-color: var(--ifm-background-color) with transparent on blog-wrapper, blog-post-page, theme-blog-post-container, docMainContainer, and main in dark mode. Containers no longer carry their own background layer — they become windows onto the single #09090b body surface defined by --ifm-background-color on [data-theme=dark]. In light mode the rule is scoped to dark only, so Infima defaults (white/f6f8fa surfaces) are unaffected. Audit: no other background-color rules found on blog or doc containers. Build: EN + IT SUCCESS
D112/D113 — Zinc Standard Typography (light mode): --ifm-heading-color: #18181b (Zinc-900 — solid, authoritative) --ifm-font-color-base: #27272a (Zinc-800 — premium readability) --ifm-color-emphasis-600: #71717a (Zinc-500 — metadata/secondary) Sidebar active: background #f4f4f5 (Zinc-100), text Indigo D114 — The Author's Signature: --obsidian-author-signature: #3730a3 (Indigo-800 — ink-grade, reserved) .avatar__name a: static Indigo-800, hover ignites to #4f46e5 (Vibrant Indigo) Brand system §08: Zinc-900/800/500 typography scale documented with contrast ratios --ifm-heading-color + --ifm-font-color-base rows added to CSS Variable Contract --obsidian-author-signature row: dark — / light #3730a3 Author's Signature Doctrine prose panel added Law updated to include all three semantic vars Build: EN + IT SUCCESS
…ding-color Blog list titles are rendered as <h2><a href> — the link's color property (--ifm-link-color: #3730a3 Indigo) overrides the inherited --ifm-heading-color. Fix: explicit [data-theme='light'] rules for article h2 a and .blog-post-page h1. - article h2 a: Zinc-900 (#18181b), hover Zinc-700 (#3f3f46) - .blog-post-page h1: Zinc-900 enforced Not a cache issue — a CSS specificity issue.
Light: --ifm-heading-color: #3f3f46 (Zinc-700 — autorevole senza eccesso di nero) article h2 a: Zinc-700, hover Zinc-600 #52525b .blog-post-page h1: Zinc-700 Dark: article h2 a: Zinc-200 #e4e4e7 (da Indigo #a5b4fc — meno scolastico) Build: EN + IT SUCCESS
Replaces D115 left-arrow with right-aligned arrow on blog sidebar links. Layout: - flex + justify-content:space-between keeps title sovereign at left - ::after arrow lives at the right edge — invisible at rest - overflow:hidden + text-overflow:ellipsis guards against long titles Interaction: - rest: arrow hidden (opacity:0), offset left by 6px - hover: arrow slides in (translateX 0), opacity:1, Cyan accent - active: arrow fixed at 0.75 opacity, Indigo primary colour Build: EN + IT SUCCESS
…update - engines.mdx (EN + IT): pathname:/// escape-hatch documented; scope and engine-applicability table added. - cli.mdx (EN + IT): --no-color / --force-color flags documented. - finding-codes.mdx: Z404 rewritten as engine-agnostic (all three adapters).
…precation guard, traceability warning
…s to status/code/exitCode API (EN + IT)
…e; CHANGELOG Sprint A/B/C + Phase 1-2-3
…ode, SentinelOutput su exit failure (EN+IT)
…ent pre-launch exception pattern (EN+IT)
…add eslint hook to pre-commit
Sprint D100 — zenzic-doc site update. ## finding-codes.mdx (EN + IT) - Z204 FORBIDDEN_TERM section added: overview, exit code contract, two-layer architecture table (Shield + Config layer), .zenzic.local.toml configuration example, suppression note - Exit code contract table updated (Exit 2 row includes Z204) ## architecture-gaps.mdx (EN + IT) - D100 entry: .zenzic.dev.toml hard-removed; .zenzic.local.toml is sole authority; Z204 sealed the gap ## RELEASE.md (site mirror) - EPOCH 8 Privacy Gate section propagated ## blog/2026-05-05-log-v070-quartz.mdx - Sprint D100 progress log entry ## docs/how-to/manage-cross-site-links.mdx (EN + IT) - ZRT-006 coordinated update ## zenzic.toml - Self-check configuration update Sentinel Seal: zenzic check all --no-external --strict ✅
…RLs) Release tag and blog index URLs do not exist until v0.7.0 GA. Hardcode --no-external in pre-commit-zenzic.sh to avoid false-positive EXTERNAL_LINK failures during the pre-release window. TODO: remove --no-external after GA is published and site is deployed.
--no-external is injected via CI (ZENZIC_EXTRA_ARGS). No hardcoded flags in the script — all flag control stays in the pipeline configuration.
- Add ubuntu-latest + windows-latest matrix (fail-fast: false) - Set defaults: run: shell: bash for cross-platform determinism - Add PYTHONUTF8: '1' to prevent Windows encoding errors in Python - Inject ZENZIC_EXTRA_ARGS with 5 --exclude-url entries for known- transient zenzic.dev/ paths and v0.7.0 pre-release GitHub tag URL
Replace hardcoded 'bash -c' inline command with 'bash scripts/pre-commit-zenzic.sh' so ZENZIC_EXTRA_ARGS is propagated correctly during local pre-commit validation. Closes the silent bypass where the 404 shield was applied in CI but not in local pre-commit hooks.
ESLint v9+ deprecates .eslintignore. Migrate virtual env directories (.venv/, venv/) and the checked-out zenzic core (_zenzic_core/) into the ignores array of eslint.config.mjs flat configuration. Prevents false-positive lint errors on vendored/generated files.
Wrap Docusaurus BlogPostItemHeaderAuthors with a guard that returns null when metadata.authors is empty or absent. Eliminates the 'No co-author' placeholder displayed on solo-authored blog posts without requiring changes to individual MDX front-matter.
…ection Add 'Sovereign Override (404 Shield)' lifecycle guide covering when to apply, how to propagate through justfile/pre-commit/CI, and when to retire the exclusion. Italian mirror at i18n/it/.../ for Z907 parity. Add 'Sovereign Override' emergency-protocol section to CONTRIBUTING.md linking contributors to the MDX guide for deep architecture context.
…ZIC_EXTRA_ARGS Add Sovereign Override KB article entry (EN+IT, Z907 parity). Add CONTRIBUTING Sovereign Override section entry. Expand ESLint entry: .eslintignore → eslint.config.mjs flat config migration. Add pre-commit 404 shield parity entry (shared script propagation). Add ZENZIC_EXTRA_ARGS CI env block entry with 5 --exclude-url entries.
…cture docs RE2/DFA - package.json: Docusaurus 3.10.0→3.10.1 (@docusaurus/core, faster, preset-classic, module-type-aliases, tsconfig, types), lucide-react 1.8.0→1.14.0, postcss→8.5.14 (security: XSS via unescaped </style>) - package-lock.json: regenerated after bump - ci.yml: remove OS matrix — single ubuntu-latest job (Node LTS); zenzic-doc has no OS-specific surface area that warrants Windows validation - CHANGELOG (EN+IT): ZRT-008 Dependabot consolidation entry - CITATION.cff: date-released 2026-05-07 - architecture.mdx (EN+IT): add DFA Guarantee / RE2 Engine section (ZRT-007); remove stale Z009 timeout cross-references
…tract, wrapper architecture New explanation page documenting zenzic-action internals for security reviewers and platform integrators: - Two-layer architecture: action.yml → wrapper.sh → uvx zenzic check - Blood Sentinel Protocol and exit code contract (0/1/2/3) - Root-First Sentinel cascade (input validation before scanning) - Sovereign Intent Contract: ZENZIC_EXTRA_ARGS glob-safety (set -f guard) - Bilingual parity: EN + IT (184 lines each)
… in github-action-internals Architecture diagram and config discovery priority table were missing language specifiers — tagged as `text` to satisfy Z505. Bilingual parity maintained (EN+IT).
…tup-core recipe
ZRT-010: eliminate CI/local divergence for the Pre-Launch Guard and core path.
justfile:
- zenzic_project default: ../zenzic → _zenzic_core (mirrors CI CORE_REF checkout)
- check recipe: inline Pre-Launch Guard array (bash shebang); remove ZENZIC_EXTRA_ARGS
passthrough — local and CI now run identical invocations
- sentinel recipe: delegate to 'just check' (single source of truth)
- setup-core: clone or update _zenzic_core/ with CORE_REF branch logic
- clean-core: rm _zenzic_core/ cache
scripts/pre-commit-zenzic.sh:
- resolution order: _zenzic_core/ → $ZENZIC_PROJECT_PATH → ../zenzic (deprecated)
- inline Pre-Launch Guard (parity with justfile)
- remove ${ZENZIC_EXTRA_ARGS:-} passthrough
.pre-commit-config.yaml:
- zenzic-check hook entry: bash scripts/pre-commit-zenzic.sh → just check
.github/workflows/ci.yml:
- remove ZENZIC_EXTRA_ARGS from env block (guard lives in justfile now)
…--project - Removes zenzic_project variable and _zenzic_core symlink/clone dependency - Adds core_ref (default: zenzic==v0.7.0); local override via ZENZIC_CORE_REF - Removes setup-core and clean-core recipes (no longer needed) - Achieves full parity with CI: same binary, same version, same invocation - just check works offline once uvx has cached the package
Blog: - Renamed 2026-05-05-* → 2026-05-07-* (v0.7.0 release day alignment) - date: frontmatter updated to 2026-05-07T10:00:00 in both posts - Test count: 1,342+ → 1,485+ in log, Quartz Maturity table, governance saga V row Python floor (3.11→3.10, range 3.11-3.13→3.10-3.14) EN+IT: - docs/index.mdx, faqs.mdx, why-zenzic.mdx, structural-integrity.mdx, health-metrics.mdx - i18n/it mirrors of all the above install.mdx (EN+IT): tip callout now shows uvx as the primary quick-start command
Same fix applied to zenzic-core (commit c9a9d48): without this scope the hook fires when pre-commit runs in --all-files mode on main (e.g. during just verify after a web merge), turning the CI red despite no real commit being made to a protected branch.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Merge of
release/v0.7.0intomainfor thezenzic-docportal.Tracks the Core at parity under the Branch Parity Rule.
What ships
Editorial
tutorials/first-audit.mdx(EN+IT):blog/is detected fromdocusaurus.config.tswith zero TOML configuration.docs/how-to/,docs/explanation/,docs/tutorials/(EN+IT, 12 files).Technical components
SentinelOutputAPI v2:statusdiscriminant (success | error | warning | inspect | breach) withcode,exitCode,traceabilityprops.variantpreserved with deprecation warning.VSMVisualizer: new component rendering the Virtual Site Map tree with physical/virtual/violation node distinction.finding-codes.mdxmigrated (8 usages, EN+IT) to Phase 1 contract — Absolute Traceability from prose to Zxxx code.absolute_path_allowlistTOML block removed — auto-detected byDocusaurusAdapter.get_absolute_url_prefixes().reference/engines.mdx, developer track inexplanation/discovery.mdx(EN+IT).Infrastructure
tutorials/,how-to/,reference/,explanation/).static/assets/brand/brand-kit.zip(SVG, PNG, social cards).npm run buildzero broken links.no-commit-to-branchscoped tostages: [pre-commit]— consistent with Core.Checklist
npm run buildclean (EN + IT)just verifygreen