@webpresso/opencode-plugin 3.1.11 → 3.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,258 @@
1
+ ---
2
+ type: skill
3
+ slug: deep-research
4
+ title: Deep Research
5
+ status: active
6
+ scope: repo
7
+ applies_to: [agents]
8
+ related: []
9
+ created: "2026-05-07"
10
+ last_reviewed: "2026-05-07"
11
+ name: deep-research
12
+ description: "Deep web research with dated credible sources, pro/con synthesis, and project-alignment notes."
13
+ argument-hint: "<subject or question to research>"
14
+ ---
15
+
16
+ <Purpose>
17
+ Deep Research is a multi-phase web research workflow that produces a balanced, citation-backed analysis of a subject. It collects both positive and negative sentiments from credible sources, evaluates alignment with the project's vision and tech stack, identifies 2026 state-of-the-art best practices, and logs the result to `docs/research/` with a date-prefixed filename.
18
+ </Purpose>
19
+
20
+ <Use_When>
21
+
22
+ - Evaluating a technology, library, pattern, or product direction
23
+ - Comparing alternatives before making an architectural or product decision
24
+ - The user says "research", "deep research", "investigate", or "what does the community think about"
25
+ - You need a balanced view of trade-offs before recommending something
26
+ </Use_When>
27
+
28
+ <Do_Not_Use_When>
29
+
30
+ - The user wants a quick factual lookup (use WebSearch directly)
31
+ - The user wants codebase exploration (use explore)
32
+ - The user wants a requirements interview (use deep-interview)
33
+ - The answer is already well-established and non-controversial
34
+ </Do_Not_Use_When>
35
+
36
+ <Output_Contract>
37
+ A single markdown file written to:
38
+
39
+ ```
40
+ docs/research/{YYYY-MM-DD}-{slug}.md
41
+ ```
42
+
43
+ Where `{YYYY-MM-DD}` is today's date and `{slug}` is a kebab-case summary of the subject.
44
+
45
+ The file MUST have this frontmatter and structure (see Phase 5 for full template).
46
+ </Output_Contract>
47
+
48
+ <Steps>
49
+
50
+ ## Phase 0: Scope and Context Load
51
+
52
+ 1. Parse `{{ARGUMENTS}}` into a research subject and any qualifiers (e.g., "for our use case", "vs X").
53
+ 2. Derive a short kebab-case slug for the filename.
54
+ 3. Read `docs/research/product/VISION.md` (or the project's equivalent — check `docs/` for a vision doc) to load the current vision context. Skip if not present.
55
+ 4. Identify the relevant tech stack context by reading project config files (e.g., `package.json` workspaces, `tsconfig.json`, key dependencies) — keep this lightweight, just enough to judge alignment.
56
+ 5. Announce the research plan to the user:
57
+ - Subject
58
+ - Key questions to investigate
59
+ - Output path
60
+
61
+ ## Phase 1: Broad Discovery (parallel)
62
+
63
+ Run **5-8 parallel WebSearch queries** covering different angles:
64
+
65
+ 1. **Overview**: `"{subject} 2026 overview best practices"`
66
+ 2. **Positive sentiment**: `"{subject} benefits advantages why use 2026"`
67
+ 3. **Negative sentiment / criticism**: `"{subject} problems criticism drawbacks 2026"`
68
+ 4. **Community opinion**: `"{subject} reddit hacker news experience production 2026"`
69
+ 5. **Comparison / alternatives**: `"{subject} vs alternatives comparison 2026"`
70
+ 6. **State of the art**: `"{subject} state of the art latest 2026"`
71
+ 7. **(If applicable)** Stack-specific: `"{subject} TypeScript Cloudflare Workers React 2026"`
72
+ 8. **(If applicable)** Domain-specific query based on the project's problem space
73
+
74
+ For each search, record:
75
+
76
+ - Source URL
77
+ - Source type (docs, blog, forum, official, academic)
78
+ - Key claims or data points
79
+ - Sentiment direction (positive / negative / neutral)
80
+
81
+ ## Phase 2: Deep Dive (sequential, selective)
82
+
83
+ From Phase 1 results, identify the **5-10 most credible and information-dense sources**.
84
+
85
+ Use `WebFetch` on each to extract deeper detail. Prioritize:
86
+
87
+ - Official documentation or announcements
88
+ - Production experience reports (postmortems, migration stories)
89
+ - Benchmark data or technical comparisons
90
+ - Strong critical takes with specific evidence
91
+
92
+ For each fetched source, extract:
93
+
94
+ - Specific claims with evidence
95
+ - Sentiment and strength (strong positive, mild positive, neutral, mild negative, strong negative)
96
+ - Credibility assessment (official docs > production experience > blog opinion > forum anecdote)
97
+
98
+ ## Phase 3: Triangulate and Score
99
+
100
+ 1. **Cluster findings** into themes (e.g., "developer experience", "performance", "ecosystem maturity", "production readiness").
101
+ 2. **Cross-reference claims**: if only one source makes a claim, flag it as unverified. Claims supported by 2+ independent sources get higher weight.
102
+ 3. **Score source credibility** using:
103
+ - Official docs / specs: high
104
+ - Production postmortems with data: high
105
+ - Respected engineering blogs: medium-high
106
+ - Community forums (HN, Reddit) with detail: medium
107
+ - Marketing material / vendor blogs: low (note bias)
108
+ - Undated or anonymous content: very low
109
+ 4. **Identify gaps**: what questions remain unanswered? If critical gaps exist, run 1-2 additional targeted searches.
110
+
111
+ ## Phase 4: Vision and Stack Alignment Analysis
112
+
113
+ Using the project's vision from Phase 0 and the research findings:
114
+
115
+ 1. **Vision alignment**: How does this subject relate to the project's stated mission? Does it help or hinder current priorities?
116
+ 2. **Tech stack fit**: How well does this integrate with the existing stack (read `package.json`, key deps, framework choices)? What's the integration cost?
117
+ 3. **Trade-off assessment**: Given the project's current stage, what are the most relevant trade-offs?
118
+ 4. **Recommendation**: Based on the evidence, what's the suggested path? Be explicit about confidence level.
119
+
120
+ ## Phase 5: Write Report
121
+
122
+ Write the report to `docs/research/{YYYY-MM-DD}-{slug}.md` using this template:
123
+
124
+ ```markdown
125
+ ---
126
+ type: research
127
+ title: "{Title}"
128
+ subject: "{subject}"
129
+ date: { YYYY-MM-DD }
130
+ confidence: { high|medium|low }
131
+ verdict: { adopt|trial|assess|hold|reject }
132
+ ---
133
+
134
+ # {Title}
135
+
136
+ > One-line summary of the finding.
137
+
138
+ ## TL;DR
139
+
140
+ 3-5 bullet executive summary covering: what it is, key finding, recommendation.
141
+
142
+ ## What This Is
143
+
144
+ Brief neutral description of the subject being researched.
145
+
146
+ ## State of the Art (2026)
147
+
148
+ Current best practices, latest developments, where the ecosystem stands today.
149
+ Cite sources inline as [Source Name](url).
150
+
151
+ ## Positive Signals
152
+
153
+ Evidence-backed reasons in favor. Group by theme.
154
+ Each point should cite its source and note credibility level.
155
+
156
+ ### {Theme 1}
157
+
158
+ - ...
159
+
160
+ ### {Theme 2}
161
+
162
+ - ...
163
+
164
+ ## Negative Signals
165
+
166
+ Evidence-backed criticism and risks. Group by theme.
167
+ Each point should cite its source and note credibility level.
168
+
169
+ ### {Theme 1}
170
+
171
+ - ...
172
+
173
+ ### {Theme 2}
174
+
175
+ - ...
176
+
177
+ ## Community Sentiment
178
+
179
+ What practitioners actually say. Include direct quotes where available.
180
+ Note the balance: if sentiment skews one way, say so explicitly.
181
+
182
+ ## Project Alignment
183
+
184
+ ### Vision Fit
185
+
186
+ How this relates to the project's current goals.
187
+
188
+ ### Tech Stack Fit
189
+
190
+ Integration with the project's stack (from `package.json`, framework configs).
191
+
192
+ ### Trade-offs for Current Stage
193
+
194
+ What matters most given where the project is now.
195
+
196
+ ## Recommendation
197
+
198
+ Clear recommendation with confidence level and reasoning.
199
+ Include conditions under which the recommendation would change.
200
+
201
+ ## Sources
202
+
203
+ Numbered list of all sources used, with:
204
+
205
+ - [N] [Title](url) — type, credibility, sentiment direction
206
+ ```
207
+
208
+ ## Phase 6: Present Summary
209
+
210
+ After writing the file, present to the user:
211
+
212
+ 1. The output file path
213
+ 2. The verdict and confidence
214
+ 3. A 3-line summary of the key finding
215
+ 4. Any critical gaps or caveats
216
+
217
+ </Steps>
218
+
219
+ <Quality_Gates>
220
+
221
+ - Minimum 8 distinct sources cited
222
+ - At least 2 sources per major claim
223
+ - Both positive AND negative signals sections must be substantive (not token)
224
+ - Sources section must include credibility and sentiment annotations
225
+ - Vision alignment section must reference specific project goals (not generic)
226
+ - All inline citations must be clickable links
227
+ - Frontmatter must include confidence and verdict fields
228
+ </Quality_Gates>
229
+
230
+ <Verdict_Scale>
231
+
232
+ - **adopt**: Strong evidence, clear fit, community consensus positive. Use it.
233
+ - **trial**: Promising evidence, worth a bounded experiment. Try it in a limited scope.
234
+ - **assess**: Mixed signals or insufficient evidence. Research more before committing.
235
+ - **hold**: Significant concerns or poor fit. Don't invest now, revisit later.
236
+ - **reject**: Clear evidence against. Don't use this.
237
+ </Verdict_Scale>
238
+
239
+ <Tool_Usage>
240
+
241
+ - `WebSearch` for broad discovery (Phase 1) and gap-filling (Phase 3)
242
+ - `WebFetch` for deep source extraction (Phase 2)
243
+ - `Read` for loading vision and tech stack context (Phase 0)
244
+ - `Write` for the final report (Phase 5)
245
+ - `Agent` with `subagent_type=Explore` if codebase context is needed for alignment analysis
246
+ - Use parallel tool calls wherever searches are independent
247
+ </Tool_Usage>
248
+
249
+ <Common_Mistakes>
250
+
251
+ - Writing a report that's all positive or all negative — always find both sides
252
+ - Citing marketing material as if it were neutral evidence — flag vendor bias
253
+ - Making alignment claims without reading the actual vision doc
254
+ - Using stale search results — always include "2026" in queries
255
+ - Writing the report before triangulating — don't just concatenate search results
256
+ </Common_Mistakes>
257
+
258
+ Task: {{ARGUMENTS}}
@@ -0,0 +1,26 @@
1
+ ---
2
+ name: design-review
3
+ description: "Report-first visual/browser design audit for hierarchy, spacing, consistency, responsive, a11y, and interactions."
4
+ license: MIT
5
+ allowed-tools:
6
+ - Read
7
+ - Glob
8
+ - Grep
9
+ - Bash
10
+ ---
11
+
12
+ # Design review
13
+
14
+ Use for live visual QA or design polish requests. For pre-implementation plan critique, use `/plan-design-review`.
15
+
16
+ ## Default behavior
17
+
18
+ - The `allowed-tools` frontmatter is an audited disclosure for supported hosts;
19
+ pretool-guard remains the enforced mutation backstop when a host does not prove
20
+ skill-frontmatter enforcement.
21
+ - Report first; do not edit source unless the user explicitly asks for fixes.
22
+ - Inspect key viewports and states.
23
+ - Capture evidence with browser screenshots or precise observations.
24
+ - Rank findings by user impact and implementation effort.
25
+
26
+ If fixes are authorized, make small visual changes and verify before/after.
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: devex-review
3
+ description: "Report-first developer-experience audit for onboarding, docs, examples, CLI help, and time-to-hello-world."
4
+ license: MIT
5
+ allowed-tools:
6
+ - Read
7
+ - Glob
8
+ - Grep
9
+ - Bash
10
+ ---
11
+
12
+ # Live DX review
13
+
14
+ Use after or during developer-facing work to test the real user journey.
15
+
16
+ This is report-only by default. The `allowed-tools` frontmatter is an audited
17
+ disclosure for supported hosts; pretool-guard remains the enforced mutation
18
+ backstop when a host does not prove skill-frontmatter enforcement.
19
+
20
+ ## Evidence to gather
21
+
22
+ - Docs route or README entrypoint.
23
+ - Install/setup command path.
24
+ - CLI help and error messages.
25
+ - Time-to-hello-world estimate.
26
+ - Browser evidence for docs or local app flows when relevant.
27
+
28
+ Return a scorecard with blockers, papercuts, screenshots/artifacts when available, and concrete next fixes.
@@ -0,0 +1,129 @@
1
+ ---
2
+ type: skill
3
+ slug: fix
4
+ title: Fix
5
+ status: active
6
+ scope: repo
7
+ applies_to: [agents]
8
+ related: [verify, testing-philosophy]
9
+ created: "2026-05-13"
10
+ last_reviewed: "2026-05-22"
11
+ name: fix
12
+ description: "Root-cause fix workflow for bugs, failures, regressions, and errors; reproduce, repair owner, test, verify."
13
+ argument-hint: '<target> where target is: file|symptom|error|test|"free-text description"'
14
+ ---
15
+
16
+ # Fix Command
17
+
18
+ Fix the issue at its root, future-proof, aligned with repo philosophy.
19
+
20
+ **Arguments**: $ARGUMENTS
21
+
22
+ This command turns "please fix it well" into an enforceable workflow: reproduce, identify the broken invariant, repair it at the owner, prove the repair, and escalate to `/verify` when the blast radius is broader than a local fix.
23
+
24
+ ## Merged debugging discipline
25
+
26
+ `/investigate` and `systematic-debugging` are folded into this workflow. Keep the
27
+ old iron law: no fixes before evidence. Reproduce or capture the failure, read
28
+ the complete error/stack, trace the bad value or broken invariant to its owner,
29
+ compare with a working local pattern, and disconfirm cheap hypotheses before
30
+ editing. If the issue crosses component boundaries, add temporary diagnostics at
31
+ each boundary, run once, then remove or convert them to durable tests.
32
+
33
+ ## Non-negotiable invariants
34
+
35
+ 1. **Root cause, not symptom.** Trace the failure to the invariant that actually broke. Do not patch callers when the owner is fixable.
36
+ 2. **Loud failures, no silent fallbacks.** No default shims, sentinel returns, or catch-and-continue behavior that hides missing config, bad state, or broken boundaries.
37
+ 3. **Use the repo's real execution surface.** Prefer repo-owned wrappers and injected routing guidance over host-specific tool assumptions. If the repo exposes quality wrappers, use them. Use bounded inspection paths for large-output investigation.
38
+ 4. **Regression proof is mandatory.** Add or strengthen a test or other reliable proof that would fail against the old behavior.
39
+ 5. **Raising timeouts is not a fix.** If a timeout fires, investigate the bottleneck. Only raise a bound when the repo already documents that workload and you can cite measurement.
40
+ 6. **Zero suppressions, zero papering over.** No lint disables, ts-ignore, compat aliases, or "temporary" branches to sneak the fix through.
41
+ 7. **Minimal correct diff.** Update every consumer of a changed contract in the same change, but do not bundle unrelated cleanup.
42
+
43
+ ## Protocol
44
+
45
+ ### Step 1 — Reproduce and name the broken invariant
46
+
47
+ - Run the exact command, test, or user flow that surfaces the failure.
48
+ - Capture the evidence that matters: error text, file:line, exit code, failing assertion, or log path.
49
+ - Read enough surrounding code to say the broken invariant in one sentence.
50
+ - If the issue is nondeterministic, gather evidence until you can describe the slow/flaky/failing case without guessing.
51
+
52
+ If the "issue" is actually several unrelated failures, stop and ask which one to fix first.
53
+
54
+ ### Step 2 — Decide where the fix belongs
55
+
56
+ State briefly:
57
+
58
+ - the broken invariant
59
+ - the owner that should enforce it
60
+ - whether the fix changes a public contract
61
+ - which direct consumers must change in the same diff
62
+
63
+ If the blast radius is broader than the owner + direct consumers, keep going with `/fix` only if the change is still one coherent repair. If the work becomes a broader hardening pass, plan a `/verify` handoff before claiming done.
64
+
65
+ ### Step 3 — Write failing proof first when feasible
66
+
67
+ - For a reproducible bug, write or strengthen the smallest regression test that fails on the old behavior.
68
+ - Verify that it fails for the right reason before changing production code.
69
+ - If test-first is genuinely infeasible at that boundary, record why and create the nearest reliable proof instead (for example a deterministic integration reproduction, fixture, or logged command).
70
+
71
+ Do not keep production code written before the test as "reference". If you wrote code first, throw it away and restart from the failing proof.
72
+
73
+ ### Step 4 — Implement the minimal correct fix
74
+
75
+ - Edit the file or module that owns the invariant.
76
+ - Update every changed consumer in the same diff. No half-migrations.
77
+ - Delete compat shims, dead aliases, and TODO branches made obsolete by the repair.
78
+ - Keep complexity down by extracting helpers instead of nesting conditionals.
79
+
80
+ ### Step 5 — Run scoped verification
81
+
82
+ Run the narrowest checks that prove the repaired behavior on the real repo surface:
83
+
84
+ - targeted test(s) for the repaired path
85
+ - targeted lint/typecheck/build checks for changed files or packages
86
+ - any boundary-specific verification the repo requires for the touched surface
87
+
88
+ Rules:
89
+
90
+ - Prefer repo-owned wrappers or routed quality tools over raw host-specific commands.
91
+ - Reuse fresh logs if the repo auto-saves them; do not re-run long commands just to re-read output.
92
+ - Read the exit code and summary before making a claim.
93
+
94
+ Escalate to `/verify <target>` when any of these are true:
95
+
96
+ - the fix crosses packages
97
+ - the fix changes a public or shared contract
98
+ - the fix touched docs, plans, blueprints, or repo SSOT
99
+ - the fix needs dead-code / compat / broad regression review before claiming done
100
+
101
+ ### Step 6 — Report with evidence
102
+
103
+ Keep it short:
104
+
105
+ - what invariant broke
106
+ - how the change restores it
107
+ - what proof ran (tests, commands, log paths, exit codes)
108
+ - adjacent issues noticed but intentionally not fixed
109
+
110
+ ## Done looks like
111
+
112
+ - [ ] Root cause named in one sentence
113
+ - [ ] Fix applied at the owning boundary
114
+ - [ ] Regression proof fails against the old behavior
115
+ - [ ] Minimal code change restores the invariant
116
+ - [ ] Scoped verification passed on the changed surface
117
+ - [ ] `/verify` handoff used when blast radius exceeded a local fix
118
+ - [ ] Report cites evidence, not intent
119
+
120
+ ## Anti-patterns this command refuses
121
+
122
+ - Fixing the nearest symptom while leaving the real invariant broken
123
+ - Catching an error and returning a sentinel to "keep things moving"
124
+ - Raising a timeout, retry count, or polling interval instead of finding the bottleneck
125
+ - Adding a deprecated alias instead of updating consumers
126
+ - Introducing `any`, suppressions, or lint disables to unblock the fix
127
+ - Bundling unrelated refactors with the repair
128
+ - Claiming done from intuition, partial output, or another agent's success message
129
+ - Writing a planning/doc artifact when the user asked for a fix
@@ -0,0 +1,27 @@
1
+ ---
2
+ type: skill
3
+ slug: goal
4
+ title: Goal
5
+ status: active
6
+ scope: repo
7
+ applies_to: [agents]
8
+ related: [autopilot, plan-refine, verify]
9
+ created: "2026-07-10"
10
+ last_reviewed: "2026-07-10"
11
+ name: goal
12
+ description: "Run durable multi-blueprint goals through evidence-gated handoffs."
13
+ argument-hint: "<new|status|handoff|run|cancel> [brief]"
14
+ ---
15
+
16
+ # Goal
17
+
18
+ Use `wp goal` as the durable controller for work spanning one or more blueprints.
19
+
20
+ ## Protocol
21
+
22
+ 1. Create or resume the goal in a managed blueprint owner worktree.
23
+ 2. Read `wp goal status`, execute only the current phase handoff, then call `wp goal run` again.
24
+ 3. Complete blueprint tasks only through `wp_blueprint_task_verify` with passing evidence.
25
+ 4. Stop when the controller reports `complete`, `cancelled`, blocked guard exhaustion, or `WP_GOAL_DISABLE=1`.
26
+
27
+ The blueprint engine owns task status and approval gates. The goal controller must never self-approve, directly mark a task done, bypass review provenance, or mutate the primary checkout. Keep every loop bounded and never increase timeouts.
@@ -0,0 +1,78 @@
1
+ ---
2
+ type: skill
3
+ slug: hooks-doctor
4
+ title: Hooks Doctor
5
+ status: active
6
+ scope: repo
7
+ applies_to: [agents]
8
+ related: []
9
+ created: "2026-05-07"
10
+ last_reviewed: "2026-05-07"
11
+ name: hooks-doctor
12
+ description: "Webpresso hook/plugin doctor: verify install health and debug broken hooks or plugin integration."
13
+ argument-hint: "[--skip-mcp]"
14
+ allowed-tools:
15
+ - Bash
16
+ ---
17
+
18
+ # Hooks Doctor
19
+
20
+ Verify the webpresso plugin hooks installation is healthy. Run this first when:
21
+
22
+ - A hook seems not to be firing
23
+ - The plugin was just installed or updated
24
+ - Claude Code can't find expected tools
25
+ - Any plugin integration issue arises
26
+
27
+ ## Running the Check
28
+
29
+ Run the doctor command directly:
30
+
31
+ ```
32
+ wp hooks doctor
33
+ ```
34
+
35
+ Or skip the MCP server check (for CI environments):
36
+
37
+ ```
38
+ wp hooks doctor --skip-mcp
39
+ ```
40
+
41
+ ## Interpreting Results
42
+
43
+ Each check prints `[x]` (pass) or `[ ]` (fail) with a detail line:
44
+
45
+ ```
46
+ [x] pretool-guard
47
+ [x] post-tool (lint-after-edit)
48
+ [x] stop (qa-changed-files)
49
+ [x] guard-switch
50
+ [x] sessionstart
51
+ [x] test-quality-check
52
+ [x] plugin.json integrity
53
+ [x] MCP server liveness: MCP server already running (sentinel found)
54
+ ```
55
+
56
+ ## Failure Remediation
57
+
58
+ | Check | Likely Cause | Fix |
59
+ | ------------------------------------------------ | -------------------------------------------------------------- | -------------------------------------------------------------- |
60
+ | `pretool-guard` / `post-tool` / etc. — not found | `pnpm build` not run after install | `pnpm build` |
61
+ | `pretool-guard` / etc. — not executable | `chmod +x` not persisted | Re-run `pnpm prepare` or `pnpm build` which runs `chmod-bins` |
62
+ | `plugin.json integrity` — missing | Claude adapter manifest absent from `@webpresso/claude-plugin` | Re-run `wp setup --host claude` or reinstall the Claude plugin |
63
+ | `MCP server liveness` — timeout | MCP server cold-start too slow | Wait and retry, or run `wp hooks doctor --skip-mcp` |
64
+ | Any check — not found at `dist/esm/...` | Build artifacts missing | Run `pnpm build` in the webpresso repo |
65
+
66
+ After fixing, re-run `wp hooks doctor` to confirm.
67
+
68
+ ## How It Works
69
+
70
+ The doctor runs five categories of checks:
71
+
72
+ 1. **Bin existence** — each hook binary exists at the expected `dist/esm/hooks/...` path
73
+ 2. **Executable bit** — bins have execute permission (skipped on Windows)
74
+ 3. **stdin response** — interactive hooks (`pretool-guard`, `guard-switch`, `sessionstart`) respond to `{}` input with valid JSON and exit 0; fire-and-forget hooks (`lint-after-edit`, `qa-changed-files`) exit 0
75
+ 4. **plugin.json integrity** — adapter manifest exists, has required fields, and all referenced bins exist on disk
76
+ 5. **MCP server liveness** — spawns the MCP server and sends a `tools/list` JSON-RPC request; times out at 5s (soft-fail — warning only, does not fail the overall check)
77
+
78
+ If `isMcpReady()` detects a live MCP sentinel, the MCP check fast-passes without spawning.
@@ -0,0 +1,84 @@
1
+ ---
2
+ type: skill
3
+ slug: lore-protocol
4
+ title: lore-protocol
5
+ status: active
6
+ scope: repo
7
+ applies_to: [agents]
8
+ related: []
9
+ created: "2026-05-07"
10
+ last_reviewed: "2026-05-07"
11
+ name: lore-protocol
12
+ description: "Manual Lore commit-message trailers with wp audit commit-message; no hook enforcement because PRs squash."
13
+ ---
14
+
15
+ # lore-protocol
16
+
17
+ Use Lore commit-message trailers manually with `wp audit commit-message`. Hook enforcement is intentionally not installed because this repo uses squash commits.
18
+
19
+ Lore is a lightweight protocol for embedding decision context directly into
20
+ commit messages — constraints, rejected alternatives, confidence, and
21
+ forward-looking directives — so future engineers understand _why_ a change
22
+ was made, not just _what_ changed.
23
+
24
+ ## Quick start
25
+
26
+ ```bash
27
+ # Validate a commit message file (hard-fail mode — exits non-zero on violations)
28
+ wp audit commit-message --message-file .git/COMMIT_EDITMSG --require-lore
29
+
30
+ # Soft-warn mode — emits warnings but always exits 0 (adoption ramp)
31
+ wp audit commit-message --message-file .git/COMMIT_EDITMSG --lore-warn
32
+
33
+ # Opt in per-commit by adding [lore] to the subject line:
34
+ # feat(auth): prevent silent session drops [lore]
35
+ ```
36
+
37
+ ## Hook policy
38
+
39
+ Lore trailers are advisory/manual. Do not install commit-msg or pre-push hooks for Lore enforcement; squash commits are the durable review boundary.
40
+
41
+ ## Trailer format
42
+
43
+ ```
44
+ <intent line: why the change was made, not what changed>
45
+
46
+ <body: narrative context — constraints, approach rationale>
47
+
48
+ Constraint: <external constraint that shaped the decision>
49
+ Rejected: <alternative considered> | <reason for rejection>
50
+ Confidence: <low|medium|high>
51
+ Scope-risk: <narrow|moderate|broad>
52
+ Directive: <forward-looking warning for future modifiers>
53
+ Tested: <what was verified>
54
+ Not-tested: <known gaps in verification>
55
+ ```
56
+
57
+ ## Required trailers (for `--require-lore` or `[lore]` subject tag)
58
+
59
+ | Trailer | Required | Allowed values |
60
+ | -------------------------------------------- | ------------ | -------------------------------- |
61
+ | `Confidence:` | yes | `low`, `medium`, `high` |
62
+ | `Constraint:` or `Rejected:` or `Directive:` | at least one | free text |
63
+ | `Scope-risk:` | optional | `narrow`, `moderate`, `broad` |
64
+ | `Reversibility:` | optional | `clean`, `messy`, `irreversible` |
65
+ | `Tested:` | optional | free text |
66
+ | `Not-tested:` | optional | free text |
67
+ | `Related:` | optional | free text |
68
+
69
+ ## Example commit
70
+
71
+ ```
72
+ Prevent silent session drops during long-running operations
73
+
74
+ The auth service returns inconsistent status codes on token
75
+ expiry, so the interceptor catches all 4xx responses.
76
+
77
+ Constraint: Auth service does not support token introspection
78
+ Rejected: Extend token TTL to 24h | security policy violation
79
+ Confidence: high
80
+ Scope-risk: narrow
81
+ Directive: Error handling is broad — do not narrow without verifying upstream behavior
82
+ Tested: Single expired token refresh (unit)
83
+ Not-tested: Auth service cold-start > 500ms behavior
84
+ ```