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,45 +0,0 @@
|
|
|
1
|
-
# Design Tokens: Color and Typography
|
|
2
|
-
|
|
3
|
-
Motion rules live in [design-reference.md](./design-reference.md) under Animation and Motion Specifics. This file owns color and typography only.
|
|
4
|
-
|
|
5
|
-
## Color System: OKLCH Rules
|
|
6
|
-
|
|
7
|
-
- Use OKLCH instead of HSL. OKLCH is perceptually uniform: equal numeric changes produce equal perceived changes across the spectrum.
|
|
8
|
-
- Reduce chroma as lightness approaches the extremes. At 85% lightness, chroma around 0.08 is enough; pushing to 0.15 looks garish.
|
|
9
|
-
- Tint neutrals toward the brand hue with a chroma of 0.005 to 0.01.
|
|
10
|
-
- 60-30-10 is about visual weight, not pixel count: 60% neutral/surface, 30% secondary text and borders, 10% accent.
|
|
11
|
-
- Never use gray text on a colored background. Use a shade of the background hue at reduced lightness instead.
|
|
12
|
-
|
|
13
|
-
## Theme Matrix
|
|
14
|
-
|
|
15
|
-
| Context | Direction | Reason |
|
|
16
|
-
|---|---|---|
|
|
17
|
-
| Trading or analytics dashboard, night-shift use | Dark | High data density; reduced glare during long sessions |
|
|
18
|
-
| Children's reading or learning app | Light | Welcoming, low fatigue |
|
|
19
|
-
| Enterprise SRE or observability tool | Dark | Operator context; dark surfaces read at a glance in low-light rooms |
|
|
20
|
-
| Weekend planning, recipes, journaling | Light | Ambient daytime use; light feels casual |
|
|
21
|
-
| Music player or media browser | Dark | Content-forward; dark surfaces recede and let media pop |
|
|
22
|
-
| Hospital or clinical patient portal | Light | Trust and legibility are paramount |
|
|
23
|
-
| Vintage or artisanal brand site | Cream/warm light | Dark would clash with the analog material references |
|
|
24
|
-
|
|
25
|
-
If the answer is not obvious from context, default to light.
|
|
26
|
-
|
|
27
|
-
## Reflex Fonts to Reject
|
|
28
|
-
|
|
29
|
-
These fonts dominate training data. Using them signals no decision was made. The ban is on reflex use as a display face; informed product-UI use (e.g. Inter for a dense data table) is allowed when justified.
|
|
30
|
-
|
|
31
|
-
Reject: Inter, DM Sans, DM Serif Display, DM Serif Text, Outfit, Plus Jakarta Sans, Instrument Sans, Instrument Serif, Space Grotesk, Space Mono, IBM Plex Sans, IBM Plex Serif, IBM Plex Mono, Syne, Fraunces, Newsreader, Lora, Crimson Pro, Crimson Text, Playfair Display, Cormorant, Cormorant Garamond.
|
|
32
|
-
|
|
33
|
-
## Font Selection Procedure
|
|
34
|
-
|
|
35
|
-
1. Write three words that describe the brand (e.g. "precise, minimal, fast").
|
|
36
|
-
2. Name the three fonts you would reach for reflexively.
|
|
37
|
-
3. Reject all three.
|
|
38
|
-
4. Pick a typeface from a named foundry (Klim, Commercial Type, Colophon, Grilli Type, OH no Type, Village) or an open-source option with a clear personality. Be able to explain why in one sentence.
|
|
39
|
-
|
|
40
|
-
## Typography Details
|
|
41
|
-
|
|
42
|
-
- `text-wrap: balance` on headings and short text blocks; `text-wrap: pretty` on body paragraphs
|
|
43
|
-
- `-webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale` once on root layout (macOS only)
|
|
44
|
-
- `font-variant-numeric: tabular-nums` for counters, timers, prices, number columns
|
|
45
|
-
- Letter-spacing: roughly -0.022em for display sizes (32px+), -0.012em for mid-range (20-28px), normal at 16px and below
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# Design Traps and Anti-Patterns
|
|
2
|
-
|
|
3
|
-
## Common Default Traps
|
|
4
|
-
|
|
5
|
-
Before submitting, check whether any of the following slipped in without intention:
|
|
6
|
-
|
|
7
|
-
- A purple or blue gradient over white as the hero background
|
|
8
|
-
- A three-part hero: large headline, one-line subtext, two CTA buttons side by side
|
|
9
|
-
- A grid of cards with identical rounded corners, identical drop shadows, identical padding
|
|
10
|
-
- A top navigation bar with logo left, links center, primary action far right
|
|
11
|
-
- Sections that alternate between white and `#f9f9f9`
|
|
12
|
-
- A centered icon or illustration sitting above a heading above a paragraph
|
|
13
|
-
- A four-column footer with equal-weight columns
|
|
14
|
-
|
|
15
|
-
Any of these can appear if they serve the design intentionally. They cannot appear by default.
|
|
16
|
-
|
|
17
|
-
Final test: if you swapped in completely different content and the layout still made sense without changes, you built a template, not a design. Redo it.
|
|
18
|
-
|
|
19
|
-
## Absolute Bans (CSS-Pattern Level)
|
|
20
|
-
|
|
21
|
-
| Pattern | Why | Rewrite |
|
|
22
|
-
|---|---|---|
|
|
23
|
-
| `border-left` or `border-right` wider than 1px as a section accent | The single most overused design touch in admin UIs | Use a colored dot, a short horizontal rule, a background swatch, or a typographic weight shift |
|
|
24
|
-
| `background-clip: text` gradient text | Decorative and illegible in high-contrast mode | Use a solid brand color or typographic weight for emphasis |
|
|
25
|
-
| `backdrop-filter: blur` glassmorphism as default card surface | Expensive on low-power devices; overused | Use elevated surfaces via background color steps and `box-shadow` |
|
|
26
|
-
| Purple-to-blue gradients or cyan-on-dark accent systems | The canonical AI design palette; communicates nothing about the brand | Pick a palette from the brand words via OKLCH rules |
|
|
27
|
-
| Generic rounded-rect card with `box-shadow` as the default container | Template thinking | Default to cardless sections; only add card treatment when content type requires it |
|
|
28
|
-
| Modals as lazy escape for overflow UI | Interrupts flow and breaks browser back navigation | Inline expand, detail panel, or dedicated route; modals only when action truly requires focus-lock |
|
|
29
|
-
| `transition: all` or animating width/height/padding/margin | Forces browser into layout recalculation on every frame | List exact properties; use `grid-template-rows: 0fr to 1fr` for height reveals |
|
|
30
|
-
|
|
31
|
-
## AI Slop Test
|
|
32
|
-
|
|
33
|
-
Would a stranger glancing at the first viewport say "an AI made this" immediately? If yes, the committed direction was not committed enough. Usual culprits: reflex font, default purple accent, centered hero with generic card grid beneath. Fix the typography, color system, or layout until the answer flips.
|
|
34
|
-
|
|
35
|
-
## Content Authenticity
|
|
36
|
-
|
|
37
|
-
Placeholder copy that looks real but is not real breaks the illusion. Apply these rules before handoff.
|
|
38
|
-
|
|
39
|
-
**Sample data:** no generic names (John Doe, Jane Smith), no generic company names (Acme Corp, TechCorp), no Lorem Ipsum. Use organic numbers: `99.94%` not `99.99%`, `$99.00` not `$100.00`.
|
|
40
|
-
|
|
41
|
-
**UI copy:** sentence case on all headings, no exclamation marks on success states, never "Oops!" on errors. Banned words: Elevate, Seamless, Unleash, Delve, Tapestry, Game-changer, Next-Gen.
|
|
42
|
-
|
|
43
|
-
**Placeholders:** when a component is unavailable, use a labeled placeholder (grey rectangle, monogram wordmark, dashed border). Never draw illustrative imagery with inline SVG.
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: design-an-interface
|
|
3
|
-
description: Generate multiple radically different interface designs for a module using parallel sub-agents. Use when user wants to design an API, explore interface options, compare module shapes, or mentions "design it twice".
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Design an Interface
|
|
7
|
-
|
|
8
|
-
Based on "Design It Twice" from "A Philosophy of Software Design": your first idea is unlikely to be the best. Generate multiple radically different designs, then compare.
|
|
9
|
-
|
|
10
|
-
## Workflow
|
|
11
|
-
|
|
12
|
-
### 1. Gather Requirements
|
|
13
|
-
|
|
14
|
-
Before designing, understand:
|
|
15
|
-
|
|
16
|
-
- [ ] What problem does this module solve?
|
|
17
|
-
- [ ] Who are the callers? (other modules, external users, tests)
|
|
18
|
-
- [ ] What are the key operations?
|
|
19
|
-
- [ ] Any constraints? (performance, compatibility, existing patterns)
|
|
20
|
-
- [ ] What should be hidden inside vs exposed?
|
|
21
|
-
|
|
22
|
-
Ask: "What does this module need to do? Who will use it?"
|
|
23
|
-
|
|
24
|
-
### 2. Generate Designs (Parallel Sub-Agents)
|
|
25
|
-
|
|
26
|
-
Spawn 3+ sub-agents simultaneously using Task tool. Each must produce a **radically different** approach.
|
|
27
|
-
|
|
28
|
-
```
|
|
29
|
-
Prompt template for each sub-agent:
|
|
30
|
-
|
|
31
|
-
Design an interface for: [module description]
|
|
32
|
-
|
|
33
|
-
Requirements: [gathered requirements]
|
|
34
|
-
|
|
35
|
-
Constraints for this design: [assign a different constraint to each agent]
|
|
36
|
-
- Agent 1: "Minimize method count - aim for 1-3 methods max"
|
|
37
|
-
- Agent 2: "Maximize flexibility - support many use cases"
|
|
38
|
-
- Agent 3: "Optimize for the most common case"
|
|
39
|
-
- Agent 4: "Take inspiration from [specific paradigm/library]"
|
|
40
|
-
|
|
41
|
-
Output format:
|
|
42
|
-
1. Interface signature (types/methods)
|
|
43
|
-
2. Usage example (how caller uses it)
|
|
44
|
-
3. What this design hides internally
|
|
45
|
-
4. Trade-offs of this approach
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### 3. Present Designs
|
|
49
|
-
|
|
50
|
-
Show each design with:
|
|
51
|
-
|
|
52
|
-
1. **Interface signature** - types, methods, params
|
|
53
|
-
2. **Usage examples** - how callers actually use it in practice
|
|
54
|
-
3. **What it hides** - complexity kept internal
|
|
55
|
-
|
|
56
|
-
Present designs sequentially so user can absorb each approach before comparison.
|
|
57
|
-
|
|
58
|
-
### 4. Compare Designs
|
|
59
|
-
|
|
60
|
-
After showing all designs, compare them on:
|
|
61
|
-
|
|
62
|
-
- **Interface simplicity**: fewer methods, simpler params
|
|
63
|
-
- **General-purpose vs specialized**: flexibility vs focus
|
|
64
|
-
- **Implementation efficiency**: does shape allow efficient internals?
|
|
65
|
-
- **Depth**: small interface hiding significant complexity (good) vs large interface with thin implementation (bad)
|
|
66
|
-
- **Ease of correct use** vs **ease of misuse**
|
|
67
|
-
|
|
68
|
-
Discuss trade-offs in prose, not tables. Highlight where designs diverge most.
|
|
69
|
-
|
|
70
|
-
### 5. Synthesize
|
|
71
|
-
|
|
72
|
-
Often the best design combines insights from multiple options. Ask:
|
|
73
|
-
|
|
74
|
-
- "Which design best fits your primary use case?"
|
|
75
|
-
- "Any elements from other designs worth incorporating?"
|
|
76
|
-
|
|
77
|
-
## Evaluation Criteria
|
|
78
|
-
|
|
79
|
-
From "A Philosophy of Software Design":
|
|
80
|
-
|
|
81
|
-
**Interface simplicity**: Fewer methods, simpler params = easier to learn and use correctly.
|
|
82
|
-
|
|
83
|
-
**General-purpose**: Can handle future use cases without changes. But beware over-generalization.
|
|
84
|
-
|
|
85
|
-
**Implementation efficiency**: Does interface shape allow efficient implementation? Or force awkward internals?
|
|
86
|
-
|
|
87
|
-
**Depth**: Small interface hiding significant complexity = deep module (good). Large interface with thin implementation = shallow module (avoid).
|
|
88
|
-
|
|
89
|
-
## Anti-Patterns
|
|
90
|
-
|
|
91
|
-
- Don't let sub-agents produce similar designs - enforce radical difference
|
|
92
|
-
- Don't skip comparison - the value is in contrast
|
|
93
|
-
- Don't implement - this is purely about interface shape
|
|
94
|
-
- Don't evaluate based on implementation effort
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: diagnose
|
|
3
|
-
description: Disciplined diagnosis loop for hard bugs and performance regressions. Reproduce → minimise → hypothesise → instrument → fix → regression-test. Use when user says "diagnose this" / "debug this", reports a bug, says something is broken/throwing/failing, or describes a performance regression.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Diagnose
|
|
7
|
-
|
|
8
|
-
A discipline for hard bugs. Skip phases only when explicitly justified.
|
|
9
|
-
|
|
10
|
-
When exploring the codebase, use the project's domain glossary to get a clear mental model of the relevant modules, and check ADRs in the area you're touching.
|
|
11
|
-
|
|
12
|
-
## Phase 1 — Build a feedback loop
|
|
13
|
-
|
|
14
|
-
**This is the skill.** Everything else is mechanical. If you have a fast, deterministic, agent-runnable pass/fail signal for the bug, you will find the cause — bisection, hypothesis-testing, and instrumentation all just consume that signal. If you don't have one, no amount of staring at code will save you.
|
|
15
|
-
|
|
16
|
-
Spend disproportionate effort here. **Be aggressive. Be creative. Refuse to give up.**
|
|
17
|
-
|
|
18
|
-
### Ways to construct one — try them in roughly this order
|
|
19
|
-
|
|
20
|
-
1. **Failing test** at whatever seam reaches the bug — unit, integration, e2e.
|
|
21
|
-
2. **Curl / HTTP script** against a running dev server.
|
|
22
|
-
3. **CLI invocation** with a fixture input, diffing stdout against a known-good snapshot.
|
|
23
|
-
4. **Headless browser script** (Playwright / Puppeteer) — drives the UI, asserts on DOM/console/network.
|
|
24
|
-
5. **Replay a captured trace.** Save a real network request / payload / event log to disk; replay it through the code path in isolation.
|
|
25
|
-
6. **Throwaway harness.** Spin up a minimal subset of the system (one service, mocked deps) that exercises the bug code path with a single function call.
|
|
26
|
-
7. **Property / fuzz loop.** If the bug is "sometimes wrong output", run 1000 random inputs and look for the failure mode.
|
|
27
|
-
8. **Bisection harness.** If the bug appeared between two known states (commit, dataset, version), automate "boot at state X, check, repeat" so you can `git bisect run` it.
|
|
28
|
-
9. **Differential loop.** Run the same input through old-version vs new-version (or two configs) and diff outputs.
|
|
29
|
-
10. **HITL bash script.** Last resort. If a human must click, drive _them_ with `scripts/hitl-loop.template.sh` so the loop is still structured. Captured output feeds back to you.
|
|
30
|
-
|
|
31
|
-
Build the right feedback loop, and the bug is 90% fixed.
|
|
32
|
-
|
|
33
|
-
### Iterate on the loop itself
|
|
34
|
-
|
|
35
|
-
Treat the loop as a product. Once you have _a_ loop, ask:
|
|
36
|
-
|
|
37
|
-
- Can I make it faster? (Cache setup, skip unrelated init, narrow the test scope.)
|
|
38
|
-
- Can I make the signal sharper? (Assert on the specific symptom, not "didn't crash".)
|
|
39
|
-
- Can I make it more deterministic? (Pin time, seed RNG, isolate filesystem, freeze network.)
|
|
40
|
-
|
|
41
|
-
A 30-second flaky loop is barely better than no loop. A 2-second deterministic loop is a debugging superpower.
|
|
42
|
-
|
|
43
|
-
### Non-deterministic bugs
|
|
44
|
-
|
|
45
|
-
The goal is not a clean repro but a **higher reproduction rate**. Loop the trigger 100×, parallelise, add stress, narrow timing windows, inject sleeps. A 50%-flake bug is debuggable; 1% is not — keep raising the rate until it's debuggable.
|
|
46
|
-
|
|
47
|
-
### When you genuinely cannot build a loop
|
|
48
|
-
|
|
49
|
-
Stop and say so explicitly. List what you tried. Ask the user for: (a) access to whatever environment reproduces it, (b) a captured artifact (HAR file, log dump, core dump, screen recording with timestamps), or (c) permission to add temporary production instrumentation. Do **not** proceed to hypothesise without a loop.
|
|
50
|
-
|
|
51
|
-
Do not proceed to Phase 2 until you have a loop you believe in.
|
|
52
|
-
|
|
53
|
-
## Phase 2 — Reproduce
|
|
54
|
-
|
|
55
|
-
Run the loop. Watch the bug appear.
|
|
56
|
-
|
|
57
|
-
Confirm:
|
|
58
|
-
|
|
59
|
-
- [ ] The loop produces the failure mode the **user** described — not a different failure that happens to be nearby. Wrong bug = wrong fix.
|
|
60
|
-
- [ ] The failure is reproducible across multiple runs (or, for non-deterministic bugs, reproducible at a high enough rate to debug against).
|
|
61
|
-
- [ ] You have captured the exact symptom (error message, wrong output, slow timing) so later phases can verify the fix actually addresses it.
|
|
62
|
-
|
|
63
|
-
Do not proceed until you reproduce the bug.
|
|
64
|
-
|
|
65
|
-
## Phase 3 — Hypothesise
|
|
66
|
-
|
|
67
|
-
Generate **3–5 ranked hypotheses** before testing any of them. Single-hypothesis generation anchors on the first plausible idea.
|
|
68
|
-
|
|
69
|
-
Each hypothesis must be **falsifiable**: state the prediction it makes.
|
|
70
|
-
|
|
71
|
-
> Format: "If <X> is the cause, then <changing Y> will make the bug disappear / <changing Z> will make it worse."
|
|
72
|
-
|
|
73
|
-
If you cannot state the prediction, the hypothesis is a vibe — discard or sharpen it.
|
|
74
|
-
|
|
75
|
-
**Show the ranked list to the user before testing.** They often have domain knowledge that re-ranks instantly ("we just deployed a change to #3"), or know hypotheses they've already ruled out. Cheap checkpoint, big time saver. Don't block on it — proceed with your ranking if the user is AFK.
|
|
76
|
-
|
|
77
|
-
## Phase 4 — Instrument
|
|
78
|
-
|
|
79
|
-
Each probe must map to a specific prediction from Phase 3. **Change one variable at a time.**
|
|
80
|
-
|
|
81
|
-
Tool preference:
|
|
82
|
-
|
|
83
|
-
1. **Debugger / REPL inspection** if the env supports it. One breakpoint beats ten logs.
|
|
84
|
-
2. **Targeted logs** at the boundaries that distinguish hypotheses.
|
|
85
|
-
3. Never "log everything and grep".
|
|
86
|
-
|
|
87
|
-
**Tag every debug log** with a unique prefix, e.g. `[DEBUG-a4f2]`. Cleanup at the end becomes a single grep. Untagged logs survive; tagged logs die.
|
|
88
|
-
|
|
89
|
-
**Perf branch.** For performance regressions, logs are usually wrong. Instead: establish a baseline measurement (timing harness, `performance.now()`, profiler, query plan), then bisect. Measure first, fix second.
|
|
90
|
-
|
|
91
|
-
## Phase 5 — Fix + regression test
|
|
92
|
-
|
|
93
|
-
Write the regression test **before the fix** — but only if there is a **correct seam** for it.
|
|
94
|
-
|
|
95
|
-
A correct seam is one where the test exercises the **real bug pattern** as it occurs at the call site. If the only available seam is too shallow (single-caller test when the bug needs multiple callers, unit test that can't replicate the chain that triggered the bug), a regression test there gives false confidence.
|
|
96
|
-
|
|
97
|
-
**If no correct seam exists, that itself is the finding.** Note it. The codebase architecture is preventing the bug from being locked down. Flag this for the next phase.
|
|
98
|
-
|
|
99
|
-
If a correct seam exists:
|
|
100
|
-
|
|
101
|
-
1. Turn the minimised repro into a failing test at that seam.
|
|
102
|
-
2. Watch it fail.
|
|
103
|
-
3. Apply the fix.
|
|
104
|
-
4. Watch it pass.
|
|
105
|
-
5. Re-run the Phase 1 feedback loop against the original (un-minimised) scenario.
|
|
106
|
-
|
|
107
|
-
## Phase 6 — Cleanup + post-mortem
|
|
108
|
-
|
|
109
|
-
Required before declaring done:
|
|
110
|
-
|
|
111
|
-
- [ ] Original repro no longer reproduces (re-run the Phase 1 loop)
|
|
112
|
-
- [ ] Regression test passes (or absence of seam is documented)
|
|
113
|
-
- [ ] All `[DEBUG-...]` instrumentation removed (`grep` the prefix)
|
|
114
|
-
- [ ] Throwaway prototypes deleted (or moved to a clearly-marked debug location)
|
|
115
|
-
- [ ] The hypothesis that turned out correct is stated in the commit / PR message — so the next debugger learns
|
|
116
|
-
|
|
117
|
-
**Then ask: what would have prevented this bug?** If the answer involves architectural change (no good test seam, tangled callers, hidden coupling) hand off to the `/improve-codebase-architecture` skill with the specifics. Make the recommendation **after** the fix is in, not before — you have more information now than when you started.
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Human-in-the-loop reproduction loop.
|
|
3
|
-
# Copy this file, edit the steps below, and run it.
|
|
4
|
-
# The agent runs the script; the user follows prompts in their terminal.
|
|
5
|
-
#
|
|
6
|
-
# Usage:
|
|
7
|
-
# bash hitl-loop.template.sh
|
|
8
|
-
#
|
|
9
|
-
# Two helpers:
|
|
10
|
-
# step "<instruction>" → show instruction, wait for Enter
|
|
11
|
-
# capture VAR "<question>" → show question, read response into VAR
|
|
12
|
-
#
|
|
13
|
-
# At the end, captured values are printed as KEY=VALUE for the agent to parse.
|
|
14
|
-
|
|
15
|
-
set -euo pipefail
|
|
16
|
-
|
|
17
|
-
step() {
|
|
18
|
-
printf '\n>>> %s\n' "$1"
|
|
19
|
-
read -r -p " [Enter when done] " _
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
capture() {
|
|
23
|
-
local var="$1" question="$2" answer
|
|
24
|
-
printf '\n>>> %s\n' "$question"
|
|
25
|
-
read -r -p " > " answer
|
|
26
|
-
printf -v "$var" '%s' "$answer"
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
# --- edit below ---------------------------------------------------------
|
|
30
|
-
|
|
31
|
-
step "Open the app at http://localhost:3000 and sign in."
|
|
32
|
-
|
|
33
|
-
capture ERRORED "Click the 'Export' button. Did it throw an error? (y/n)"
|
|
34
|
-
|
|
35
|
-
capture ERROR_MSG "Paste the error message (or 'none'):"
|
|
36
|
-
|
|
37
|
-
# --- edit above ---------------------------------------------------------
|
|
38
|
-
|
|
39
|
-
printf '\n--- Captured ---\n'
|
|
40
|
-
printf 'ERRORED=%s\n' "$ERRORED"
|
|
41
|
-
printf 'ERROR_MSG=%s\n' "$ERROR_MSG"
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: edit-article
|
|
3
|
-
description: Edit and improve articles by restructuring sections, improving clarity, and tightening prose. Use when user wants to edit, revise, or improve an article draft.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
1. First, divide the article into sections based on its headings. Think about the main points you want to make during those sections.
|
|
7
|
-
|
|
8
|
-
Consider that information is a directed acyclic graph, and that pieces of information can depend on other pieces of information. Make sure that the order of the sections and their contents respects these dependencies.
|
|
9
|
-
|
|
10
|
-
Confirm the sections with the user.
|
|
11
|
-
|
|
12
|
-
2. For each section:
|
|
13
|
-
|
|
14
|
-
2a. Rewrite the section to improve clarity, coherence, and flow. Use maximum 240 characters per paragraph.
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: git-guardrails-claude-code
|
|
3
|
-
description: Set up Claude Code hooks to block dangerous git commands (push, reset --hard, clean, branch -D, etc.) before they execute. Use when user wants to prevent destructive git operations, add git safety hooks, or block git push/reset in Claude Code.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Setup Git Guardrails
|
|
7
|
-
|
|
8
|
-
Sets up a PreToolUse hook that intercepts and blocks dangerous git commands before Claude executes them.
|
|
9
|
-
|
|
10
|
-
## What Gets Blocked
|
|
11
|
-
|
|
12
|
-
- `git push` (all variants including `--force`)
|
|
13
|
-
- `git reset --hard`
|
|
14
|
-
- `git clean -f` / `git clean -fd`
|
|
15
|
-
- `git branch -D`
|
|
16
|
-
- `git checkout .` / `git restore .`
|
|
17
|
-
|
|
18
|
-
When blocked, Claude sees a message telling it that it does not have authority to access these commands.
|
|
19
|
-
|
|
20
|
-
## Steps
|
|
21
|
-
|
|
22
|
-
### 1. Ask scope
|
|
23
|
-
|
|
24
|
-
Ask the user: install for **this project only** (`.claude/settings.json`) or **all projects** (`~/.claude/settings.json`)?
|
|
25
|
-
|
|
26
|
-
### 2. Copy the hook script
|
|
27
|
-
|
|
28
|
-
The bundled script is at: [scripts/block-dangerous-git.sh](scripts/block-dangerous-git.sh)
|
|
29
|
-
|
|
30
|
-
Copy it to the target location based on scope:
|
|
31
|
-
|
|
32
|
-
- **Project**: `.claude/hooks/block-dangerous-git.sh`
|
|
33
|
-
- **Global**: `~/.claude/hooks/block-dangerous-git.sh`
|
|
34
|
-
|
|
35
|
-
Make it executable with `chmod +x`.
|
|
36
|
-
|
|
37
|
-
### 3. Add hook to settings
|
|
38
|
-
|
|
39
|
-
Add to the appropriate settings file:
|
|
40
|
-
|
|
41
|
-
**Project** (`.claude/settings.json`):
|
|
42
|
-
|
|
43
|
-
```json
|
|
44
|
-
{
|
|
45
|
-
"hooks": {
|
|
46
|
-
"PreToolUse": [
|
|
47
|
-
{
|
|
48
|
-
"matcher": "Bash",
|
|
49
|
-
"hooks": [
|
|
50
|
-
{
|
|
51
|
-
"type": "command",
|
|
52
|
-
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/block-dangerous-git.sh"
|
|
53
|
-
}
|
|
54
|
-
]
|
|
55
|
-
}
|
|
56
|
-
]
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
**Global** (`~/.claude/settings.json`):
|
|
62
|
-
|
|
63
|
-
```json
|
|
64
|
-
{
|
|
65
|
-
"hooks": {
|
|
66
|
-
"PreToolUse": [
|
|
67
|
-
{
|
|
68
|
-
"matcher": "Bash",
|
|
69
|
-
"hooks": [
|
|
70
|
-
{
|
|
71
|
-
"type": "command",
|
|
72
|
-
"command": "~/.claude/hooks/block-dangerous-git.sh"
|
|
73
|
-
}
|
|
74
|
-
]
|
|
75
|
-
}
|
|
76
|
-
]
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
If the settings file already exists, merge the hook into existing `hooks.PreToolUse` array — don't overwrite other settings.
|
|
82
|
-
|
|
83
|
-
### 4. Ask about customization
|
|
84
|
-
|
|
85
|
-
Ask if user wants to add or remove any patterns from the blocked list. Edit the copied script accordingly.
|
|
86
|
-
|
|
87
|
-
### 5. Verify
|
|
88
|
-
|
|
89
|
-
Run a quick test:
|
|
90
|
-
|
|
91
|
-
```bash
|
|
92
|
-
echo '{"tool_input":{"command":"git push origin main"}}' | <path-to-script>
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
Should exit with code 2 and print a BLOCKED message to stderr.
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
INPUT=$(cat)
|
|
4
|
-
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command')
|
|
5
|
-
|
|
6
|
-
DANGEROUS_PATTERNS=(
|
|
7
|
-
"git push"
|
|
8
|
-
"git reset --hard"
|
|
9
|
-
"git clean -fd"
|
|
10
|
-
"git clean -f"
|
|
11
|
-
"git branch -D"
|
|
12
|
-
"git checkout \."
|
|
13
|
-
"git restore \."
|
|
14
|
-
"push --force"
|
|
15
|
-
"reset --hard"
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
for pattern in "${DANGEROUS_PATTERNS[@]}"; do
|
|
19
|
-
if echo "$COMMAND" | grep -qE "$pattern"; then
|
|
20
|
-
echo "BLOCKED: '$COMMAND' matches dangerous pattern '$pattern'. The user has prevented you from doing this." >&2
|
|
21
|
-
exit 2
|
|
22
|
-
fi
|
|
23
|
-
done
|
|
24
|
-
|
|
25
|
-
exit 0
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: grill-me
|
|
3
|
-
description: Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Use when user wants to stress-test a plan, get grilled on their design, or mentions "grill me".
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
Interview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.
|
|
7
|
-
|
|
8
|
-
Ask the questions one at a time.
|
|
9
|
-
|
|
10
|
-
If a question can be answered by exploring the codebase, explore the codebase instead.
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
# ADR Format
|
|
2
|
-
|
|
3
|
-
ADRs live in `docs/adr/` and use sequential numbering: `0001-slug.md`, `0002-slug.md`, etc.
|
|
4
|
-
|
|
5
|
-
Create the `docs/adr/` directory lazily — only when the first ADR is needed.
|
|
6
|
-
|
|
7
|
-
## Template
|
|
8
|
-
|
|
9
|
-
```md
|
|
10
|
-
# {Short title of the decision}
|
|
11
|
-
|
|
12
|
-
{1-3 sentences: what's the context, what did we decide, and why.}
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
That's it. An ADR can be a single paragraph. The value is in recording *that* a decision was made and *why* — not in filling out sections.
|
|
16
|
-
|
|
17
|
-
## Optional sections
|
|
18
|
-
|
|
19
|
-
Only include these when they add genuine value. Most ADRs won't need them.
|
|
20
|
-
|
|
21
|
-
- **Status** frontmatter (`proposed | accepted | deprecated | superseded by ADR-NNNN`) — useful when decisions are revisited
|
|
22
|
-
- **Considered Options** — only when the rejected alternatives are worth remembering
|
|
23
|
-
- **Consequences** — only when non-obvious downstream effects need to be called out
|
|
24
|
-
|
|
25
|
-
## Numbering
|
|
26
|
-
|
|
27
|
-
Scan `docs/adr/` for the highest existing number and increment by one.
|
|
28
|
-
|
|
29
|
-
## When to offer an ADR
|
|
30
|
-
|
|
31
|
-
All three of these must be true:
|
|
32
|
-
|
|
33
|
-
1. **Hard to reverse** — the cost of changing your mind later is meaningful
|
|
34
|
-
2. **Surprising without context** — a future reader will look at the code and wonder "why on earth did they do it this way?"
|
|
35
|
-
3. **The result of a real trade-off** — there were genuine alternatives and you picked one for specific reasons
|
|
36
|
-
|
|
37
|
-
If a decision is easy to reverse, skip it — you'll just reverse it. If it's not surprising, nobody will wonder why. If there was no real alternative, there's nothing to record beyond "we did the obvious thing."
|
|
38
|
-
|
|
39
|
-
### What qualifies
|
|
40
|
-
|
|
41
|
-
- **Architectural shape.** "We're using a monorepo." "The write model is event-sourced, the read model is projected into Postgres."
|
|
42
|
-
- **Integration patterns between contexts.** "Ordering and Billing communicate via domain events, not synchronous HTTP."
|
|
43
|
-
- **Technology choices that carry lock-in.** Database, message bus, auth provider, deployment target. Not every library — just the ones that would take a quarter to swap out.
|
|
44
|
-
- **Boundary and scope decisions.** "Customer data is owned by the Customer context; other contexts reference it by ID only." The explicit no-s are as valuable as the yes-s.
|
|
45
|
-
- **Deliberate deviations from the obvious path.** "We're using manual SQL instead of an ORM because X." Anything where a reasonable reader would assume the opposite. These stop the next engineer from "fixing" something that was deliberate.
|
|
46
|
-
- **Constraints not visible in the code.** "We can't use AWS because of compliance requirements." "Response times must be under 200ms because of the partner API contract."
|
|
47
|
-
- **Rejected alternatives when the rejection is non-obvious.** If you considered GraphQL and picked REST for subtle reasons, record it — otherwise someone will suggest GraphQL again in six months.
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
# CONTEXT.md Format
|
|
2
|
-
|
|
3
|
-
## Structure
|
|
4
|
-
|
|
5
|
-
```md
|
|
6
|
-
# {Context Name}
|
|
7
|
-
|
|
8
|
-
{One or two sentence description of what this context is and why it exists.}
|
|
9
|
-
|
|
10
|
-
## Language
|
|
11
|
-
|
|
12
|
-
**Order**:
|
|
13
|
-
{A one or two sentence description of the term}
|
|
14
|
-
_Avoid_: Purchase, transaction
|
|
15
|
-
|
|
16
|
-
**Invoice**:
|
|
17
|
-
A request for payment sent to a customer after delivery.
|
|
18
|
-
_Avoid_: Bill, payment request
|
|
19
|
-
|
|
20
|
-
**Customer**:
|
|
21
|
-
A person or organization that places orders.
|
|
22
|
-
_Avoid_: Client, buyer, account
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## Rules
|
|
26
|
-
|
|
27
|
-
- **Be opinionated.** When multiple words exist for the same concept, pick the best one and list the others under `_Avoid_`.
|
|
28
|
-
- **Keep definitions tight.** One or two sentences max. Define what it IS, not what it does.
|
|
29
|
-
- **Only include terms specific to this project's context.** General programming concepts (timeouts, error types, utility patterns) don't belong even if the project uses them extensively. Before adding a term, ask: is this a concept unique to this context, or a general programming concept? Only the former belongs.
|
|
30
|
-
- **Group terms under subheadings** when natural clusters emerge. If all terms belong to a single cohesive area, a flat list is fine.
|
|
31
|
-
|
|
32
|
-
## Single vs multi-context repos
|
|
33
|
-
|
|
34
|
-
**Single context (most repos):** One `CONTEXT.md` at the repo root.
|
|
35
|
-
|
|
36
|
-
**Multiple contexts:** A `CONTEXT-MAP.md` at the repo root lists the contexts, where they live, and how they relate to each other:
|
|
37
|
-
|
|
38
|
-
```md
|
|
39
|
-
# Context Map
|
|
40
|
-
|
|
41
|
-
## Contexts
|
|
42
|
-
|
|
43
|
-
- [Ordering](./src/ordering/CONTEXT.md) — receives and tracks customer orders
|
|
44
|
-
- [Billing](./src/billing/CONTEXT.md) — generates invoices and processes payments
|
|
45
|
-
- [Fulfillment](./src/fulfillment/CONTEXT.md) — manages warehouse picking and shipping
|
|
46
|
-
|
|
47
|
-
## Relationships
|
|
48
|
-
|
|
49
|
-
- **Ordering → Fulfillment**: Ordering emits `OrderPlaced` events; Fulfillment consumes them to start picking
|
|
50
|
-
- **Fulfillment → Billing**: Fulfillment emits `ShipmentDispatched` events; Billing consumes them to generate invoices
|
|
51
|
-
- **Ordering ↔ Billing**: Shared types for `CustomerId` and `Money`
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
The skill infers which structure applies:
|
|
55
|
-
|
|
56
|
-
- If `CONTEXT-MAP.md` exists, read it to find contexts
|
|
57
|
-
- If only a root `CONTEXT.md` exists, single context
|
|
58
|
-
- If neither exists, create a root `CONTEXT.md` lazily when the first term is resolved
|
|
59
|
-
|
|
60
|
-
When multiple contexts exist, infer which one the current topic relates to. If unclear, ask.
|