A fast second opinion for the small, closed choices your AI assistant makes all day.
-Which option fits, does this draft meet the brief, is this extracted field right, do these search results answer the question. Each answer comes back as a choice, a score or a yes/no likelihood, with a confidence and a local receipt. It never gives your assistant permission to do anything.
+
Typed routing for AI agents. Local policy gates. Auditable receipts.
+Give your assistant a bounded task, tool, skill, or review choice. TypeSafe Jev returns a typed answer with confidence; the local layer checks it and records a receipt. Your host keeps execution authority.
+## Quick start without a key
+
+On macOS with Python 3.11 or newer and Git, replay the shipped synthetic cases through the real local checking logic:
+
+```sh
+git clone https://github.com/qualixar/jev-decision-layer.git
+cd jev-decision-layer
+plugins/qualixar-jev-decision-layer/scripts/jev selftest
+```
+
+This makes no provider call and needs no key or enrolled workspace. A passing self-test verifies gate contracts; it does not measure provider accuracy, latency, token savings, or host interception. [Run twenty recipe examples](docs/DEMO.md), then [install for your host](#install-and-upgrade) and approve a workspace in the private setup page.
## What it is
@@ -24,6 +27,8 @@ Your AI assistant (Claude, Codex, Copilot and others) makes many small decisions
It is an open-source (MIT) plugin and local MCP server. The decision model is either hosted [TypeSafe Jev](https://docs.typesafe.ai/introduction/coding-agents) (directly or through OpenRouter) or [Laya](https://github.com/mizorewww/laya-mlx), which runs on your own Mac. Nothing is sent anywhere until you approve a folder in a private setup page on your computer.
+[](https://github.com/qualixar/jev-decision-layer/releases/tag/v1.0.13)
+
**Current release: 1.0.13** — 20 MCP tools, 55 recipes for bounded decisions, 165 synthetic offline fixtures, and five host adapters. This release is supported and verified on macOS. Linux is experimental and unverified. Windows is disabled: its runtime entry points refuse to start because the native private-state contract did not pass CI. Local Laya needs an Apple-Silicon Mac. See the [host evidence](docs/HOSTS.md) and the [changelog](CHANGELOG.md).
Built by **Varun Pratap Bhardwaj** under **Qualixar**. This is an independent open-source integration, not an official TypeSafe, OpenAI, Anthropic, Google, Microsoft, or Laya product.
@@ -409,3 +414,9 @@ No. Jev returns a typed recommendation for a bounded question. The host still co
## Build on it
The source is MIT-licensed. Add a data-only recipe with explicit input fields, a typed question, synthetic normal/uncertain/adversarial fixtures, and an honest limitation; see [CONTRIBUTING.md](CONTRIBUTING.md). Adding a host means writing one adapter against that host's hook contract and its own hook file — never editing another host's. The [rollback guide](docs/ROLLBACK.md) removes the plugin without deleting your project. Upstream code and model rights remain with their authors; see [third-party notices](plugins/qualixar-jev-decision-layer/THIRD_PARTY_NOTICES.md). No Jev or Laya model weights are included.
+
+## Related Qualixar projects
+
+- [Bounded Loops](https://github.com/qualixar/bounded-loops): independent completion gates for agent loops.
+- [AgentAssert](https://github.com/qualixar/agentassert-abc): behavioral contracts for AI agents.
+- [Qualixar OS](https://github.com/qualixar/qualixar-os): agent orchestration runtime.
diff --git a/docs/DEMO.md b/docs/DEMO.md
new file mode 100644
index 0000000..231b107
--- /dev/null
+++ b/docs/DEMO.md
@@ -0,0 +1,15 @@
+# Twenty bounded decisions: inspect the gate before connecting a model
+
+The offline demo replays recorded, synthetic answers through Jev Decision Layer's real local gates. For each of twenty shipped recipes, it checks a nominal, uncertain and adversarial case. No API key, provider call, workspace enrollment or confidential input is needed.
+
+After the README quick start, run with Node.js 20 or newer:
+
+```sh
+node tools/demo.mjs
+```
+
+The final line is `PASS: 20 recipe examples, 60 synthetic gate checks`. Each preceding JSON row identifies the recipe, scenario, raw gate and experimental live-policy result. A recipe that has not been evaluated on real model outputs retains its verification requirement.
+
+[Recorded output](launch/offline-demo-output.txt) is a reproducible gate-contract artifact. It is not a transcript of model inference, a prediction of accuracy, or a cost/latency benchmark. Run it yourself to confirm your checkout behaves the same way.
+
+To evaluate a real decision, install for your host, approve a folder and provider in the private setup page, then use a public input and inspect its confidence and receipt. Review [host evidence](HOSTS.md) and [security boundaries](SECURITY.md). Hosted providers bill under their own terms. Local Laya needs Apple Silicon and a separately verified installation.
diff --git a/docs/GITHUB_DISCOVERY.md b/docs/GITHUB_DISCOVERY.md
index f006fbd..6b72ca7 100644
--- a/docs/GITHUB_DISCOVERY.md
+++ b/docs/GITHUB_DISCOVERY.md
@@ -1,71 +1,11 @@
-# GitHub repository discovery
+# GitHub discovery settings
-Use this page to record GitHub repository metadata and the social-preview specification for `qualixar/jev-decision-layer`. This file does not change the live topics or preview image.
+Canonical product page: https://qualixar.com/products/jev-decision-layer
-## Repository description
+Metadata is owned by the Qualixar website's `data/products.json`. Stable descriptions contain no release counts. This repository links to that definition instead of maintaining another changing metadata specification.
-**Current verified repository description (checked 2026-09-28):**
+The acquisition artwork uses dark slate #0B0D13, cobalt #3B82F6, warm amber #F59E0B and white. Upload `docs/assets/jev-social-preview.png` in GitHub Settings → Social preview after reviewing this PR. The PNG is 1280×640, under 1 MB, and includes no claims about host parity, accuracy or savings. Its vector source is `docs/assets/jev-acquisition.svg`.
-> Typed decision layer for Codex, Claude Code, VS Code, Hermes and Antigravity. TypeSafe Jev or optional local Laya with policy gates, receipts and 36 recipes.
+An image committed to Git is not proof that GitHub serves it. After upload, verify the Settings preview and the public repository's `og:image`. GitHub's current [social preview instructions](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/customizing-your-repositorys-social-media-preview) describe the upload requirement.
-This is the verified live repository description as of 2026-09-28; it reflects the 1.0.7 public repository state. Update it for 1.0.9 after the release checks pass. Keep the canonical repository URL stable.
-
-## Suggested 1.0.9 description
-
-> Open-source AI agent decision layer for Codex, Claude Code, Hermes, Antigravity and VS Code. TypeSafe Jev MCP routing, 55 recipes, local gates and receipts; optional Laya-MLX on Apple Silicon.
-
-Use this as a metadata update after the 1.0.9 candidate is verified. GitHub description text is a discovery aid, not a ranking or star guarantee.
-
-## Topics
-
-Suggested GitHub topics (20):
-
-`jev` · `typesafe-ai` · `system-one` · `typed-decisions` · `decision-model` · `coding-agents` · `ai-agents` · `agent-routing` · `tool-selection` · `laya` · `laya-mlx` · `local-ai` · `apple-silicon` · `mcp` · `model-context-protocol` · `claude-code` · `openai-codex` · `vscode` · `hermes` · `antigravity`
-
-Topics help classify a repository; they do not guarantee search placement or stars. See GitHub's [repository topics guide](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/classifying-your-repository-with-topics).
-
-## Social preview
-
-Upload [`docs/assets/social-preview.png`](assets/social-preview.png), the checked-in **1280 × 640 PNG**. Before using it, inspect the rendered file and confirm its wording and palette match these constraints:
-
-- Headline: **ONE DECISION LAYER. FIVE AGENT HARNESSES.**
-- Supporting line: **TypeSafe Jev · optional local Laya · typed answers · local gates · receipts**
-- Count line: **20 tools · 55 recipes · 165 offline fixtures**
-- Use a developer-focused violet, warm amber, and neutral palette. Do not use Qualixar green or cyan.
-- Do not imply that all five hosts have verified live turns. Host evidence differs and is listed in the README.
-- Keep execution authority with the host; do not depict Jev or Laya executing shell, browser, deployment, or publishing actions.
-
-GitHub describes the [social preview image setting](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/customizing-your-repositorys-social-media-preview). The current image should be visually checked before a metadata update; a filename or dimensions alone do not establish that the artwork meets this specification.
-
-## README vocabulary
-
-Use these terms naturally in the title, opening, headings, and explanatory text where they fit:
-
-- TypeSafe Jev and System One;
-- typed decisions and decision layer;
-- coding agents and agent harnesses;
-- Codex, Claude Code, VS Code, Hermes, and Antigravity;
-- Laya and Laya-MLX;
-- MCP, tool selection, retry decisions, context selection, and output relevance;
-- local policy gate, `act / verify / ignore`, workspace scope, and receipts.
-
-The first screen should show one bounded decision, explain what the layer adds beyond a direct Jev call, and state that host permissions remain authoritative. Link the host evidence table beside any five-host claim. Do not lead with the earlier Laya-MLX threshold sample: its labeled rows and reproduction script are absent from this repository, so it cannot justify a provider-specific gate floor.
-
-## Working article title
-
-**Jev + Laya for Coding Agents: Why We Built One Typed Decision Layer Across Five Harnesses**
-
-This is a working title for the canonical educational article, not confirmation that the article has been published.
-
-## Machine-readable discovery
-
-Keep [`llms.txt`](../llms.txt) as a reading index for agents. It is not a ranking guarantee. When README headings or document locations change, check its links; it currently points to the README, host guide, capabilities manifest, first-use guide, use cases, security boundary, rollback guide, changelog, contributor guide, license, and third-party notices.
-
-## Claim boundaries
-
-- Say **one shared runtime with adapters for five hosts**; do not say all five are equally verified.
-- Describe shipped thresholds as unvalidated defaults; do not imply provider calibration or an independently measured confidence signal.
-- Treat 165 offline fixtures as tests of the shipped local gate contract, not provider-accuracy evidence.
-- Do not claim token, subscription-cost, API-cost, or task-time savings without matched accepted-task trials.
-- Say the model returns advice and local policy metadata; the host retains execution authority.
-- Keep upstream model ownership and license notices separate; this is an independent integration, not an official TypeSafe, Laya, OpenAI, Anthropic, Google, or Microsoft product.
+Run [the demo](DEMO.md) to inspect local gate behavior. The synthetic cases are not model-accuracy evidence. Host claims must retain the qualifications in [HOSTS.md](HOSTS.md). Never claim measured token, cost or time savings without matched accepted-task trials.
diff --git a/docs/assets/jev-acquisition.svg b/docs/assets/jev-acquisition.svg
new file mode 100644
index 0000000..bf8f1b7
--- /dev/null
+++ b/docs/assets/jev-acquisition.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/assets/jev-hero.png b/docs/assets/jev-hero.png
new file mode 100644
index 0000000..ea54a20
Binary files /dev/null and b/docs/assets/jev-hero.png differ
diff --git a/docs/assets/jev-hero.svg b/docs/assets/jev-hero.svg
new file mode 100644
index 0000000..278bc71
--- /dev/null
+++ b/docs/assets/jev-hero.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/assets/jev-social-preview.png b/docs/assets/jev-social-preview.png
new file mode 100644
index 0000000..8c0b6d9
Binary files /dev/null and b/docs/assets/jev-social-preview.png differ
diff --git a/docs/launch/claim-ledger.md b/docs/launch/claim-ledger.md
new file mode 100644
index 0000000..8d7ad1e
--- /dev/null
+++ b/docs/launch/claim-ledger.md
@@ -0,0 +1,20 @@
+# Acquisition claim ledger — checked 2026-10-01
+
+| Claim | Source / verification | Boundary |
+| --- | --- | --- |
+| Open-source MIT decision layer | LICENSE, released README at 6d9d897 | Integration license, not model-weight license |
+| Typed choice, score and yes/no questions | Official TypeSafe coding-agent documentation; public runtime question contracts | Decision primitive, not code generation |
+| Policy gates and local receipts | Released runtime and Security/HOSTS docs | Advisory; no native permission grant |
+| 55 recipes / 165 offline cases | Executed scripts/jev selftest at 6d9d897; all_passed true | Synthetic gate contract, not model accuracy |
+| 20 examples / 60 checks | Executed node tools/demo.mjs; all checks passed | Recorded synthetic answers through real gates |
+| macOS supported; Linux experimental; Windows disabled | Released README and docs/HOSTS.md | Host adapters differ in verification evidence |
+| Optional Laya on Apple Silicon | Released README installation and security sections | Separate verified installation; no Jev-only fallback |
+| No accepted-task savings measurement | No matched experiment performed in this task | No speed, cost or token-reduction claim in acquisition copy |
+
+Sources:
+
+- https://github.com/qualixar/jev-decision-layer/blob/6d9d897cea8c0d852b2549750bacaf9fda741d84/README.md
+- https://github.com/qualixar/jev-decision-layer/blob/6d9d897cea8c0d852b2549750bacaf9fda741d84/docs/HOSTS.md
+- https://docs.typesafe.ai/introduction/coding-agents
+
+Mechanical text audit passed for the new launch brief, demo guide and README opening. Independent code/source review found no blockers. This is prepared acquisition material for review; no social post was published and no spoken performance was generated.
diff --git a/docs/launch/launch-brief.md b/docs/launch/launch-brief.md
new file mode 100644
index 0000000..ad0fcca
--- /dev/null
+++ b/docs/launch/launch-brief.md
@@ -0,0 +1,15 @@
+# Jev Decision Layer: a bounded choice with evidence
+
+Jev Decision Layer is an open-source decision layer for AI agents. It connects typed task, tool, skill and review choices to TypeSafe Jev, with local policy gates and auditable receipts. The host agent retains execution authority.
+
+The first demonstration is deliberately inspectable: twenty public recipes, each replayed through nominal, uncertain and adversarial synthetic cases. The runnable artifact checks local gate behavior before a user connects a model. It does not claim faster accepted tasks or cheaper subscriptions.
+
+This is one AI Reliability Engineering primitive: a decision model advises, a local gate checks the answer, and the host executes and verifies. Use it when the options or rubric can be stated clearly. Keep open-ended writing, code generation and final judgment with the host.
+
+Start with the [offline demo](../DEMO.md), then read the [host guide](../HOSTS.md). macOS is supported; Linux is experimental and unverified; Windows is disabled. Hosted decisions require a reviewed scope and provider billing. Optional Laya runs on Apple Silicon after its installation is verified.
+
+Qualixar is an independent research initiative by Varun Pratap Bhardwaj. This integration is not an official TypeSafe or host-provider product.
+
+Product page: https://qualixar.com/products/jev-decision-layer
+
+Source: https://github.com/qualixar/jev-decision-layer
diff --git a/docs/launch/offline-demo-output.txt b/docs/launch/offline-demo-output.txt
new file mode 100644
index 0000000..8a40278
--- /dev/null
+++ b/docs/launch/offline-demo-output.txt
@@ -0,0 +1,62 @@
+Offline synthetic replay: recorded answers through real gates. No provider call, accuracy or savings claim.
+{"recipe":"qualixar.catalog-quality","title":"Review a product listing","variant":"nominal","passed":true,"gate":{"host_action":"act","reasons":["Below the no band."],"recommendation":"mark_check_passed","selected_label":null,"status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Below the no band.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"mark_check_passed","selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.catalog-quality","title":"Review a product listing","variant":"uncertain","passed":true,"gate":{"host_action":"verify","reasons":["Between the bands; the model is not committing."],"recommendation":null,"selected_label":null,"status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Between the bands; the model is not committing."],"recommendation":null,"selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.catalog-quality","title":"Review a product listing","variant":"adversarial","passed":true,"gate":{"host_action":"act","reasons":["Above the yes band."],"recommendation":"request_review","selected_label":null,"status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Above the yes band.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"request_review","selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.decision-record-completeness","title":"Find the missing part of a decision record","variant":"nominal","passed":true,"gate":{"host_action":"act","reasons":["Cleared both the confidence floor and the probability bar."],"recommendation":"route_to_queue","selected_label":"missing_consequences","status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Cleared both the confidence floor and the probability bar.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"route_to_queue","selected_label":"missing_consequences","status":"REVIEW"}}
+{"recipe":"qualixar.decision-record-completeness","title":"Find the missing part of a decision record","variant":"uncertain","passed":true,"gate":{"host_action":"verify","reasons":["Reported confidence 0.34 is below the configured floor 0.7."],"recommendation":null,"selected_label":"complete","status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Reported confidence 0.34 is below the configured floor 0.7."],"recommendation":null,"selected_label":"complete","status":"REVIEW"}}
+{"recipe":"qualixar.decision-record-completeness","title":"Find the missing part of a decision record","variant":"adversarial","passed":true,"gate":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"},"live_policy":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"}}
+{"recipe":"qualixar.escalation-check","title":"Decide whether an update meets an escalation rule","variant":"nominal","passed":true,"gate":{"host_action":"act","reasons":["Above the yes band."],"recommendation":"route_to_queue","selected_label":null,"status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Above the yes band.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"route_to_queue","selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.escalation-check","title":"Decide whether an update meets an escalation rule","variant":"uncertain","passed":true,"gate":{"host_action":"verify","reasons":["Between the bands; the model is not committing."],"recommendation":null,"selected_label":null,"status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Between the bands; the model is not committing."],"recommendation":null,"selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.escalation-check","title":"Decide whether an update meets an escalation rule","variant":"adversarial","passed":true,"gate":{"host_action":"verify","reasons":["Between the bands; the model is not committing."],"recommendation":null,"selected_label":null,"status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Between the bands; the model is not committing."],"recommendation":null,"selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.handoff-readiness","title":"Check a project handoff","variant":"nominal","passed":true,"gate":{"host_action":"act","reasons":["Above the yes band."],"recommendation":"mark_check_passed","selected_label":null,"status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Above the yes band.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"mark_check_passed","selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.handoff-readiness","title":"Check a project handoff","variant":"uncertain","passed":true,"gate":{"host_action":"verify","reasons":["Between the bands; the model is not committing."],"recommendation":null,"selected_label":null,"status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Between the bands; the model is not committing."],"recommendation":null,"selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.handoff-readiness","title":"Check a project handoff","variant":"adversarial","passed":true,"gate":{"host_action":"act","reasons":["Below the no band."],"recommendation":"request_review","selected_label":null,"status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Below the no band.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"request_review","selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.incident-triage","title":"Route an incident report","variant":"nominal","passed":true,"gate":{"host_action":"act","reasons":["Cleared both the confidence floor and the probability bar."],"recommendation":"route_to_queue","selected_label":"availability","status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Cleared both the confidence floor and the probability bar.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"route_to_queue","selected_label":"availability","status":"REVIEW"}}
+{"recipe":"qualixar.incident-triage","title":"Route an incident report","variant":"uncertain","passed":true,"gate":{"host_action":"verify","reasons":["Reported confidence 0.33 is below the configured floor 0.7."],"recommendation":null,"selected_label":"security","status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Reported confidence 0.33 is below the configured floor 0.7."],"recommendation":null,"selected_label":"security","status":"REVIEW"}}
+{"recipe":"qualixar.incident-triage","title":"Route an incident report","variant":"adversarial","passed":true,"gate":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"},"live_policy":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"}}
+{"recipe":"qualixar.invoice-exception-triage","title":"Route an invoice exception","variant":"nominal","passed":true,"gate":{"host_action":"act","reasons":["Cleared both the confidence floor and the probability bar."],"recommendation":"route_to_queue","selected_label":"duplicate_review","status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Cleared both the confidence floor and the probability bar.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"route_to_queue","selected_label":"duplicate_review","status":"REVIEW"}}
+{"recipe":"qualixar.invoice-exception-triage","title":"Route an invoice exception","variant":"uncertain","passed":true,"gate":{"host_action":"verify","reasons":["Reported confidence 0.35 is below the configured floor 0.7."],"recommendation":null,"selected_label":"duplicate_review","status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Reported confidence 0.35 is below the configured floor 0.7."],"recommendation":null,"selected_label":"duplicate_review","status":"REVIEW"}}
+{"recipe":"qualixar.invoice-exception-triage","title":"Route an invoice exception","variant":"adversarial","passed":true,"gate":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"},"live_policy":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"}}
+{"recipe":"qualixar.issue-triage","title":"Triage an issue","variant":"nominal","passed":true,"gate":{"host_action":"act","reasons":["Cleared both the confidence floor and the probability bar."],"recommendation":"route_to_queue","selected_label":"bug","status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Cleared both the confidence floor and the probability bar.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"route_to_queue","selected_label":"bug","status":"REVIEW"}}
+{"recipe":"qualixar.issue-triage","title":"Triage an issue","variant":"uncertain","passed":true,"gate":{"host_action":"verify","reasons":["Reported confidence 0.31 is below the configured floor 0.7."],"recommendation":null,"selected_label":"bug","status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Reported confidence 0.31 is below the configured floor 0.7."],"recommendation":null,"selected_label":"bug","status":"REVIEW"}}
+{"recipe":"qualixar.issue-triage","title":"Triage an issue","variant":"adversarial","passed":true,"gate":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"},"live_policy":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"}}
+{"recipe":"qualixar.lead-routing","title":"Route a business enquiry","variant":"nominal","passed":true,"gate":{"host_action":"act","reasons":["Cleared both the confidence floor and the probability bar."],"recommendation":"route_to_queue","selected_label":"product_help","status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Cleared both the confidence floor and the probability bar.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"route_to_queue","selected_label":"product_help","status":"REVIEW"}}
+{"recipe":"qualixar.lead-routing","title":"Route a business enquiry","variant":"uncertain","passed":true,"gate":{"host_action":"verify","reasons":["Reported confidence 0.33 is below the configured floor 0.7."],"recommendation":null,"selected_label":"product_help","status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Reported confidence 0.33 is below the configured floor 0.7."],"recommendation":null,"selected_label":"product_help","status":"REVIEW"}}
+{"recipe":"qualixar.lead-routing","title":"Route a business enquiry","variant":"adversarial","passed":true,"gate":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"},"live_policy":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"}}
+{"recipe":"qualixar.meeting-action-routing","title":"Route an explicit meeting action","variant":"nominal","passed":true,"gate":{"host_action":"act","reasons":["Cleared both the confidence floor and the probability bar."],"recommendation":"route_to_queue","selected_label":"operations","status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Cleared both the confidence floor and the probability bar.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"route_to_queue","selected_label":"operations","status":"REVIEW"}}
+{"recipe":"qualixar.meeting-action-routing","title":"Route an explicit meeting action","variant":"uncertain","passed":true,"gate":{"host_action":"verify","reasons":["Reported confidence 0.38 is below the configured floor 0.7."],"recommendation":null,"selected_label":"content","status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Reported confidence 0.38 is below the configured floor 0.7."],"recommendation":null,"selected_label":"content","status":"REVIEW"}}
+{"recipe":"qualixar.meeting-action-routing","title":"Route an explicit meeting action","variant":"adversarial","passed":true,"gate":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"},"live_policy":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"}}
+{"recipe":"qualixar.policy-exception-triage","title":"Route a policy exception","variant":"nominal","passed":true,"gate":{"host_action":"act","reasons":["Cleared both the confidence floor and the probability bar."],"recommendation":"route_to_queue","selected_label":"privacy_review","status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Cleared both the confidence floor and the probability bar.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"route_to_queue","selected_label":"privacy_review","status":"REVIEW"}}
+{"recipe":"qualixar.policy-exception-triage","title":"Route a policy exception","variant":"uncertain","passed":true,"gate":{"host_action":"verify","reasons":["Reported confidence 0.33 is below the configured floor 0.7."],"recommendation":null,"selected_label":"security_review","status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Reported confidence 0.33 is below the configured floor 0.7."],"recommendation":null,"selected_label":"security_review","status":"REVIEW"}}
+{"recipe":"qualixar.policy-exception-triage","title":"Route a policy exception","variant":"adversarial","passed":true,"gate":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"},"live_policy":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"}}
+{"recipe":"qualixar.proposal-requirements","title":"Check proposal coverage","variant":"nominal","passed":true,"gate":{"host_action":"act","reasons":["Above the yes band."],"recommendation":"mark_check_passed","selected_label":null,"status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Above the yes band.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"mark_check_passed","selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.proposal-requirements","title":"Check proposal coverage","variant":"uncertain","passed":true,"gate":{"host_action":"verify","reasons":["Between the bands; the model is not committing."],"recommendation":null,"selected_label":null,"status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Between the bands; the model is not committing."],"recommendation":null,"selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.proposal-requirements","title":"Check proposal coverage","variant":"adversarial","passed":true,"gate":{"host_action":"act","reasons":["Below the no band."],"recommendation":"request_review","selected_label":null,"status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Below the no band.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"request_review","selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.scope-change-check","title":"Check a client request against the agreed scope","variant":"nominal","passed":true,"gate":{"host_action":"act","reasons":["Cleared both the confidence floor and the probability bar."],"recommendation":"route_to_queue","selected_label":"change_request","status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Cleared both the confidence floor and the probability bar.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"route_to_queue","selected_label":"change_request","status":"REVIEW"}}
+{"recipe":"qualixar.scope-change-check","title":"Check a client request against the agreed scope","variant":"uncertain","passed":true,"gate":{"host_action":"verify","reasons":["Selected probability 0.78 is below 0.8."],"recommendation":null,"selected_label":"clarification_needed","status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Selected probability 0.78 is below 0.8."],"recommendation":null,"selected_label":"clarification_needed","status":"REVIEW"}}
+{"recipe":"qualixar.scope-change-check","title":"Check a client request against the agreed scope","variant":"adversarial","passed":true,"gate":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"},"live_policy":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"}}
+{"recipe":"qualixar.status-rag-evidence","title":"Check which status colour the evidence supports","variant":"nominal","passed":true,"gate":{"host_action":"act","reasons":["Cleared both the confidence floor and the probability bar."],"recommendation":"route_to_queue","selected_label":"red","status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Cleared both the confidence floor and the probability bar.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"route_to_queue","selected_label":"red","status":"REVIEW"}}
+{"recipe":"qualixar.status-rag-evidence","title":"Check which status colour the evidence supports","variant":"uncertain","passed":true,"gate":{"host_action":"verify","reasons":["Reported confidence 0.33 is below the configured floor 0.7."],"recommendation":null,"selected_label":"amber","status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Reported confidence 0.33 is below the configured floor 0.7."],"recommendation":null,"selected_label":"amber","status":"REVIEW"}}
+{"recipe":"qualixar.status-rag-evidence","title":"Check which status colour the evidence supports","variant":"adversarial","passed":true,"gate":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"},"live_policy":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"}}
+{"recipe":"qualixar.support-triage","title":"Sort a support request","variant":"nominal","passed":true,"gate":{"host_action":"act","reasons":["Cleared both the confidence floor and the probability bar."],"recommendation":"route_to_queue","selected_label":"technical","status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Cleared both the confidence floor and the probability bar.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"route_to_queue","selected_label":"technical","status":"REVIEW"}}
+{"recipe":"qualixar.support-triage","title":"Sort a support request","variant":"uncertain","passed":true,"gate":{"host_action":"verify","reasons":["Selected probability 0.78 is below 0.8."],"recommendation":null,"selected_label":"technical","status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Selected probability 0.78 is below 0.8."],"recommendation":null,"selected_label":"technical","status":"REVIEW"}}
+{"recipe":"qualixar.support-triage","title":"Sort a support request","variant":"adversarial","passed":true,"gate":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"},"live_policy":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"}}
+{"recipe":"qualixar.work-item-priority","title":"Review one work item against stated priorities","variant":"nominal","passed":true,"gate":{"host_action":"act","reasons":["At or above the score bar and cleared its probability bar."],"recommendation":"select_candidates","selected_label":null,"status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["At or above the score bar and cleared its probability bar.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"select_candidates","selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.work-item-priority","title":"Review one work item against stated priorities","variant":"uncertain","passed":true,"gate":{"host_action":"verify","reasons":["Confidence 0.55 is below 0.7."],"recommendation":null,"selected_label":null,"status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Confidence 0.55 is below 0.7."],"recommendation":null,"selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.work-item-priority","title":"Review one work item against stated priorities","variant":"adversarial","passed":true,"gate":{"host_action":"act","reasons":["Below the score bar and cleared its probability bar."],"recommendation":"request_review","selected_label":null,"status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Below the score bar and cleared its probability bar.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"request_review","selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.accessibility-gap-routing","title":"Find the first accessibility gap in a described asset","variant":"nominal","passed":true,"gate":{"host_action":"act","reasons":["Cleared both the confidence floor and the probability bar."],"recommendation":"route_to_queue","selected_label":"image_text_alternative","status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Cleared both the confidence floor and the probability bar.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"route_to_queue","selected_label":"image_text_alternative","status":"REVIEW"}}
+{"recipe":"qualixar.accessibility-gap-routing","title":"Find the first accessibility gap in a described asset","variant":"uncertain","passed":true,"gate":{"host_action":"verify","reasons":["Selected probability 0.77 is below 0.8."],"recommendation":null,"selected_label":"captions_or_transcript","status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Selected probability 0.77 is below 0.8."],"recommendation":null,"selected_label":"captions_or_transcript","status":"REVIEW"}}
+{"recipe":"qualixar.accessibility-gap-routing","title":"Find the first accessibility gap in a described asset","variant":"adversarial","passed":true,"gate":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"},"live_policy":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"}}
+{"recipe":"qualixar.brand-tone","title":"Check tone against a style guide","variant":"nominal","passed":true,"gate":{"host_action":"act","reasons":["At or above the score bar and cleared its probability bar."],"recommendation":"mark_check_passed","selected_label":null,"status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["At or above the score bar and cleared its probability bar.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"mark_check_passed","selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.brand-tone","title":"Check tone against a style guide","variant":"uncertain","passed":true,"gate":{"host_action":"verify","reasons":["Confidence 0.62 is below 0.7."],"recommendation":null,"selected_label":null,"status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Confidence 0.62 is below 0.7."],"recommendation":null,"selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.brand-tone","title":"Check tone against a style guide","variant":"adversarial","passed":true,"gate":{"host_action":"act","reasons":["Below the score bar and cleared its probability bar."],"recommendation":"request_review","selected_label":null,"status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Below the score bar and cleared its probability bar.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"request_review","selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.brief-fit","title":"Check content against a brief","variant":"nominal","passed":true,"gate":{"host_action":"act","reasons":["At or above the score bar and cleared its probability bar."],"recommendation":"mark_check_passed","selected_label":null,"status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["At or above the score bar and cleared its probability bar.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"mark_check_passed","selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.brief-fit","title":"Check content against a brief","variant":"uncertain","passed":true,"gate":{"host_action":"verify","reasons":["Confidence 0.62 is below 0.7."],"recommendation":null,"selected_label":null,"status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Confidence 0.62 is below 0.7."],"recommendation":null,"selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.brief-fit","title":"Check content against a brief","variant":"adversarial","passed":true,"gate":{"host_action":"act","reasons":["Below the score bar and cleared its probability bar."],"recommendation":"request_review","selected_label":null,"status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Below the score bar and cleared its probability bar.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"request_review","selected_label":null,"status":"REVIEW"}}
+{"recipe":"qualixar.comment-moderation-routing","title":"Route an audience comment for a creator","variant":"nominal","passed":true,"gate":{"host_action":"act","reasons":["Cleared both the confidence floor and the probability bar."],"recommendation":"route_to_queue","selected_label":"reply_candidate","status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Cleared both the confidence floor and the probability bar.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"route_to_queue","selected_label":"reply_candidate","status":"REVIEW"}}
+{"recipe":"qualixar.comment-moderation-routing","title":"Route an audience comment for a creator","variant":"uncertain","passed":true,"gate":{"host_action":"verify","reasons":["Reported confidence 0.33 is below the configured floor 0.7."],"recommendation":null,"selected_label":"spam_review","status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Reported confidence 0.33 is below the configured floor 0.7."],"recommendation":null,"selected_label":"spam_review","status":"REVIEW"}}
+{"recipe":"qualixar.comment-moderation-routing","title":"Route an audience comment for a creator","variant":"adversarial","passed":true,"gate":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"},"live_policy":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"}}
+{"recipe":"qualixar.content-freshness","title":"Decide whether a published piece is still fit to reuse","variant":"nominal","passed":true,"gate":{"host_action":"act","reasons":["Cleared both the confidence floor and the probability bar."],"recommendation":"route_to_queue","selected_label":"needs_update","status":"RECOMMEND"},"live_policy":{"host_action":"verify","reasons":["Cleared both the confidence floor and the probability bar.","This recipe is SPECIFICATION_NOT_MODEL_EVALUATED; an ACT recommendation is capped at VERIFY."],"recommendation":"route_to_queue","selected_label":"needs_update","status":"REVIEW"}}
+{"recipe":"qualixar.content-freshness","title":"Decide whether a published piece is still fit to reuse","variant":"uncertain","passed":true,"gate":{"host_action":"verify","reasons":["Reported confidence 0.33 is below the configured floor 0.7."],"recommendation":null,"selected_label":"needs_update","status":"REVIEW"},"live_policy":{"host_action":"verify","reasons":["Reported confidence 0.33 is below the configured floor 0.7."],"recommendation":null,"selected_label":"needs_update","status":"REVIEW"}}
+{"recipe":"qualixar.content-freshness","title":"Decide whether a published piece is still fit to reuse","variant":"adversarial","passed":true,"gate":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"},"live_policy":{"host_action":"ignore","reasons":["The model selected the unknown option."],"recommendation":null,"selected_label":"unknown","status":"REVIEW"}}
+PASS: 20 recipe examples, 60 synthetic gate checks
diff --git a/llms.txt b/llms.txt
index c65281b..daf6cdb 100644
--- a/llms.txt
+++ b/llms.txt
@@ -20,3 +20,6 @@ Release 1.0.13 is supported and verified on macOS, with hosted TypeSafe Jev and
- [Third-party notices](plugins/qualixar-jev-decision-layer/THIRD_PARTY_NOTICES.md)
Release 1.0.13 contains 55 recipes and 165 synthetic offline fixtures. To evaluate it without a key, provider call or enrolled workspace, run `plugins/qualixar-jev-decision-layer/scripts/jev selftest`: it replays the fixture set through the real gate offline. A passing run is a contract check on the shipped gate, never evidence of provider accuracy.
+
+- [Canonical product page](https://qualixar.com/products/jev-decision-layer)
+- [Twenty bounded decisions: runnable offline gate demo](docs/DEMO.md)
diff --git a/tests/test_plugin_package.py b/tests/test_plugin_package.py
index 307ba10..8069031 100644
--- a/tests/test_plugin_package.py
+++ b/tests/test_plugin_package.py
@@ -93,8 +93,8 @@ def test_readme_relative_links_and_release_images_exist(self):
readme = (ROOT / "README.md").read_text()
self.assertIn('src="docs/assets/jev-mark.svg"', readme)
self.assertIn('width="56" height="56"', readme)
- self.assertIn('src="docs/assets/hero.svg"', readme)
- self.assertIn('width="820"', readme)
+ self.assertIn('src="docs/assets/jev-acquisition.svg"', readme)
+ self.assertIn('width="1000"', readme)
headings = {
re.sub(r"[^a-z0-9 -]", "", heading.lower()).replace(" ", "-")
for heading in re.findall(r"^#{1,6}\s+(.+)$", readme, flags=re.MULTILINE)
diff --git a/tools/demo.mjs b/tools/demo.mjs
new file mode 100644
index 0000000..3be8349
--- /dev/null
+++ b/tools/demo.mjs
@@ -0,0 +1,19 @@
+import { execFileSync } from 'node:child_process';
+import { readFileSync } from 'node:fs';
+import { fileURLToPath } from 'node:url';
+import { resolve } from 'node:path';
+const root = fileURLToPath(new URL('../', import.meta.url));
+const catalog = JSON.parse(readFileSync(resolve(root, 'plugins/qualixar-jev-decision-layer/runtime/recipe_catalog.json'), 'utf8'));
+const recipes = catalog.recipes.slice(0, 20);
+console.log('Offline synthetic replay: recorded answers through real gates. No provider call, accuracy or savings claim.');
+let failed = false;
+for (const recipe of recipes) {
+ for (const variant of ['nominal', 'uncertain', 'adversarial']) {
+ const result = JSON.parse(execFileSync(resolve(root, 'plugins/qualixar-jev-decision-layer/scripts/jev'), ['selftest', '--recipe', recipe.id, '--variant', variant], { cwd: root, encoding: 'utf8', timeout: 15000 }));
+ failed ||= result.passed !== true;
+ console.log(JSON.stringify({ recipe: recipe.id, title: recipe.title, variant, passed: result.passed, gate: result.raw_gate, live_policy: result.observed }));
+ }
+}
+if (recipes.length !== 20) throw new Error('Expected twenty public recipe examples');
+console.log(failed ? 'FAIL' : 'PASS: 20 recipe examples, 60 synthetic gate checks');
+process.exitCode = failed ? 1 : 0;