compound
Record one solved problem as a solution entry anchored to the files it touches, so later sessions on those files see it first. Use after a fix or decision whose reasoning the final code does not show, or when learning-check finds a durable learning.
- License 许可
- MIT
- 最近更新
- 2026-11-04
- Stars
- ★ 0
- Forks
- 0
01 前言 Front Matter
- name
- compound
- metadata
- { "layer": "L3", "source": "EveryInc/compound-engineering-plugin@7a68002:skills/ce-compound/SKILL.md", "license": "MIT" }
- description
- Record one solved problem as a solution entry anchored to the files it touches, so later sessions on those files see it first. Use after a fix or decision whose reasoning the final code does not show, or when learning-check finds a durable learning.
03 SKILL.md 正文
Compound
Write one solved problem to $(ven-profile path)/solutions/<area>/<slug>.md. ven-profile context (run at the start of every routed task) surfaces entries whose files: overlap the branch's changed files, ven-profile solutions-for <files> surfaces them before an edit, and a refresh later prunes entries whose files are gone. Both depend on files:, so it is required.
The bar
Write only when the problem is solved and verified, and the entry passes this test: if it disappeared, would a future agent reading the final code, tests and docs still repeat the mistake or redo the investigation? Effort and diff size don't count. If the test fails, write nothing and say why in one line.
One problem per entry. Several problems mean several entries, written one at a time.
Steps
- Look for an existing entry. Search
solutions/for the files you touched and the symptom text. Same problem: update that entry in place and addlast_updated: <YYYY-MM-DD>. An entry that became wrong is updated, never left beside a new one. - Ground every claim. Before stating how code behaves, read the defining line in the current tree and cite it as
path:line. Mark what you could not check as unverified. - Pick the area. List
solutions/and reuse the area directory that covers this part of the code. Create one only when none fits, named after the module or workspace (ven-profile get workspaces), in kebab-case. - Fill the template below. The slug is the title in kebab-case.
- Anchor
files:. Repo-relative paths or globs for where the problem showed and where the fix landed. Each must match something in the current tree (check with a file search). Prefer narrow anchors: a glob over half the repo surfaces the entry on every branch. - Capture terms. A domain term the session defined or sharpened goes to
GLOSSARY.mdthrough glossary, not into the entry. - Check the frontmatter.
ven-profilereads a YAML subset: onekey: valueper line, lists as- itemlines (inline[a, b]only for tags), no nested maps. Quote a list item that starts with a backtick,[,*,&,!,|,>,%,@or?, or that contains": ".
Vocabulary
problem_type(closed): build_error, test_failure, runtime_error, performance_issue, security_issue, data_issue, integration_issue, logic_error, workflow_issue, developer_experience, design_decision, convention.resolution_type(closed): code_fix, config_change, test_fix, dependency_update, environment_setup, workflow_change, documentation_update, tooling_addition, data_fix.severity(closed): critical, high, medium, low.root_cause(open): reuse the spelling other entries use for the same cause; otherwise a short snake_case phrase such as missing_validation, wrong_interface, ordering, shared_state, config_drift, missing_step.
Template
---
title: <the problem in one line, not the fix>
date: <YYYY-MM-DD>
area: <area directory name>
problem_type: <closed list>
symptoms:
- <observable symptom; quote error text>
root_cause: <open vocabulary>
resolution_type: <closed list>
severity: <critical|high|medium|low>
files:
- <repo-relative path or glob>
tags: [<keyword>, <keyword>]
---
# <title>
## Problem
<One or two sentences: what broke or was unclear, and who noticed.>
## Symptoms
- <What you saw, verbatim where possible.>
## What didn't work
- <Attempt> — <why it failed.>
## Solution
<The fix, citing path:line. Short snippets only when the shape matters.>
## Why this works
<The root cause, and how the fix removes it.>
## Prevention
- <The check that now guards it, with its path; or "none, judgment only".>
Report
The entry path (or "nothing written" and why), its area, and its files: anchors. When Prevention says "none" but a check could catch the mistake, say so: the caller routes it as a correction.
04 同仓库更多 Skills
yeet
Take every local change green through the repo's own checks, slice it into conventional commits, push, and with --pr open a pull request on the code host. Use only when the user explicitly asks to yeet, or to commit and push everything; never on your own initiative.
write-docs
Write or update documentation from the code: gather facts, pick the shape for the reader, write it plain, and prove every command and path in it. Use when asked to document a repo, module or feature, or to bring stale docs up to date.
why
Find why code is shaped the way it is (design rationale, trade-offs, regressions, odd thresholds) from history, tickets, docs and chat, citing every claim and stating its confidence. Use for 'why does X work this way', 'why did we pick Y', or before changing code whose purpose is unclear.
verify
Prove a change works with the check that matches its type, do the read-back, and log the pass against the exact tree. Use when a change is ready to call done, before review, commit or stopping, and whenever ven-decisions end refuses an unverified tree.
unslop
Cut AI writing tells (filler, model vocabulary, metaphor nouns, hedging, formatting tics) from text while keeping every fact. Use when editing or checking any prose before it ships: docs, PR bodies, reports, skill text.
type-discipline
Apply when designing types or data shapes, reviewing a signature, or handling outside data, in any language. Make wrong states fail early: in the compiler for typed languages, in validated runtime contracts for untyped ones.