self-evolve-framework 1.1.0 → 1.2.0
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.
- package/package.json +1 -1
- package/template/skills/impeccable/SKILL.md +174 -47
- package/template/skills/impeccable/agents/impeccable_asset_producer.toml +92 -0
- package/template/skills/impeccable/agents/impeccable_manual_edit_applier.toml +95 -0
- package/template/skills/impeccable/agents/openai.yaml +4 -0
- package/template/skills/impeccable/reference/adapt.md +311 -0
- package/template/skills/impeccable/reference/animate.md +201 -0
- package/template/skills/impeccable/reference/audit.md +133 -0
- package/template/skills/impeccable/reference/bolder.md +113 -0
- package/template/skills/impeccable/reference/brand.md +108 -0
- package/template/skills/impeccable/reference/clarify.md +288 -0
- package/template/skills/impeccable/reference/codex.md +105 -0
- package/template/skills/impeccable/reference/colorize.md +257 -0
- package/template/skills/impeccable/reference/craft.md +123 -0
- package/template/skills/impeccable/reference/critique.md +790 -0
- package/template/skills/impeccable/reference/delight.md +302 -0
- package/template/skills/impeccable/reference/distill.md +111 -0
- package/template/skills/impeccable/reference/document.md +429 -0
- package/template/skills/impeccable/reference/extract.md +69 -0
- package/template/skills/impeccable/reference/harden.md +347 -0
- package/template/skills/impeccable/reference/hooks.md +90 -0
- package/template/skills/impeccable/reference/init.md +172 -0
- package/template/skills/impeccable/reference/interaction-design.md +189 -0
- package/template/skills/impeccable/reference/layout.md +161 -0
- package/template/skills/impeccable/reference/live.md +720 -0
- package/template/skills/impeccable/reference/onboard.md +234 -0
- package/template/skills/impeccable/reference/optimize.md +258 -0
- package/template/skills/impeccable/reference/overdrive.md +130 -0
- package/template/skills/impeccable/reference/polish.md +241 -0
- package/template/skills/impeccable/reference/product.md +60 -0
- package/template/skills/impeccable/reference/quieter.md +99 -0
- package/template/skills/impeccable/reference/shape.md +165 -0
- package/template/skills/impeccable/reference/typeset.md +279 -0
- package/template/skills/impeccable/scripts/command-metadata.json +94 -0
- package/template/skills/impeccable/scripts/context-signals.mjs +225 -0
- package/template/skills/impeccable/scripts/context.mjs +961 -0
- package/template/skills/impeccable/scripts/critique-storage.mjs +242 -0
- package/template/skills/impeccable/scripts/detect-csp.mjs +198 -0
- package/template/skills/impeccable/scripts/detect.mjs +21 -0
- package/template/skills/impeccable/scripts/detector/browser/injected/index.mjs +1937 -0
- package/template/skills/impeccable/scripts/detector/cli/main.mjs +290 -0
- package/template/skills/impeccable/scripts/detector/design-system.mjs +750 -0
- package/template/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +5138 -0
- package/template/skills/impeccable/scripts/detector/detect-antipatterns.mjs +50 -0
- package/template/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +277 -0
- package/template/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +568 -0
- package/template/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +1015 -0
- package/template/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +234 -0
- package/template/skills/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
- package/template/skills/impeccable/scripts/detector/findings.mjs +12 -0
- package/template/skills/impeccable/scripts/detector/node/file-system.mjs +198 -0
- package/template/skills/impeccable/scripts/detector/profile/profiler.mjs +166 -0
- package/template/skills/impeccable/scripts/detector/registry/antipatterns.mjs +448 -0
- package/template/skills/impeccable/scripts/detector/rules/checks.mjs +2671 -0
- package/template/skills/impeccable/scripts/detector/shared/color.mjs +124 -0
- package/template/skills/impeccable/scripts/detector/shared/constants.mjs +101 -0
- package/template/skills/impeccable/scripts/detector/shared/inline-ignores.mjs +148 -0
- package/template/skills/impeccable/scripts/detector/shared/page.mjs +7 -0
- package/template/skills/impeccable/scripts/hook-admin.mjs +661 -0
- package/template/skills/impeccable/scripts/hook-before-edit.mjs +476 -0
- package/template/skills/impeccable/scripts/hook-lib.mjs +1632 -0
- package/template/skills/impeccable/scripts/hook.mjs +61 -0
- package/template/skills/impeccable/scripts/lib/design-parser.mjs +842 -0
- package/template/skills/impeccable/scripts/lib/impeccable-config.mjs +638 -0
- package/template/skills/impeccable/scripts/lib/impeccable-paths.mjs +128 -0
- package/template/skills/impeccable/scripts/lib/is-generated.mjs +69 -0
- package/template/skills/impeccable/scripts/lib/target-args.mjs +42 -0
- package/template/skills/impeccable/scripts/live/browser-script-parts.mjs +49 -0
- package/template/skills/impeccable/scripts/live/completion.mjs +19 -0
- package/template/skills/impeccable/scripts/live/event-validation.mjs +137 -0
- package/template/skills/impeccable/scripts/live/insert-ui.mjs +458 -0
- package/template/skills/impeccable/scripts/live/manual-apply.mjs +939 -0
- package/template/skills/impeccable/scripts/live/manual-edit-routes.mjs +357 -0
- package/template/skills/impeccable/scripts/live/manual-edits-buffer.mjs +152 -0
- package/template/skills/impeccable/scripts/live/session-store.mjs +289 -0
- package/template/skills/impeccable/scripts/live/svelte-component.mjs +826 -0
- package/template/skills/impeccable/scripts/live/sveltekit-adapter.mjs +274 -0
- package/template/skills/impeccable/scripts/live/ui-core.mjs +180 -0
- package/template/skills/impeccable/scripts/live/vocabulary.mjs +36 -0
- package/template/skills/impeccable/scripts/live-accept.mjs +812 -0
- package/template/skills/impeccable/scripts/live-browser-dom.js +146 -0
- package/template/skills/impeccable/scripts/live-browser-session.js +123 -0
- package/template/skills/impeccable/scripts/live-browser.js +11173 -0
- package/template/skills/impeccable/scripts/live-commit-manual-edits.mjs +1241 -0
- package/template/skills/impeccable/scripts/live-complete.mjs +75 -0
- package/template/skills/impeccable/scripts/live-copy-edit-agent.mjs +683 -0
- package/template/skills/impeccable/scripts/live-discard-manual-edits.mjs +51 -0
- package/template/skills/impeccable/scripts/live-inject.mjs +583 -0
- package/template/skills/impeccable/scripts/live-insert.mjs +272 -0
- package/template/skills/impeccable/scripts/live-manual-edit-evidence.mjs +363 -0
- package/template/skills/impeccable/scripts/live-poll.mjs +384 -0
- package/template/skills/impeccable/scripts/live-resume.mjs +94 -0
- package/template/skills/impeccable/scripts/live-server.mjs +1135 -0
- package/template/skills/impeccable/scripts/live-status.mjs +61 -0
- package/template/skills/impeccable/scripts/live-target.mjs +30 -0
- package/template/skills/impeccable/scripts/live-wrap.mjs +894 -0
- package/template/skills/impeccable/scripts/live.mjs +297 -0
- package/template/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/template/skills/impeccable/scripts/palette.mjs +633 -0
- package/template/skills/impeccable/scripts/pin.mjs +214 -0
- package/template/rules/CodeGraph.mdc +0 -23
- package/template/rules/Svelte_5.mdc +0 -167
- package/template/rules/Svelte_Flow.mdc +0 -176
- package/template/rules/Tailwind_CSS_v4.mdc +0 -187
- package/template/rules/Tauri.mdc +0 -145
- package/template/rules/app-error-pattern.mdc +0 -65
- package/template/rules/invoke-safe-pattern.mdc +0 -53
- package/template/rules/js.mdc +0 -10
- package/template/rules/powershell.mdc +0 -9
- package/template/rules//346/227/245/345/277/227.mdc +0 -15
- package/template/rules//350/257/267/346/261/202.mdc +0 -49
- package/template/skills/caveman/SKILL.md +0 -49
- package/template/skills/check/SKILL.md +0 -393
- package/template/skills/check/agents/reviewer-architecture.md +0 -39
- package/template/skills/check/agents/reviewer-security.md +0 -39
- package/template/skills/check/references/persona-catalog.md +0 -56
- package/template/skills/check/references/project-context.md +0 -120
- package/template/skills/check/references/public-reply.md +0 -14
- package/template/skills/check/scripts/audit_signals.py +0 -666
- package/template/skills/check/scripts/run-tests.sh +0 -19
- package/template/skills/design/SKILL.md +0 -173
- package/template/skills/design/references/design-aesthetic-quality.md +0 -67
- package/template/skills/design/references/design-data-viz.md +0 -34
- package/template/skills/design/references/design-reference.md +0 -295
- package/template/skills/design/references/design-tokens.md +0 -45
- package/template/skills/design/references/design-traps.md +0 -43
- package/template/skills/design-an-interface/SKILL.md +0 -94
- package/template/skills/diagnose/SKILL.md +0 -117
- package/template/skills/diagnose/scripts/hitl-loop.template.sh +0 -41
- package/template/skills/edit-article/SKILL.md +0 -14
- package/template/skills/git-guardrails-claude-code/SKILL.md +0 -95
- package/template/skills/git-guardrails-claude-code/scripts/block-dangerous-git.sh +0 -25
- package/template/skills/grill-me/SKILL.md +0 -10
- package/template/skills/grill-with-docs/ADR-FORMAT.md +0 -47
- package/template/skills/grill-with-docs/CONTEXT-FORMAT.md +0 -60
- package/template/skills/grill-with-docs/SKILL.md +0 -88
- package/template/skills/handoff/SKILL.md +0 -15
- package/template/skills/health/SKILL.md +0 -260
- package/template/skills/health/agents/inspector-context.md +0 -119
- package/template/skills/health/agents/inspector-control.md +0 -84
- package/template/skills/health/agents/inspector-maintainability.md +0 -55
- package/template/skills/health/scripts/check-agent-context.sh +0 -5
- package/template/skills/health/scripts/check-doc-refs.sh +0 -8
- package/template/skills/health/scripts/check-maintainability.sh +0 -8
- package/template/skills/health/scripts/check-verifier-output.sh +0 -5
- package/template/skills/health/scripts/check_agent_context.py +0 -444
- package/template/skills/health/scripts/check_doc_refs.py +0 -110
- package/template/skills/health/scripts/check_maintainability.py +0 -635
- package/template/skills/health/scripts/check_verifier_output.py +0 -116
- package/template/skills/health/scripts/collect-data.sh +0 -751
- package/template/skills/hunt/SKILL.md +0 -232
- package/template/skills/hunt/references/failure-patterns.md +0 -138
- package/template/skills/hunt/references/ime-unicode.md +0 -58
- package/template/skills/hunt/references/logging-techniques.md +0 -72
- package/template/skills/hunt/references/rendering-debug.md +0 -34
- package/template/skills/improve-codebase-architecture/DEEPENING.md +0 -37
- package/template/skills/improve-codebase-architecture/HTML-REPORT.md +0 -123
- package/template/skills/improve-codebase-architecture/INTERFACE-DESIGN.md +0 -44
- package/template/skills/improve-codebase-architecture/LANGUAGE.md +0 -53
- package/template/skills/improve-codebase-architecture/SKILL.md +0 -81
- package/template/skills/learn/SKILL.md +0 -140
- package/template/skills/migrate-to-shoehorn/SKILL.md +0 -118
- package/template/skills/obsidian-vault/SKILL.md +0 -59
- package/template/skills/prototype/LOGIC.md +0 -79
- package/template/skills/prototype/SKILL.md +0 -30
- package/template/skills/prototype/UI.md +0 -112
- package/template/skills/qa/SKILL.md +0 -130
- package/template/skills/read/SKILL.md +0 -141
- package/template/skills/read/references/read-methods.md +0 -129
- package/template/skills/read/scripts/fetch.sh +0 -106
- package/template/skills/read/scripts/fetch_feishu.py +0 -251
- package/template/skills/read/scripts/fetch_local.py +0 -218
- package/template/skills/read/scripts/fetch_weixin.py +0 -107
- package/template/skills/request-refactor-plan/SKILL.md +0 -68
- package/template/skills/review/SKILL.md +0 -78
- package/template/skills/rust-auto-fix/SKILL.md +0 -94
- package/template/skills/scaffold-exercises/SKILL.md +0 -106
- package/template/skills/sdd-dev/SKILL.md +0 -114
- package/template/skills/setup-matt-pocock-skills/SKILL.md +0 -121
- package/template/skills/setup-matt-pocock-skills/domain.md +0 -51
- package/template/skills/setup-matt-pocock-skills/issue-tracker-github.md +0 -22
- package/template/skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +0 -23
- package/template/skills/setup-matt-pocock-skills/issue-tracker-local.md +0 -19
- package/template/skills/setup-matt-pocock-skills/triage-labels.md +0 -15
- package/template/skills/setup-pre-commit/SKILL.md +0 -91
- package/template/skills/svelte-warnings-fix/SKILL.md +0 -94
- package/template/skills/tauri-nsis-installer-icon/SKILL.md +0 -92
- package/template/skills/tauri-nsis-installer-icon/references/tauri-nsis-schema.md +0 -71
- package/template/skills/tb/SKILL.md +0 -62
- package/template/skills/tdd/SKILL.md +0 -109
- package/template/skills/tdd/deep-modules.md +0 -33
- package/template/skills/tdd/interface-design.md +0 -31
- package/template/skills/tdd/mocking.md +0 -59
- package/template/skills/tdd/refactoring.md +0 -10
- package/template/skills/tdd/tests.md +0 -61
- package/template/skills/teach/GLOSSARY-FORMAT.md +0 -35
- package/template/skills/teach/LEARNING-RECORD-FORMAT.md +0 -46
- package/template/skills/teach/MISSION-FORMAT.md +0 -31
- package/template/skills/teach/RESOURCES-FORMAT.md +0 -32
- package/template/skills/teach/SKILL.md +0 -91
- package/template/skills/think/SKILL.md +0 -184
- package/template/skills/to-issues/SKILL.md +0 -83
- package/template/skills/to-prd/SKILL.md +0 -74
- package/template/skills/triage/AGENT-BRIEF.md +0 -168
- package/template/skills/triage/OUT-OF-SCOPE.md +0 -101
- package/template/skills/triage/SKILL.md +0 -103
- package/template/skills/ubiquitous-language/SKILL.md +0 -93
- package/template/skills/ver/SKILL.md +0 -62
- package/template/skills/write/SKILL.md +0 -209
- package/template/skills/write/references/write-en.md +0 -199
- package/template/skills/write/references/write-product-localization.md +0 -43
- package/template/skills/write/references/write-zh-bilingual.md +0 -59
- package/template/skills/write/references/write-zh-prose.md +0 -50
- package/template/skills/write/references/write-zh-release-notes.md +0 -40
- package/template/skills/write/references/write-zh.md +0 -721
- package/template/skills/write-a-skill/SKILL.md +0 -117
- package/template/skills/writing-beats/SKILL.md +0 -52
- package/template/skills/writing-fragments/SKILL.md +0 -75
- package/template/skills/writing-shape/SKILL.md +0 -64
- package/template/skills/zoom-out/SKILL.md +0 -7
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
# When to Mock
|
|
2
|
-
|
|
3
|
-
Mock at **system boundaries** only:
|
|
4
|
-
|
|
5
|
-
- External APIs (payment, email, etc.)
|
|
6
|
-
- Databases (sometimes - prefer test DB)
|
|
7
|
-
- Time/randomness
|
|
8
|
-
- File system (sometimes)
|
|
9
|
-
|
|
10
|
-
Don't mock:
|
|
11
|
-
|
|
12
|
-
- Your own classes/modules
|
|
13
|
-
- Internal collaborators
|
|
14
|
-
- Anything you control
|
|
15
|
-
|
|
16
|
-
## Designing for Mockability
|
|
17
|
-
|
|
18
|
-
At system boundaries, design interfaces that are easy to mock:
|
|
19
|
-
|
|
20
|
-
**1. Use dependency injection**
|
|
21
|
-
|
|
22
|
-
Pass external dependencies in rather than creating them internally:
|
|
23
|
-
|
|
24
|
-
```typescript
|
|
25
|
-
// Easy to mock
|
|
26
|
-
function processPayment(order, paymentClient) {
|
|
27
|
-
return paymentClient.charge(order.total);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// Hard to mock
|
|
31
|
-
function processPayment(order) {
|
|
32
|
-
const client = new StripeClient(process.env.STRIPE_KEY);
|
|
33
|
-
return client.charge(order.total);
|
|
34
|
-
}
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
**2. Prefer SDK-style interfaces over generic fetchers**
|
|
38
|
-
|
|
39
|
-
Create specific functions for each external operation instead of one generic function with conditional logic:
|
|
40
|
-
|
|
41
|
-
```typescript
|
|
42
|
-
// GOOD: Each function is independently mockable
|
|
43
|
-
const api = {
|
|
44
|
-
getUser: (id) => fetch(`/users/${id}`),
|
|
45
|
-
getOrders: (userId) => fetch(`/users/${userId}/orders`),
|
|
46
|
-
createOrder: (data) => fetch('/orders', { method: 'POST', body: data }),
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
// BAD: Mocking requires conditional logic inside the mock
|
|
50
|
-
const api = {
|
|
51
|
-
fetch: (endpoint, options) => fetch(endpoint, options),
|
|
52
|
-
};
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
The SDK approach means:
|
|
56
|
-
- Each mock returns one specific shape
|
|
57
|
-
- No conditional logic in test setup
|
|
58
|
-
- Easier to see which endpoints a test exercises
|
|
59
|
-
- Type safety per endpoint
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
# Refactor Candidates
|
|
2
|
-
|
|
3
|
-
After TDD cycle, look for:
|
|
4
|
-
|
|
5
|
-
- **Duplication** → Extract function/class
|
|
6
|
-
- **Long methods** → Break into private helpers (keep tests on public interface)
|
|
7
|
-
- **Shallow modules** → Combine or deepen
|
|
8
|
-
- **Feature envy** → Move logic to where data lives
|
|
9
|
-
- **Primitive obsession** → Introduce value objects
|
|
10
|
-
- **Existing code** the new code reveals as problematic
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
# Good and Bad Tests
|
|
2
|
-
|
|
3
|
-
## Good Tests
|
|
4
|
-
|
|
5
|
-
**Integration-style**: Test through real interfaces, not mocks of internal parts.
|
|
6
|
-
|
|
7
|
-
```typescript
|
|
8
|
-
// GOOD: Tests observable behavior
|
|
9
|
-
test("user can checkout with valid cart", async () => {
|
|
10
|
-
const cart = createCart();
|
|
11
|
-
cart.add(product);
|
|
12
|
-
const result = await checkout(cart, paymentMethod);
|
|
13
|
-
expect(result.status).toBe("confirmed");
|
|
14
|
-
});
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
Characteristics:
|
|
18
|
-
|
|
19
|
-
- Tests behavior users/callers care about
|
|
20
|
-
- Uses public API only
|
|
21
|
-
- Survives internal refactors
|
|
22
|
-
- Describes WHAT, not HOW
|
|
23
|
-
- One logical assertion per test
|
|
24
|
-
|
|
25
|
-
## Bad Tests
|
|
26
|
-
|
|
27
|
-
**Implementation-detail tests**: Coupled to internal structure.
|
|
28
|
-
|
|
29
|
-
```typescript
|
|
30
|
-
// BAD: Tests implementation details
|
|
31
|
-
test("checkout calls paymentService.process", async () => {
|
|
32
|
-
const mockPayment = jest.mock(paymentService);
|
|
33
|
-
await checkout(cart, payment);
|
|
34
|
-
expect(mockPayment.process).toHaveBeenCalledWith(cart.total);
|
|
35
|
-
});
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
Red flags:
|
|
39
|
-
|
|
40
|
-
- Mocking internal collaborators
|
|
41
|
-
- Testing private methods
|
|
42
|
-
- Asserting on call counts/order
|
|
43
|
-
- Test breaks when refactoring without behavior change
|
|
44
|
-
- Test name describes HOW not WHAT
|
|
45
|
-
- Verifying through external means instead of interface
|
|
46
|
-
|
|
47
|
-
```typescript
|
|
48
|
-
// BAD: Bypasses interface to verify
|
|
49
|
-
test("createUser saves to database", async () => {
|
|
50
|
-
await createUser({ name: "Alice" });
|
|
51
|
-
const row = await db.query("SELECT * FROM users WHERE name = ?", ["Alice"]);
|
|
52
|
-
expect(row).toBeDefined();
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
// GOOD: Verifies through interface
|
|
56
|
-
test("createUser makes user retrievable", async () => {
|
|
57
|
-
const user = await createUser({ name: "Alice" });
|
|
58
|
-
const retrieved = await getUser(user.id);
|
|
59
|
-
expect(retrieved.name).toBe("Alice");
|
|
60
|
-
});
|
|
61
|
-
```
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# GLOSSARY.md Format
|
|
2
|
-
|
|
3
|
-
`GLOSSARY.md` is the canonical language for this teaching workspace. All explainers, exercises, and learning records should adhere to its terminology. Building it is itself part of learning: compressing a concept into a tight definition is evidence the user understands it.
|
|
4
|
-
|
|
5
|
-
## Structure
|
|
6
|
-
|
|
7
|
-
```md
|
|
8
|
-
# {Topic} Glossary
|
|
9
|
-
|
|
10
|
-
{One or two sentence description of the topic this glossary covers.}
|
|
11
|
-
|
|
12
|
-
## Terms
|
|
13
|
-
|
|
14
|
-
**Hypertrophy**:
|
|
15
|
-
Muscle growth driven by mechanical tension and metabolic stress over repeated training sessions.
|
|
16
|
-
_Avoid_: Bulking, getting big
|
|
17
|
-
|
|
18
|
-
**Progressive overload**:
|
|
19
|
-
Systematically increasing the demand on a muscle over time — via load, volume, or intensity.
|
|
20
|
-
_Avoid_: Pushing harder, levelling up
|
|
21
|
-
|
|
22
|
-
**RPE (Rate of Perceived Exertion)**:
|
|
23
|
-
A 1–10 self-rating of how hard a set felt, where 10 is failure and 8 means two reps left in the tank.
|
|
24
|
-
_Avoid_: Effort score, intensity rating
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Rules
|
|
28
|
-
|
|
29
|
-
- **Add a term only when the user understands it.** The glossary is a record of compressed knowledge, not a dictionary the user reads to learn. If the user has just been introduced to a concept, wait until they can use it correctly before promoting it here.
|
|
30
|
-
- **Be opinionated.** When several words exist for the same concept, pick the best one and list the rest as aliases to avoid. This is how language compresses.
|
|
31
|
-
- **Keep definitions tight.** One or two sentences. Define what the term IS, not what it does or how to do it.
|
|
32
|
-
- **Use the glossary's own terms inside definitions.** Once a term is in the glossary, prefer it everywhere — including inside other definitions. This is what makes complex terms easier to grasp later.
|
|
33
|
-
- **Group under subheadings** when natural clusters emerge (e.g. `## Anatomy`, `## Programming`). A flat list is fine when terms cohere.
|
|
34
|
-
- **Flag ambiguities explicitly.** If a term is used loosely in the wider field, note the resolution: "In this workspace, 'set' always means a working set — warm-ups are tracked separately."
|
|
35
|
-
- **Revise as understanding deepens.** A definition the user wrote in week one may be wrong by week six. Update in place; do not leave stale entries.
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
# Learning Record Format
|
|
2
|
-
|
|
3
|
-
Learning records live in `./learning-records/` and use sequential numbering: `0001-slug.md`, `0002-slug.md`, etc. Create the directory lazily — only when the first record is written.
|
|
4
|
-
|
|
5
|
-
They are the teaching equivalent of ADRs: they capture non-obvious lessons, key insights, and stated prior knowledge that will steer future sessions. They are used to calculate the zone of proximal development.
|
|
6
|
-
|
|
7
|
-
## Template
|
|
8
|
-
|
|
9
|
-
```md
|
|
10
|
-
# {Short title of what was learned or established}
|
|
11
|
-
|
|
12
|
-
{1-3 sentences: what was learned (or what prior knowledge was established), and why it matters for future sessions.}
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
That is the whole format. A learning record can be a single paragraph. The value is recording _that_ this is now known and _why_ it changes what to teach next — not in filling out sections.
|
|
16
|
-
|
|
17
|
-
## Optional sections
|
|
18
|
-
|
|
19
|
-
Only include these when they add genuine value. Most records won't need them.
|
|
20
|
-
|
|
21
|
-
- **Status** frontmatter (`active | superseded by LR-NNNN`) — useful when an earlier understanding turns out to be wrong and is replaced.
|
|
22
|
-
- **Evidence** — how the user demonstrated the understanding (a question answered, an exercise completed, prior experience cited). Useful when the claim might be revisited.
|
|
23
|
-
- **Implications** — what this unlocks or rules out for future sessions. Worth recording when non-obvious.
|
|
24
|
-
|
|
25
|
-
## Numbering
|
|
26
|
-
|
|
27
|
-
Scan `./learning-records/` for the highest existing number and increment by one.
|
|
28
|
-
|
|
29
|
-
## When to write a learning record
|
|
30
|
-
|
|
31
|
-
Write one when any of these is true:
|
|
32
|
-
|
|
33
|
-
1. **The user demonstrated genuine understanding of something non-trivial** — not just exposure, but evidence they can use the concept correctly. This sets a new floor for what to teach next.
|
|
34
|
-
2. **The user disclosed prior knowledge** — "I already know X." Record it so future sessions don't re-teach it. Also record the _depth_ claimed.
|
|
35
|
-
3. **A misconception was corrected** — the user previously believed something wrong and now sees why. These are high-value: they predict future stumbling blocks for related topics.
|
|
36
|
-
4. **The mission shifted in response to learning** — the user discovered they cared about something different than they thought. Cross-link to [[MISSION.md]] and update it.
|
|
37
|
-
|
|
38
|
-
### What does _not_ qualify
|
|
39
|
-
|
|
40
|
-
- Material that was merely covered. Coverage is not learning. Wait for evidence.
|
|
41
|
-
- Anything already captured tersely in [[GLOSSARY.md]] as a term definition. Don't duplicate.
|
|
42
|
-
- Session-by-session activity logs. Learning records are not a journal — they are decision-grade insights.
|
|
43
|
-
|
|
44
|
-
## Supersession
|
|
45
|
-
|
|
46
|
-
When a later record contradicts an earlier one (the user's understanding deepened or corrected), mark the old record `Status: superseded by LR-NNNN` rather than deleting it. The history of how understanding evolved is itself useful signal.
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# MISSION.md Format
|
|
2
|
-
|
|
3
|
-
`MISSION.md` lives at the workspace root. It captures the _reason_ the user is learning this topic. Every teaching decision — what to teach next, which resources to surface, which exercises to design — should trace back to this document.
|
|
4
|
-
|
|
5
|
-
## Template
|
|
6
|
-
|
|
7
|
-
```md
|
|
8
|
-
# Mission: {Topic}
|
|
9
|
-
|
|
10
|
-
## Why
|
|
11
|
-
{1-3 sentences. The concrete real-world goal the user is chasing. What changes in their life or work when they have this skill? Avoid abstract framings like "to understand X" — push for the underlying outcome.}
|
|
12
|
-
|
|
13
|
-
## Success looks like
|
|
14
|
-
- {A specific, observable thing the user will be able to do}
|
|
15
|
-
- {Another specific thing}
|
|
16
|
-
- {…}
|
|
17
|
-
|
|
18
|
-
## Constraints
|
|
19
|
-
- {Time, budget, prior commitments, learning preferences, anything that bounds the approach}
|
|
20
|
-
|
|
21
|
-
## Out of scope
|
|
22
|
-
- {Adjacent topics the user explicitly does not want to chase right now — protects the zone of proximal development}
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## Rules
|
|
26
|
-
|
|
27
|
-
- **One mission per workspace.** If the user wants to learn two unrelated things, that is two workspaces.
|
|
28
|
-
- **Concrete over abstract.** "Run a half marathon by October" beats "get fitter." "Ship a Rust CLI to my team" beats "learn Rust."
|
|
29
|
-
- **Push back on vagueness.** If the user cannot articulate why, interview them before writing anything. A bad mission is worse than no mission.
|
|
30
|
-
- **Revise when reality shifts.** Missions change. When the user's goal moves, update this file — don't leave a stale mission steering future sessions.
|
|
31
|
-
- **Keep it short.** If `MISSION.md` runs past a screen, it has stopped being a compass and started being a plan.
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
# RESOURCES.md Format
|
|
2
|
-
|
|
3
|
-
`RESOURCES.md` is the curated set of trusted sources for this topic. Knowledge for explainers should be drawn from here, not from parametric guesses. Wisdom comes from the communities listed here.
|
|
4
|
-
|
|
5
|
-
## Structure
|
|
6
|
-
|
|
7
|
-
```md
|
|
8
|
-
# {Topic} Resources
|
|
9
|
-
|
|
10
|
-
## Knowledge
|
|
11
|
-
|
|
12
|
-
- [Book: _The Science and Practice of Strength Training_ — Zatsiorsky & Kraemer](https://example.com)
|
|
13
|
-
Foundational text on programming and adaptation. Use for: anything to do with periodisation, recovery, intensity zones.
|
|
14
|
-
- [Article: "How Much Should I Train?" — Greg Nuckols (Stronger By Science)](https://example.com)
|
|
15
|
-
Evidence-based review of volume landmarks. Use for: weekly set targets per muscle group.
|
|
16
|
-
|
|
17
|
-
## Wisdom (Communities)
|
|
18
|
-
|
|
19
|
-
- [r/weightroom](https://reddit.com/r/weightroom)
|
|
20
|
-
High-signal subreddit, moderated against bro-science. Use for: programme critique, plateau troubleshooting.
|
|
21
|
-
- Local: Tuesday strength class at {gym name}
|
|
22
|
-
Use for: real-time coaching feedback on lifts.
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## Rules
|
|
26
|
-
|
|
27
|
-
- **High-trust only.** Prefer primary sources, recognised experts, peer-reviewed work, and communities with strong moderation. If a resource is marketing dressed as education, leave it out.
|
|
28
|
-
- **Annotate every entry.** A bare link is useless in three months. Add one line: what it covers and when to reach for it.
|
|
29
|
-
- **Group by Knowledge / Wisdom.** Mirrors the philosophy in [SKILL.md](./SKILL.md). It is fine for a resource to appear in only one group.
|
|
30
|
-
- **Surface gaps explicitly.** If no good resource exists for an area the mission needs, write a `## Gaps` section listing what is missing. This drives future search.
|
|
31
|
-
- **Prune ruthlessly.** A resource that turned out to be wrong, shallow, or off-mission should be removed, not buried. Better five sharp sources than thirty mediocre ones.
|
|
32
|
-
- **Record community preferences.** If the user has opted out of joining communities, note it here so future sessions don't keep proposing them.
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: teach
|
|
3
|
-
description: Teach the user a new skill or concept, within this workspace.
|
|
4
|
-
disable-model-invocation: true
|
|
5
|
-
argument-hint: "What would you like to learn about?"
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
The user has asked you to teach them something. This is a stateful request - they intend to learn the topic over multiple sessions.
|
|
9
|
-
|
|
10
|
-
## Teaching Workspace
|
|
11
|
-
|
|
12
|
-
Treat the current directory as a teaching workspace. The state of their learning is captured in this directory in several files:
|
|
13
|
-
|
|
14
|
-
- `MISSION.md`: A document capturing the _reason_ the user is interested in the topic. This should be used to ground all teaching. Use the format in [MISSION-FORMAT.md](./MISSION-FORMAT.md).
|
|
15
|
-
- `GLOSSARY.md`: A glossary of terminology related to the topic. All workspace files should adhere to this terminology. Use the format in [GLOSSARY-FORMAT.md](./GLOSSARY-FORMAT.md).
|
|
16
|
-
- `RESOURCES.md`: A list of resources which can be explored to ground your teaching in contextual knowledge, or to acquire knowledge and wisdom. Use the format in [RESOURCES-FORMAT.md](./RESOURCES-FORMAT.md).
|
|
17
|
-
- `./learning-records/*.md`: A directory of learning records, which capture what the user has learned. These are loosely equivalent to architectural decision records in software development - they capture non-obvious lessons and key insights that may need to be revised later, or drive future sessions. These should be used to calculate the zone of proximal development. They are titled `0001-<dash-case-name>.md`, where the number increments each time. Use the format in [LEARNING-RECORD-FORMAT.md](./LEARNING-RECORD-FORMAT.md).
|
|
18
|
-
|
|
19
|
-
## Philosophy
|
|
20
|
-
|
|
21
|
-
To learn at a deep level, the user needs three things:
|
|
22
|
-
|
|
23
|
-
- **Knowledge**, captured from high-quality, high-trust resources
|
|
24
|
-
- **Skills**, acquired through highly-relevant exercises devised by you, based on the knowledge
|
|
25
|
-
- **Wisdom**, which comes from interacting with other learners and practitioners
|
|
26
|
-
|
|
27
|
-
Before the `RESOURCES.md` is well-populated, your focus should be to find high-quality resources which will help the user acquire knowledge. Never trust your parametric knowledge.
|
|
28
|
-
|
|
29
|
-
Some topics may require more skills than knowledge. Learning more about theoretical physics might be more knowledge-based. For yoga, more skills-based.
|
|
30
|
-
|
|
31
|
-
## The Mission
|
|
32
|
-
|
|
33
|
-
Every teaching session should be tied into the mission - the reason that the user is interested in learning about the topic.
|
|
34
|
-
|
|
35
|
-
If the user is unclear about the mission, or the `MISSION.md` is not populated, your first job should be to question the user on why they want to learn this.
|
|
36
|
-
|
|
37
|
-
Failing to understand the mission will mean knowledge acquisition is not grounded in real-world goals. Exercises will feel too abstract. You will have no way of judging what the user should do next.
|
|
38
|
-
|
|
39
|
-
## Zone Of Proximal Development
|
|
40
|
-
|
|
41
|
-
The user should always feel as if they are being challenged 'just enough'. The scope of the topic being taught should feel extremely tight, should be directly tied into their mission.
|
|
42
|
-
|
|
43
|
-
The user may specify an exact thing they want to learn. If they don't, figure out their zone of proximal development by:
|
|
44
|
-
|
|
45
|
-
- Reading their `learning-records`
|
|
46
|
-
- Figuring out the right thing to teach them based on their mission
|
|
47
|
-
- Teach the most relevant thing that fits in their zone of proximal development
|
|
48
|
-
|
|
49
|
-
A user may tell you that they already know about that topic. If so, record it in their `learning-records`.
|
|
50
|
-
|
|
51
|
-
## Glossary
|
|
52
|
-
|
|
53
|
-
A key part of acquiring knowledge is compressing knowledge into language. Once a term is known and understood, it can be used and combined in new ways to make more complex terms easier to understand.
|
|
54
|
-
|
|
55
|
-
Building the glossary should be done once you feel confident that the user understands the term. Glossaries should use a strict format, and use as concise a definition as possible.
|
|
56
|
-
|
|
57
|
-
## Acquiring Knowledge
|
|
58
|
-
|
|
59
|
-
Knowledge and skills usually need to be taught as a 1-2 punch. You teach the knowledge first, then get the user to practice the skills via exercises.
|
|
60
|
-
|
|
61
|
-
Knowledge should first be gathered from trusted resources, then taught to the user via HTML explainers. These explainers should be beautiful, adhere to the glossary, and be saved to the local file system where they can be reviewed later.
|
|
62
|
-
|
|
63
|
-
Explainers should be littered with citations - links to external resources to back up any claim made.
|
|
64
|
-
|
|
65
|
-
Explainers should be as interactive as possible, with "try this" callouts to let the user try the knowledge.
|
|
66
|
-
|
|
67
|
-
You should make opening the HTML explainer as easy as possible for the user, ideally with a CLI command they can run.
|
|
68
|
-
|
|
69
|
-
Once the user has read the knowledge, allow them to ask questions about it. Answer their questions directly, and amend the explainer if needed (or produce another one).
|
|
70
|
-
|
|
71
|
-
At this point, you can amend the glossary if it appears clear they understand a term.
|
|
72
|
-
|
|
73
|
-
## Acquiring Skills
|
|
74
|
-
|
|
75
|
-
Skills should be taught through interactive exercises. There are several tools at your disposal:
|
|
76
|
-
|
|
77
|
-
- Interactive HTML explainers, using quizzes and light in-browser exercises
|
|
78
|
-
- HTML explainers which guide the user through a list of real-world steps to take (for instance, yoga poses)
|
|
79
|
-
- In-agent quizzes, where you ask the user scenario-based questions about what they've learned
|
|
80
|
-
|
|
81
|
-
Each exercise should be based on a **feedback loop**, where the user receives feedback on their performance. This feedback loop should be as tight as possible, giving feedback immediately.
|
|
82
|
-
|
|
83
|
-
## Acquiring Wisdom
|
|
84
|
-
|
|
85
|
-
Wisdom comes from true real-world interaction - testing your skills outside the learning environment.
|
|
86
|
-
|
|
87
|
-
When the user asks a question that appears to require wisdom, your default posture should be to attempt to answer - but to ultimately delegate to a **community**.
|
|
88
|
-
|
|
89
|
-
A community is a place (online or offline) where the user can test their skills in the real world. This might be a forum, a subreddit, a real-world class (budget permitting) or a local interest group.
|
|
90
|
-
|
|
91
|
-
You should attempt to find high-reputation communities the user can join. If the user expresses a preference that they don't want to join a community, respect it.
|
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: think
|
|
3
|
-
description: "Turns rough ideas into approved, decision-complete plans with validated structure before coding. Use when users ask 出方案/给方案/深入分析/怎么设计/有没有必要/值不值得/plan this/how should I/should we keep this for features, architecture, or value judgments. Not for bug fixes or small edits."
|
|
4
|
-
when_to_use: "出方案, 给方案, 深入分析, 怎么设计, 用什么方案, 判断一下, 有没有必要, 值不值得, what's the best approach, plan this, how should I, should we keep this"
|
|
5
|
-
dispatch_intent: "New feature, architecture, how should I design this, value judgment, executable plan, handoff"
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Think: Design and Validate Before You Build
|
|
9
|
-
|
|
10
|
-
Prefix your first line with 🥷 inline, not as its own paragraph.
|
|
11
|
-
|
|
12
|
-
**Update check (non-blocking).** Before starting, run `bash ../../scripts/check-update.sh` once; if it prints a line, relay it to the user, then continue. It runs at most once a day, only reads a public version file, sends no data, and fails silently.
|
|
13
|
-
|
|
14
|
-
Turn a rough idea into an approved plan. No code, no scaffolding, no pseudo-code until the user approves.
|
|
15
|
-
|
|
16
|
-
Give opinions directly. Take a position and state what evidence would change it. Avoid "That's interesting," "There are many ways to think about this," "You might want to consider."
|
|
17
|
-
|
|
18
|
-
## Outcome Contract
|
|
19
|
-
|
|
20
|
-
- Outcome: a rough idea becomes a decision-complete recommendation or implementation plan.
|
|
21
|
-
- Done when: the goal, success criteria, constraints, chosen approach, rejected tradeoffs, tests, and handoff steps are concrete enough to execute without re-deciding.
|
|
22
|
-
- Evidence: current repo state, project docs, live external docs when relevant, prior decisions, constraints, and explicit user preferences.
|
|
23
|
-
- Output: one recommended direction or a handoff plan with assumptions and verification steps.
|
|
24
|
-
|
|
25
|
-
## Durable Context Preflight
|
|
26
|
-
|
|
27
|
-
See [rules/durable-context.md](../../rules/durable-context.md) for when to read durable context, the read-order budget, and the memory-type mapping (planning constraints, reusable patterns, facts that need re-verification against current state).
|
|
28
|
-
|
|
29
|
-
For `/think`, planning constraints are `decision`, `preference`, and `principle` entries; current repo state, live docs, logs, tests, and remote state override memory. Lock durable decisions and preferences before asking questions. Do not ask the user to restate an intent that the durable context already establishes unless it is risky, stale, or contradicted by current state.
|
|
30
|
-
|
|
31
|
-
Before outputting any plan, scan the project's `AGENTS.md`, `CLAUDE.md`, `.claude/rules/*.md`, and any local agent-memory summary if the user pointed at one. If the proposed plan contradicts a "hard rule", "never X", "must Y", or "prefer Z" stated in those files, surface the contradiction in the plan output (one sentence: which rule, which step contradicts it, recommended resolution). Do not silently override the rule. If the rule blocks the plan, stop and ask before continuing.
|
|
32
|
-
|
|
33
|
-
## Lightweight Mode
|
|
34
|
-
|
|
35
|
-
Activate when the user wants to fix something rather than build something, the problem is already defined, and the only open question is "how to fix it."
|
|
36
|
-
|
|
37
|
-
Give one recommended fix in 2-3 sentences: what changes, where (file:line if known), and why. Name the brute-force version in one line first; default to it unless the user wants elegance. List involved files, flag explicitly if more than 5. State one risk. Wait for approval before implementing.
|
|
38
|
-
|
|
39
|
-
Upgrade to full mode if you find 3 or more genuinely different approaches with meaningful tradeoffs.
|
|
40
|
-
|
|
41
|
-
## Evaluation Mode
|
|
42
|
-
|
|
43
|
-
Activate when the user wants to judge whether something should exist, be kept, exposed, or removed. Typical triggers: "判断一下", "有没有必要", "值不值得", "should we keep this", "is this worth it", "我不想做", "商业前景", "有没有必要继续".
|
|
44
|
-
|
|
45
|
-
State the evaluation target and what kind of judgment is needed (value, risk, or tradeoff). Take a current-state snapshot: what it does, who uses it, what depends on it; grep and read before opining.
|
|
46
|
-
|
|
47
|
-
For product pivot, commercialization, or business-direction requests, frame the market, user, distribution, willingness-to-pay, and maintenance burden before proposing technology. Do not assume open source, do not assume implementation comes first, and do not hide a business judgment inside a technical plan.
|
|
48
|
-
|
|
49
|
-
**Output format (Kill/Keep/Pivot):**
|
|
50
|
-
|
|
51
|
-
Line 1: one of **Kill** / **Keep** / **Pivot** as the verdict. No preamble.
|
|
52
|
-
|
|
53
|
-
Then three reasons, based on the user's actual constraints (time, motivation, business model, maintenance cost). Not generic tradeoffs.
|
|
54
|
-
|
|
55
|
-
If verdict is **Pivot**: list specific directions on separate lines, one per line, each actionable.
|
|
56
|
-
|
|
57
|
-
If verdict is **Kill** or major rework: list impact scope (files, dependents, migration cost) before asking for confirmation.
|
|
58
|
-
|
|
59
|
-
Do not use a build-plan template here. Do not list options. Give one verdict.
|
|
60
|
-
|
|
61
|
-
Distinction from Lightweight Mode: Lightweight answers "how to fix it" (method). Evaluation answers "should it exist" (value judgment).
|
|
62
|
-
|
|
63
|
-
## Triage Mode
|
|
64
|
-
|
|
65
|
-
Activate when the user forwards a bundle of asks: an issue with multiple requests, a batch of screenshots, a user saying "看看这几个需求", or any input containing 3+ distinct items that could each be accepted or rejected independently.
|
|
66
|
-
|
|
67
|
-
Do not treat the bundle as a to-do list. Classify each item first:
|
|
68
|
-
|
|
69
|
-
| Bucket | Meaning | Action |
|
|
70
|
-
|--------|---------|--------|
|
|
71
|
-
| **Bug** | Broken behavior with evidence | Fix |
|
|
72
|
-
| **Already works** | The feature exists but the reporter missed it | Point to the existing affordance |
|
|
73
|
-
| **Accepted improvement** | Genuine gap, low-risk, aligns with product direction | Implement |
|
|
74
|
-
| **Cosmetic / preference** | Subjective, no functional impact | Note it, do not implement unless the maintainer agrees |
|
|
75
|
-
| **Out of scope** | Conflicts with product boundary or adds unjustified complexity | Decline with one sentence |
|
|
76
|
-
|
|
77
|
-
Output the classification table first. Wait for the user to confirm the accepted subset before implementing anything. "Already works" misidentified as missing is the most common waste; grep for the existing affordance before classifying an item as a gap.
|
|
78
|
-
|
|
79
|
-
**Negative-user feedback is not automatic scope.** When a user evaluation is triggered by a refund customer, a churn report, or a "competitor X is more intuitive" comparison, do not convert the complaint into a rework plan by default. First check whether the current behavior is intentional product differentiation, not an oversight: read the project's own AGENTS.md / CLAUDE.md / product notes for phrases like "review-first", "verifiability over speed", "evidence-driven", "explicit confirmation". If the behavior the user criticized is named there as a deliberate choice, the verdict is **Keep**, with one sentence on why the differentiation matters, and a note that the maintainer can override. Do not write a "fix the friction" plan that quietly removes the differentiator. The signal-to-respect ratio for refund / competitor-comparison feedback on a deliberately-designed surface is low.
|
|
80
|
-
|
|
81
|
-
## Before Reading Any Code
|
|
82
|
-
|
|
83
|
-
- Confirm the working path: `pwd` or `git rev-parse --show-toplevel`. Never assume `~/project` and `~/www/project` are the same.
|
|
84
|
-
- If the project tracks prior decisions (ADRs, design docs, issue threads), skim the ones matching the problem before proposing. Skip if none exist.
|
|
85
|
-
- If the plan involves a default value, env var, or config field, open the project's actual config file (e.g. `app.config.json`, `tauri.conf.json`, `package.json`, `.env`) and lift the live value. Never quote a default from memory or docs.
|
|
86
|
-
|
|
87
|
-
## Check for Official Solutions First
|
|
88
|
-
|
|
89
|
-
Before proposing custom implementations, search for framework built-ins, official patterns, and ecosystem standards. Use Context7 MCP tools to query latest docs when available. If an official solution exists, it is the default recommendation unless you can articulate why it is insufficient for this specific case.
|
|
90
|
-
|
|
91
|
-
For a hard problem, or one you have already tuned several times and it still feels off, study how mature open-source projects or direct competitors solve the same thing before designing. Fetch their approach, read the actual implementation, and extract the transferable mechanism. Designing from first principles when a proven implementation exists discards the iterations someone else already paid for. Name which projects you studied and what you took from each.
|
|
92
|
-
|
|
93
|
-
## Propose Approaches
|
|
94
|
-
|
|
95
|
-
Give one recommended approach with rationale. Include effort, risk, and what existing code it builds on. Mention one alternative only if the tradeoff is genuinely close (>40% chance the user would prefer it). Always include one minimal option.
|
|
96
|
-
|
|
97
|
-
When the plan is about distilling lessons from one project into a reusable skill set or shared rules, split the plan into **promote** and **do not promote**. Promote only reusable workflow constraints. Explicitly reject project-specific commands, paths, release checklists, safety boundaries, and private local context unless the user asks to update that project itself.
|
|
98
|
-
|
|
99
|
-
For the recommendation, identify the most fragile assumption (premise collapse) and state it explicitly: "This plan assumes X. If X does not hold, Y happens." If the assumption is load-bearing and fragile, deform the design to survive its failure.
|
|
100
|
-
|
|
101
|
-
**Blocking ambiguities**: if requirements have a conflict the user must resolve (two contradicting sources, two valid interpretations with different cost), name the specific conflict in one sentence and ask which takes precedence. Do not silently pick.
|
|
102
|
-
|
|
103
|
-
**Additional attack angles** (run only when the plan involves external dependencies, high concurrency, or data migration):
|
|
104
|
-
|
|
105
|
-
| Attack angle | Question |
|
|
106
|
-
|---|---|
|
|
107
|
-
| Dependency failure | If an external API, service, or tool goes down, can the plan degrade gracefully? |
|
|
108
|
-
| Scale explosion | At 10x data volume or user load, which step breaks first? |
|
|
109
|
-
| Rollback cost | If the direction is wrong after launch, what state can we return to and how hard is it? |
|
|
110
|
-
|
|
111
|
-
If an attack holds, deform the design to survive it. If it shatters the approach entirely, discard it and tell the user why. Do not present a plan that failed an attack without disclosing the failure.
|
|
112
|
-
|
|
113
|
-
Get approval before proceeding. If the user rejects, ask specifically what did not work. Do not restart from scratch.
|
|
114
|
-
|
|
115
|
-
## Validate Before Handing Off
|
|
116
|
-
|
|
117
|
-
- More than 8 files or 1 new service? Acknowledge it explicitly.
|
|
118
|
-
- More than 3 components exchanging data? Draw an ASCII diagram. Look for cycles.
|
|
119
|
-
- Every meaningful test path listed: happy path, errors, edge cases.
|
|
120
|
-
- Can this be rolled back without touching data?
|
|
121
|
-
- Every API key, token, and third-party account the plan requires listed with one-line explanations. No credential requests mid-implementation.
|
|
122
|
-
- Every MCP server, external API, and third-party CLI the plan depends on verified as reachable before approval.
|
|
123
|
-
|
|
124
|
-
**No placeholders in approved plans.** Every step must be concrete before approval. Forbidden patterns: TBD, TODO, "implement later," "similar to step N," "details to be determined." A plan with placeholders is a promise to plan later.
|
|
125
|
-
|
|
126
|
-
**Phase independence.** If the plan has multiple phases, each phase must be independently mergeable: after Phase N ships, the system is in a usable state, even if N+1 never lands. Plans that require all phases to complete before anything works are fragile (one stuck phase blocks the whole release) and waste review effort. If the work cannot be cut into mergeable phases, say so and ship it as one phase instead of pretending it is staged.
|
|
127
|
-
|
|
128
|
-
**Plan red flags (self-check before handoff):**
|
|
129
|
-
- A phase depends on the next phase to be useful (cannot ship alone).
|
|
130
|
-
- A "Phase 0: investigate / spike" exists. Investigation belongs before the plan, not inside it.
|
|
131
|
-
|
|
132
|
-
Either red flag means the plan is not ready. Resolve it before handing off.
|
|
133
|
-
|
|
134
|
-
## Implementation Handoff
|
|
135
|
-
|
|
136
|
-
A finished plan must be executable by another engineer or agent without re-deciding the direction. Include:
|
|
137
|
-
|
|
138
|
-
- Scope and non-scope.
|
|
139
|
-
- The chosen approach and the one rejected alternative, if the tradeoff was close.
|
|
140
|
-
- Public API, schema, command, config, or file-interface changes, if any.
|
|
141
|
-
- Verification commands and manual acceptance checks.
|
|
142
|
-
- Release, publish, migration, or issue/PR follow-through steps, if the task naturally continues there.
|
|
143
|
-
- Rollback or failure handling for any step that can leave external state changed.
|
|
144
|
-
|
|
145
|
-
When the user asks to export a handoff, or when the environment prevents further execution, make the handoff execution-ready instead of explaining the limitation. Include file targets, key constants or selectors, exact commands, runtime or visual checklist, and risk boundaries. If the work depends on a screenshot or artifact, name the artifact and the pass/fail delta.
|
|
146
|
-
|
|
147
|
-
When the user later says "Implement the plan", "可以干", "直接改", "整", or equivalent, treat that as approval of the written plan. Do not re-litigate the design. State which plan is being executed, check for obvious drift in the repo, and proceed. If the environment has changed enough that the plan is unsafe, name the specific drift and stop before editing.
|
|
148
|
-
|
|
149
|
-
## Gotchas
|
|
150
|
-
|
|
151
|
-
| What happened | Rule |
|
|
152
|
-
|---------------|------|
|
|
153
|
-
| Moved files to `~/project`, repo was at `~/www/project` | Run `pwd` before the first filesystem operation |
|
|
154
|
-
| Asked for API key after 3 implementation steps | List every dependency before handing off |
|
|
155
|
-
| User said "just do it" or equivalent approval | Treat as approval of the recommended option. State which option was selected, finish the plan. Do not implement inside `/think`. |
|
|
156
|
-
| Planned MCP workflow without checking if MCP was loaded | Verify tool availability before handing off, not mid-implementation |
|
|
157
|
-
| Rejected design restarted from scratch | Ask what specifically failed, re-enter with narrowed constraints |
|
|
158
|
-
| User said "just fix X" and skipped /think | If the fix touches 3+ files or needs a method choice, pause and run Lightweight Mode |
|
|
159
|
-
| User approved a concrete plan and the agent debated the plan again | Execute the approved plan. Only stop for repo drift, missing permissions, or unsafe external state |
|
|
160
|
-
| Picked a regional or locale-specific API variant without checking | List all regional or locale differences before writing integration code |
|
|
161
|
-
| Introduced a second language or runtime into a single-stack project | Never add a new language or runtime without explicit approval |
|
|
162
|
-
| User said "判断一下这个报错" and got Evaluation Mode | "判断一下" + error/bug context = debugging, route to `/hunt`. Evaluation Mode is for value/existence judgments only |
|
|
163
|
-
| User asked to "沉淀到 Waza" after a project review | First separate transferable Waza capability from project facts. Do not import that project's commands, paths, or release rules into Waza |
|
|
164
|
-
|
|
165
|
-
## Output
|
|
166
|
-
|
|
167
|
-
**Approved design summary:**
|
|
168
|
-
- **Building**: what this is (1 paragraph)
|
|
169
|
-
- **Not building**: explicit out-of-scope list
|
|
170
|
-
- **Approach**: chosen option with rationale
|
|
171
|
-
- **Key decisions**: 3-5 with reasoning
|
|
172
|
-
- **Unknowns**: only items that are explicitly deferred with a stated reason and a clear owner. Not vague gaps. If an unknown blocks a decision, loop back before approval.
|
|
173
|
-
|
|
174
|
-
After the user approves the design, stop. Implementation starts only when requested.
|
|
175
|
-
|
|
176
|
-
## After Approval
|
|
177
|
-
|
|
178
|
-
When the plan is approved, output this guidance:
|
|
179
|
-
|
|
180
|
-
```
|
|
181
|
-
Plan approved. To implement: say "implement this plan". After implementation, run `/check` to review before merging or release follow-through.
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
Keep it concise (2-3 sentences max). The user decides when to start implementation.
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: to-issues
|
|
3
|
-
description: Break a plan, spec, or PRD into independently-grabbable issues on the project issue tracker using tracer-bullet vertical slices. Use when user wants to convert a plan into issues, create implementation tickets, or break down work into issues.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# To Issues
|
|
7
|
-
|
|
8
|
-
Break a plan into independently-grabbable issues using vertical slices (tracer bullets).
|
|
9
|
-
|
|
10
|
-
The issue tracker and triage label vocabulary should have been provided to you — run `/setup-matt-pocock-skills` if not.
|
|
11
|
-
|
|
12
|
-
## Process
|
|
13
|
-
|
|
14
|
-
### 1. Gather context
|
|
15
|
-
|
|
16
|
-
Work from whatever is already in the conversation context. If the user passes an issue reference (issue number, URL, or path) as an argument, fetch it from the issue tracker and read its full body and comments.
|
|
17
|
-
|
|
18
|
-
### 2. Explore the codebase (optional)
|
|
19
|
-
|
|
20
|
-
If you have not already explored the codebase, do so to understand the current state of the code. Issue titles and descriptions should use the project's domain glossary vocabulary, and respect ADRs in the area you're touching.
|
|
21
|
-
|
|
22
|
-
### 3. Draft vertical slices
|
|
23
|
-
|
|
24
|
-
Break the plan into **tracer bullet** issues. Each issue is a thin vertical slice that cuts through ALL integration layers end-to-end, NOT a horizontal slice of one layer.
|
|
25
|
-
|
|
26
|
-
Slices may be 'HITL' or 'AFK'. HITL slices require human interaction, such as an architectural decision or a design review. AFK slices can be implemented and merged without human interaction. Prefer AFK over HITL where possible.
|
|
27
|
-
|
|
28
|
-
<vertical-slice-rules>
|
|
29
|
-
- Each slice delivers a narrow but COMPLETE path through every layer (schema, API, UI, tests)
|
|
30
|
-
- A completed slice is demoable or verifiable on its own
|
|
31
|
-
- Prefer many thin slices over few thick ones
|
|
32
|
-
</vertical-slice-rules>
|
|
33
|
-
|
|
34
|
-
### 4. Quiz the user
|
|
35
|
-
|
|
36
|
-
Present the proposed breakdown as a numbered list. For each slice, show:
|
|
37
|
-
|
|
38
|
-
- **Title**: short descriptive name
|
|
39
|
-
- **Type**: HITL / AFK
|
|
40
|
-
- **Blocked by**: which other slices (if any) must complete first
|
|
41
|
-
- **User stories covered**: which user stories this addresses (if the source material has them)
|
|
42
|
-
|
|
43
|
-
Ask the user:
|
|
44
|
-
|
|
45
|
-
- Does the granularity feel right? (too coarse / too fine)
|
|
46
|
-
- Are the dependency relationships correct?
|
|
47
|
-
- Should any slices be merged or split further?
|
|
48
|
-
- Are the correct slices marked as HITL and AFK?
|
|
49
|
-
|
|
50
|
-
Iterate until the user approves the breakdown.
|
|
51
|
-
|
|
52
|
-
### 5. Publish the issues to the issue tracker
|
|
53
|
-
|
|
54
|
-
For each approved slice, publish a new issue to the issue tracker. Use the issue body template below. These issues are considered ready for AFK agents, so publish them with the correct triage label unless instructed otherwise.
|
|
55
|
-
|
|
56
|
-
Publish issues in dependency order (blockers first) so you can reference real issue identifiers in the "Blocked by" field.
|
|
57
|
-
|
|
58
|
-
<issue-template>
|
|
59
|
-
## Parent
|
|
60
|
-
|
|
61
|
-
A reference to the parent issue on the issue tracker (if the source was an existing issue, otherwise omit this section).
|
|
62
|
-
|
|
63
|
-
## What to build
|
|
64
|
-
|
|
65
|
-
A concise description of this vertical slice. Describe the end-to-end behavior, not layer-by-layer implementation.
|
|
66
|
-
|
|
67
|
-
Avoid specific file paths or code snippets — they go stale fast. Exception: if a prototype produced a snippet that encodes a decision more precisely than prose can (state machine, reducer, schema, type shape), inline it here and note briefly that it came from a prototype. Trim to the decision-rich parts — not a working demo, just the important bits.
|
|
68
|
-
|
|
69
|
-
## Acceptance criteria
|
|
70
|
-
|
|
71
|
-
- [ ] Criterion 1
|
|
72
|
-
- [ ] Criterion 2
|
|
73
|
-
- [ ] Criterion 3
|
|
74
|
-
|
|
75
|
-
## Blocked by
|
|
76
|
-
|
|
77
|
-
- A reference to the blocking ticket (if any)
|
|
78
|
-
|
|
79
|
-
Or "None - can start immediately" if no blockers.
|
|
80
|
-
|
|
81
|
-
</issue-template>
|
|
82
|
-
|
|
83
|
-
Do NOT close or modify any parent issue.
|