diff --git a/README.md b/README.md
index fe7d8d9..0e5d629 100644
--- a/README.md
+++ b/README.md
@@ -59,10 +59,9 @@ Measured throughput, cold-start, bundle-size, validation, and explanation overhe
### Methodology and inspectability
-- Benchmark methodology and result contract: [`docs/benchmarks/methodology.md`](docs/benchmarks/methodology.md)
-- Explainability proof metadata and alt text: [`docs/benchmarks/assets/generated/explainability-trace-diagram.md`](docs/benchmarks/assets/generated/explainability-trace-diagram.md)
-- Visual proof system and publication guardrails: [`docs/benchmarks/visual-proof-system.md`](docs/benchmarks/visual-proof-system.md)
-- Playground README demo capture spec: [`docs/playground/readme-demo-capture.md`](docs/playground/readme-demo-capture.md)
+- Benchmark methodology (how each metric is measured): [`docs/benchmarks/methodology.md`](docs/benchmarks/methodology.md)
+- AI-rule safety (why AI-drafted rules need validation): [`docs/benchmarks/ai-rule-safety.md`](docs/benchmarks/ai-rule-safety.md)
+- Proof overview and explainability diagram: [`docs/benchmarks/`](docs/benchmarks/)
---
@@ -184,7 +183,7 @@ Available adoption assets:
- Runnable examples: [`examples/`](examples/) including n8n and LangGraph workflow automation recipes
- JSON Schemas, validation, and explain output: [`docs/schemas-validation-explainability.md`](docs/schemas-validation-explainability.md)
-- Benchmark methodology, visual proof, and playground capture specifications: [`docs/benchmarks/`](docs/benchmarks/) and [`docs/playground/readme-demo-capture.md`](docs/playground/readme-demo-capture.md)
+- Measured benchmarks, methodology, and AI-rule-safety proof: [`docs/benchmarks/`](docs/benchmarks/)
- Comparison and migration guides: [`docs/comparisons/`](docs/comparisons/) for choosing and migrating from json-rules-engine, JsonLogic, node-rules, and hand-written if/else
- AI-readable docs: [`docs/ai-coding-assistants.md`](docs/ai-coding-assistants.md), [`docs/public/llms.txt`](docs/public/llms.txt), [`docs/public/llms-full.txt`](docs/public/llms-full.txt), and [`docs/public/skills/neuron-js/SKILL.md`](docs/public/skills/neuron-js/SKILL.md)
diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts
index 689f787..f7494b0 100644
--- a/docs/.vitepress/config.ts
+++ b/docs/.vitepress/config.ts
@@ -44,16 +44,12 @@ export default defineConfig({
]
},
{
- text: 'Proof Assets',
+ text: 'Benchmarks & Proof',
items: [
- { text: 'Benchmarks & Visual Proof', link: '/benchmarks/' },
+ { text: 'Overview', link: '/benchmarks/' },
{ text: 'Benchmark Results', link: '/benchmarks/results' },
- { text: 'Benchmark Methodology', link: '/benchmarks/methodology' },
- { text: 'Visual Proof System', link: '/benchmarks/visual-proof-system' },
- { text: 'Benchmark Visual Pack', link: '/benchmarks/benchmark-visual-pack' },
- { text: 'Playground Capture Spec', link: '/playground/readme-demo-capture' },
- { text: 'Prompt Kit', link: '/benchmarks/prompt-kit' },
- { text: 'Asset Folder', link: '/benchmarks/assets/' }
+ { text: 'Methodology', link: '/benchmarks/methodology' },
+ { text: 'AI-Rule Safety', link: '/benchmarks/ai-rule-safety' }
]
},
{
diff --git a/docs/benchmarks/ai-rule-safety.md b/docs/benchmarks/ai-rule-safety.md
new file mode 100644
index 0000000..7c3e85d
--- /dev/null
+++ b/docs/benchmarks/ai-rule-safety.md
@@ -0,0 +1,49 @@
+# AI-rule safety
+
+LLMs are great at *drafting* JSON business rules — and that's exactly the risk. A
+plausible-looking rule can still encode the wrong field, the wrong threshold, or the wrong
+action. Neuron-JS exists so AI-drafted rules become **safe to run**: schema-validated,
+constrained to a developer-owned vocabulary, reviewable like code, and explainable after the
+fact.
+
+> AI drafts. Neuron-JS verifies.
+
+## 1. AI can draft rules
+
+A plausible JSON rule can still encode the wrong assumption, field, or action — it is not
+production-ready on its own.
+
+
+
+## 2. Validate before runtime
+
+Schema-first checks (`validateScript`) reject malformed scripts before they ever execute, and
+return the exact JSON path to fix.
+
+
+
+## 3. Constrain what can run
+
+A developer-owned registry defines the approved actions, conditions, parameters, and rules.
+Anything outside that vocabulary simply cannot execute — no arbitrary code.
+
+
+
+## 4. Review like code
+
+Generated rules are serializable data, so they go through the same governance as code: tests,
+owner approval, and rollback — never automatic AI approval.
+
+
+
+## 5. Then execute deterministically
+
+Synapse runs the approved rule path deterministically, and the explanation trace shows why the
+decision matched or failed — ready for audit, logs, or a support ticket.
+
+
+
+## In short
+
+`Validate → constrain → test → approve → execute → explain.` Deterministic workflow logic with
+auditability is the guardrail that makes AI-assisted business rules safe to ship.
diff --git a/docs/benchmarks/assets/README.md b/docs/benchmarks/assets/README.md
deleted file mode 100644
index 8f0f4c3..0000000
--- a/docs/benchmarks/assets/README.md
+++ /dev/null
@@ -1,68 +0,0 @@
-# NJS-GROWTH-07 benchmark asset folder
-
-Recommended folder for visual proof assets:
-
-```text
-docs/benchmarks/assets/
- README.md
- source-data/
- benchmark-results.example.json
- benchmark-results.schema.json
- prompts/
- benchmark-infographic.md
- explainability-trace-diagram.md
- playground-readme-gif-storyboard.md
- ai-rule-safety-carousel.md
- readme-proof-strip.md
- storyboard/
- playground-readme-gif.md
- ai-rule-safety-carousel.md
- generated/
- benchmark-chart-throughput.svg
- benchmark-chart-cold-start.svg
- benchmark-chart-bundle-size.svg
- benchmark-chart-validation-overhead.svg
- benchmark-chart-explanation-overhead.svg
- explainability-trace-diagram.svg
- readme-proof-strip.svg
-```
-
-## Folder rules
-
-- `source-data/` stores benchmark input data and schemas only. Generated assets must cite these files when they include measurements.
-- `prompts/` stores frozen prompts copied or split from `docs/benchmarks/prompt-kit.md` for repeatable generation. The benchmark chart prompt set lives at `prompts/benchmark-chart-prompts.md`; the methodology card prompt lives at `prompts/methodology-infographic.md`.
-- `storyboard/` stores GIF/clip scripts, frame lists, and capture notes.
-- `generated/` stores exported SVG/PNG/GIF/MP4 assets.
-
-## Data integrity rules
-
-- Do not place fabricated benchmark results in `source-data/`.
-- Example files must be named `.example.*` and must use obviously non-claiming values or schema-only structures.
-- Real benchmark files must include `node_version`, `package_version`, `commit_sha`, `warmup_iterations`, and `measured_iterations`.
-- Any generated benchmark chart must name its source data file in adjacent metadata or in the SVG metadata block.
-
-## Generated assets
-
-Current generated proof assets:
-
-- `generated/methodology-card.svg`: 16:9 methodology card explaining no-fabricated-benchmark rules without performance numbers.
-- `generated/explainability-trace-diagram.svg`: 16:9 SVG diagram showing business input -> schema validation -> registry -> rule evaluation -> match/fail trace -> deterministic decision.
-- `generated/explainability-trace-diagram.html`: browser preview wrapper with caption and alt text.
-- `generated/explainability-trace-diagram.md`: source grounding, caption, alt text, integrity notes, and export notes.
-
-## Accessibility rules
-
-Every final asset needs:
-
-- Alt text.
-- Source data link when metrics appear.
-- Color contrast check notes.
-- Export dimensions.
-- Creation date and generator/tool used.
-
-## README integration rule
-
-The README proof strip should not be merged into the README until either:
-
-1. it contains no benchmark numbers and is clearly a proof-structure asset; or
-2. it uses real benchmark output from the harness and cites the exact source data.
diff --git a/docs/benchmarks/assets/asset-manifest.md b/docs/benchmarks/assets/asset-manifest.md
deleted file mode 100644
index eec3fe1..0000000
--- a/docs/benchmarks/assets/asset-manifest.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# Benchmark visual asset manifest
-
-Status: the five benchmark charts are generated from measured `actual_benchmark` output (`benchmarks/results/latest.actual.json`) by `benchmarks/charts/generate.ts`. See [benchmark results](../results.md). The prompts below remain as the design spec and regeneration reference.
-
-## Draft prompt assets
-
-| Asset | Path | Claim status | Source dependency |
-| --- | --- | --- | --- |
-| Throughput chart prompt | `prompts/benchmark-chart-prompts.md#throughput-comparison-chart` | No numeric claim | actual benchmark output required |
-| Cold-start chart prompt | `prompts/benchmark-chart-prompts.md#cold-start-comparison-chart` | No numeric claim | actual benchmark output required |
-| Bundle-size chart prompt | `prompts/benchmark-chart-prompts.md#bundle-size-comparison-chart` | No numeric claim | actual benchmark output required |
-| Validation-overhead chart prompt | `prompts/benchmark-chart-prompts.md#validation-overhead-chart` | No numeric claim | actual benchmark output required |
-| Explanation-overhead chart prompt | `prompts/benchmark-chart-prompts.md#explanation-overhead-chart` | No numeric claim | actual benchmark output required |
-| Methodology card prompt | `prompts/methodology-infographic.md` | Methodology only, no performance claim | `docs/benchmarks/methodology.md` |
-
-## Generated output paths
-
-Charts generated from measured benchmark output:
-
-- `generated/benchmark-chart-throughput.svg`
-- `generated/benchmark-chart-cold-start.svg`
-- `generated/benchmark-chart-bundle-size.svg`
-- `generated/benchmark-chart-validation-overhead.svg`
-- `generated/benchmark-chart-explanation-overhead.svg`
-
-Methodology-only (no performance numbers):
-
-- `generated/methodology-card.svg`
-
-AI-rule-safety carousel (qualitative, no performance numbers):
-
-- `generated/ai-rule-safety-carousel-1.svg` … `-5.svg`
-
-## Publication blocker
-
-Benchmark charts publish only from a source file that satisfies `result_kind: "actual_benchmark"`, `is_placeholder: false`, and `claims_allowed: true`. The committed charts were generated from such a file; regenerate with `yarn benchmark && yarn benchmark:charts` after any data change.
diff --git a/docs/benchmarks/assets/generated/ai-rule-safety-carousel.md b/docs/benchmarks/assets/generated/ai-rule-safety-carousel.md
deleted file mode 100644
index 22170f7..0000000
--- a/docs/benchmarks/assets/generated/ai-rule-safety-carousel.md
+++ /dev/null
@@ -1,46 +0,0 @@
-# AI-rule-safety carousel — asset metadata
-
-Generated proof asset for the NJS-GROWTH-07 AI-generated-rule safety carousel.
-
-- Asset files: `ai-rule-safety-carousel-1.svg` … `ai-rule-safety-carousel-5.svg`
-- Prompt/script source: [`../prompts/ai-rule-safety-carousel.md`](../prompts/ai-rule-safety-carousel.md)
-- Storyboard: [`../storyboard/ai-rule-safety-carousel.md`](../storyboard/ai-rule-safety-carousel.md)
-- Export dimensions: 1080 × 1350 (4:5 vertical), SVG vector source
-- Recommended surfaces: LinkedIn carousel, X image thread, GitHub discussion image set, docs proof-assets page
-- Created: 2026-06-23
-- Generator/tool: hand-authored SVG (same visual system as `explainability-trace-diagram.svg`)
-
-## Integrity
-
-Qualitative safety/governance content. No benchmark numbers, no performance or
-superiority claims, no fabricated metrics. Color system: cyan execution path,
-emerald validation/pass, violet trace/audit, amber LLM draft, rose blocked path,
-on a slate `#020617` background.
-
-## Slides and alt text
-
-### 1. AI can draft rules.
-
-
-
-### 2. Validate before runtime.
-
-
-
-### 3. Constrain what can run.
-
-
-
-### 4. Review like code.
-
-
-
-### 5. Then execute deterministically.
-
-
-
-## Accessibility
-
-- Every slide carries `
` and `` for screen readers.
-- Text/background contrast uses light slate text (`#e5e7eb`/`#cbd5e1`) on dark `#020617`.
-- No information is conveyed by color alone; each colored marker has a text label.
diff --git a/docs/benchmarks/assets/generated/explainability-trace-diagram.html b/docs/benchmarks/assets/generated/explainability-trace-diagram.html
deleted file mode 100644
index 4d86745..0000000
--- a/docs/benchmarks/assets/generated/explainability-trace-diagram.html
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
- Neuron-JS explainability trace diagram
-
-
-
-
-
-
-
-
- Caption: Neuron-JS turns serializable business-rule JSON into deterministic decisions by validating inputs, constraining execution through a developer-owned registry, and exposing a match/fail explanation trace for review.
-
Source note: docs/schemas-validation-explainability.md and docs/benchmarks/visual-proof-system.md. No benchmark or performance claims are made.
-
-
-
-
diff --git a/docs/benchmarks/assets/generated/explainability-trace-diagram.md b/docs/benchmarks/assets/generated/explainability-trace-diagram.md
deleted file mode 100644
index 5752f5d..0000000
--- a/docs/benchmarks/assets/generated/explainability-trace-diagram.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# Explainability trace diagram metadata
-
-Asset: `explainability-trace-diagram`
-
-Files:
-
-- `docs/benchmarks/assets/generated/explainability-trace-diagram.svg`
-- `docs/benchmarks/assets/generated/explainability-trace-diagram.html`
-
-Caption:
-
-Neuron-JS turns serializable business-rule JSON into deterministic decisions by validating inputs, constraining execution through a developer-owned registry, and exposing a match/fail explanation trace for review.
-
-Alt text:
-
-Diagram showing business input and rule JSON flowing through schema validation, developer registry, deterministic Synapse evaluation, result output, match/fail explanation trace, and audit-ready decision; a dashed branch shows validation errors returning to a repair loop.
-
-Source grounding:
-
-- the Neuron-JS growth plan (internal research), NJS-GROWTH-07 lines 294-318: proof assets objective and README visual proof baseline.
-- internal marketing/benchmark research, lines 87-100 and 160-174: honest benchmark proof, playground, trace panel, README GIF pattern.
-- internal social-demand research, lines 184-210: target pains and wedge around schema validation, deterministic guardrails, and explanation traces.
-- `docs/benchmarks/visual-proof-system.md`: palette, typography, diagram rules, brand guardrails, and canonical trace flow.
-- `docs/benchmarks/prompt-kit.md`: explainability trace diagram prompt, labels, branches, and negative constraints.
-- `docs/schemas-validation-explainability.md`: validation, deterministic execution, normalized output, and explanation trace contracts.
-
-Integrity notes:
-
-- This asset contains no benchmark numbers, winner claims, speed claims, or unsupported performance claims.
-- The diagram does not show arbitrary code execution or unsafe business-user publication.
-- The registry is visible as the control boundary for approved actions, conditions, parameters, and rules.
-
-Export notes:
-
-- SVG canvas: 1600 x 900, 16:9.
-- The SVG is directly embeddable in docs/README and can be exported to PNG with any SVG-capable browser or renderer.
-- The HTML file previews the SVG with caption and alt text.
diff --git a/docs/benchmarks/assets/generated/methodology-card.md b/docs/benchmarks/assets/generated/methodology-card.md
deleted file mode 100644
index 66faae0..0000000
--- a/docs/benchmarks/assets/generated/methodology-card.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# Methodology card — asset metadata
-
-Generated proof asset explaining the honest-benchmark rules without performance numbers.
-
-
-
-- Asset file: `methodology-card.svg`
-- Prompt source: [`../prompts/methodology-infographic.md`](../prompts/methodology-infographic.md)
-- Export dimensions: 1600 × 900 (16:9), SVG vector source
-- Recommended surfaces: docs, social explainer, PR review
-- Created: 2026-06-23
-- Generator/tool: hand-authored SVG (same visual system as `explainability-trace-diagram.svg`)
-
-## Caption
-
-Benchmark proof without fake numbers: same scenario, same input size, warmup before
-timing, real package versions, commit attached, and claims allowed only from actual
-benchmark output.
-
-## Alt text
-
-Dark methodology card for @sebasoft/neuron-js showing six benchmark evidence gates —
-same scenario, same input size, warmup before timing, real versions, commit attached,
-and a claims gate — above a rose-highlighted rule that public claims require
-result_kind=actual_benchmark, is_placeholder=false, and claims_allowed=true.
-
-## Integrity
-
-Methodology-only asset. Contains no performance numbers. References
-`docs/benchmarks/methodology.md` and states the placeholder-rejection rule.
diff --git a/docs/benchmarks/assets/prompts/ai-rule-safety-carousel.md b/docs/benchmarks/assets/prompts/ai-rule-safety-carousel.md
deleted file mode 100644
index b93cd0d..0000000
--- a/docs/benchmarks/assets/prompts/ai-rule-safety-carousel.md
+++ /dev/null
@@ -1,55 +0,0 @@
-# AI-generated-rule safety carousel prompt
-
-Source storyboard: `docs/benchmarks/assets/storyboard/ai-rule-safety-carousel.md`
-Source system: `docs/benchmarks/visual-proof-system.md`
-Prompt kit source: `docs/benchmarks/prompt-kit.md`, section 4.
-
-```text
-Create a 5-slide technical comic carousel for @sebasoft/neuron-js about safe AI-generated JSON business rules.
-
-Objective:
-Explain that LLMs can draft JSON rules, but production logic needs schema validation, developer-owned registry boundaries, tests, approvals, rollback, deterministic execution, and explanation traces. The tone should be credible and developer-specific, not fearful and not generic AI hype.
-
-Format:
-5 vertical carousel slides, 4:5 aspect ratio, designed for LinkedIn and X image threads. Keep each headline under 8 words and body text under 35 words. Include footer on every slide: "@sebasoft/neuron-js — TypeScript-first JSON business rules".
-
-Visual system:
-Dark technical comic with safety gates. Use slate background, raised dark panels, faint grid, Inter/system UI captions, JetBrains Mono/SFMono JSON labels. Use cyan for the Neuron-JS execution path, emerald for validation/pass, violet for trace/audit, amber for pending LLM draft, rose for blocked invalid paths. Avoid mascots, magic wand imagery, robot savior imagery, generic SaaS gradients, and fearmongering visuals.
-
-Slide 1:
-Headline: "AI can draft rules."
-Body: "But a plausible JSON rule can still encode the wrong assumption, wrong field, or wrong action."
-Scene: Developer inspects an amber LLM output card containing a short JSON-like rule draft. One field is subtly suspicious: customer.segment == "enterprise" routes to auto_approve_discount. Add labels "LLM draft", "Looks valid? Maybe.", and "Not production-ready." Rose warning marker only; no panic imagery.
-Alt text: "A developer inspects an amber LLM-generated JSON rule card. A small rose warning marker highlights a risky business assumption, with text saying the draft is not production-ready."
-
-Slide 2:
-Headline: "Validate before runtime."
-Body: "Schema-first checks reject malformed scripts before they reach execution."
-Scene: Draft rule enters an emerald-and-rose validation gate. One invalid path is blocked with exact label "blocked: conditions[0].operator". A corrected rule exits as "schema: pass". Show repair loop, not dead-end failure.
-Alt text: "A JSON rule passes through a schema validation gate. One invalid path is blocked in rose with an exact JSON path, while a corrected rule exits with an emerald pass marker."
-
-Slide 3:
-Headline: "Constrain what can run."
-Body: "A developer-owned registry defines approved actions, conditions, parameters, and rules."
-Scene: Validated rule reaches a registry boundary. Approved condition/action tiles are cyan and connected. An unapproved action tile, "auto_refund_all_orders", is outside the boundary and blocked by a rose dashed line. Include labels "developer registry", "approved vocabulary only", and "no arbitrary code".
-Alt text: "A validated rule enters a developer-owned registry boundary. Approved action and condition tiles connect in cyan, while an unapproved action is blocked outside the boundary."
-
-Slide 4:
-Headline: "Review like code."
-Body: "Generated rules still need tests, approval, ownership, and rollback before production use."
-Scene: Checklist beside the rule card: "test cases", "owner approval", "rollback ready". Approval stamp is developer/owner review, not automatic AI approval. Add small note "sample structure only". Do not show fake percentages, fake pass rates, or benchmark numbers.
-Alt text: "A generated rule card sits beside a review checklist showing tests, owner approval, and rollback snapshot. The visual emphasizes governance before production use."
-
-Slide 5:
-Headline: "Then execute deterministically."
-Body: "Synapse runs the approved rule path, and the trace explains why the decision matched or failed."
-Scene: Approved rule enters a cyan Synapse execution node. Output splits into a result card and violet trace rows showing input field, condition, matched/failed status, and action triggered. Final caption: "AI drafts. Neuron-JS verifies."
-Alt text: "An approved JSON rule flows into a Synapse execution node. A result card and violet explanation trace rows show why the rule matched and what action ran."
-
-Negative constraints:
-Do not claim AI-generated rules are safe automatically. Do not depict non-technical users publishing generated rules without review. Do not make benchmark, speed, superiority, or competitor-negative claims. Do not show arbitrary code execution. Do not include fake metrics or lorem ipsum.
-```
-
-## Per-slide prompt split
-
-Use the full prompt above when the image tool supports multi-image carousel generation. If it only supports one image at a time, generate each slide with the same `Objective`, `Visual system`, `Format`, and `Negative constraints`, replacing the slide section with the target slide only.
diff --git a/docs/benchmarks/assets/prompts/benchmark-chart-prompts.md b/docs/benchmarks/assets/prompts/benchmark-chart-prompts.md
deleted file mode 100644
index 684abf8..0000000
--- a/docs/benchmarks/assets/prompts/benchmark-chart-prompts.md
+++ /dev/null
@@ -1,137 +0,0 @@
-# Benchmark chart prompts
-
-Use these prompts only with real measured benchmark output. If real output is missing, render a non-numeric empty state labeled `pending measured data` and do not show values from `benchmarks/sample-results.placeholder.json`.
-
-Required source gates for every metric chart:
-
-- `result_kind: "actual_benchmark"`
-- `is_placeholder: false`
-- `claims_allowed: true`
-- exact source path included in the asset metadata
-- Node version, package versions, commit SHA, benchmark date, warmup iterations, and measured iterations included in the chart or adjacent metadata
-
-Shared visual rules:
-
-- Use dark background `#020617`, raised panels `#0f172a`, and faint grid `#1e293b`.
-- Use Neuron-JS cyan `#22d3ee`, json-rules-engine violet `#a78bfa`, JsonLogic amber `#fbbf24`, hand-coded TypeScript emerald `#34d399`, and rule-engine-js slate `#94a3b8`.
-- Keep Neuron-JS identifiable but not visually oversized.
-- Do not use 3D charts, cropped axes, trophy icons, rank badges, `fastest` language, or decorative data marks.
-- Every visible number must exist in the source benchmark artifact.
-
-## Throughput comparison chart
-
-Metric: `throughput_decisions_per_second`
-
-Unit: decisions per second
-
-Interpretation note: Higher throughput may be better only within the named scenario and input size.
-
-Final path: `docs/benchmarks/assets/generated/benchmark-chart-throughput.svg`
-
-```text
-Create a dark technical benchmark chart for @sebasoft/neuron-js.
-
-Title: "Throughput comparison"
-Metric: throughput_decisions_per_second
-Unit: decisions per second
-
-Compare @sebasoft/neuron-js, json-rules-engine, json-logic-js, hand-coded-typescript, and rule-engine-js from the supplied benchmark source file only. Show scenario and input size in the subtitle. Include source path, Node version, package versions, commit SHA, benchmark date, warmup iterations, and measured iterations.
-
-If the source artifact fails the required source gates, render no bars and show: "Pending measured data — structure only."
-```
-
-## Cold-start comparison chart
-
-Metric: `cold_start_ms`
-
-Unit: milliseconds
-
-Interpretation note: Lower cold start may be better only for the named runtime setup.
-
-Final path: `docs/benchmarks/assets/generated/benchmark-chart-cold-start.svg`
-
-```text
-Create a dark technical benchmark chart for @sebasoft/neuron-js.
-
-Title: "Cold-start comparison"
-Metric: cold_start_ms
-Unit: milliseconds
-
-Compare the same engine set from the supplied benchmark source file only. Keep axis labels explicit that the metric is measured in milliseconds. Include methodology metadata and source path. Do not imply browser, serverless, or runtime conclusions beyond the source artifact.
-
-If the source artifact fails the required source gates, render no bars and show: "Pending measured data — structure only."
-```
-
-## Bundle-size comparison chart
-
-Metric: `bundle_size_minified_bytes`
-
-Unit: minified bytes
-
-Interpretation note: Lower bundle size may help browser/playground use, but does not measure runtime behavior.
-
-Final path: `docs/benchmarks/assets/generated/benchmark-chart-bundle-size.svg`
-
-```text
-Create a dark technical bundle-size chart for @sebasoft/neuron-js.
-
-Title: "Bundle-size comparison"
-Metric: bundle_size_minified_bytes
-Unit: minified bytes
-
-Compare the same engine set from the supplied benchmark source file only. Label the bundler/minification context if the source artifact provides it. Do not convert units unless the chart also preserves the exact source value in metadata.
-
-If the source artifact fails the required source gates, render no bars and show: "Pending measured data — structure only."
-```
-
-## Validation-overhead chart
-
-Metric: `validation_overhead_ms`
-
-Unit: milliseconds
-
-Interpretation note: Shows the cost of schema validation as a delta against equivalent non-validation execution.
-
-Final path: `docs/benchmarks/assets/generated/benchmark-chart-validation-overhead.svg`
-
-```text
-Create a dark technical validation-overhead chart for @sebasoft/neuron-js.
-
-Title: "Validation overhead"
-Metric: validation_overhead_ms
-Unit: milliseconds
-
-Compare the same engine set from the supplied benchmark source file only. Make the subtitle clear that this is overhead, not total runtime. Include scenario, input size, source path, and methodology metadata.
-
-If the source artifact fails the required source gates, render no bars and show: "Pending measured data — structure only."
-```
-
-## Explanation-overhead chart
-
-Metric: `explanation_overhead_ms`
-
-Unit: milliseconds
-
-Interpretation note: Shows the cost of trace/explanation collection as a delta against trace-disabled execution.
-
-Final path: `docs/benchmarks/assets/generated/benchmark-chart-explanation-overhead.svg`
-
-```text
-Create a dark technical explanation-overhead chart for @sebasoft/neuron-js.
-
-Title: "Explanation overhead"
-Metric: explanation_overhead_ms
-Unit: milliseconds
-
-Compare the same engine set from the supplied benchmark source file only. Make the subtitle clear that this is trace/explanation overhead, not total runtime. Include scenario, input size, source path, and methodology metadata.
-
-If the source artifact fails the required source gates, render no bars and show: "Pending measured data — structure only."
-```
-
-## Verification checklist
-
-- Every visible number appears in the source benchmark artifact.
-- Axis labels match the metric and unit.
-- Chart metadata includes source path, scenario, input size, Node version, package versions, commit SHA, benchmark date, warmup iterations, and measured iterations.
-- Alt text names the metric, scenario, input size, and no-fabrication policy.
-- Any conclusion is limited to the named scenario and input size.
diff --git a/docs/benchmarks/assets/prompts/methodology-infographic.md b/docs/benchmarks/assets/prompts/methodology-infographic.md
deleted file mode 100644
index 3354825..0000000
--- a/docs/benchmarks/assets/prompts/methodology-infographic.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# Methodology infographic prompt
-
-This prompt is safe to use before benchmark data exists because it contains no performance numbers.
-
-Final draft path:
-
-- `docs/benchmarks/assets/generated/methodology-card.svg`
-
-```text
-Create a dark technical methodology infographic card for @sebasoft/neuron-js benchmarks.
-
-Objective:
-Explain the honest benchmark rules before any performance claims are published.
-
-Headline:
-"Benchmark proof without fake numbers"
-
-Layout:
-Six evidence gates in a 16:9 dashboard card:
-1. Same scenario
-2. Same input size
-3. Warmup before measurement
-4. Real package versions
-5. Commit SHA attached
-6. Claims allowed only from actual benchmark output
-
-Text constraints:
-- Do not include performance numbers.
-- Include this footnote: "Placeholder data is for wiring only. Public claims require result_kind=actual_benchmark, is_placeholder=false, claims_allowed=true."
-- Include source note: "Methodology: docs/benchmarks/methodology.md"
-
-Visual style:
-Dark technical schematic, slate panels, faint grid, amber methodology accents, cyan source path highlight, emerald pass gates, rose blocked placeholder gate. No trophy icon, no fastest claim, no generic robot imagery.
-
-Export:
-16:9 docs/social card, plus editable SVG source.
-```
-
-Verification checklist:
-
-- Contains no benchmark performance numbers.
-- Shows the placeholder rejection rule.
-- References `docs/benchmarks/methodology.md`.
-- Works as a docs card and social explainer.
diff --git a/docs/benchmarks/assets/source-data/README.md b/docs/benchmarks/assets/source-data/README.md
deleted file mode 100644
index 23d5838..0000000
--- a/docs/benchmarks/assets/source-data/README.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Benchmark visual source data
-
-This folder is reserved for benchmark source artifacts consumed by generated visuals.
-
-Current status: no publishable benchmark result artifact exists.
-
-Allowed files:
-
-- `*.actual.json`: measured benchmark output that matches `../../results.schema.json` and sets `result_kind: "actual_benchmark"`, `is_placeholder: false`, and `claims_allowed: true`.
-- `*.metadata.md`: adjacent methodology notes for generated assets.
-- `*.example.json`: schema examples only, never public performance claims.
-
-Rejected for final chart claims:
-
-- `benchmarks/sample-results.placeholder.json`
-- any file with `result_kind: "placeholder_sample"`
-- any file with `is_placeholder: true`
-- any file with `claims_allowed: false`
-- any row whose notes contain `synthetic placeholder`
diff --git a/docs/benchmarks/assets/storyboard/ai-rule-safety-carousel.md b/docs/benchmarks/assets/storyboard/ai-rule-safety-carousel.md
deleted file mode 100644
index a7fb894..0000000
--- a/docs/benchmarks/assets/storyboard/ai-rule-safety-carousel.md
+++ /dev/null
@@ -1,236 +0,0 @@
-# AI-generated rule safety carousel/comic
-
-Asset taxonomy: `ai-rule-safety-carousel`
-Status: script and generation prompts for review; no generated image asset yet.
-Recommended surfaces: LinkedIn carousel, X image thread, GitHub discussion image set, docs proof-assets page.
-Recommended format: 5 slides, 4:5 vertical carousel, 1080x1350 or 1200x1500.
-
-## Source grounding
-
-Source of record:
-
-- the Neuron-JS growth plan (internal research), NJS-GROWTH-07 lines 294-318: proof assets must support benchmarks, playground, and visual explanation; README proof asset waits for stable proof.
-- internal marketing/benchmark research, lines 87-100 and 160-174: publish honest proof, live demos, trace panels, and README visual proof; do not overclaim without measured evidence.
-- internal social-demand research, lines 184-210: target the pain that LLM-generated rules are dangerous without validation/schemas and that developers need deterministic guardrails and explanations.
-- `docs/benchmarks/visual-proof-system.md`, lines 13-23, 110-118, and 179-189: visual assets should communicate credibility, inspectability, determinism, and AI safety; AI-rule-safety carousel uses a bridge/funnel technical comic with safety gates; social slides need short copy and `@sebasoft/neuron-js`.
-- `docs/benchmarks/prompt-kit.md`, lines 213-258: base prompt for the AI-generated-rule safety carousel.
-
-This asset is grounded in the internal research and repository files above.
-
-## Positioning guardrails
-
-Core message:
-
-> AI can draft rule JSON, but production logic still needs schema validation, developer-owned vocabulary, tests, approvals, rollback, deterministic execution, and explanation traces.
-
-Say:
-
-- `AI drafts. Neuron-JS verifies.`
-- `Rules as data, not arbitrary code.`
-- `Validate -> constrain -> test -> approve -> execute -> explain.`
-- `Deterministic workflow logic with auditability.`
-
-Do not say:
-
-- `AI-generated rules are safe automatically.`
-- `Business users can publish arbitrary logic without developer review.`
-- `Neuron-JS prevents every possible business-policy error.`
-- `Faster`, `best`, or performance claims without measured benchmark output.
-- Negative claims against competitors.
-
-## Visual system
-
-- Style: technical comic, dark proof-system UI, restrained cyberpunk glow, no childish mascot.
-- Palette: slate background, cyan Neuron-JS path, emerald validation pass, violet trace/audit, amber pending LLM draft, rose blocked unsafe path.
-- Typography: Inter/system UI for captions, JetBrains Mono/SFMono for JSON, trace labels, and schema paths.
-- Composition: bridge/funnel sequence. Each slide moves a generated draft through one safety gate.
-- Recurring artifacts: LLM draft card, JSON rule card, schema gate, registry boundary, test/approval checklist, Synapse execution node, explanation trace panel.
-- Footer on every slide: `@sebasoft/neuron-js — TypeScript-first JSON business rules`.
-- Accessibility: keep headline under 8 words, body under 35 words, high contrast, alt text per slide.
-
-## 5-slide carousel script
-
-### Slide 1 — AI drafts the rule
-
-Headline: `AI can draft rules.`
-
-Body copy: `But a plausible JSON rule can still encode the wrong assumption, wrong field, or wrong action.`
-
-On-slide labels:
-
-- `LLM draft`
-- `Looks valid? Maybe.`
-- `Not production-ready.`
-
-Visual action:
-
-A developer reviews an amber LLM output card containing a short JSON-like rule draft. One field is subtly suspicious: `customer.segment == "enterprise"` routes to `auto_approve_discount`. A rose warning dot marks the risky assumption, but the frame avoids panic imagery.
-
-Purpose:
-
-Introduce the risk without fearmongering: the issue is not AI itself; the issue is trusting generated business logic without controls.
-
-Alt text:
-
-`A developer inspects an amber LLM-generated JSON rule card. A small rose warning marker highlights a risky business assumption, with text saying the draft is not production-ready.`
-
-### Slide 2 — Schema validation catches shape errors
-
-Headline: `Validate before runtime.`
-
-Body copy: `Schema-first checks reject malformed scripts before they reach execution.`
-
-On-slide labels:
-
-- `Schema validation`
-- `blocked: unknown field`
-- `repair path: conditions[0].operator`
-
-Visual action:
-
-The draft rule enters an emerald-and-rose validation gate. A malformed or unknown operator is blocked with a precise JSON path. A second corrected rule exits the gate as `schema: pass`.
-
-Purpose:
-
-Show that validation gives a concrete repair loop, not a vague failure state.
-
-Alt text:
-
-`A JSON rule passes through a schema validation gate. One invalid path is blocked in rose with an exact JSON path, while a corrected rule exits with an emerald pass marker.`
-
-### Slide 3 — Registry limits executable vocabulary
-
-Headline: `Constrain what can run.`
-
-Body copy: `A developer-owned registry defines approved actions, conditions, parameters, and rules.`
-
-On-slide labels:
-
-- `developer registry`
-- `approved vocabulary only`
-- `no arbitrary code`
-
-Visual action:
-
-The validated rule reaches a registry boundary. Approved condition/action tiles are cyan and connected; an unapproved `auto_refund_all_orders` tile is outside the boundary and blocked by a rose dashed line.
-
-Purpose:
-
-Clarify Neuron-JS as a controlled execution layer, not a magic AI agent or arbitrary-code runtime.
-
-Alt text:
-
-`A validated rule enters a developer-owned registry boundary. Approved action and condition tiles connect in cyan, while an unapproved action is blocked outside the boundary.`
-
-### Slide 4 — Tests, approval, and rollback
-
-Headline: `Review like code.`
-
-Body copy: `Generated rules still need tests, approval, ownership, and rollback before production use.`
-
-On-slide labels:
-
-- `test cases`
-- `owner approval`
-- `rollback ready`
-- `sample structure only`
-
-Visual action:
-
-A checklist overlays the rule card: fixture tests pass, owner approval is pending then stamped approved, rollback snapshot is saved. No benchmark numbers or success-rate metrics appear.
-
-Purpose:
-
-Prevent overclaiming. Validation is necessary but not sufficient; governance completes the safety story.
-
-Alt text:
-
-`A generated rule card sits beside a review checklist showing tests, owner approval, and rollback snapshot. The visual emphasizes governance before production use.`
-
-### Slide 5 — Deterministic execution with trace
-
-Headline: `Then execute deterministically.`
-
-Body copy: `Synapse runs the approved rule path, and the trace explains why the decision matched or failed.`
-
-On-slide labels:
-
-- `Synapse execution`
-- `result: routed`
-- `trace: condition matched`
-- `audit-ready explanation`
-
-Visual action:
-
-The approved rule enters a cyan Synapse execution node. Output splits into a result card and violet trace rows: input field, condition, matched/failed status, action triggered. The final caption reads `AI drafts. Neuron-JS verifies.`
-
-Purpose:
-
-End on the product wedge: deterministic workflow logic with auditability, not probabilistic decisioning.
-
-Alt text:
-
-`An approved JSON rule flows into a Synapse execution node. A result card and violet explanation trace rows show why the rule matched and what action ran.`
-
-## Single-master image generation prompt
-
-```text
-Create a 5-slide technical comic carousel for @sebasoft/neuron-js about safe AI-generated JSON business rules.
-
-Objective:
-Explain that LLMs can draft JSON rules, but production logic needs schema validation, developer-owned registry boundaries, tests, approvals, rollback, deterministic execution, and explanation traces. The tone should be credible and developer-specific, not fearful and not generic AI hype.
-
-Format:
-5 vertical carousel slides, 4:5 aspect ratio, designed for LinkedIn and X image threads. Keep each headline under 8 words and body text under 35 words. Include footer on every slide: "@sebasoft/neuron-js — TypeScript-first JSON business rules".
-
-Visual system:
-Dark technical comic with safety gates. Use slate background, raised dark panels, faint grid, Inter/system UI captions, JetBrains Mono/SFMono JSON labels. Use cyan for the Neuron-JS execution path, emerald for validation/pass, violet for trace/audit, amber for pending LLM draft, rose for blocked invalid paths. Avoid mascots, magic wand imagery, robot savior imagery, generic SaaS gradients, and fearmongering visuals.
-
-Slide 1:
-Headline: "AI can draft rules."
-Body: "But a plausible JSON rule can still encode the wrong assumption, wrong field, or wrong action."
-Scene: Developer inspects an amber LLM output card containing a short JSON-like rule draft. One field is subtly suspicious: customer.segment == "enterprise" routes to auto_approve_discount. Add labels "LLM draft", "Looks valid? Maybe.", and "Not production-ready." Rose warning marker only; no panic imagery.
-Alt text: "A developer inspects an amber LLM-generated JSON rule card. A small rose warning marker highlights a risky business assumption, with text saying the draft is not production-ready."
-
-Slide 2:
-Headline: "Validate before runtime."
-Body: "Schema-first checks reject malformed scripts before they reach execution."
-Scene: Draft rule enters an emerald-and-rose validation gate. One invalid path is blocked with exact label "blocked: conditions[0].operator". A corrected rule exits as "schema: pass". Show repair loop, not dead-end failure.
-Alt text: "A JSON rule passes through a schema validation gate. One invalid path is blocked in rose with an exact JSON path, while a corrected rule exits with an emerald pass marker."
-
-Slide 3:
-Headline: "Constrain what can run."
-Body: "A developer-owned registry defines approved actions, conditions, parameters, and rules."
-Scene: Validated rule reaches a registry boundary. Approved condition/action tiles are cyan and connected. An unapproved action tile, "auto_refund_all_orders", is outside the boundary and blocked by a rose dashed line. Include labels "developer registry", "approved vocabulary only", and "no arbitrary code".
-Alt text: "A validated rule enters a developer-owned registry boundary. Approved action and condition tiles connect in cyan, while an unapproved action is blocked outside the boundary."
-
-Slide 4:
-Headline: "Review like code."
-Body: "Generated rules still need tests, approval, ownership, and rollback before production use."
-Scene: Checklist beside the rule card: "test cases", "owner approval", "rollback ready". Approval stamp is developer/owner review, not automatic AI approval. Add small note "sample structure only". Do not show fake percentages, fake pass rates, or benchmark numbers.
-Alt text: "A generated rule card sits beside a review checklist showing tests, owner approval, and rollback snapshot. The visual emphasizes governance before production use."
-
-Slide 5:
-Headline: "Then execute deterministically."
-Body: "Synapse runs the approved rule path, and the trace explains why the decision matched or failed."
-Scene: Approved rule enters a cyan Synapse execution node. Output splits into a result card and violet trace rows showing input field, condition, matched/failed status, and action triggered. Final caption: "AI drafts. Neuron-JS verifies."
-Alt text: "An approved JSON rule flows into a Synapse execution node. A result card and violet explanation trace rows show why the rule matched and what action ran."
-
-Negative constraints:
-Do not claim AI-generated rules are safe automatically. Do not depict non-technical users publishing generated rules without review. Do not make benchmark, speed, superiority, or competitor-negative claims. Do not show arbitrary code execution. Do not include fake metrics or lorem ipsum.
-```
-
-## Channel fit
-
-- LinkedIn: strongest fit. Use as a 5-slide carousel for engineering leads, developer tooling audiences, and AI-workflow builders. Caption angle: `LLMs can draft business rules. The production question is: what validates, constrains, tests, executes, and explains them?`
-- X: good fit as a 5-image thread. Lead with Slide 1 or Slide 5. Keep post copy concrete and avoid broad AI-safety rhetoric.
-- GitHub discussion/docs: useful as a proof-system storyboard before generating final images. Pair with `docs/benchmarks/visual-proof-system.md` and `docs/benchmarks/prompt-kit.md`.
-
-## Review checklist
-
-- [x] Communicates the risk of LLM-generated rules without fearmongering.
-- [x] Shows Neuron-JS guardrails: schema validation, registry constraints, tests, approvals, rollback, deterministic execution, trace.
-- [x] Avoids benchmark numbers and performance claims.
-- [x] Avoids competitor-negative claims.
-- [x] Includes text, visual action, style constraints, and alt text for each slide.
-- [x] Uses source-grounded product language: TypeScript-first, explainable, schema-validatable JSON business rules.
diff --git a/docs/benchmarks/assets/storyboard/playground-readme-gif.md b/docs/benchmarks/assets/storyboard/playground-readme-gif.md
deleted file mode 100644
index 1eee60b..0000000
--- a/docs/benchmarks/assets/storyboard/playground-readme-gif.md
+++ /dev/null
@@ -1,56 +0,0 @@
-# Playground README GIF storyboard
-
-Primary spec: `docs/playground/readme-demo-capture.md`.
-
-Status: blocked on playground implementation. This storyboard is ready for capture automation once `/playground/?example=pricing-rules&capture=readme` exists.
-
-## Fixture lock
-
-Use only the runnable pricing fixture:
-
-- rules: `examples/pricing-rules/rules.json`
-- input: `examples/pricing-rules/input.json`
-- expected output: `examples/pricing-rules/expected-output.json`
-- runnable verification: `node examples/pricing-rules/run.ts` after `yarn build`
-
-Canonical visible result:
-
-```json
-{
- "ok": true,
- "rulesExecuted": 1,
- "finalTotal": 105,
- "discountAmount": 20,
- "messages": ["Applied 16% discount: -20"]
-}
-```
-
-## Shot list
-
-| Step | Duration | Frame | Required selector/assertion |
-| --- | ---: | --- | --- |
-| 1 | 1.0s | Playground shell loads with Pricing Rules selected. | `[data-testid="example-select"]` contains `pricing-rules`. |
-| 2 | 1.5s | Rule JSON panel highlights `vip-order-discount`. | `[data-testid="rule-json-panel"]` contains `vip-order-discount`. |
-| 3 | 1.5s | Input JSON panel highlights `cart.subtotal = 125`. | `[data-testid="input-json-panel"]` contains `125`. |
-| 4 | 1.5s | Validation state shows passed and zero errors. | `[data-testid="validation-status"]` contains `passed`; `[data-testid="validation-errors"]` contains `No validation errors`. |
-| 5 | 2.0s | Trace highlights the matched rule and condition. | `[data-testid="trace-row-vip-order-discount"]` has `.trace-row--matched`. |
-| 6 | 2.0s | Result panel displays `finalTotal: 105` and discount. | `[data-testid="result-panel"]` contains `finalTotal: 105` and `discountAmount: 20`. |
-| 7 | 1.5s | Share URL appears with encoded state. | `[data-testid="share-url"]` contains `example=pricing-rules`. |
-
-## Capture command contract
-
-Future command:
-
-```sh
-yarn capture:playground-readme --example pricing-rules --format mp4,gif
-```
-
-Future outputs:
-
-```text
-docs/benchmarks/assets/generated/playground-readme-demo.mp4
-docs/benchmarks/assets/generated/playground-readme-demo.gif
-docs/benchmarks/assets/generated/playground-readme-demo.metadata.json
-```
-
-The asset must not include benchmark numbers, rank claims, or performance language.
diff --git a/docs/benchmarks/benchmark-visual-pack.md b/docs/benchmarks/benchmark-visual-pack.md
deleted file mode 100644
index ed37f3f..0000000
--- a/docs/benchmarks/benchmark-visual-pack.md
+++ /dev/null
@@ -1,104 +0,0 @@
-# NJS-GROWTH-07 benchmark visual pack plan
-
-Status: the benchmark charts are generated from measured output — see [benchmark results](./results.md). This page remains the design spec for the chart pack (asset matrix, aspect ratios, channel guardrails, copy rules).
-
-Source of record:
-
-- the Neuron-JS growth plan (internal research), `NJS-GROWTH-07` lines 294-318: proof assets must cover benchmarks, playground, and visual explanation.
-- internal marketing/benchmark research, lines 87-100 and 160-174: publish honest benchmarks, compare the required competitor set, expose methodology, support playground proof, trace panel, and README GIF.
-- internal social-demand research, lines 160-169 and 184-210: clean charts, visual proof, and the TypeScript-first explainability/validation wedge are the strongest trust signals.
-
-## Current data status
-
-Publishable measured data exists: `benchmarks/results/latest.actual.json` (`result_kind: "actual_benchmark"`, `is_placeholder: false`, `claims_allowed: true`). The five charts in [benchmark results](./results.md) are generated from it.
-
-The placeholder fixture `benchmarks/sample-results.placeholder.json` remains marked `placeholder_sample` / `is_placeholder: true` / `claims_allowed: false` and must never be used for public claims. Regenerate charts only from an `actual_benchmark` source matching `docs/public/benchmarks/results.schema.json`.
-
-## Source data contract for final charts
-
-Final assets must use a benchmark artifact that satisfies all of these gates:
-
-- `result_kind` is `actual_benchmark`.
-- `is_placeholder` is `false`.
-- `claims_allowed` is `true`.
-- Every visible number exists in the source artifact.
-- The asset metadata includes source path, scenario, input size, Node version, package versions, commit SHA, benchmark date, warmup iterations, and measured iterations.
-- Axis labels use the same metric meaning documented in `docs/benchmarks/methodology.md` and `docs/benchmarks/results.schema.json`.
-
-If any gate fails, render empty states or labels such as `pending measured data`; do not render numeric claims.
-
-## Competitor and scenario scope
-
-Competitor set:
-
-1. `@sebasoft/neuron-js`
-2. `json-rules-engine`
-3. `json-logic-js` / JsonLogic
-4. `hand-coded-typescript`
-5. `rule-engine-js`
-
-`rulepilot` remains an alternate only if `rule-engine-js` becomes infeasible and the benchmark contract is updated.
-
-Scenario set:
-
-- `pricing-discount`
-- `eligibility-approval`
-- `workflow-routing`
-
-Input-size set:
-
-- `smoke`
-- `small`
-- `medium`
-- `large` only when runtime remains practical and the benchmark run explicitly includes it.
-
-## Asset set
-
-| Asset | Draft prompt path | Final generated asset path | Final source requirement | Primary surfaces |
-| --- | --- | --- | --- | --- |
-| Throughput comparison chart | `docs/benchmarks/assets/prompts/benchmark-chart-prompts.md#throughput-comparison-chart` | `docs/benchmarks/assets/generated/benchmark-chart-throughput.svg` | `throughput_decisions_per_second` from actual benchmark output | docs, README support, X/LinkedIn |
-| Cold-start comparison chart | `docs/benchmarks/assets/prompts/benchmark-chart-prompts.md#cold-start-comparison-chart` | `docs/benchmarks/assets/generated/benchmark-chart-cold-start.svg` | `cold_start_ms` from actual benchmark output | docs, blog, social |
-| Bundle-size comparison chart | `docs/benchmarks/assets/prompts/benchmark-chart-prompts.md#bundle-size-comparison-chart` | `docs/benchmarks/assets/generated/benchmark-chart-bundle-size.svg` | `bundle_size_minified_bytes` from actual benchmark output | docs, README support |
-| Validation-overhead chart | `docs/benchmarks/assets/prompts/benchmark-chart-prompts.md#validation-overhead-chart` | `docs/benchmarks/assets/generated/benchmark-chart-validation-overhead.svg` | `validation_overhead_ms` from actual benchmark output | docs, social proof |
-| Explanation-overhead chart | `docs/benchmarks/assets/prompts/benchmark-chart-prompts.md#explanation-overhead-chart` | `docs/benchmarks/assets/generated/benchmark-chart-explanation-overhead.svg` | `explanation_overhead_ms` from actual benchmark output | docs, social proof |
-| Honest methodology infographic/card | `docs/benchmarks/assets/prompts/methodology-infographic.md` | `docs/benchmarks/assets/generated/methodology-card.svg` | No performance numbers; must cite methodology and no-fabrication policy | docs, social, PR review |
-
-## Aspect ratio and export matrix
-
-| Surface | Ratio | Recommended dimensions | Notes |
-| --- | --- | --- | --- |
-| README proof strip | `5:1` or `4:1` | `1600x320` or `1600x400` | Wide proof strip; use non-numeric placeholders until measured data exists. |
-| Docs benchmark hero | `16:9` | `1600x900` | Best for methodology and chart overview. |
-| Docs inline chart | `16:9` or `4:3` | `1200x675` or `1200x900` | Keep labels readable at docs column width. |
-| X / LinkedIn link card | `16:9` | `1200x675` | Maximum headline eight words. Include methodology footnote when numbers appear. |
-| LinkedIn / Instagram feed | `1:1` | `1200x1200` | Use one metric per card. |
-| LinkedIn carousel | `4:5` | `1080x1350` | One claim per slide; source footnote on each measured slide. |
-| Blog hero | `16:9` | `1600x900` | Prefer methodology-first framing over winner framing. |
-
-## Channel copy guardrails
-
-Use this claim structure only after measured data exists:
-
-- Method first: `Measured on at ; see methodology.`
-- Metric second: name the exact metric and unit.
-- Interpretation third: explain what the metric does and does not prove.
-
-Do not use:
-
-- `fastest`, `best`, `beats`, `dominates`, or winner language unless the source data proves it for the named scenario and input size.
-- Synthetic placeholder values in copy, alt text, chart labels, posts, README, or npm copy.
-- Cropped axes, trophy icons, rank badges, or chart decorations that imply unsupported superiority.
-
-## Final production workflow
-
-1. Receive actual benchmark artifact matching `docs/benchmarks/results.schema.json`.
-2. Validate the data gates in this plan.
-3. Generate five metric charts from the artifact, one metric per chart.
-4. Attach methodology metadata to each SVG or adjacent `.md` metadata file.
-5. Produce social exports using the aspect ratio matrix.
-6. Run visual QA: axis labels, units, source path, contrast, legibility, alt text, and no unsupported claims.
-7. Only then consider README or social publication.
-
-## Publication blocker
-
-Benchmark charts publish only from measured `actual_benchmark` output (now present). Any future chart that would show a number absent from the source artifact, or that reuses placeholder values, stays blocked. Regenerate with `yarn benchmark && yarn benchmark:charts` after data changes.
diff --git a/docs/benchmarks/index.md b/docs/benchmarks/index.md
index f68333b..d8c2a13 100644
--- a/docs/benchmarks/index.md
+++ b/docs/benchmarks/index.md
@@ -1,44 +1,30 @@
-# Benchmarks and visual proof
+# Benchmarks & proof
-NJS-GROWTH-07 defines the public proof system for Neuron-JS benchmarks, playground captures, explanation diagrams, README media, and social proof assets.
+Honest, reproducible evidence that Neuron-JS is fast enough, small enough, and — above
+all — inspectable. Every number on these pages comes from a real benchmark run you can
+reproduce with `yarn benchmark`; nothing is hand-entered.
-Benchmark numbers come from measured harness output only. The [benchmark results](./results.md) are now published from a real `actual_benchmark` run; the rest of this section documents the methodology and generation system behind them.
+## What's here
-## Files
+- **[Benchmark results](./results.md)** — measured throughput, cold-start, bundle-size,
+ validation, and explanation-overhead, compared against `json-rules-engine`,
+ `json-logic-js`, a hand-coded TypeScript baseline, and `rule-engine-js`.
+- **[Methodology](./methodology.md)** — what we compare, how each metric is measured, and
+ our no-fabricated-numbers policy.
+- **[AI-rule safety](./ai-rule-safety.md)** — why AI-drafted JSON rules still need schema
+ validation, a developer-owned registry, and explanation traces before production.
-- [Benchmark results](./results.md): measured throughput, cold-start, bundle-size, validation, and explanation-overhead charts plus the full results table and provenance.
-- [Benchmark methodology and result contract](./methodology.md): competitor set, scenario matrix, input-size matrix, metric definitions, and placeholder-data policy.
-- [Result JSON schema](/benchmarks/results.schema.json): machine-readable contract for benchmark output and downstream chart data.
-- [Visual proof system](./visual-proof-system.md): palette, typography, composition, diagram style, chart rules, social-card constraints, and README proof strip guidance.
-- [Benchmark visual pack plan](./benchmark-visual-pack.md): chart asset matrix, aspect ratios, channel guardrails, draft prompt paths, and publication blocker.
-- [Explainability trace diagram metadata](./assets/generated/explainability-trace-diagram.md): source grounding, caption, alt text, integrity notes, and README-safe SVG path.
-- [Methodology card metadata](./assets/generated/methodology-card.md): caption, alt text, and integrity notes for the no-fake-numbers methodology card.
-- [AI-rule-safety carousel metadata](./assets/generated/ai-rule-safety-carousel.md): five-slide qualitative carousel on safe AI-generated JSON rules, with per-slide alt text.
-- [Visual proof prompt kit](./prompt-kit.md): reusable prompts for benchmark infographics, explainability trace diagrams, playground README GIF storyboards, AI-rule safety carousels, and README proof strips.
-- [Playground README demo capture specification](../playground/readme-demo-capture.md): route, selectors, storyboard, future capture command, and fixture-backed result contract.
-- [Asset folder recommendation](./assets/): recommended `docs/benchmarks/assets/` structure and data-integrity rules.
+## How a rule becomes an explainable decision
-## Proof promise
+Neuron-JS turns serializable JSON rules into deterministic, auditable decisions: input and
+rule JSON are schema-validated, executed through a developer-owned registry and Synapse, and
+returned with an explanation trace showing why a rule matched or failed.
-Neuron-JS visual proof assets should make four claims visible:
+
+
+This makes four things visible:
1. Rules are serializable JSON data.
2. Schema validation happens before runtime.
3. Execution is deterministic through a developer-owned registry and Synapse.
4. Explanation traces show why a rule matched or failed.
-
-## README-safe proof visual
-
-The current README uses the explainability trace diagram because it is inspectable, asset-backed, and contains no benchmark numbers or superiority claims.
-
-
-
-Supporting files:
-
-- SVG asset: [`assets/generated/explainability-trace-diagram.svg`](./assets/generated/explainability-trace-diagram.svg)
-- Metadata, caption, and integrity notes: [`assets/generated/explainability-trace-diagram.md`](./assets/generated/explainability-trace-diagram.md)
-- HTML preview wrapper: [`assets/generated/explainability-trace-diagram.html`](./assets/generated/explainability-trace-diagram.html)
-
-## Data policy
-
-Do not fabricate benchmark results. When data is unavailable, use non-numeric structure, empty states, or labels such as `pending measured data`.
diff --git a/docs/benchmarks/methodology.md b/docs/benchmarks/methodology.md
index d465bad..1be65f9 100644
--- a/docs/benchmarks/methodology.md
+++ b/docs/benchmarks/methodology.md
@@ -1,13 +1,14 @@
-# Neuron-JS benchmark methodology and result contract
+# Benchmark methodology
-Source of record: internal Neuron-JS growth, marketing/benchmark, and social-demand research for NJS-GROWTH-07.
+How the [benchmark results](./results.md) are produced. The benchmarks are intentionally
+conservative: no number is published until the harness emits `result_kind: "actual_benchmark"`
+with `is_placeholder: false` and `claims_allowed: true`. Reproduce any result locally with
+`yarn benchmark` (raw output: `benchmarks/results/latest.actual.json`).
-This page defines the NJS-GROWTH-07 benchmark harness contract. It is intentionally conservative: no benchmark claim is valid until the executable harness emits `result_kind: "actual_benchmark"` with `is_placeholder: false` and `claims_allowed: true`. That harness now exists (`benchmarks/run.ts`, run with `yarn benchmark`); the published numbers are on the [benchmark results](./results.md) page.
+
## Competitor set
-The harness/result contract covers exactly these engines for the first public proof bundle:
-
| Engine | Adapter key | Role |
| --- | --- | --- |
| Neuron-JS | `@sebasoft/neuron-js` | First-party rules engine under test. |
@@ -16,8 +17,6 @@ The harness/result contract covers exactly these engines for the first public pr
| Hand-coded TypeScript | `hand-coded-typescript` | Baseline for direct conditional logic without engine overhead. |
| rule-engine-js | `rule-engine-js` | Smaller modern competitor selected because it installs/builds in this repository. |
-`rulepilot` remains an alternate candidate only if `rule-engine-js` becomes infeasible later. Do not mix both in the same first chart set without updating `docs/public/benchmarks/results.schema.json`.
-
## Scenario matrix
| Scenario | Inputs represented | Why it exists |
@@ -35,67 +34,37 @@ The harness/result contract covers exactly these engines for the first public pr
| `medium` | 10,000 | Chartable throughput. |
| `large` | 100,000 | Optional; run only if runtime remains practical in CI/local machines. |
-## Stable result fields
-
-Every result row must contain these fields. Units and source definitions are duplicated in `docs/public/benchmarks/results.schema.json` for machine consumers.
-
-| Field | Unit | Source |
-| --- | --- | --- |
-| `engine` | identifier | Harness adapter name for the implementation under test; fixed enum for cross-run joins. |
-| `scenario` | identifier | Scenario slug produced by the benchmark scenario matrix. |
-| `input_size` | profile | Named workload profile, not raw row count, so visual assets can group runs consistently. |
-| `warmup_iterations` | decisions | Number of unmeasured warmup decisions completed before timing. |
-| `measured_iterations` | decisions | Number of measured decisions included in timing statistics. |
-| `throughput_decisions_per_second` | decisions/second | Measured decisions divided by elapsed measured wall-clock seconds. |
-| `p50_ms` | milliseconds | Median per-decision latency from measured iterations. |
-| `p95_ms` | milliseconds | 95th percentile per-decision latency from measured iterations. |
-| `cold_start_ms` | milliseconds | Wall-clock time to load/import the engine adapter and execute the first decision in a fresh process or isolated worker. |
-| `bundle_size_minified_bytes` | bytes | Minified adapter+engine bundle byte count from the configured bundler output. |
-| `validation_overhead_ms` | milliseconds | Additional median latency for validation-enabled execution versus validation-disabled execution on the same scenario/input profile. |
-| `explanation_overhead_ms` | milliseconds | Additional median latency for trace/explanation-enabled execution versus trace-disabled execution on the same scenario/input profile. |
-| `node_version` | semver/runtime | Node.js version reported by `process.version` for the benchmark run. |
-| `package_version` | semver or source | Package version or source label for the engine adapter under test. |
-| `commit_sha` | git sha | Repository commit SHA for the Neuron-JS benchmark harness and local implementation. |
-
-## Placeholder data policy
-
-`benchmarks/sample-results.placeholder.json` is synthetic wiring data only. It exists so chart, carousel, README-strip, and playground work can consume stable fields before real measurements exist.
-
-Visual/publication agents must reject files where any of these are true:
-
-- `result_kind` is `placeholder_sample`.
-- `is_placeholder` is `true`.
-- `claims_allowed` is `false`.
-- row `notes` contains `synthetic placeholder`.
-
-Synthetic sample values must never be used in README copy, social posts, npm copy, or public performance claims.
-
-## Harness contract
-
-The executable harness (`benchmarks/run.ts`):
-
-1. Builds adapters for `@sebasoft/neuron-js`, `json-rules-engine`, `json-logic-js`, `hand-coded-typescript`, and `rule-engine-js`.
-2. Runs each adapter against `pricing-discount`, `eligibility-approval`, and `workflow-routing` fixtures (reused from `examples/`).
-3. Executes `smoke`, `small`, and `medium` profiles by default; `large` is reserved for explicit runs.
-4. Measures cold start separately from warm throughput.
-5. Measures validation and explanation overhead as delta timings against the same scenario/input profile.
-6. Emits JSON matching `docs/public/benchmarks/results.schema.json`.
-7. Sets `result_kind: "actual_benchmark"`, `is_placeholder: false`, and `claims_allowed: true` only for real measured output.
-
## How each metric is measured
- **Fairness gate.** Before timing, every engine must reproduce the scenario's canonical decision (e.g. pricing `finalTotal: 105`, `discountAmount: 20`); the run aborts on any mismatch, so all engines are timed doing equivalent work.
- **Throughput / p50 / p95.** Warmup iterations run untimed, then measured iterations run in batches; per-decision latency is averaged per batch (so per-call timer overhead does not dominate sub-microsecond engines). Throughput is total measured decisions over total measured seconds.
-- **Cold start.** Median wall-clock across several fresh Node processes to import the engine adapter and execute the first decision; the child starts its timer before importing the engine, so Node's own startup is excluded.
-- **Bundle size.** `esbuild` bundles and minifies the engine's public surface (`export * from ""`, ESM, node platform); the output byte length is recorded. The hand-coded baseline has no library dependency (`0`).
-- **Validation / explanation overhead.** Neuron-JS only: the per-decision latency delta of running `validateScript` (resp. `explainExecution`) around an otherwise identical execution. Competitors provide no equivalent step, so their measured delta is `0`.
+- **Cold start.** Median wall-clock across several fresh Node processes to import the engine and execute the first decision; the timer starts before the import, so Node's own startup is excluded.
+- **Bundle size.** `esbuild` bundles and minifies the engine's public surface (ESM, node platform); the output byte length is recorded. The hand-coded baseline has no library dependency (`0`).
+- **Validation / explanation overhead.** Neuron-JS only: the per-decision latency delta of running `validateScript` (resp. `explainExecution`) around an otherwise identical execution. The other engines provide no equivalent step, so their measured delta is `0`.
-## Visual asset consumers
+## Result fields
-The first visual asset bundle can safely bind to these paths:
+Each row in the results file carries these fields (units and definitions are mirrored in the
+machine-readable [result schema](/benchmarks/results.schema.json)):
-- Schema: `docs/public/benchmarks/results.schema.json`
-- Placeholder sample: `benchmarks/sample-results.placeholder.json`
-- Methodology: `docs/benchmarks/methodology.md`
-
-Use the placeholder file for layout only. Replace it with real harness output before making any chart label, README proof strip, or social asset that implies measured performance.
+| Field | Unit | Meaning |
+| --- | --- | --- |
+| `engine` | identifier | Engine under test (fixed enum). |
+| `scenario` | identifier | Scenario slug. |
+| `input_size` | profile | Named workload profile (`smoke`/`small`/`medium`/`large`). |
+| `warmup_iterations` | decisions | Unmeasured warmup decisions before timing. |
+| `measured_iterations` | decisions | Measured decisions in the timing window. |
+| `throughput_decisions_per_second` | decisions/second | Measured decisions ÷ elapsed measured seconds. |
+| `p50_ms` / `p95_ms` | milliseconds | Median / 95th-percentile per-decision latency. |
+| `cold_start_ms` | milliseconds | Import + first decision in a fresh process. |
+| `bundle_size_minified_bytes` | bytes | Minified bundle of the engine's public surface. |
+| `validation_overhead_ms` | milliseconds | Validation-enabled vs disabled per-decision delta (Neuron-JS). |
+| `explanation_overhead_ms` | milliseconds | Trace-enabled vs disabled per-decision delta (Neuron-JS). |
+| `node_version` / `package_version` / `commit_sha` | provenance | Run environment and source state. |
+
+## No fabricated numbers
+
+Numbers are published only from a measured `actual_benchmark` run; placeholder fixtures are
+never used for public claims. Results reflect one machine, Node version, and commit — reproduce
+them before citing, and avoid "fastest"/"best" framing beyond what a named scenario and input
+size support.
diff --git a/docs/benchmarks/prompt-kit.md b/docs/benchmarks/prompt-kit.md
deleted file mode 100644
index ecd61a6..0000000
--- a/docs/benchmarks/prompt-kit.md
+++ /dev/null
@@ -1,315 +0,0 @@
-# NJS-GROWTH-07 visual proof prompt kit
-
-This prompt kit is reusable input for downstream visual agents. It is intentionally data-safe: every benchmark prompt requires real measured data from a benchmark source file and forbids imagined values.
-
-Use alongside:
-
-- `docs/benchmarks/visual-proof-system.md`
-- `docs/benchmarks/assets/README.md`
-
-Global source position:
-
-- Product wedge: TypeScript-first, explainable, schema-validatable JSON business rules for AI-assisted software and workflow automation.
-- Proof objective: make Neuron-JS credible, inspectable, and useful beyond README claims.
-- Data integrity rule: inject real benchmark measurements only. If measurements are missing, render schemas, empty states, or placeholder labels with no numeric claims.
-
-## Global prompt variables
-
-Fill these before generation:
-
-```yaml
-project_name: "@sebasoft/neuron-js"
-positioning: "AI-friendly TypeScript rules engine for serializable JSON business rules and deterministic workflow decisions"
-scenario: "pricing-discount | eligibility-approval | workflow-routing"
-input_size: "smoke | small | medium | large"
-benchmark_source_path: "path/to/results.json-or.csv"
-node_version: "actual Node.js version"
-commit_sha: "actual benchmark commit SHA"
-benchmark_date: "YYYY-MM-DD"
-engines:
- - "@sebasoft/neuron-js"
- - "json-rules-engine"
- - "json-logic-js / JsonLogic"
- - "hand-coded TypeScript conditions"
- - "rule-engine-js or rulepilot"
-metrics:
- - "throughput_decisions_per_second"
- - "p50_ms"
- - "p95_ms"
- - "cold_start_ms"
- - "bundle_size_minified_bytes"
- - "validation_overhead_ms"
- - "explanation_overhead_ms"
-```
-
-If any required variable is unknown, the generator must stop and request the missing source, or render a non-numeric placeholder clearly marked `sample structure only`.
-
-## 1. Benchmark infographic pack
-
-### Objective
-
-Create a benchmark infographic pack that compares Neuron-JS to `json-rules-engine`, JsonLogic, hand-coded TypeScript conditions, and one smaller modern competitor using honest measured data.
-
-The asset should make methodology visible before claims.
-
-### Prompt
-
-```text
-Create a dark technical benchmark infographic pack for @sebasoft/neuron-js.
-
-Objective:
-Show credible, inspectable benchmark evidence for a TypeScript-first, explainable, schema-validatable JSON business rules engine. Compare @sebasoft/neuron-js against json-rules-engine, json-logic-js / JsonLogic, hand-coded TypeScript conditions, and [rule-engine-js or rulepilot]. Do not imply a winner unless the provided benchmark data proves it.
-
-Data source:
-Use only benchmark data from: [benchmark_source_path].
-Required fields: engine, scenario, input_size, warmup_iterations, measured_iterations, throughput_decisions_per_second, p50_ms, p95_ms, cold_start_ms, bundle_size_minified_bytes, validation_overhead_ms, explanation_overhead_ms, node_version, package_version, commit_sha.
-If any numeric value is missing, render an empty state or label it as "pending measured data". Never invent or approximate numbers.
-
-Layout:
-Dashboard + comparison matrix.
-Canvas: 16:9 for docs hero, plus export-safe variants at 1:1 and 4:5.
-Top band: title, scenario, input size, benchmark date, Node version, commit SHA.
-Main grid:
-1. Throughput chart: decisions per second by engine.
-2. Latency chart: p50_ms and p95_ms by engine.
-3. Cold start chart: cold_start_ms by engine.
-4. Bundle size chart: minified bytes by engine.
-5. Validation overhead chart: validation_overhead_ms by engine.
-6. Explanation overhead chart: explanation_overhead_ms by engine.
-Bottom band: methodology strip with warmup iterations, measured iterations, package versions, and "measured data only" note.
-
-Text labels:
-- Main title: "Measured proof for JSON business rules"
-- Subtitle: "Validate -> Execute -> Explain -> Compare"
-- Method label: "No synthetic benchmark values. Source: [benchmark_source_path]"
-- Engine labels exactly as provided in the data source.
-- Metric labels exactly matching the schema field names or their readable equivalents.
-
-Visual hierarchy:
-Use @sebasoft/neuron-js cyan as the identity color but keep equal chart scale and honest comparison. Use dark panels, faint grid, monospace metric labels, and small methodology footnotes. Make the data source and commit SHA visible, not hidden.
-
-Style:
-Dark technical schematic, crisp dashboard, no 3D charts, no mascot, no generic SaaS gradients. Use semantic colors: cyan for Neuron-JS/inspectability, emerald for validation/pass, violet for explainability, amber for method/caution, rose for errors or warnings, slate for neutral competitors.
-
-Negative constraints:
-Do not fabricate benchmark results. Do not use fake numbers, lorem ipsum, unlabeled axes, cropped axes, trophy icons, "fastest" claims, or decorative data marks. Do not show Neuron-JS as winning unless real source data establishes that outcome. Do not include generic AI robot imagery.
-
-Reproducibility notes:
-Output should include alt text, exact data source path, Node version, package versions, commit SHA, benchmark date, and export dimensions. Keep generated source editable as SVG/HTML or layered design file where possible.
-```
-
-### Verification checklist
-
-- Every visible number exists in the benchmark source file.
-- Axis labels and metric names are correct.
-- Methodology strip includes Node version, commit SHA, warmup iterations, and measured iterations.
-- Alt text names the scenario, metric group, and no-fabrication policy.
-
-## 2. Explainability trace diagram
-
-### Objective
-
-Create a diagram that explains how JSON rules move through validation, developer registry constraints, deterministic execution, result output, and explanation trace.
-
-### Prompt
-
-```text
-Create a dark SVG-style explainability trace diagram for @sebasoft/neuron-js.
-
-Objective:
-Make Neuron-JS inspectability visible. Show how serializable JSON business rules become deterministic decisions with schema validation and an audit-friendly explanation trace.
-
-Layout:
-Linear progression / structural breakdown, 16:9.
-Flow left to right:
-1. Rule JSON
-2. Schema validation
-3. Developer-owned registry
-4. Synapse deterministic execution
-5. Result object
-6. Explanation trace
-7. Audit / review
-Add a secondary error branch from Schema validation to Validation errors -> Repair loop. Add a secondary safety note from Developer-owned registry to "Only approved actions, conditions, parameters, and rules can execute."
-
-Text labels:
-- Title: "From JSON rule to explainable decision"
-- Rule JSON panel: "Serializable script"
-- Validation panel: "Schema-first validation"
-- Registry panel: "Developer-approved vocabulary"
-- Execution panel: "Synapse runs deterministically"
-- Result panel: "Decision result"
-- Trace panel: "Why it matched or failed"
-- Error branch: "Validation errors show exact repair paths"
-
-Visual hierarchy:
-Main path uses cyan active arrows. Validation pass uses emerald check markers. Explainability trace uses violet audit-chain accents. Error/repair branch uses rose dashed lines. Keep all boxes aligned to a faint grid with adequate spacing.
-
-Style:
-Dark technical architecture diagram, rounded rectangles, 1.5px strokes, JetBrains Mono labels, subtle grid background, no JavaScript animation required. Use concise JSON snippets inside the Rule JSON and Trace panels, but keep them readable.
-
-Negative constraints:
-Do not show arbitrary code execution. Do not show business users directly running unsafe generated rules. Do not use magic wand, robot, black-box AI, or vague cloud icons. Do not include benchmark numbers.
-
-Reproducibility notes:
-Deliver as standalone SVG or self-contained HTML with inline SVG. Include alt text and a source note referencing docs/schemas-validation-explainability.md. Verify it renders in a browser.
-```
-
-### Verification checklist
-
-- The error branch teaches repair, not failure panic.
-- The registry is visible as the control boundary.
-- Diagram fits README/docs width without tiny labels.
-
-## 3. Playground README GIF storyboard
-
-### Objective
-
-Storyboard a short GIF that proves the playground is useful: edit rule JSON and input JSON, validate, run, inspect result, inspect trace, and share state.
-
-### Prompt
-
-```text
-Create a storyboard for a short README GIF demonstrating the Neuron-JS playground.
-
-Objective:
-Show public proof that Neuron-JS is inspectable and useful beyond README claims. The GIF should demonstrate a deterministic pricing or eligibility decision using rule JSON, input JSON, validation, result output, trace inspection, validation errors, and shareable state.
-
-Layout:
-Storyboard with 6 frames, 16:9.
-Frame 1: Playground opens with scenario selector set to [pricing-discount or eligibility-approval].
-Frame 2: Rule JSON and input JSON panels are visible side-by-side.
-Frame 3: User clicks Validate; schema pass state appears with emerald check.
-Frame 4: User clicks Run; result panel shows deterministic decision output.
-Frame 5: User opens Trace; trace rows explain why a rule matched or failed.
-Frame 6: User changes one invalid field; validation error highlights JSON path, then Share URL state appears.
-
-Text labels:
-- Frame 1: "Choose a business decision"
-- Frame 2: "Inspect rule JSON + input JSON"
-- Frame 3: "Validate before runtime"
-- Frame 4: "Run deterministic decision"
-- Frame 5: "Explain why it matched"
-- Frame 6: "Repair errors and share state"
-
-Visual hierarchy:
-The active interaction should be highlighted with a cyan focus ring. Validation success uses emerald. Validation errors use rose with exact path labels. Trace panel uses violet. Keep UI controls large enough for README viewing.
-
-Style:
-Crisp product UI mock, dark technical theme, accessible contrast, minimal motion. Use realistic UI structure: tabs, split panes, JSON editor, result card, trace list, validation error list, share button. Motion should be a calm cursor/click sequence, not flashy animation.
-
-Negative constraints:
-Do not include fake benchmark numbers. Do not show arbitrary code execution. Do not imply business users can safely publish generated rules without validation, tests, and approval. Avoid generic dashboard art or decorative robot imagery.
-
-Reproducibility notes:
-When the real playground exists, capture from the actual UI and keep the storyboard labels as title overlays only if needed. Export target: GIF under 5 MB for README, plus MP4/WebM fallback if the docs site supports it. Include alt text and exact capture command/tool in the asset metadata.
-```
-
-### Verification checklist
-
-- Every frame has a single visible learning point.
-- Error state and empty/pending state are included.
-- Shareable state appears only if implemented in the playground.
-
-## 4. AI-generated-rule safety carousel/comic
-
-### Objective
-
-Create an educational carousel showing that Neuron-JS is not “AI magic”; it is a deterministic guardrail layer for generated rules.
-
-### Prompt
-
-```text
-Create a 5-slide technical comic carousel for @sebasoft/neuron-js about safe AI-generated JSON rules.
-
-Objective:
-Explain the safety story: LLMs can draft rules, but Neuron-JS makes execution safe only through schema validation, developer-owned registry boundaries, tests, approvals, rollback, deterministic execution, and explanation traces.
-
-Layout:
-Bridge/funnel narrative, 4:5 vertical carousel.
-Slide 1: Problem — "LLMs can draft rules. They cannot be trusted blindly."
-Slide 2: Gate 1 — "Schema validation catches malformed JSON scripts."
-Slide 3: Gate 2 — "Developer registry limits the executable vocabulary."
-Slide 4: Gate 3 — "Tests, approvals, and rollback before production."
-Slide 5: Outcome — "Deterministic execution with an explanation trace."
-
-Text labels:
-- Main headline: "AI drafts. Neuron-JS verifies."
-- Supporting labels: "Rules as data", "Schema-first", "Approved vocabulary", "Traceable decisions", "No arbitrary code"
-- Footer: "@sebasoft/neuron-js — TypeScript-first JSON business rules"
-
-Visual hierarchy:
-Use a left-to-right or top-to-bottom safety-gate sequence. The LLM draft starts as amber/pending, invalid paths are rose and blocked, valid path turns emerald after validation, deterministic execution is cyan, explanation trace is violet.
-
-Style:
-Technical comic, not childish. Clean panels, limited characters if any, focus on artifacts: JSON card, schema gate, registry box, test checklist, approval stamp, trace rows. Use dark theme and precise labels.
-
-Negative constraints:
-No robot savior imagery. No claim that AI-generated rules are safe automatically. No fake metrics. No vague "autonomous business logic" promise. Do not depict non-technical users publishing rules without review.
-
-Reproducibility notes:
-Each slide must include editable text layers or markdown captions. Include alt text per slide. Keep same palette, typography, and engine proof language as visual-proof-system.md.
-```
-
-### Verification checklist
-
-- The carousel explicitly blocks unsafe generation.
-- It includes review/approval/rollback, not only validation.
-- It reinforces deterministic execution and explanation trace.
-
-## 5. README proof strip
-
-### Objective
-
-Create a compact README strip that makes the trust story visible in one glance.
-
-### Prompt
-
-```text
-Create a compact README proof strip for @sebasoft/neuron-js.
-
-Objective:
-Give README visitors immediate visual proof that Neuron-JS validates JSON rules, executes deterministic decisions, explains traces, and supports honest benchmarks/playground proof.
-
-Layout:
-Wide strip, 5:1 or 4:1 aspect ratio, export as SVG and PNG.
-Four panels across the strip:
-1. Validate
-2. Execute
-3. Explain
-4. Compare
-Each panel has one artifact: validation error/pass row, execution result card, trace row, benchmark chart placeholder or real chart if measured data exists.
-
-Text labels:
-- Main title: "JSON rules you can validate, run, and explain"
-- Panel 1: "Validate: schema-first checks"
-- Panel 2: "Execute: deterministic Synapse run"
-- Panel 3: "Explain: trace why it matched"
-- Panel 4: "Compare: measured benchmarks only"
-- Footnote if benchmark data is pending: "Benchmark slot shown as structure only until measured data is available."
-
-Visual hierarchy:
-The strip must be readable at README width. Use large panel titles, small but legible monospace snippets, and clear iconography based on artifacts, not generic symbols. Use cyan as the connecting thread, emerald for valid states, rose for error examples, violet for trace, amber for benchmark methodology.
-
-Style:
-Dark product evidence strip, technical but clean. No decorative background beyond a faint grid. Sharp, inspectable mini-panels.
-
-Negative constraints:
-Do not include fake benchmark values. Do not include tiny unreadable JSON blocks. Do not use badges that imply verified metrics without source data. Avoid generic SaaS hero art.
-
-Reproducibility notes:
-Store source file under docs/benchmarks/assets/generated/ or docs/public/img/ when finalized. Include alt text in README integration. If using real chart data, include source path, Node version, package versions, and commit SHA in hidden SVG metadata or adjacent markdown.
-```
-
-### Verification checklist
-
-- Works at README width.
-- Uses real data or clearly non-numeric placeholders.
-- Has an alt-text-ready description.
-
-## Downstream asset tasks recommended
-
-1. Generate `explainability-trace-diagram` as standalone SVG/HTML once docs wording is final.
-2. Generate `README-proof-strip` after selecting whether it will use non-numeric proof structure or real benchmark data.
-3. Generate `benchmark-chart-throughput`, `benchmark-chart-cold-start`, `benchmark-chart-bundle-size`, `benchmark-chart-validation-overhead`, and `benchmark-chart-explanation-overhead` only after benchmark harness outputs real data.
-4. Capture `playground-demo-gif-storyboard` from the actual playground once validation, trace, errors, and shareable state are implemented.
-5. Generate `ai-rule-safety-carousel` as social proof after review of copy/legal risk around AI-generated rules.
diff --git a/docs/benchmarks/visual-proof-system.md b/docs/benchmarks/visual-proof-system.md
deleted file mode 100644
index e36b876..0000000
--- a/docs/benchmarks/visual-proof-system.md
+++ /dev/null
@@ -1,232 +0,0 @@
-# NJS-GROWTH-07 visual proof system
-
-Status: design foundation for downstream benchmark, playground, README, and social proof assets.
-
-Source of record:
-
-- the Neuron-JS growth plan (internal research), `NJS-GROWTH-07` lines 294-318: proof assets must cover benchmarks, playground, and visual explanation.
-- internal marketing/benchmark research, lines 87-100 and 160-174: publish honest benchmarks, shareable playground proof, trace panel, README GIF.
-- internal social-demand research, lines 184-210: trust wedge is TypeScript-first, explainable, schema-validatable JSON business rules for AI-assisted software and workflow automation.
-
-Do not use this system to invent performance numbers. Benchmark visuals must use measured data from the benchmark harness only.
-
-## Brand proof thesis
-
-Neuron-JS should look like deterministic infrastructure, not generic SaaS marketing.
-
-The visual system must communicate four claims:
-
-1. Credible: honest methodology, visible competitor set, clear metric definitions.
-2. Inspectable: rule JSON, input JSON, result, validation errors, and explanation trace are shown as first-class panels.
-3. Deterministic: decisions flow through explicit validation and execution gates, not probabilistic magic.
-4. AI-safe: generated rules are constrained by schemas, registry vocabulary, previews, approvals, tests, and rollback.
-
-## Audience and surfaces
-
-Primary audience:
-
-- TypeScript developers choosing between rule engines, hand-coded conditions, or workflow platforms.
-- Engineering leads evaluating whether dynamic JSON rules can be trusted.
-- AI workflow builders who need deterministic guardrails after LLM extraction or classification.
-
-Primary surfaces:
-
-- `docs/benchmarks/` pages.
-- `docs/playground/` or future playground package/site.
-- README proof strip and short GIF.
-- Social cards and carousels for X/LinkedIn/GitHub discussions.
-
-## Palette
-
-Use a dark technical base with precise semantic accent colors. Cyberpunk energy is allowed only as a restrained proof-of-system glow, not decoration.
-
-| Token | Hex | Role | Usage |
-| --- | --- | --- | --- |
-| `proof-bg` | `#020617` | slate black | page/card background, chart canvas |
-| `proof-panel` | `#0f172a` | raised panel | JSON panes, chart cards, trace rows |
-| `proof-panel-2` | `#111827` | secondary panel | nested code and metadata |
-| `proof-grid` | `#1e293b` | grid lines | faint chart grids, diagram scaffolds |
-| `proof-text` | `#e5e7eb` | primary text | labels, titles, high-contrast body text |
-| `proof-muted` | `#94a3b8` | secondary text | captions, method notes, axis labels |
-| `proof-cyan` | `#22d3ee` | Neuron-JS / inspectability | main highlight, active flow, trace focus |
-| `proof-emerald` | `#34d399` | validation/pass | schema pass, deterministic execution success |
-| `proof-violet` | `#a78bfa` | explainability | trace and audit chain |
-| `proof-amber` | `#fbbf24` | benchmark method | methodology callouts, caution labels |
-| `proof-rose` | `#fb7185` | errors/safety | validation errors, unsafe generation, blocked paths |
-
-Color rules:
-
-- Never encode benchmark rank by arbitrary rainbow colors. Use a stable engine mapping.
-- Use color plus labels/patterns, never color alone.
-- Keep chart backgrounds dark and data marks high contrast.
-- For accessibility, maintain WCAG AA contrast for every text label.
-
-## Engine color mapping
-
-Use this order consistently across all benchmark assets:
-
-| Engine | Color | Stroke/pattern note |
-| --- | --- | --- |
-| `@sebasoft/neuron-js` | `proof-cyan` / `#22d3ee` | solid line, highlighted but not oversized |
-| `json-rules-engine` | `proof-violet` / `#a78bfa` | solid line, equal weight |
-| `json-logic-js` / JsonLogic | `proof-amber` / `#fbbf24` | dashed line or patterned bar |
-| hand-coded TypeScript | `proof-emerald` / `#34d399` | solid line, marked as baseline not product competitor |
-| `rule-engine-js` or `rulepilot` | `proof-muted` / `#94a3b8` | dotted or lower-emphasis stroke |
-
-Do not visually imply Neuron-JS wins unless the measured benchmark data proves it.
-
-## Typography
-
-Preferred stack:
-
-- UI and headings: `Inter`, `system-ui`, `-apple-system`, `BlinkMacSystemFont`, `Segoe UI`, sans-serif.
-- Code and metric labels: `JetBrains Mono`, `SFMono-Regular`, `Menlo`, `Consolas`, monospace.
-
-Type scale:
-
-| Token | Size | Weight | Usage |
-| --- | --- | --- | --- |
-| `display` | 40-48px | 700 | hero/README strip headline |
-| `title` | 28-32px | 700 | infographic title |
-| `section` | 18-22px | 650 | panel headers |
-| `body` | 14-16px | 400-500 | explanatory copy |
-| `mono-label` | 12-13px | 500 | JSON keys, axis labels, trace node labels |
-| `micro` | 10-11px | 500 | metadata, commit SHA, version, methodology footnotes |
-
-Rules:
-
-- Keep headlines concrete: `Validate -> Execute -> Explain`, not vague claims.
-- Use code labels where the source artifact is code or JSON.
-- Use short captions that explain what is inspectable.
-
-## Composition system
-
-Use a three-layer composition model:
-
-1. Evidence layer: charts, JSON panes, trace nodes, validation rows.
-2. Interpretation layer: small annotations explaining what the viewer can trust.
-3. Method layer: metric schema, versions, input sizes, commit SHA, and no-fabrication note.
-
-Preferred layouts by asset:
-
-| Asset | Layout | Style |
-| --- | --- | --- |
-| benchmark infographic pack | dashboard + comparison matrix | technical schematic, dark lab grid |
-| explainability trace diagram | linear progression or structural breakdown | dark architecture diagram |
-| playground README GIF storyboard | comic-strip sequence + UI wireframe | crisp product UI, low ornament |
-| AI-generated-rule safety carousel | bridge or funnel | technical comic with safety gates |
-| README proof strip | bento-grid / proof strip | compact dark product evidence card |
-
-## Diagram style
-
-Trace and architecture diagrams should use dark SVG-style panels:
-
-- Rounded rectangles with 6-8px radius.
-- 1.5px strokes.
-- Faint 40px grid background.
-- Arrows behind boxes.
-- Dashed rose lines for blocked unsafe paths.
-- Emerald check markers for validation pass.
-- Violet audit chain for explainability trace.
-- Cyan active path for Neuron-JS execution.
-
-Canonical trace flow:
-
-```text
-Rule JSON -> Schema validation -> Developer registry -> Synapse execution -> Result -> Explanation trace -> Audit/review
-```
-
-AI-safety flow:
-
-```text
-LLM draft -> schema validation -> registry vocabulary check -> test cases -> human approval -> deterministic execution
- \-> validation errors -> repair loop
-```
-
-## Chart rules
-
-Benchmark visuals must display method before claim.
-
-Required chart metadata:
-
-- scenario: `pricing-discount`, `eligibility-approval`, or `workflow-routing`.
-- input size: smoke / small / medium / large.
-- warmup iterations.
-- measured iterations.
-- Node version.
-- package versions.
-- commit SHA.
-- benchmark date.
-
-Allowed metrics:
-
-- throughput decisions per second.
-- p50 and p95 milliseconds.
-- cold start milliseconds.
-- bundle size minified bytes.
-- validation overhead milliseconds.
-- explanation overhead milliseconds.
-
-Forbidden chart behavior:
-
-- No invented numbers.
-- No unlabeled axes.
-- No “fastest” badge without measured proof.
-- No 3D charts.
-- No cropped axes that exaggerate differences.
-- No benchmark screenshot without methodology metadata.
-
-## Social-card constraints
-
-Use these constraints for X/LinkedIn/GitHub visual posts:
-
-- Default social aspect: 16:9 for link cards, 1:1 for feed cards, 4:5 for LinkedIn carousel slides.
-- Maximum headline length: 8 words.
-- Maximum body text per slide: 35 words.
-- Minimum font size: 28px for headline on 1200px-wide assets; 18px for labels.
-- Always include the package name `@sebasoft/neuron-js`.
-- Add a footnote if numbers are benchmark-specific: `Measured on , . See methodology.`
-- For unreleased/prototype assets, include `sample structure only — replace with measured data`.
-
-## README proof strip recommendation
-
-Recommended asset folder:
-
-```text
-docs/benchmarks/assets/
- README.md
- source-data/
- generated/
- prompts/
- storyboard/
-```
-
-README strip design:
-
-- Aspect ratio: wide 5:1 or 4:1, exportable as SVG/PNG and embeddable in README.
-- Sections: `Validate`, `Execute`, `Explain`, `Compare`.
-- Must show one actual tiny trace row or JSON snippet, not generic icons only.
-- If benchmark numbers are not final, use placeholder labels such as `throughput`, `cold start`, `bundle size` without fake values.
-
-## Accessibility and QA gates
-
-Before an asset is approved:
-
-- Verify text contrast reaches WCAG AA minimum.
-- Check legibility at 50% scale for README and social use.
-- Ensure keyboard-visible UI states exist for any playground capture.
-- Add alt text for every exported image.
-- Keep all chart data traceable to a source CSV/JSON and commit SHA.
-- Confirm every metric label matches the benchmark schema exactly.
-
-## Brand guardian checks
-
-Reject assets that:
-
-- Make Neuron-JS look like a no-code magic builder.
-- Hide the developer-owned registry or schema validation story.
-- Use fake benchmark numbers or decorative data.
-- Use generic robot/AI imagery without validation and deterministic execution gates.
-- Overpromise business-user rule authoring without review, tests, and rollback.
-
-Approve assets that make the trust story visible: rules are data, execution is deterministic, validation is schema-first, traces are inspectable, and AI generation is constrained.
diff --git a/docs/playground/readme-demo-capture.md b/docs/playground/readme-demo-capture.md
deleted file mode 100644
index a14a110..0000000
--- a/docs/playground/readme-demo-capture.md
+++ /dev/null
@@ -1,203 +0,0 @@
-# README playground demo capture specification
-
-Status: capture contract for the future Neuron-JS playground. The repository does not currently contain a `docs/playground/` implementation, so this page fixes the demo route, selectors, storyboard, output files, and data-integrity checks needed before capture automation is unblocked.
-
-Source of record:
-
-- the Neuron-JS growth plan (internal research), `NJS-GROWTH-07` lines 294-318: proof assets must include benchmarks, playground, visual explanation, and a README GIF when the playground is stable.
-- internal marketing/benchmark research, lines 160-174: live demos require browser playground, shareable URLs, explain trace panel, README GIF, and optional visual rule builder.
-- internal social-demand research, lines 160-169: social proof should show playground validation, explanation traces, before/after logic, and AI-generated rule validation.
-- Runnable fixture source: `examples/pricing-rules/rules.json`, `examples/pricing-rules/input.json`, and `examples/pricing-rules/expected-output.json`.
-
-Do not record or publish this asset until the playground renders the fixture data below and the capture command can validate the result against `examples/pricing-rules/expected-output.json`.
-
-## Capture status
-
-Blocked on playground implementation, not on missing planning.
-
-Required future command:
-
-```sh
-yarn capture:playground-readme --example pricing-rules --format mp4,gif
-```
-
-Required future outputs:
-
-```text
-docs/benchmarks/assets/generated/playground-readme-demo.mp4
-docs/benchmarks/assets/generated/playground-readme-demo.gif
-docs/benchmarks/assets/generated/playground-readme-demo.metadata.json
-```
-
-The metadata JSON must include:
-
-- capture command.
-- git commit SHA.
-- package version.
-- Node version.
-- browser name and version.
-- source fixture paths.
-- output dimensions and duration.
-- validation result comparing the visible result panel to `examples/pricing-rules/expected-output.json`.
-
-## Playground route contract
-
-Canonical capture route:
-
-```text
-/playground/?example=pricing-rules&capture=readme
-```
-
-Required route behavior:
-
-1. Load the pricing example without user interaction.
-2. Render deterministic panels in the same order on every run.
-3. Encode the loaded example in shareable URL state.
-4. Disable random animation timing when `capture=readme` is present.
-5. Use stable selectors from this page so browser automation can assert content before recording.
-
-Recommended shareable URL state:
-
-```text
-/playground/?example=pricing-rules&state=&capture=readme
-```
-
-The decoded state must contain only serializable JSON data:
-
-```json
-{
- "example": "pricing-rules",
- "scriptPath": "examples/pricing-rules/rules.json",
- "inputPath": "examples/pricing-rules/input.json",
- "expectedOutputPath": "examples/pricing-rules/expected-output.json"
-}
-```
-
-## Stable selectors
-
-Use `data-testid` for assertions and `data-capture-step` for timeline control.
-
-| Selector | Required content | Capture step |
-| --- | --- | --- |
-| `[data-testid="playground-root"]` | Whole playground shell | all |
-| `[data-testid="example-select"]` | Active example label: `pricing-rules` | 1 |
-| `[data-testid="rule-json-panel"]` | Pretty-printed `examples/pricing-rules/rules.json` | 2 |
-| `[data-testid="input-json-panel"]` | Pretty-printed `examples/pricing-rules/input.json` | 3 |
-| `[data-testid="validation-status"]` | `Validation: passed` for the canonical run | 4 |
-| `[data-testid="validation-errors"]` | Empty state: `No validation errors` | 4 |
-| `[data-testid="trace-panel"]` | Ordered explanation trace rows | 5 |
-| `[data-testid="trace-row-vip-order-discount"]` | Highlighted matched rule `vip-order-discount` | 5 |
-| `[data-testid="result-panel"]` | `ok: true`, `rulesExecuted: 1`, `finalTotal: 105`, `discountAmount: 20` | 6 |
-| `[data-testid="share-url"]` | Shareable URL containing `example=pricing-rules` | 7 |
-
-Required trace classes:
-
-| Class | Meaning |
-| --- | --- |
-| `.trace-row--matched` | Rule or condition matched. |
-| `.trace-row--failed` | Rule or condition failed. |
-| `.trace-row--focused` | Current row during capture. |
-| `.trace-row--muted` | Non-current rows during capture. |
-
-## Canonical visible data
-
-Rule fixture:
-
-```json
-{
- "id": "pricing-rules-demo",
- "rules": [
- {
- "id": "vip-order-discount",
- "type": "simple_rule",
- "conditions": ["minimum-cart-subtotal >= 100"],
- "actions": ["apply_discount 16%"]
- }
- ]
-}
-```
-
-Input fixture:
-
-```json
-{
- "messages": [],
- "state": {
- "cart": { "subtotal": 125, "currency": "USD" },
- "customer": { "segment": "vip" }
- }
-}
-```
-
-Expected result fixture:
-
-```json
-{
- "ok": true,
- "rulesExecuted": 1,
- "finalTotal": 105,
- "discountAmount": 20,
- "messages": ["Applied 16% discount: -20"]
-}
-```
-
-These visible values are backed by the runnable `examples/pricing-rules/run.ts` path. Capture automation must run the example or import the same fixture data before recording.
-
-## README-safe storyboard
-
-Target duration: 8-12 seconds.
-
-Target dimensions:
-
-- MP4: `1280x720`, H.264, under 8 MB when practical.
-- GIF: `960x540`, 12 FPS, under 5 MB when practical.
-
-Timeline:
-
-| Time | Shot | Assertion before capture proceeds |
-| --- | --- | --- |
-| 0.0-1.0s | Playground opens with `pricing-rules` selected. | `[data-testid="example-select"]` contains `pricing-rules`. |
-| 1.0-2.5s | Rule JSON panel focuses `vip-order-discount`. | `[data-testid="rule-json-panel"]` contains `vip-order-discount`. |
-| 2.5-4.0s | Input JSON panel focuses `cart.subtotal: 125`. | `[data-testid="input-json-panel"]` contains `125`. |
-| 4.0-5.5s | Validation status turns green. | `[data-testid="validation-status"]` contains `passed`. |
-| 5.5-7.5s | Trace panel highlights the matched condition and action. | `[data-testid="trace-row-vip-order-discount"]` has `.trace-row--matched`. |
-| 7.5-9.5s | Result panel displays deterministic output. | `[data-testid="result-panel"]` contains `finalTotal: 105`. |
-| 9.5-11.0s | Shareable URL is shown/copied statefully. | `[data-testid="share-url"]` contains `example=pricing-rules`. |
-
-No benchmark chart, throughput claim, or performance language belongs in this demo. It proves inspectability, validation, deterministic execution, explanation, and shareability only.
-
-## Future automation requirements
-
-Recommended implementation stack:
-
-- Playwright for browser launch, assertions, and MP4/webm recording.
-- `ffmpeg` for README-safe GIF conversion.
-- A script at `scripts/capture-playground-readme.ts` wired to `yarn capture:playground-readme`.
-
-Automation sequence:
-
-1. Build the docs/playground site.
-2. Start the preview server on a deterministic local port.
-3. Open `/playground/?example=pricing-rules&capture=readme`.
-4. Assert all selectors above are present.
-5. Assert result-panel values match `examples/pricing-rules/expected-output.json`.
-6. Record the MP4.
-7. Convert a GIF from the same recording.
-8. Write metadata JSON beside the output files.
-9. Exit non-zero if any selector, fixture value, output file, or metadata field is missing.
-
-## README integration rule
-
-README may embed the generated asset only after all conditions are true:
-
-1. The playground route exists and is linked from the docs.
-2. Capture automation passes locally and in CI or documented release workflow.
-3. The visible rule/input/result pair is validated against the runnable example fixtures.
-4. The README alt text describes the demo without claiming benchmark superiority.
-5. The asset metadata file is committed beside the generated MP4/GIF.
-
-Suggested alt text:
-
-```text
-Neuron-JS playground demo showing pricing rule JSON, input JSON, validation passed, matched explanation trace, deterministic discount result, and shareable state.
-```
diff --git a/tests/contracts/customer-docs-surface.test.ts b/tests/contracts/customer-docs-surface.test.ts
new file mode 100644
index 0000000..f181aa3
--- /dev/null
+++ b/tests/contracts/customer-docs-surface.test.ts
@@ -0,0 +1,73 @@
+import { existsSync, readFileSync } from 'node:fs';
+import { describe, expect, it } from 'vitest';
+
+// The customer-facing site publishes only user-relevant proof. Internal
+// asset-production docs (prompts, storyboards, design system, manifests, capture
+// spec, asset metadata) live in the private chaos-vault wiki, not in docs/.
+
+const customerPages = [
+ 'docs/benchmarks/index.md',
+ 'docs/benchmarks/results.md',
+ 'docs/benchmarks/methodology.md',
+ 'docs/benchmarks/ai-rule-safety.md',
+];
+
+const relocatedInternalPages = [
+ 'docs/benchmarks/prompt-kit.md',
+ 'docs/benchmarks/visual-proof-system.md',
+ 'docs/benchmarks/benchmark-visual-pack.md',
+ 'docs/benchmarks/assets/asset-manifest.md',
+ 'docs/benchmarks/assets/README.md',
+ 'docs/benchmarks/assets/source-data/README.md',
+ 'docs/benchmarks/assets/prompts/benchmark-chart-prompts.md',
+ 'docs/benchmarks/assets/prompts/methodology-infographic.md',
+ 'docs/benchmarks/assets/prompts/ai-rule-safety-carousel.md',
+ 'docs/benchmarks/assets/storyboard/ai-rule-safety-carousel.md',
+ 'docs/benchmarks/assets/storyboard/playground-readme-gif.md',
+ 'docs/benchmarks/assets/generated/explainability-trace-diagram.md',
+ 'docs/benchmarks/assets/generated/methodology-card.md',
+ 'docs/benchmarks/assets/generated/ai-rule-safety-carousel.md',
+ 'docs/playground/readme-demo-capture.md',
+];
+
+const customerChartSvgs = [
+ 'docs/benchmarks/assets/generated/benchmark-chart-throughput.svg',
+ 'docs/benchmarks/assets/generated/benchmark-chart-cold-start.svg',
+ 'docs/benchmarks/assets/generated/benchmark-chart-bundle-size.svg',
+ 'docs/benchmarks/assets/generated/benchmark-chart-validation-overhead.svg',
+ 'docs/benchmarks/assets/generated/benchmark-chart-explanation-overhead.svg',
+ 'docs/benchmarks/assets/generated/explainability-trace-diagram.svg',
+ 'docs/benchmarks/assets/generated/methodology-card.svg',
+ 'docs/benchmarks/assets/generated/ai-rule-safety-carousel-1.svg',
+ 'docs/benchmarks/assets/generated/ai-rule-safety-carousel-2.svg',
+ 'docs/benchmarks/assets/generated/ai-rule-safety-carousel-3.svg',
+ 'docs/benchmarks/assets/generated/ai-rule-safety-carousel-4.svg',
+ 'docs/benchmarks/assets/generated/ai-rule-safety-carousel-5.svg',
+];
+
+describe('customer docs surface', () => {
+ it('keeps the user-facing proof pages', () => {
+ for (const page of customerPages) {
+ expect(existsSync(page), page).toBe(true);
+ }
+ });
+
+ it('keeps the generated SVG assets referenced by customer pages', () => {
+ for (const svg of customerChartSvgs) {
+ expect(existsSync(svg), svg).toBe(true);
+ }
+ });
+
+ it('does not ship internal asset-production docs on the site', () => {
+ for (const page of relocatedInternalPages) {
+ expect(existsSync(page), page).toBe(false);
+ }
+ });
+
+ it('keeps customer pages free of private wiki references', () => {
+ for (const page of customerPages) {
+ const text = readFileSync(page, 'utf8');
+ expect(text).not.toContain('chaos-vault');
+ }
+ });
+});
diff --git a/tests/contracts/playground-capture-contract.test.ts b/tests/contracts/playground-capture-contract.test.ts
deleted file mode 100644
index fefc320..0000000
--- a/tests/contracts/playground-capture-contract.test.ts
+++ /dev/null
@@ -1,84 +0,0 @@
-import { existsSync, readFileSync } from 'node:fs';
-import { describe, expect, it } from 'vitest';
-
-const captureSpecPath = 'docs/playground/readme-demo-capture.md';
-const storyboardPath = 'docs/benchmarks/assets/storyboard/playground-readme-gif.md';
-const pricingRulePath = 'examples/pricing-rules/rules.json';
-const pricingInputPath = 'examples/pricing-rules/input.json';
-const pricingExpectedOutputPath = 'examples/pricing-rules/expected-output.json';
-
-function readJson(path: string): T {
- return JSON.parse(readFileSync(path, 'utf8')) as T;
-}
-
-describe('playground README demo capture contract', () => {
- it('publishes a concrete capture spec and storyboard while playground implementation is pending', () => {
- expect(existsSync(captureSpecPath)).toBe(true);
- expect(existsSync(storyboardPath)).toBe(true);
-
- const spec = readFileSync(captureSpecPath, 'utf8');
- const storyboard = readFileSync(storyboardPath, 'utf8');
-
- expect(spec).toContain('Blocked on playground implementation, not on missing planning.');
- expect(spec).toContain('/playground/?example=pricing-rules&capture=readme');
- expect(spec).toContain('yarn capture:playground-readme --example pricing-rules --format mp4,gif');
- expect(storyboard).toContain('docs/benchmarks/assets/generated/playground-readme-demo.mp4');
- expect(storyboard).toContain('docs/benchmarks/assets/generated/playground-readme-demo.gif');
- });
-
- it('locks browser automation to stable selectors for every required demo flow panel', () => {
- const spec = readFileSync(captureSpecPath, 'utf8');
- const requiredSelectors = [
- '[data-testid="example-select"]',
- '[data-testid="rule-json-panel"]',
- '[data-testid="input-json-panel"]',
- '[data-testid="validation-status"]',
- '[data-testid="validation-errors"]',
- '[data-testid="trace-panel"]',
- '[data-testid="trace-row-vip-order-discount"]',
- '[data-testid="result-panel"]',
- '[data-testid="share-url"]',
- ];
-
- for (const selector of requiredSelectors) {
- expect(spec).toContain(selector);
- }
- });
-
- it('backs the visible demo result with the runnable pricing example fixtures', () => {
- const spec = readFileSync(captureSpecPath, 'utf8');
- const script = readJson<{ id: string; rules: Array<{ id: string }> }>(pricingRulePath);
- const input = readJson<{ state: { cart: { subtotal: number; currency: string } } }>(pricingInputPath);
- const expected = readJson<{
- ok: boolean;
- rulesExecuted: number;
- finalTotal: number;
- discountAmount: number;
- messages: string[];
- }>(pricingExpectedOutputPath);
-
- expect(script.id).toBe('pricing-rules-demo');
- expect(script.rules[0]?.id).toBe('vip-order-discount');
- expect(input.state.cart.subtotal).toBe(125);
- expect(input.state.cart.currency).toBe('USD');
- expect(expected).toEqual({
- ok: true,
- rulesExecuted: 1,
- finalTotal: 105,
- discountAmount: 20,
- messages: ['Applied 16% discount: -20'],
- });
-
- for (const value of ['pricing-rules-demo', 'vip-order-discount', '125', 'finalTotal: 105', 'discountAmount: 20']) {
- expect(spec).toContain(value);
- }
- });
-
- it('links the capture spec from proof-asset docs and VitePress navigation', () => {
- const proofIndex = readFileSync('docs/benchmarks/index.md', 'utf8');
- const config = readFileSync('docs/.vitepress/config.ts', 'utf8');
-
- expect(proofIndex).toContain('../playground/readme-demo-capture.md');
- expect(config).toContain("{ text: 'Playground Capture Spec', link: '/playground/readme-demo-capture' }");
- });
-});