diff --git a/docs/figures/family-dark.svg b/docs/figures/family-dark.svg
index af55724..c7d8945 100644
--- a/docs/figures/family-dark.svg
+++ b/docs/figures/family-dark.svg
@@ -16,7 +16,7 @@
chock-catalog
- the policies — 39, each labelled enforced or advisory, with replayed evals
+ the policies — each labelled enforced or advisory, with replayed evals
@@ -28,7 +28,7 @@
agentseam
the primitives — one handler API and a verified capability matrix across
- 16 agents
+ the supported agents
context-report
the evidence — a
diff --git a/docs/figures/family-light.svg b/docs/figures/family-light.svg
index cb95f50..4fb2168 100644
--- a/docs/figures/family-light.svg
+++ b/docs/figures/family-light.svg
@@ -16,7 +16,7 @@
chock-catalog
- the policies — 39, each labelled enforced or advisory, with replayed evals
+ the policies — each labelled enforced or advisory, with replayed evals
@@ -28,7 +28,7 @@
agentseam
the primitives — one handler API and a verified capability matrix across
- 16 agents
+ the supported agents
context-report
the evidence — a
diff --git a/docs/figures/make_family.py b/docs/figures/make_family.py
index 6a70d5e..b053036 100644
--- a/docs/figures/make_family.py
+++ b/docs/figures/make_family.py
@@ -4,25 +4,56 @@
statement stays on one line under 88 characters.
"""
+import importlib
+import re
+import sys
+from pathlib import Path
+
import palette as p
+ROOT = Path(__file__).resolve().parents[2]
+REGISTRY = ROOT / "registry.yaml"
+MATRIX_SRC = ROOT / "src"
+
W, H = 800, 420
NAME, ROLE = 13, 11
WIDE, NARROW, ARM = 74, 34, 22
+
+def catalog_count():
+ """Policies in the catalog's registry.yaml, or None in a repo that carries none."""
+ if not REGISTRY.is_file():
+ return None
+ text = REGISTRY.read_text(encoding="utf-8").split("\nskills:\n", 1)[0]
+ return len(re.findall(r"^- id: \S+", text, re.MULTILINE)) or None
+
+
+def agent_count():
+ """Agents in agentseam's capability matrix, or None in a repo that has none."""
+ if not (MATRIX_SRC / "agentseam" / "matrix.py").is_file():
+ return None
+ sys.path.insert(0, str(MATRIX_SRC))
+ return len(importlib.import_module("agentseam.matrix").agents())
+
+
+# Only the repo holding each source names its count; the others say it without one.
+_N, _A = catalog_count(), agent_count()
+POLICIES = f"the policies \N{EM DASH} {_N}," if _N else "the policies \N{EM DASH}"
+AGENTS = f"across {_A} agents" if _A else "across the supported agents"
+
# Split into fragments joined with a space: a magic trailing comma keeps each list
# exploded, so `ruff format` leaves this alone at 88, 100 and 120 alike.
ROLES = {
"agentseam": [
"the primitives — one handler API and a verified capability",
- "matrix across 16 agents",
+ "matrix " + AGENTS,
],
"chock": [
"the compiler — one policy into git hooks, CI gates and",
"native pre-tool hooks",
],
"chock-catalog": [
- "the policies — 39, each labelled enforced or advisory,",
+ POLICIES + " each labelled enforced or advisory,",
"with replayed evals",
],
"context-report": [
diff --git a/llms.txt b/llms.txt
index 1023345..3332184 100644
--- a/llms.txt
+++ b/llms.txt
@@ -1,7 +1,8 @@
# context-report
-> An open, signed report format for whether an agent context artifact — a plugin, an
-> `AGENTS.md`, a skill, a hook, an MCP server — actually works.
+> The evidence layer for AI coding agent guardrails: an open, signed report format for whether
+> an agent context artifact — a plugin, an `AGENTS.md`, a skill, a hook, an MCP server —
+> actually works.
`context-report` is a predicate an author's CI produces and a catalog verifies at submission:
one row per fact (`reachability`, `cost`, `fault.*`, `interference`, `efficacy`, ...), each
@@ -54,5 +55,5 @@ between MINOR releases; see the Compatibility note in the spec READMEs below.
- [paper/context-report.md](https://github.com/open-coder-ai/context-report/blob/main/paper/context-report.md):
the measurement paper — method, the three findings from running the reference producer over
- chock's bundles, 18 public plugins, and seven instruction files/skills, and what v0.1 still
- cannot measure.
+ chock's 88 bundles (22 policies for 4 target agents), 18 public plugins, and seven
+ instruction files/skills, and what v0.1 still cannot measure.