Three polish items from post-audit parallel agent.
1. Dynamic schema whitelist (drops hardcoded const drift)
_assembler/src/schemas_export.rs (NEW, 136 LOC) — loader cube,
priority path $AGENT_ROOT/artifacts/schemas.json →
~/.claude/agents/artifacts/schemas.json → BUILTIN fallback.
Hand-rolled JSON parser (no serde_json dep).
_assembler/src/validator.rs delegates to schemas_export::load,
keeps KNOWN_ARTIFACT_SCHEMAS alias for back-compat.
_primitives/_rust/kei-artifact/src/export.rs (NEW, 82 LOC) —
write() + render() + default_path().
_primitives/_rust/kei-artifact/src/cli_cmds.rs (NEW, 126 LOC) —
extracted cmd_emit/get/list/chain so main stays <200 LOC.
ExportSchemas + ListSchemas subcommands; cmd_register
auto-refreshes export file (best-effort).
2. KNOWN_SCHEMAS SSoT — documented-dual-const + drift-test
(Option "simpler than new crate"). SSoT in kei-artifact's
BUILTIN; schemas_export::BUILTIN is a documented mirror;
builtin_schemas_do_not_drift_from_kei_artifact test in
validator.rs parses the primitive's source at test time and
diffs. <30 LOC change. No workspace structural change —
assembler stays decoupled from runtime primitive.
3. Agent-to-mode matrix + wizard Phase 3.6
_blocks/mode-matrix.md (NEW, 24 LOC) — 11-row table mapping
agent role × recommended mode blocks.
skills/new-agent/SKILL.md — new Phase 3.6 (between name-confirm
3.5 and manifest-write 4). AskUserQuestion with 5
cognitive-mode options (skeptic/devils-advocate/minimalist/
maximalist/first-principles, multiSelect). Appends picked
labels to manifest's blocks array. Defaults to NONE.
_blocks/README.md adds one-line reference to the matrix.
_assembler/tests/mode_blocks.rs (NEW, 78 LOC) — 3 integration
tests lock the wiring.
README.md — all accumulated count + pre-built-binaries + plugin
section edits from the v0.16 cycle consolidated here (will be
replaced by markers in v0.17 counts-autogen refactor).
Tests: assembler 24 → 33 (+9), kei-artifact 24 → 31 (+7), total
48 → 64. cargo check --workspace clean.
Constructor Pattern: largest new file validator.rs 180 LOC.
Pre-existing flagged for separate refactor: kei-artifact
validate.rs 268 LOC (not touched by this polish).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
42 lines
2.7 KiB
Markdown
42 lines
2.7 KiB
Markdown
# `_blocks/` — Composable Agent Content
|
||
|
||
Each `.md` file in this directory is a **block**: a single-concern, standalone-readable snippet that any agent manifest can include via its `blocks = [...]` list. The `_assembler` concatenates selected blocks + manifest metadata into the final agent `.md` that Claude Code loads.
|
||
|
||
Blocks are grouped by prefix:
|
||
|
||
| Prefix | Purpose |
|
||
|---|---|
|
||
| `baseline`, `evidence-grading`, `memory-protocol` | Obligatory base — every manifest must include these |
|
||
| `rule-*` | Discipline rules (`pre-dev-gate`, `test-first`, `error-budget`, `double-audit`, `math-first`) |
|
||
| `mode-*` | Cognitive mode blocks (see below) |
|
||
| `stack-*` | Language / framework constraints (Rust Axum, React Vite, Swift SPM, …) |
|
||
| `deploy-*` | Deployment target rules (Modal, AWS EC2, Cloudflare, Hetzner, …) |
|
||
| `api-*` | External API conventions (Apify, fal.ai, ElevenLabs, Anthropic, …) |
|
||
| `db-*` | Database rules (Postgres, SQLite, Drizzle, sqlx, migrations) |
|
||
| `auth-*`, `security-*`, `obs-*`, `ci-*`, `test-*`, `scraper-*`, `domain-*`, `docs-*` | Domain-specific rules |
|
||
|
||
## Cognitive mode blocks
|
||
|
||
Composable behavioural skews. Add any combination to a manifest's `blocks` list to stack the mode. Modes compose — e.g. `mode-skeptic` + `mode-minimalist` yields an adversarial pruner.
|
||
|
||
| Block | Purpose |
|
||
|---|---|
|
||
| `mode-skeptic.md` | Doubt the conclusion until proved; flag claims without E1/E2 grade |
|
||
| `mode-devils-advocate.md` | Steel-man the opposite; name the strongest objection before agreeing |
|
||
| `mode-minimalist.md` | Prefer deleting over adding; justify every addition against existing code |
|
||
| `mode-maximalist.md` | Explore 10× scope; return both maximum and minimum bounds; only when user invokes exploration |
|
||
| `mode-first-principles.md` | Derive from invariants; cite the physical / mathematical constraint, not "best practice" |
|
||
|
||
See `mode-matrix.md` for the **agent-role × recommended-modes** table used by the `skills/new-agent` wizard (Phase 3.6). It is the suggested starting set per role — modes remain a free pick per manifest.
|
||
|
||
## Adding a new block
|
||
|
||
1. Pick a stable prefix (existing category or a new one documented here).
|
||
2. One concern per file. 20–50 LOC target, `<200 LOC` hard cap (Constructor Pattern).
|
||
3. Imperative voice (`"Do X"` not `"the agent should do X"`) — these land verbatim in agent prompts.
|
||
4. Standalone-readable — do not assume sibling blocks are present. Cross-references OK, hard dependencies not.
|
||
5. Reference from a manifest's `blocks = [...]` list; the assembler validates existence.
|
||
|
||
## Ownership
|
||
|
||
Blocks are **kit-owned** — `install.sh` overwrites `_blocks/` on re-run, backing up local edits to `_blocks.bak-TIMESTAMP/`. User-owned content belongs in `_manifests/*.toml` (which are never overwritten).
|