with one click
add-synthesis-fixture
"
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
"
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
"
"
"
"
"
"
tests/fixtures/synthesis/output-docs.json — Pass 1 output (CLAUDE.md content)tests/fixtures/synthesis/output-tooling.json — Pass 2 output (skills, hooks, MCP)tests/fixtures/synthesis/output.json — derived merged file (DO NOT edit directly)schemas/synthesis-docs.json and schemas/synthesis-tooling.json — the output contractstests/unit/merge.bats — tests that read from output.json directlyoutput.json is a derived file — it is the jq -s '.[0] * .[1]' merge of output-docs.json and output-tooling.json. Never edit output.json directly. After any change to either pass fixture, always re-merge.
output-docs.json): CLAUDE.md root content, subdirectory CLAUDE.md filesoutput-tooling.json): skills, hooks, subagents, mcp_servers, settings_hooksSkill entries in output-tooling.json must have:
name in kebab-case\n for newlines)Example skill entry:
{
"name": "my-skill",
"description": "Does something specific to this project. Use when...",
"content": "---\nname: my-skill\ndescription: >\n Does something specific. Use when...\n Do NOT use for...\n---\n\n## Before You Start\n..."
}
Hook entries must maintain the 1:1 hooks-to-settings_hooks relationship:
// In hooks[]
{"filename": "check.sh", "event": "PostToolUse", "description": "...", "content": "#!/usr/bin/env bash\n..."}
// Matching entry in settings_hooks[]
{"event": "PostToolUse", "matcher": "Write", "command": ".claude/hooks/check.sh"}
After editing either pass fixture:
jq -s '.[0] * .[1]' \
tests/fixtures/synthesis/output-docs.json \
tests/fixtures/synthesis/output-tooling.json \
> tests/fixtures/synthesis/output.json
grep -n '[<>]' tests/fixtures/synthesis/output-tooling.json | head -20
Angle brackets in skill/subagent descriptions will cause validate-skill.sh to fail, and postprocess_descriptions() in lib/synthesize.sh will silently replace them at runtime — meaning the fixture diverges from what production produces.
Check tests/unit/merge.bats and tests/integration/synthesize_phase.bats for assertions on skill count, specific field values, or hook count that may need updating.
The claude_md field contains deliberate padding lines to exceed the 100-line minimum for validate_claude_md checks. Do NOT trim it:
echo "$(jq -r '.claude_md' tests/fixtures/synthesis/output-docs.json | wc -l) lines"
# Must be >= 100
make test-unit
make test-integration
Editing output.json directly — it gets overwritten on the next merge. Always edit the pass fixture and re-merge.
Using make_claude_envelope on output.json — unit tests copy output.json raw into $WORK_DIR/synthesis/; integration tests wrap output-docs.json and output-tooling.json with make_claude_envelope. Using the wrong combination causes silent null extractions.