@mohammadhprp/system-prompt 0.12.1 → 0.12.3
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/framework/agents/README.md +0 -1
- package/framework/commands/README.md +1 -1
- package/framework/commands/mr.md +8 -9
- package/framework/commands/review.md +1 -1
- package/framework/mcps/README.md +0 -4
- package/framework/plugins/ponytail/README.md +0 -1
- package/framework/plugins/ponytail/capabilities.md +1 -1
- package/framework/references/standards/api.md +0 -1
- package/framework/references/standards/architecture.md +0 -1
- package/framework/references/standards/database.md +0 -1
- package/framework/references/standards/debugging.md +0 -1
- package/framework/references/standards/documentation.md +0 -1
- package/framework/references/standards/logging.md +0 -1
- package/framework/references/standards/naming.md +0 -1
- package/framework/references/standards/observability.md +0 -1
- package/framework/references/standards/performance.md +0 -1
- package/framework/references/standards/pull-requests.md +0 -1
- package/framework/references/standards/security.md +0 -1
- package/framework/references/standards/testing.md +0 -1
- package/framework/skills/README.md +4 -14
- package/framework/skills/glab/SKILL.md +222 -0
- package/framework/skills/glab/references/commands-detailed.md +616 -0
- package/framework/skills/glab/references/quick-reference.md +145 -0
- package/framework/skills/glab/references/troubleshooting.md +669 -0
- package/framework/skills/improve/SKILL.md +135 -0
- package/framework/skills/improve/examples.md +19 -0
- package/framework/skills/improve/references/audit-playbook.md +130 -0
- package/framework/skills/improve/references/closing-the-loop.md +96 -0
- package/framework/skills/improve/references/plan-template.md +197 -0
- package/framework/skills/jira-cli/SKILL.md +260 -0
- package/framework/skills/jira-cli/references/commands-detailed.md +268 -0
- package/framework/skills/jira-cli/references/quick-reference.md +111 -0
- package/framework/skills/jira-cli/references/troubleshooting.md +114 -0
- package/framework/skills/laravel-best-practices/SKILL.md +56 -216
- package/framework/skills/laravel-best-practices/references/architecture.md +1 -1
- package/framework/skills/laravel-best-practices/references/checklist.md +139 -0
- package/framework/skills/laravel-best-practices/references/eloquent.md +4 -2
- package/framework/skills/laravel-best-practices/references/infer-conventions.md +97 -0
- package/framework/skills/laravel-best-practices/references/pest-testing.md +47 -18
- package/framework/skills/laravel-best-practices/references/security.md +1 -1
- package/framework/skills/laravel-best-practices/references/style.md +1 -1
- package/framework/skills/laravel-best-practices/references/tailwindcss.md +0 -1
- package/framework/styles/README.md +9 -4
- package/framework/styles/factory/DESIGN.md +360 -0
- package/framework/styles/factory/README.md +32 -0
- package/framework/styles/factory/assets/preview.jpg +0 -0
- package/framework/styles/huly/DESIGN.md +449 -0
- package/framework/styles/huly/README.md +32 -0
- package/framework/styles/huly/assets/preview.jpg +0 -0
- package/framework/styles/notion/DESIGN.md +423 -0
- package/framework/styles/notion/README.md +32 -0
- package/framework/styles/notion/assets/preview.jpg +0 -0
- package/package.json +1 -1
- package/src/catalog.js +7 -19
- package/framework/agents/backend-architect.md +0 -146
- package/framework/mcps/github-mcp/README.md +0 -51
- package/framework/mcps/github-mcp/capabilities.md +0 -83
- package/framework/mcps/github-mcp/configs/.env.example +0 -1
- package/framework/mcps/github-mcp/configs/opencode.json +0 -13
- package/framework/mcps/github-mcp/install.md +0 -60
- package/framework/mcps/github-mcp/troubleshooting.md +0 -79
- package/framework/mcps/gitlab-mcp/README.md +0 -53
- package/framework/mcps/gitlab-mcp/capabilities.md +0 -216
- package/framework/mcps/gitlab-mcp/configs/.env.example +0 -2
- package/framework/mcps/gitlab-mcp/configs/opencode.json +0 -13
- package/framework/mcps/gitlab-mcp/install.md +0 -99
- package/framework/mcps/gitlab-mcp/troubleshooting.md +0 -116
- package/framework/mcps/jira-mcp/README.md +0 -52
- package/framework/mcps/jira-mcp/capabilities.md +0 -79
- package/framework/mcps/jira-mcp/configs/.env.example +0 -2
- package/framework/mcps/jira-mcp/configs/opencode.json +0 -13
- package/framework/mcps/jira-mcp/install.md +0 -94
- package/framework/mcps/jira-mcp/troubleshooting.md +0 -113
- package/framework/mcps/notion-mcp/README.md +0 -57
- package/framework/mcps/notion-mcp/capabilities.md +0 -118
- package/framework/mcps/notion-mcp/configs/opencode.json +0 -9
- package/framework/mcps/notion-mcp/install.md +0 -70
- package/framework/mcps/notion-mcp/troubleshooting.md +0 -95
- package/framework/skills/brainstorming/SKILL.md +0 -159
- package/framework/skills/brainstorming/examples.md +0 -49
- package/framework/skills/brainstorming/scripts/frame-template.html +0 -213
- package/framework/skills/brainstorming/scripts/helper.js +0 -167
- package/framework/skills/brainstorming/scripts/server.cjs +0 -723
- package/framework/skills/brainstorming/scripts/start-server.sh +0 -209
- package/framework/skills/brainstorming/scripts/stop-server.sh +0 -120
- package/framework/skills/brainstorming/visual-companion.md +0 -291
- package/framework/skills/code-review/SKILL.md +0 -72
- package/framework/skills/code-review/examples.md +0 -31
- package/framework/skills/codenavi/SKILL.md +0 -306
- package/framework/skills/codenavi/examples.md +0 -33
- package/framework/skills/codenavi/references/coding-principles.md +0 -143
- package/framework/skills/codenavi/references/notebook-spec.md +0 -171
- package/framework/skills/create-adr/SKILL.md +0 -429
- package/framework/skills/create-adr/examples.md +0 -35
- package/framework/skills/design/SKILL.md +0 -399
- package/framework/skills/design/examples.md +0 -34
- package/framework/skills/gitlab-mcp/SKILL.md +0 -83
- package/framework/skills/gitlab-mcp/examples.md +0 -31
- package/framework/skills/gitlab-mcp/references/code-review.md +0 -110
- package/framework/skills/gitlab-mcp/references/issues.md +0 -141
- package/framework/skills/gitlab-mcp/references/merge-requests.md +0 -120
- package/framework/skills/gitlab-mcp/references/pipelines.md +0 -67
- package/framework/skills/gitlab-mcp/references/search.md +0 -17
- package/framework/skills/gitlab-mcp/references/webhooks.md +0 -32
- package/framework/skills/gitlab-mcp/references/work-items.md +0 -50
- package/framework/skills/great-interface/SKILL.md +0 -43
- package/framework/skills/great-interface/references/animations.md +0 -205
- package/framework/skills/great-interface/references/better-accessibility.md +0 -106
- package/framework/skills/great-interface/references/better-colors.md +0 -100
- package/framework/skills/great-interface/references/better-interface.md +0 -132
- package/framework/skills/great-interface/references/better-layout.md +0 -76
- package/framework/skills/great-interface/references/better-typography.md +0 -157
- package/framework/skills/great-interface/references/better-ui.md +0 -107
- package/framework/skills/great-interface/references/better-writing.md +0 -109
- package/framework/skills/great-interface/references/choosing-fonts.md +0 -64
- package/framework/skills/great-interface/references/color-formats.md +0 -90
- package/framework/skills/great-interface/references/color-usage.md +0 -118
- package/framework/skills/great-interface/references/contrast.md +0 -79
- package/framework/skills/great-interface/references/css-cheat-sheet.md +0 -65
- package/framework/skills/great-interface/references/details-and-accessibility.md +0 -119
- package/framework/skills/great-interface/references/enter-exit.md +0 -147
- package/framework/skills/great-interface/references/explain-interface.md +0 -126
- package/framework/skills/great-interface/references/find-the-effect.md +0 -94
- package/framework/skills/great-interface/references/focus-and-keyboard.md +0 -131
- package/framework/skills/great-interface/references/forms.md +0 -84
- package/framework/skills/great-interface/references/from-an-image.md +0 -55
- package/framework/skills/great-interface/references/grouping-and-alignment.md +0 -123
- package/framework/skills/great-interface/references/hit-areas.md +0 -94
- package/framework/skills/great-interface/references/icon-transitions.md +0 -102
- package/framework/skills/great-interface/references/icons.md +0 -110
- package/framework/skills/great-interface/references/interface-review.md +0 -148
- package/framework/skills/great-interface/references/motion-and-zoom.md +0 -79
- package/framework/skills/great-interface/references/no-browser.md +0 -73
- package/framework/skills/great-interface/references/palette-generation.md +0 -104
- package/framework/skills/great-interface/references/palette-structure.md +0 -76
- package/framework/skills/great-interface/references/performance.md +0 -88
- package/framework/skills/great-interface/references/picker.md +0 -76
- package/framework/skills/great-interface/references/read-the-system.md +0 -178
- package/framework/skills/great-interface/references/removed-signals.md +0 -38
- package/framework/skills/great-interface/references/review-format.md +0 -46
- package/framework/skills/great-interface/references/scope-resolution.md +0 -88
- package/framework/skills/great-interface/references/screen-readers.md +0 -101
- package/framework/skills/great-interface/references/semantics-and-aria.md +0 -84
- package/framework/skills/great-interface/references/spacing-and-adaptivity.md +0 -159
- package/framework/skills/great-interface/references/spacing-and-sizing.md +0 -121
- package/framework/skills/great-interface/references/surfaces.md +0 -219
- package/framework/skills/great-interface/references/token-naming.md +0 -97
- package/framework/skills/great-interface/references/variable-fonts-and-opentype.md +0 -105
- package/framework/skills/great-interface/references/variant.md +0 -104
- package/framework/skills/great-interface/references/wrapping-and-punctuation.md +0 -55
- package/framework/skills/jira-mcp/SKILL.md +0 -57
- package/framework/skills/jira-mcp/examples.md +0 -31
- package/framework/skills/jira-mcp/references/comments.md +0 -27
- package/framework/skills/jira-mcp/references/issues.md +0 -97
- package/framework/skills/jira-mcp/references/projects.md +0 -39
- package/framework/skills/learning-opportunities/SKILL.md +0 -140
- package/framework/skills/learning-opportunities/examples.md +0 -34
- package/framework/skills/learning-opportunities/references/PRINCIPLES.md +0 -42
- package/framework/skills/notion-mcp/SKILL.md +0 -57
- package/framework/skills/notion-mcp/examples.md +0 -31
- package/framework/skills/notion-mcp/references/comments.md +0 -112
- package/framework/skills/notion-mcp/references/databases.md +0 -193
- package/framework/skills/notion-mcp/references/pages.md +0 -235
- package/framework/skills/spec-driven-eval/SKILL.md +0 -341
- package/framework/skills/spec-driven-eval/examples.md +0 -35
- package/framework/skills/spec-driven-eval/references/quickstart.md +0 -118
- package/framework/skills/spec-driven-eval/references/reference.md +0 -295
- package/framework/skills/technical-design-doc-creator/README.md +0 -411
- package/framework/skills/technical-design-doc-creator/SKILL.md +0 -1484
- package/framework/skills/technical-design-doc-creator/examples.md +0 -35
- package/framework/skills/web-design-guidelines/SKILL.md +0 -65
- package/framework/skills/web-design-guidelines/examples.md +0 -32
- package/framework/skills/web-design-guidelines/references/guideline.md +0 -174
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
# Variable fonts and OpenType
|
|
2
|
-
|
|
3
|
-
What a font file can do beyond drawing letters and how to reach those abilities from CSS.
|
|
4
|
-
|
|
5
|
-
## Static vs variable
|
|
6
|
-
|
|
7
|
-
- **Static font:** one weight and one style per file. Regular, medium and bold is three files.
|
|
8
|
-
- **Variable font:** a whole range in one file. Any value in it works, such as `font-weight: 589`.
|
|
9
|
-
|
|
10
|
-
A variable font is not automatically better. At one or two weights, static files can be smaller. At several weights, optical sizes, or custom axes, a variable font usually wins.
|
|
11
|
-
|
|
12
|
-
## Load intended weights and styles
|
|
13
|
-
|
|
14
|
-
Use a weight or style the active family does not provide and the browser may synthesize it, so load the faces the design uses. `none` disables weight, style, small-cap, superscript and subscript synthesis together and can erase distinctions when the real face is unavailable. Verify the whole fallback stack and every emphasis state before setting it.
|
|
15
|
-
|
|
16
|
-
```css
|
|
17
|
-
.brand-wordmark {
|
|
18
|
-
/* Safe only after this isolated treatment is verified */
|
|
19
|
-
font-synthesis: none;
|
|
20
|
-
}
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
For body and interface text, keep synthesis enabled unless a verified font setup supplies every requested form. If only one mode is unwanted, use the specific longhand (`font-synthesis-weight`, `font-synthesis-style` and related properties) instead of the blanket shorthand.
|
|
24
|
-
|
|
25
|
-
## Axes
|
|
26
|
-
|
|
27
|
-
Variable-font controls, each with a four-letter tag. A font supports only the axes its designer included.
|
|
28
|
-
|
|
29
|
-
| Axis | Tag | Controls |
|
|
30
|
-
| --- | --- | --- |
|
|
31
|
-
| Weight | `wght` | Stroke thickness (like `font-weight`) |
|
|
32
|
-
| Optical size | `opsz` | Details and spacing tuned for the display size |
|
|
33
|
-
| Width | `wdth` | Glyph width |
|
|
34
|
-
| Slant | `slnt` | Slant angle |
|
|
35
|
-
| Custom | e.g. `GRAD` (Roboto Flex) | Whatever the designer built |
|
|
36
|
-
|
|
37
|
-
Inter's variable file exposes only `wght` and `opsz`.
|
|
38
|
-
|
|
39
|
-
Optical sizes predate variable fonts, and many families still ship them as separate files. Heldane Text is sturdier and more spaced for reading sizes, Heldane Display finer for large ones.
|
|
40
|
-
|
|
41
|
-
## Properties over axis tags
|
|
42
|
-
|
|
43
|
-
When a property exists, use it. `font-weight` keeps working when a non-variable fallback renders, where `font-variation-settings` silently does nothing. Save raw tags for custom axes with no property of their own:
|
|
44
|
-
|
|
45
|
-
```css
|
|
46
|
-
/* Good: common axes use the properties */
|
|
47
|
-
.heading {
|
|
48
|
-
font-weight: 650;
|
|
49
|
-
font-optical-sizing: auto;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/* Good: custom axis with no property of its own */
|
|
53
|
-
.heading-grade {
|
|
54
|
-
font-variation-settings: "GRAD" 80;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/* Bad: weight via raw tag breaks on fallback fonts */
|
|
58
|
-
.heading {
|
|
59
|
-
font-variation-settings: "wght" 650;
|
|
60
|
-
}
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## OpenType features
|
|
64
|
-
|
|
65
|
-
OpenType is the standard behind almost every modern font. Features are extra built-in options and, unlike axes, work the same on static and variable fonts. A font ships only the features its designer included.
|
|
66
|
-
|
|
67
|
-
| Tag | Feature |
|
|
68
|
-
| --- | --- |
|
|
69
|
-
| `tnum` | Tabular numbers: every digit the same width |
|
|
70
|
-
| `zero` | Slashed zero: `0` distinct from `O` |
|
|
71
|
-
| `liga` | Ligatures: joins pairs like "fi" into one shape |
|
|
72
|
-
| `ss01`–`ss20` | Stylistic sets (numbered slots) |
|
|
73
|
-
| `cv01`–`cv99` | Character variants (numbered slots) |
|
|
74
|
-
|
|
75
|
-
Same rule as axes. Prefer the `font-variant-*` properties and reserve `font-feature-settings` for tags with no property:
|
|
76
|
-
|
|
77
|
-
```css
|
|
78
|
-
/* Good: common features use the properties */
|
|
79
|
-
.price {
|
|
80
|
-
font-variant-numeric: tabular-nums;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/* Good: slashed zero via the property too */
|
|
84
|
-
.id {
|
|
85
|
-
font-variant-numeric: slashed-zero;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/* Good: niche feature with no property of its own */
|
|
89
|
-
.logo {
|
|
90
|
-
font-feature-settings: "ss01" 1;
|
|
91
|
-
}
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
Tabular numbers matter for changing values. Without them each digit has a different width and the layout shifts as values update.
|
|
95
|
-
|
|
96
|
-
## Small caps, superscripts, subscripts
|
|
97
|
-
|
|
98
|
-
- **Small capitals:** uppercase letters drawn at a smaller size. Enable real ones with `font-variant-caps`.
|
|
99
|
-
- **Superscripts** sit above the normal line, the 2 in x², and **subscripts** below it, as in H₂O. Enable proper glyphs with `font-variant-position`.
|
|
100
|
-
|
|
101
|
-
Both require the font to include the glyphs.
|
|
102
|
-
|
|
103
|
-
## Stylistic sets and character variants
|
|
104
|
-
|
|
105
|
-
`ss01` = stylistic set, slot 01. `cv11` = character variant, slot 11. What each slot does differs font to font, which is why they are numbered, not named. Check the font's docs. In Inter, `ss01` switches to open digits and `cv11` swaps in a single-story `a`.
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
# Variants
|
|
2
|
-
|
|
3
|
-
This skill takes one described piece of UI and builds three versions that differ on purpose. They go behind a picker in the real page, so you can flip between them and choose.
|
|
4
|
-
|
|
5
|
-
Every other skill here judges. This one produces candidates and hands the decision back. Reviewing existing UI is `interface-review` and `better-interface`, and it does not pick the winner.
|
|
6
|
-
|
|
7
|
-
## Different answers, not different tints
|
|
8
|
-
|
|
9
|
-
Three variants that differ in accent color teach nothing. You flip between them, see no real choice and the run is wasted.
|
|
10
|
-
|
|
11
|
-
So each variant is a different answer to the same brief, on an axis this collection owns:
|
|
12
|
-
|
|
13
|
-
| Axis | Owner | What varies |
|
|
14
|
-
| --- | --- | --- |
|
|
15
|
-
| Structure | `better-layout` | Grouping, order, column count, what collapses |
|
|
16
|
-
| Density | `better-layout` | Spacing scale, hit areas, how much fits |
|
|
17
|
-
| Emphasis | `better-colors` | Where filled color goes, what recedes |
|
|
18
|
-
| Type | `better-typography` | Scale steps, weight contrast, measure |
|
|
19
|
-
| Voice | `better-writing` | Labels, tone, how much copy |
|
|
20
|
-
|
|
21
|
-
Pick **one primary axis** and give each variant a different position on it. Secondary choices follow from it rather than varying on their own. A dense variant may need a smaller type step, and that is coherence, not a second axis.
|
|
22
|
-
|
|
23
|
-
Varying every axis at once produces three unattributable results. You learn which you liked, not what made it work, so the next piece starts from nothing.
|
|
24
|
-
|
|
25
|
-
## The floor every variant clears
|
|
26
|
-
|
|
27
|
-
A variant that wins on looks and fails an escalation trigger is not a candidate. It is a bug with a nice surface.
|
|
28
|
-
|
|
29
|
-
Before a variant enters the picker it clears `better-interface`'s escalation triggers. Every control has an accessible name, keyboard reaches everything a pointer does, focus is visible, nothing clips at 320px and no meaning rides on color alone.
|
|
30
|
-
|
|
31
|
-
That floor is identical across variants. It is not an axis and never trades against one. Where a direction can only work by breaking it, say so and drop the direction.
|
|
32
|
-
|
|
33
|
-
## 1. Scope one piece
|
|
34
|
-
|
|
35
|
-
One piece of UI per run. "The dashboard" is not a piece; the metric card is. Where the brief spans several, name the one the others hang off, say why and offer the rest as later runs.
|
|
36
|
-
|
|
37
|
-
Restate the brief in one sentence: what the thing is, where it renders, what it has to do.
|
|
38
|
-
|
|
39
|
-
## 2. Learn the ground
|
|
40
|
-
|
|
41
|
-
Variants have to look like they could ship tomorrow, so read what they stand on:
|
|
42
|
-
|
|
43
|
-
- The styling system, the component library and any motion library.
|
|
44
|
-
- The tokens: color, spacing, radius, type scale, easing.
|
|
45
|
-
- The product's density and voice. A dense professional tool bounds how far the boldest variant may go.
|
|
46
|
-
- Where the piece renders: against what background, beside which neighbours, at which widths.
|
|
47
|
-
|
|
48
|
-
With no project to read, use neutral grays, one accent and the system font stack, and say that is what you did.
|
|
49
|
-
|
|
50
|
-
## 3. Name the axis before writing code
|
|
51
|
-
|
|
52
|
-
Default to three variants. Go to five only when asked, or when the space is genuinely wide. Past five nobody compares, they scroll.
|
|
53
|
-
|
|
54
|
-
Write the set down first, a name and an axis position each. Names say what the direction is, so `Quiet`, `Editorial`, `Dense`, never `Option A`.
|
|
55
|
-
|
|
56
|
-
This step is done when no two variants share a position and you can state each one's axis in a phrase.
|
|
57
|
-
|
|
58
|
-
## 4. Build it into the real page
|
|
59
|
-
|
|
60
|
-
A variant looks fine in isolation, which is why isolation is the wrong place to judge it. Host the variants on the page that will actually contain the piece, with the real chrome, the real neighbours and realistic data.
|
|
61
|
-
|
|
62
|
-
Select with a URL search param (`?variant=quiet`), so every variant is a link you can send someone. A floating control sets it; [picker.md]() holds the spec.
|
|
63
|
-
|
|
64
|
-
Render one variant at a time, full size. Thumbnails distort spacing and scale, and spacing is usually the thing you are choosing between.
|
|
65
|
-
|
|
66
|
-
Where no page can host it, build one self-contained HTML file and keep the same picker.
|
|
67
|
-
|
|
68
|
-
Give every variant real content: product-shaped copy, plausible names and the number of items the page will really carry. Lorem ipsum and three rows make every structure look good.
|
|
69
|
-
|
|
70
|
-
## 5. Present the tradeoffs and stop
|
|
71
|
-
|
|
72
|
-
Flip through every variant yourself first. Each one renders, each interaction responds, the console is clean.
|
|
73
|
-
|
|
74
|
-
Then hand the decision over:
|
|
75
|
-
|
|
76
|
-
| Variant | Axis position | Right when | Costs |
|
|
77
|
-
| --- | --- | --- | --- |
|
|
78
|
-
| Quiet | Lowest visual weight | The page is used daily | Least memorable |
|
|
79
|
-
| Editorial | Largest type, most space | The moment deserves weight | Eats vertical space |
|
|
80
|
-
|
|
81
|
-
Say where the picker is running, which key flips it and which width you judged at. The answer can change between 375px and 1440px.
|
|
82
|
-
|
|
83
|
-
Never mark a favourite in the table. Asked directly, answer from how often the piece is seen and from the product's personality, not from which one you enjoyed building.
|
|
84
|
-
|
|
85
|
-
## 6. Promote one, delete the rest
|
|
86
|
-
|
|
87
|
-
On a choice: build that variant properly where it belongs, following the project's own conventions, then delete the others and the harness.
|
|
88
|
-
|
|
89
|
-
Asked for another round instead, keep the harness and run step 3 again, taking new positions around the direction you leaned toward.
|
|
90
|
-
|
|
91
|
-
Until promotion, the harness never imports from production and production never imports from the harness.
|
|
92
|
-
|
|
93
|
-
## Before you finish
|
|
94
|
-
|
|
95
|
-
| Mistake | Fix |
|
|
96
|
-
| --- | --- |
|
|
97
|
-
| Variants differ only in accent color or copy | Move one to a different position on the primary axis, or cut it |
|
|
98
|
-
| Every axis varies at once | Vary one; let the rest follow from it |
|
|
99
|
-
| Judged on a blank route | Host them on the page that will contain the piece |
|
|
100
|
-
| Lorem ipsum, three rows, "Jane Doe" | Real copy and the item count the page will really carry |
|
|
101
|
-
| The boldest variant skips keyboard or focus | Clear the floor or drop the direction |
|
|
102
|
-
| A favourite marked in the table | State each variant's cost and let the user choose |
|
|
103
|
-
| Picker restyled with the project's tokens | Keep it visibly outside the design system |
|
|
104
|
-
| Harness left behind after promotion | Delete it unless asked to keep it |
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# Wrapping and punctuation
|
|
2
|
-
|
|
3
|
-
Where lines start, where they end, where they break and which characters they use.
|
|
4
|
-
|
|
5
|
-
## Measure (line length)
|
|
6
|
-
|
|
7
|
-
Long lines make it harder for the eye to find the start of the next. For long-form text, aim for 60–75 characters per line.
|
|
8
|
-
|
|
9
|
-
Any unit works. `65ch` measures characters directly, one `ch` being the width of the `0` in the current font, and a pixel or rem cap is just as good. At a `16px` body size the 60–75 character range lands roughly between `560px` and `680px` depending on the font, so Tailwind's `max-w-xl` (`576px`) and `max-w-2xl` (`672px`) both fit. What matters is that a cap exists and the line length sits in range. Recheck it if the body font size changes.
|
|
10
|
-
|
|
11
|
-
## Alignment
|
|
12
|
-
|
|
13
|
-
`text-align` controls where each line starts and ends. `justify` stretches spaces until both edges line up, which works in specific editorial layouts and nowhere else in an interface.
|
|
14
|
-
|
|
15
|
-
## Wrapping
|
|
16
|
-
|
|
17
|
-
| Property | Use |
|
|
18
|
-
| --- | --- |
|
|
19
|
-
| `text-wrap: balance` | Distributes text evenly across multiple lines |
|
|
20
|
-
| `text-wrap: pretty` | Avoids leaving a single short word on the final line |
|
|
21
|
-
| `overflow-wrap: break-word` | Lets long words, links and IDs break before escaping the container |
|
|
22
|
-
| `white-space: nowrap` | Keeps labels and badges on one line where a break looks broken |
|
|
23
|
-
|
|
24
|
-
Use `balance` on headings and `pretty` on descriptions. Skip both in long-form text, because browsers ignore `balance` past a few lines anyway, and evening out a whole paragraph wastes space and makes it harder to read.
|
|
25
|
-
|
|
26
|
-
## Truncation
|
|
27
|
-
|
|
28
|
-
- Single line: `text-overflow: ellipsis`, which needs `overflow: hidden` and `white-space: nowrap`.
|
|
29
|
-
- Multiple lines: `line-clamp` allows any number of lines before the ellipsis.
|
|
30
|
-
|
|
31
|
-
Truncation hides content. Where the missing text matters, make the full value available in a tooltip or an expanded view.
|
|
32
|
-
|
|
33
|
-
## Case
|
|
34
|
-
|
|
35
|
-
`text-transform` changes how case appears without changing the underlying text. Write copy naturally and control presentation with CSS, so a redesign never means rewriting copy.
|
|
36
|
-
|
|
37
|
-
## Smart punctuation
|
|
38
|
-
|
|
39
|
-
Keyboard characters are not always the best characters:
|
|
40
|
-
|
|
41
|
-
| Instead of | Use |
|
|
42
|
-
| --- | --- |
|
|
43
|
-
| Straight quotes `"..."` | Curly quotes that curve around the text (keep straight quotes in code) |
|
|
44
|
-
| Hyphen in ranges | En dash: `2010–2020` |
|
|
45
|
-
| Two hyphens for an aside | Em dash character |
|
|
46
|
-
| Three periods `...` | The single ellipsis character `…` |
|
|
47
|
-
| Regular space in `16 px` | ` ` so the value never breaks apart |
|
|
48
|
-
| Uncontrolled word breaks | `­` to mark where a word may break |
|
|
49
|
-
|
|
50
|
-
## Internationalization
|
|
51
|
-
|
|
52
|
-
Two refinements for mixed-direction text:
|
|
53
|
-
|
|
54
|
-
- **Long paragraphs align by their own language.** A one- or two-line snippet follows the surrounding UI's direction. A paragraph of three or more lines aligns to its own script instead, so an English paragraph stays start-aligned LTR even inside an RTL interface. `text-align: start` with the correct `lang`/`dir` on the paragraph element handles this.
|
|
55
|
-
- **Never reverse digits.** Numbers keep their order in every direction, so a phone number or "541" reads identically in RTL. Browsers handle this through the Unicode bidi algorithm. Never fight it with manual reordering, and wrap mixed number and text values in `<bdi>` where adjacent RTL text disturbs them.
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: jira-mcp
|
|
3
|
-
description: Use this skill when working with the Jira MCP server tools for issue management, project management, comments, search, and related Jira workflows.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# jira-mcp
|
|
7
|
-
|
|
8
|
-
Jira MCP server providing 12 tools for interacting with your self-hosted Jira instance via the REST API v2.
|
|
9
|
-
|
|
10
|
-
## Tools
|
|
11
|
-
|
|
12
|
-
| Category | Tools | Default |
|
|
13
|
-
|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------|---------|
|
|
14
|
-
| Issues (9 tools) | `create_issue`, `get_issue`, `update_issue`, `delete_issue`, `search_issues`, `assign_issue`, `get_issue_types`, `add_comment`, `get_comments` | yes |
|
|
15
|
-
| Projects (2 tools) | `get_projects`, `get_project` | yes |
|
|
16
|
-
| Users (1 tool) | `get_current_user` | yes |
|
|
17
|
-
|
|
18
|
-
All tools are available by default — there are no opt-in toolsets for this server.
|
|
19
|
-
|
|
20
|
-
## Key Workflows
|
|
21
|
-
|
|
22
|
-
### Issue Lifecycle
|
|
23
|
-
|
|
24
|
-
`search_issues` → `get_issue` → `update_issue` / `assign_issue`
|
|
25
|
-
|
|
26
|
-
### Create Issue (see references/issues.md)
|
|
27
|
-
|
|
28
|
-
`get_project` → `get_issue_types` → `create_issue`
|
|
29
|
-
|
|
30
|
-
### Comment Thread (see references/comments.md)
|
|
31
|
-
|
|
32
|
-
`add_comment` → `get_comments`
|
|
33
|
-
|
|
34
|
-
### Project Discovery (see references/projects.md)
|
|
35
|
-
|
|
36
|
-
`get_projects` → `get_project` → `get_issue_types`
|
|
37
|
-
|
|
38
|
-
## Parameter Hints
|
|
39
|
-
|
|
40
|
-
- **projectKey**: uppercase project key (e.g., `PROJ`, `SCRUM`, `SUP`). Use `get_projects` to discover available keys.
|
|
41
|
-
- **issueKey**: format `PROJECT-123` (e.g., `CHI-42`, `DEV-1337`)
|
|
42
|
-
- **issueType**: varies by project — use `get_issue_types` to list valid types before creating. Common types: `Bug`, `Task`, `Story`, `Epic`, `Sub-task`
|
|
43
|
-
- **search_issues**: uses JQL (Jira Query Language). Complex values (spaces, special chars) must be quoted: `status = "In Progress"`, `project = PROJ`
|
|
44
|
-
- **Jql**: provide a raw JQL query string (not single-quoted — use double quotes inside for string values)
|
|
45
|
-
- **maxResults**: `search_issues` defaults to 50. Increase for larger result sets.
|
|
46
|
-
- **assignee**: Jira username (not display name or email). Use `get_current_user` to find your own username.
|
|
47
|
-
- **Custom fields**: Pass custom field values directly as parameters (e.g., `customfield_10211: "Sprint 1"`). Discover field IDs via Jira REST API.
|
|
48
|
-
|
|
49
|
-
## Destructive Tools
|
|
50
|
-
|
|
51
|
-
`delete_issue` — permanently deletes an issue. Cannot be undone.
|
|
52
|
-
|
|
53
|
-
## Advanced
|
|
54
|
-
|
|
55
|
-
- **JQL Search**: full Jira Query Language support — combine operators (`AND`, `OR`, `NOT`), functions (`currentUser()`, `now()`, `startOfDay()`), and ordering (`ORDER BY created DESC`)
|
|
56
|
-
- **Status transitions**: use `update_issue` with `status` to transition issues (e.g., `"In Progress"`, `"Done"`, `"Closed"`). Valid statuses depend on the project's workflow configuration.
|
|
57
|
-
- **Custom fields**: map Jira custom field IDs to values via the `customFields` object or direct parameter names
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# Jira MCP Examples
|
|
2
|
-
|
|
3
|
-
## Example 1: Create and Assign a Bug
|
|
4
|
-
|
|
5
|
-
A production bug is discovered and needs to be tracked. Good agent behavior:
|
|
6
|
-
|
|
7
|
-
- Use `jira_get_projects` to find the correct project key.
|
|
8
|
-
- Use `jira_get_issue_types` to confirm valid types for the project.
|
|
9
|
-
- Use `jira_create_issue` with project key, summary, description, priority, and labels.
|
|
10
|
-
- Use `jira_assign_issue` to assign the bug to the responsible developer.
|
|
11
|
-
- Use `jira_add_comment` to include reproduction steps and environment details.
|
|
12
|
-
|
|
13
|
-
## Example 2: Find and Update Issues
|
|
14
|
-
|
|
15
|
-
Search for all high-priority unresolved issues assigned to the user. Good agent behavior:
|
|
16
|
-
|
|
17
|
-
- Use `jira_search_issues` with a JQL query like `assignee = currentUser() AND priority = High AND status != Done`.
|
|
18
|
-
- Use `jira_get_issue` on each result to review full details.
|
|
19
|
-
- Use `jira_update_issue` to transition the status to "In Progress".
|
|
20
|
-
- Use `jira_add_comment` to log what work is being started.
|
|
21
|
-
- Summarize the findings in a structured report grouped by status.
|
|
22
|
-
|
|
23
|
-
## Example 3: Close a Sprint Task
|
|
24
|
-
|
|
25
|
-
A task is complete and ready to close. Good agent behavior:
|
|
26
|
-
|
|
27
|
-
- Use `jira_get_current_user` to verify authentication is working.
|
|
28
|
-
- Use `jira_search_issues` to find the task by key or summary.
|
|
29
|
-
- Use `jira_get_issue` to review current status, assignee, and description.
|
|
30
|
-
- Use `jira_update_issue` to set status to "Done" and add a resolution note.
|
|
31
|
-
- Use `jira_add_comment` to document what was completed and any follow-ups.
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# Comments
|
|
2
|
-
|
|
3
|
-
## Add Comment
|
|
4
|
-
|
|
5
|
-
```
|
|
6
|
-
add_comment
|
|
7
|
-
issueKey: "PROJ-123"
|
|
8
|
-
comment: "Fixed in latest deployment (v2.4.1)"
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
Adds a text comment to a Jira issue. No support for rich text or attachments via this server.
|
|
12
|
-
|
|
13
|
-
## Read Comments
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
get_comments
|
|
17
|
-
issueKey: "PROJ-123"
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
Returns all comments on an issue, ordered by creation date (ascending). Each comment includes `body`, `author`, `created`, and `updated` timestamps.
|
|
21
|
-
|
|
22
|
-
## Limitations
|
|
23
|
-
|
|
24
|
-
- **No edit/update** — the current Jira MCP server does not provide an edit-comment tool
|
|
25
|
-
- **No delete** — comments cannot be removed via this server
|
|
26
|
-
- **No threading/replies** — comments are flat (Jira Cloud's threading is not exposed via this API)
|
|
27
|
-
- **No rich text** — plain text only; HTML/markdown in bodies may be rendered by Jira's API
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
# Issue Management
|
|
2
|
-
|
|
3
|
-
## Create
|
|
4
|
-
|
|
5
|
-
```
|
|
6
|
-
create_issue
|
|
7
|
-
projectKey: "PROJ"
|
|
8
|
-
summary: "Login page returns 500"
|
|
9
|
-
issueType: "Bug"
|
|
10
|
-
description: "Steps to reproduce..."
|
|
11
|
-
priority: "High"
|
|
12
|
-
labels: ["bug", "critical"]
|
|
13
|
-
assignee: "john.doe"
|
|
14
|
-
components: ["frontend"]
|
|
15
|
-
customfield_10211: "Sprint 1" # optional custom fields
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
Always verify project and issue types first:
|
|
19
|
-
|
|
20
|
-
1. `get_projects` → find project key
|
|
21
|
-
2. `get_issue_types` with `projectKey: "PROJ"` → find valid types
|
|
22
|
-
3. `create_issue` with valid `projectKey` and `issueType`
|
|
23
|
-
|
|
24
|
-
## Read
|
|
25
|
-
|
|
26
|
-
```
|
|
27
|
-
get_issue
|
|
28
|
-
issueKey: "PROJ-123"
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
Returns full issue details: summary, description, status, priority, assignee, reporter, labels, components, custom fields, timestamps.
|
|
32
|
-
|
|
33
|
-
## Search (JQL)
|
|
34
|
-
|
|
35
|
-
```
|
|
36
|
-
search_issues
|
|
37
|
-
jql: "project = PROJ AND status = Open"
|
|
38
|
-
maxResults: 50
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### Common JQL Patterns
|
|
42
|
-
|
|
43
|
-
| Purpose | JQL |
|
|
44
|
-
| ------- | --- |
|
|
45
|
-
| My open issues | `assignee = currentUser() AND status != Done` |
|
|
46
|
-
| High priority recent | `priority = High AND created >= -7d` |
|
|
47
|
-
| By status | `status IN (Open, "In Progress", "Reopened")` |
|
|
48
|
-
| By label | `labels = "bug" OR labels = "critical"` |
|
|
49
|
-
| By reporter | `reporter = john.doe AND status NOT IN (Closed, Done)` |
|
|
50
|
-
| Unassigned | `assignee IS NULL AND status NOT IN (Closed, Done, Resolved)` |
|
|
51
|
-
| Sprints (custom field) | `cf[10211] = "Sprint 1"` |
|
|
52
|
-
| Date range | `created >= "2025-01-01" AND created <= "2025-06-01"` |
|
|
53
|
-
| Order by | `project = PROJ ORDER BY priority DESC, created ASC` |
|
|
54
|
-
| Text search | `text ~ "error message"` |
|
|
55
|
-
| Across all projects | `status = Open AND assignee = currentUser()` |
|
|
56
|
-
|
|
57
|
-
`search_issues` defaults to showing issues across **all projects** the user has access to. Scope to a specific project with `project = KEY`.
|
|
58
|
-
|
|
59
|
-
## Update
|
|
60
|
-
|
|
61
|
-
```
|
|
62
|
-
update_issue
|
|
63
|
-
issueKey: "PROJ-123"
|
|
64
|
-
summary: "Updated title"
|
|
65
|
-
description: "New description"
|
|
66
|
-
priority: "Low"
|
|
67
|
-
assignee: "jane.doe"
|
|
68
|
-
labels: ["bug", "resolved"]
|
|
69
|
-
status: "In Progress" # transition to new status
|
|
70
|
-
customfield_10211: "Sprint 2"
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
### Status Transitions
|
|
74
|
-
|
|
75
|
-
- Issue workflow statuses depend on the project's configuration
|
|
76
|
-
- Common transitions: `Open → "In Progress" → "In Review" → "Done" | "Closed"`
|
|
77
|
-
- Use `get_issue` to check current status and `update_issue` with `status` to transition
|
|
78
|
-
- Invalid transitions return an error — check the project's available workflow transitions in Jira
|
|
79
|
-
|
|
80
|
-
## Assign
|
|
81
|
-
|
|
82
|
-
```
|
|
83
|
-
assign_issue
|
|
84
|
-
issueKey: "PROJ-123"
|
|
85
|
-
assignee: "john.doe"
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
`assign_issue` is a dedicated tool. You can also assign via `update_issue` with `assignee`.
|
|
89
|
-
|
|
90
|
-
## Delete
|
|
91
|
-
|
|
92
|
-
```
|
|
93
|
-
delete_issue
|
|
94
|
-
issueKey: "PROJ-123"
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
**Warning**: `delete_issue` is destructive — permanently deletes the issue. Cannot be undone.
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
# Project Management
|
|
2
|
-
|
|
3
|
-
## List Projects
|
|
4
|
-
|
|
5
|
-
```
|
|
6
|
-
get_projects
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
Returns all Jira projects the authenticated user can access. Each entry includes `key`, `name`, `projectTypeKey`, `lead`, and `avatarUrls`.
|
|
10
|
-
|
|
11
|
-
Use this to discover available `projectKey` values for issue operations.
|
|
12
|
-
|
|
13
|
-
## Project Details
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
get_project
|
|
17
|
-
projectKey: "PROJ"
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
Returns detailed information: name, key, description, lead, components, versions (releases), project type, and category.
|
|
21
|
-
|
|
22
|
-
Verify a project exists and inspect its components/versions before creating issues:
|
|
23
|
-
|
|
24
|
-
1. `get_project` → check components, versions
|
|
25
|
-
2. `get_issue_types` → check valid issue types
|
|
26
|
-
3. `create_issue` with verified data
|
|
27
|
-
|
|
28
|
-
## Issue Types
|
|
29
|
-
|
|
30
|
-
```
|
|
31
|
-
get_issue_types
|
|
32
|
-
projectKey: "PROJ"
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
Returns available issue types for a project. Each type includes `name`, `id`, `description`, `iconUrl`, and `subtask` flag.
|
|
36
|
-
|
|
37
|
-
Common types across most projects: `Bug`, `Task`, `Story`, `Epic`, `Sub-task`, `Improvement`, `New Feature`.
|
|
38
|
-
|
|
39
|
-
Always call this **before** creating an issue to ensure the `issueType` value is valid for the target project.
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: learning-opportunities
|
|
3
|
-
description: Facilitates deliberate skill development during AI-assisted coding. Offers interactive learning exercises after architectural work (new files, schema changes, refactors). Use when completing features, making design decisions, or when user asks to understand code better. Triggers on "learning exercise", "help me understand", "teach me", "why does this work", or after creating new files/modules. Do NOT use for urgent debugging, quick fixes, or when user says "just ship it".
|
|
4
|
-
license: CC-BY-4.0
|
|
5
|
-
metadata:
|
|
6
|
-
original_author: Chris Hicks
|
|
7
|
-
modified_by: Felipe Rodrigues - github.com/felipfr
|
|
8
|
-
source: https://www.fightforthehuman.com
|
|
9
|
-
version: 1.1.0
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# Learning Opportunities
|
|
13
|
-
|
|
14
|
-
Facilitate deliberate skill development during AI-assisted coding sessions. Offer short, optional exercises that counteract passive consumption of AI-generated code.
|
|
15
|
-
|
|
16
|
-
When adapting techniques or making judgment calls about learning approaches, consult `references/PRINCIPLES.md` for the underlying learning science.
|
|
17
|
-
|
|
18
|
-
## When to offer exercises
|
|
19
|
-
|
|
20
|
-
Offer an optional 10-15 minute exercise after:
|
|
21
|
-
|
|
22
|
-
- Creating new files or modules
|
|
23
|
-
- Database schema changes
|
|
24
|
-
- Architectural decisions or refactors
|
|
25
|
-
- Implementing unfamiliar patterns
|
|
26
|
-
- Any work where the user asked "why" questions during development
|
|
27
|
-
|
|
28
|
-
Always ask before starting: "Would you like to do a quick learning exercise on [topic]? About 10-15 minutes."
|
|
29
|
-
|
|
30
|
-
## When NOT to offer
|
|
31
|
-
|
|
32
|
-
- User declined an exercise this session
|
|
33
|
-
- User already completed 2 exercises this session
|
|
34
|
-
- User signals urgency ("fix this quick", "just ship it", "deploy now")
|
|
35
|
-
- Pure debugging/hotfix context
|
|
36
|
-
|
|
37
|
-
Keep offers to one short sentence. Do not repeat or insist.
|
|
38
|
-
|
|
39
|
-
## Core principle: Pause for input
|
|
40
|
-
|
|
41
|
-
This is the most important rule. After posing a question:
|
|
42
|
-
|
|
43
|
-
1. **Stop generating immediately.** Do not continue after the question mark.
|
|
44
|
-
2. Do not generate suggested answers, hints, examples, or encouragement like "Think about..." or "Consider..."
|
|
45
|
-
3. Wait for the user's actual response before continuing.
|
|
46
|
-
|
|
47
|
-
Allowed after the question:
|
|
48
|
-
|
|
49
|
-
- "(Take your best guess — wrong predictions are useful data.)"
|
|
50
|
-
- "(Or we can skip this one.)"
|
|
51
|
-
|
|
52
|
-
After their response:
|
|
53
|
-
|
|
54
|
-
- If correct: confirm and deepen ("Exactly. And what would change if [variation]?")
|
|
55
|
-
- If wrong: **be direct** about what's incorrect, then explore the gap — this is high-value learning
|
|
56
|
-
|
|
57
|
-
## Exercise types
|
|
58
|
-
|
|
59
|
-
### 1. Predict then observe
|
|
60
|
-
|
|
61
|
-
Ask what they predict will happen in a specific scenario before revealing the answer.
|
|
62
|
-
|
|
63
|
-
```
|
|
64
|
-
Example:
|
|
65
|
-
User just created auth middleware.
|
|
66
|
-
|
|
67
|
-
Agent: "Would you like a quick learning exercise on middleware patterns?"
|
|
68
|
-
User: "sure"
|
|
69
|
-
Agent: "What do you think happens when a request hits your middleware with an expired token?
|
|
70
|
-
|
|
71
|
-
(Take your best guess — wrong predictions are useful data.)"
|
|
72
|
-
|
|
73
|
-
[STOP — wait for response]
|
|
74
|
-
|
|
75
|
-
After response:
|
|
76
|
-
Agent: "Actually [correct behavior]. The key difference is [explanation].
|
|
77
|
-
What surprised you about that?"
|
|
78
|
-
|
|
79
|
-
[STOP — wait for response]
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### 2. Generate then compare
|
|
83
|
-
|
|
84
|
-
Ask them to sketch an approach before showing the actual implementation.
|
|
85
|
-
|
|
86
|
-
```
|
|
87
|
-
Example:
|
|
88
|
-
Agent: "Before I show you — how would you structure the error handling for this API endpoint?"
|
|
89
|
-
|
|
90
|
-
[STOP — wait for response]
|
|
91
|
-
|
|
92
|
-
After response:
|
|
93
|
-
Agent: "Here's what we went with: [implementation].
|
|
94
|
-
What's similar to your approach? What's different, and why do you think we chose this direction?"
|
|
95
|
-
|
|
96
|
-
[STOP — wait for response]
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### 3. Teach it back
|
|
100
|
-
|
|
101
|
-
Ask them to explain a component as if to a new team member.
|
|
102
|
-
|
|
103
|
-
```
|
|
104
|
-
Example:
|
|
105
|
-
Agent: "Explain how the caching layer we just built works, as if I'm a new developer joining the project."
|
|
106
|
-
|
|
107
|
-
[STOP — wait for response]
|
|
108
|
-
|
|
109
|
-
After response:
|
|
110
|
-
Agent: "You nailed [specific part]. One thing to refine: [specific gap]."
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
## Hands-on code exploration
|
|
114
|
-
|
|
115
|
-
Prefer directing users to files over showing code snippets. Having learners locate code themselves builds codebase familiarity.
|
|
116
|
-
|
|
117
|
-
**Adjust guidance based on demonstrated familiarity:**
|
|
118
|
-
|
|
119
|
-
- Early: "Open `src/middleware/auth.ts`, around line 45. What does `validateToken` return?"
|
|
120
|
-
- Later: "Find where we handle token refresh."
|
|
121
|
-
- Eventually: "Where would you look to change how session expiry works?"
|
|
122
|
-
|
|
123
|
-
After they locate code, prompt self-explanation:
|
|
124
|
-
|
|
125
|
-
"You found it. Before I say anything — what do you think this line does?"
|
|
126
|
-
|
|
127
|
-
## Techniques to weave in naturally
|
|
128
|
-
|
|
129
|
-
- **"Why" questions:** "Why did we use a Map here instead of an object?"
|
|
130
|
-
- **Transfer prompts:** "This is the strategy pattern. Where else in this codebase might it apply?"
|
|
131
|
-
- **Varied context:** "We used this for auth — how would you apply it to API rate limiting?"
|
|
132
|
-
- **Error analysis:** "Here's a bug someone might introduce — what would go wrong and why?"
|
|
133
|
-
|
|
134
|
-
## Anti-patterns to avoid
|
|
135
|
-
|
|
136
|
-
- Dumping multiple questions at once
|
|
137
|
-
- Softening wrong answers into ambiguity ("well, that's partially right...")
|
|
138
|
-
- Offering exercises more than twice per session
|
|
139
|
-
- Making exercises feel like tests rather than exploration
|
|
140
|
-
- Continuing to generate after posing a question
|