write-skills 0.0.0-stage → 0.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/LICENSE +21 -0
- package/README.md +58 -2
- package/THIRD_PARTY_NOTICES.md +24 -0
- package/docs/BLOCKS.md +36 -0
- package/docs/EVALS.md +32 -0
- package/docs/RULES.md +236 -0
- package/package.json +24 -4
- package/shared/ste.md +82 -0
- package/skills/write-comments/SKILL.md +51 -0
- package/skills/write-comments/agents/openai.yaml +2 -0
- package/skills/write-comments/evals/evals.json +29 -0
- package/skills/write-comments/references/ste.md +82 -0
- package/skills/write-commit/SKILL.md +45 -0
- package/skills/write-commit/agents/openai.yaml +2 -0
- package/skills/write-commit/evals/evals.json +46 -0
- package/skills/write-commit/references/ste.md +82 -0
- package/skills/write-compact/SKILL.md +70 -0
- package/skills/write-compact/agents/openai.yaml +2 -0
- package/skills/write-compact/evals/evals.json +40 -0
- package/skills/write-compact/references/ste.md +82 -0
- package/skills/write-core/SKILL.md +119 -0
- package/skills/write-core/agents/openai.yaml +2 -0
- package/skills/write-core/evals/evals.json +40 -0
- package/skills/write-core/references/ai-patterns.md +43 -0
- package/skills/write-core/references/profile.md +20 -0
- package/skills/write-core/references/ste.md +82 -0
- package/skills/write-docs/SKILL.md +90 -0
- package/skills/write-docs/agents/openai.yaml +2 -0
- package/skills/write-docs/evals/evals.json +42 -0
- package/skills/write-docs/references/agent-docs.md +77 -0
- package/skills/write-docs/references/docs-standard.md +103 -0
- package/skills/write-docs/references/ste.md +82 -0
- package/skills/write-jira/SKILL.md +83 -0
- package/skills/write-jira/agents/openai.yaml +2 -0
- package/skills/write-jira/evals/evals.json +44 -0
- package/skills/write-jira/references/ste.md +82 -0
- package/skills/write-longform/SKILL.md +74 -0
- package/skills/write-longform/agents/openai.yaml +2 -0
- package/skills/write-longform/evals/evals.json +28 -0
- package/skills/write-longform/references/ste.md +82 -0
- package/skills/write-pr/SKILL.md +63 -0
- package/skills/write-pr/agents/openai.yaml +2 -0
- package/skills/write-pr/evals/evals.json +45 -0
- package/skills/write-pr/references/ste.md +82 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Topic profile
|
|
2
|
+
|
|
3
|
+
Edit this file to match the reader. The agent reads the level for the topic of each question.
|
|
4
|
+
|
|
5
|
+
## Format
|
|
6
|
+
|
|
7
|
+
One topic and one level, 1 to 4, on each line. The line `default` sets the level for all other topics.
|
|
8
|
+
|
|
9
|
+
## Profile
|
|
10
|
+
|
|
11
|
+
default: 2
|
|
12
|
+
|
|
13
|
+
## Examples
|
|
14
|
+
|
|
15
|
+
Replace these examples with your own topics.
|
|
16
|
+
|
|
17
|
+
- web interfaces: 2
|
|
18
|
+
- databases: 1
|
|
19
|
+
- build tools and CI: 1
|
|
20
|
+
- security: 1
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Simplified Technical English rules
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Write prose that a non-native English reader understands at first read, without guessing. These rules follow the Issue 9 principles of ASD-STE100.
|
|
6
|
+
|
|
7
|
+
## Scope
|
|
8
|
+
|
|
9
|
+
Applies to chat replies, commit messages, PR descriptions, documentation, release notes, status updates, and bug reports.
|
|
10
|
+
Does not apply to code identifiers, product UI copy, quoted user text, file paths, and shell commands.
|
|
11
|
+
|
|
12
|
+
## Writing rules
|
|
13
|
+
|
|
14
|
+
1. Keep sentences short. Use 20 words or fewer in instructions. Use 25 words or fewer in descriptive text.
|
|
15
|
+
2. Write one instruction, or one topic, per sentence.
|
|
16
|
+
3. Use the active voice. Use the passive voice only when the agent is unknown. Name the agent when you know it.
|
|
17
|
+
4. Write one topic per paragraph. Use 6 sentences or fewer per paragraph.
|
|
18
|
+
5. Use simple verb forms only: simple present, simple past, simple future, imperative, infinitive.
|
|
19
|
+
6. Do not use the "-ing" form of a verb unless it is a technical noun.
|
|
20
|
+
7. Use each word with one meaning only.
|
|
21
|
+
8. Do not use multi-word nouns with more than three words.
|
|
22
|
+
9. Do not use idioms, slang, metaphors, jokes, or cultural references.
|
|
23
|
+
10. Do not use double negatives. Write one clear negative, or write the positive statement.
|
|
24
|
+
11. Do not use contractions. Keep the articles "the" and "a" in sentences.
|
|
25
|
+
12. Use the same word for the same thing. Do not alternate synonyms.
|
|
26
|
+
13. Use vertical lists for data or steps with more than two items.
|
|
27
|
+
14. In procedures, start each step with the command verb. Put warnings before the step.
|
|
28
|
+
15. Split complex text into more sentences. Do not omit the subject or the article to make a sentence shorter.
|
|
29
|
+
|
|
30
|
+
## Word guidance
|
|
31
|
+
|
|
32
|
+
- Prefer the shortest common word: "use", not "utilize". Write "start", not "initiate". Write "before", not "prior to".
|
|
33
|
+
- Treat the approved word list of STE, about 900 words, as the target vocabulary. Approximate it with common English words, one sense each.
|
|
34
|
+
- Technical terms are allowed. Define a technical term on first use.
|
|
35
|
+
- Do not invent a new term for a thing you already named.
|
|
36
|
+
|
|
37
|
+
## Examples
|
|
38
|
+
|
|
39
|
+
Commit message, before and after:
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
Before: "Refactored auth layer to leverage modern async patterns, kicking
|
|
43
|
+
off the long-overdue cleanup of the legacy session nightmare."
|
|
44
|
+
After: "Make the auth module use async functions. Remove the old session
|
|
45
|
+
code. Do not migrate session data. See ticket ABC-123."
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Status update, before and after:
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
Before: "We're currently experiencing some issues with the deployment
|
|
52
|
+
pipeline, which has been acting up since this morning."
|
|
53
|
+
After: "The deployment pipeline failed at 09:15. The build step gave error
|
|
54
|
+
E403. We are investigating the cause. The next update comes at 14:00."
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Bug report, before and after:
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
Before: "Users can't seem to export their reports whenever the dataset is
|
|
61
|
+
particularly large. It just silently fails without any error."
|
|
62
|
+
After: "Export fails for datasets larger than 50000 rows. The app shows no
|
|
63
|
+
error. To reproduce: load the sample dataset, click Export, wait 60 seconds."
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Conflicts with other styles
|
|
67
|
+
|
|
68
|
+
When another active style conflicts with these rules, these rules win for prose. A brief style may shorten sentences further. It keeps every fact, negation, and number.
|
|
69
|
+
|
|
70
|
+
## Compliance check
|
|
71
|
+
|
|
72
|
+
- Are all sentences 25 words or fewer?
|
|
73
|
+
- Does each sentence give one instruction or one topic?
|
|
74
|
+
- Is the voice active, except where the agent is unknown?
|
|
75
|
+
- Are there no idioms, jokes, metaphors, contractions, or double negatives?
|
|
76
|
+
- Is every technical term defined on first use, and is each term stable?
|
|
77
|
+
|
|
78
|
+
## Sources
|
|
79
|
+
|
|
80
|
+
- https://asd-ste100.org/
|
|
81
|
+
- https://en.wikipedia.org/wiki/Simplified_Technical_English
|
|
82
|
+
- https://github.com/danyuchn/asd-ste100-skill
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: write-docs
|
|
3
|
+
description: >
|
|
4
|
+
Use when the agent writes or revises a technical document: README,
|
|
5
|
+
tutorial, how-to guide, reference page, explanation, RFC, design note, or
|
|
6
|
+
release note. Also use for a document an agent reads, such as a skill file
|
|
7
|
+
or an agent instruction file.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Write docs
|
|
11
|
+
|
|
12
|
+
A tired engineer understands the document at the first read. Settle the job of the document, then hold every sentence to the rules. For the full standard, open `references/docs-standard.md`.
|
|
13
|
+
|
|
14
|
+
## Settle the job first
|
|
15
|
+
|
|
16
|
+
One document, one job. Two facts pick it: does the reader act or understand, and are they learning or working?
|
|
17
|
+
|
|
18
|
+
| Job | What the reader leaves with |
|
|
19
|
+
|---|---|
|
|
20
|
+
| Tutorial | A working thing they built with you, step by step. |
|
|
21
|
+
| How-to | A solved problem, through steps alone. |
|
|
22
|
+
| Reference | The fact they came to look up. |
|
|
23
|
+
| Explanation | The reason the thing is the way it is. |
|
|
24
|
+
|
|
25
|
+
Jobs stay separate. Split the page and link, rather than mixing.
|
|
26
|
+
|
|
27
|
+
## Sentence rules
|
|
28
|
+
|
|
29
|
+
1. Cut every word that does no work.
|
|
30
|
+
<!-- sync:sentence-floor start -->
|
|
31
|
+
2. One idea per sentence. Use 20 words or fewer in instructions and 25 words or fewer elsewhere.
|
|
32
|
+
3. Name the actor. Use the active voice. Use the passive voice only when the actor is unknown.
|
|
33
|
+
<!-- sync:sentence-floor end -->
|
|
34
|
+
4. Prefer the short everyday word, unless the long one buys precision.
|
|
35
|
+
5. Write to the reader as "you", in the now.
|
|
36
|
+
6. Steps are commands, and the gate comes before the action it guards.
|
|
37
|
+
7. The normal path comes first. The exceptions wait below it.
|
|
38
|
+
8. Pin "only" and "not" next to the word they change.
|
|
39
|
+
9. Unstack the nouns, and give every "it" and "this" exactly one target.
|
|
40
|
+
10. A period beats a semicolon. A new sentence replaces a dash. No slash-joins, no "(s)" plurals.
|
|
41
|
+
11. One thing carries one name across the whole document.
|
|
42
|
+
12. Name the real symbols, paths, flags, and commands. The codebase supplies the words.
|
|
43
|
+
|
|
44
|
+
## Revise an existing document
|
|
45
|
+
|
|
46
|
+
1. Read the whole page once before you change a line.
|
|
47
|
+
2. Settle the job of the page. Check every section against that job.
|
|
48
|
+
3. Repair the sentences that break the rules. Leave the sentences that hold.
|
|
49
|
+
4. Do not reword text that did not change. A rewrite of untouched text costs the reviewer time.
|
|
50
|
+
|
|
51
|
+
## Rhythm
|
|
52
|
+
|
|
53
|
+
A page can pass every rule and still read like a machine wrote it.
|
|
54
|
+
|
|
55
|
+
- Vary the sentence length on purpose. A short sentence lands a point.
|
|
56
|
+
- Take a position where the job allows it. Explanation weighs options. Reference stays neutral.
|
|
57
|
+
- Trade the sterile for the particular. "A column rename fails the build" beats "schema changes can cause issues".
|
|
58
|
+
|
|
59
|
+
## Agent mode
|
|
60
|
+
|
|
61
|
+
When an agent reads the document, add the scan rules. Skill files and agent instruction files follow this mode.
|
|
62
|
+
|
|
63
|
+
- Give every section a stable heading. The agent navigates by headings.
|
|
64
|
+
- End every step on a condition that tells the agent the step is done. Make the condition checkable.
|
|
65
|
+
- State what the environment does not show: the reason for a choice, the trap, the convention.
|
|
66
|
+
- Keep one meaning in one place. Do not restate a rule in a second section.
|
|
67
|
+
- Prune stale lines on every edit. A wrong instruction costs more than a missing one.
|
|
68
|
+
|
|
69
|
+
For the full agent-doc standard, open `references/agent-docs.md`.
|
|
70
|
+
|
|
71
|
+
## Worked example
|
|
72
|
+
|
|
73
|
+
Before:
|
|
74
|
+
```text
|
|
75
|
+
The configuration of retry behavior for the mail client is handled in
|
|
76
|
+
client.json. Running the client with --dry-run will output what would
|
|
77
|
+
have been sent, which is useful to know. If settings are wrong, errors
|
|
78
|
+
may occur.
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
After:
|
|
82
|
+
```text
|
|
83
|
+
`mail.ts` reads the retry count and the delay from `client.json`. Each
|
|
84
|
+
retry waits twice as long as the one before it. Run `mail.ts --dry-run`
|
|
85
|
+
to print the messages without sending them.
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Output language
|
|
89
|
+
|
|
90
|
+
Write prose in ASD-STE100 Simplified Technical English. The rules live in `references/ste.md`.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "write-docs",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"prompt": "Revise this README paragraph: 'Configuration of the exporter is performed via exporter.json. Note that it's important to remember that running with --reset should only be done when you want to forget all state, as data loss may occur if misused.'",
|
|
7
|
+
"expected_output": "The revision names the real actor and file, puts the condition before the action, cuts the filler, and keeps every fact. Untouched meaning stays in place.",
|
|
8
|
+
"assertions": [
|
|
9
|
+
"Real symbol and flag names kept",
|
|
10
|
+
"Warning placed before the action",
|
|
11
|
+
"Filler deleted: 'note that', 'it's important to remember'",
|
|
12
|
+
"Active voice, actor named",
|
|
13
|
+
"No facts lost"
|
|
14
|
+
],
|
|
15
|
+
"files": []
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": 2,
|
|
19
|
+
"prompt": "Plan a short doc page that teaches a newcomer to run their first import with our CLI tool. Choose the document job and outline the page.",
|
|
20
|
+
"expected_output": "Tutorial job chosen: build-a-thing framing, every step shows a visible result, written as commands. No reference tables or argument sections mixed in.",
|
|
21
|
+
"assertions": [
|
|
22
|
+
"Chooses tutorial and says why",
|
|
23
|
+
"Opens with what the learner ends with",
|
|
24
|
+
"Steps produce visible results",
|
|
25
|
+
"No mixed modes"
|
|
26
|
+
],
|
|
27
|
+
"files": []
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": 3,
|
|
31
|
+
"prompt": "Write the structure for an agent instruction file that a coding agent reads on every run: how to run tests, what never to commit, and where the domain glossary lives.",
|
|
32
|
+
"expected_output": "Agent mode: stable headings, steps with checkable end conditions, facts the environment does not show, one meaning in one place.",
|
|
33
|
+
"assertions": [
|
|
34
|
+
"Stable headings per topic",
|
|
35
|
+
"Steps end on checkable conditions",
|
|
36
|
+
"Points at the glossary location",
|
|
37
|
+
"No restated rules"
|
|
38
|
+
],
|
|
39
|
+
"files": []
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Agent-doc standard
|
|
2
|
+
|
|
3
|
+
For documents an agent reads: skill files, agent instruction files such as AGENTS.md, and memory files. The goal is a predictable process: the agent takes the same path on every run. The same levers work for all three shapes.
|
|
4
|
+
|
|
5
|
+
## Context pointers
|
|
6
|
+
|
|
7
|
+
A context pointer names material that sits outside the context, and states when to reach it. A skill description is one. A line in an instruction file that names a doc is the same object.
|
|
8
|
+
|
|
9
|
+
- The wording of the pointer, not its target, decides when the agent reaches the material, and how reliably.
|
|
10
|
+
- A pointer does two jobs: state what the material is, and list the cases that should trigger it.
|
|
11
|
+
- Put the key word first. The start of the pointer does the trigger work.
|
|
12
|
+
- One trigger per case. Synonyms that rename one case are one case written twice. Cut them.
|
|
13
|
+
- A weak pointer in front of a must-have target is a bug. Sharpen the wording first. Inline the material only when sharpening fails.
|
|
14
|
+
|
|
15
|
+
## The two loads
|
|
16
|
+
|
|
17
|
+
Every document and pointer spends one of two budgets.
|
|
18
|
+
|
|
19
|
+
- Context load is the cost of always-present material: an instruction file line, a skill description. It spends attention on every turn, fired or not.
|
|
20
|
+
- Cognitive load is the cost on the human: which documents exist, and when to reach for each. The human is the index.
|
|
21
|
+
- Spend cognitive load where human judgment matters. Remove it where it does not.
|
|
22
|
+
|
|
23
|
+
## Information hierarchy
|
|
24
|
+
|
|
25
|
+
A document holds steps, the ordered actions, and reference, the facts read on demand. Each piece sits on a ladder ranked by how soon the agent needs it.
|
|
26
|
+
|
|
27
|
+
1. In-file step: what the agent does, in order. The primary tier.
|
|
28
|
+
2. In-file reference: rules and facts read on demand. A flat set of peer rules is a fine shape.
|
|
29
|
+
3. Disclosed reference: a separate file behind a pointer, loaded only when the pointer fires.
|
|
30
|
+
|
|
31
|
+
Push too little down and the top bloats. Push too much down and you hide material the agent needs.
|
|
32
|
+
|
|
33
|
+
- Move material down the ladder so the top stays legible. This protects the hierarchy, not only the token count.
|
|
34
|
+
- The cleanest test: inline what every path needs. Push behind a pointer what only some paths reach.
|
|
35
|
+
- Keep the definition, the rules, and the caveats of one concept under one heading. Reading one part then carries its neighbors.
|
|
36
|
+
- A document can be too long even when every line is live. The cure is the ladder, not deletion of meaning.
|
|
37
|
+
|
|
38
|
+
## Completion criteria
|
|
39
|
+
|
|
40
|
+
Every step ends on a condition that tells the agent the step is done.
|
|
41
|
+
|
|
42
|
+
- Make the condition checkable: can the agent tell done from not done?
|
|
43
|
+
- Make the condition demanding: "account for every changed model" forces thorough work. "List the changes" does not.
|
|
44
|
+
- A vague bound invites an early stop. Sharpen the bound first. Only a bound that cannot be made sharp justifies hiding the later steps behind a split.
|
|
45
|
+
- A demanding criterion also binds flat reference: "apply every rule" holds a rule set to full coverage.
|
|
46
|
+
|
|
47
|
+
## Leading words
|
|
48
|
+
|
|
49
|
+
A leading word is a compact concept the model already knows. Used as a repeated token, it anchors a region of behavior in few words.
|
|
50
|
+
|
|
51
|
+
- Reach for a word that already exists in pretraining. A made-up word recruits nothing and pays in definition.
|
|
52
|
+
- The same word in your prompts, your docs, and your code links them all to the material, and the agent reaches it more reliably.
|
|
53
|
+
- One strong word replaces a spelled-out triad. "Fast, deterministic, low overhead" collapses into one word the reader already holds.
|
|
54
|
+
|
|
55
|
+
## State the positive
|
|
56
|
+
|
|
57
|
+
Steering by prohibition names the behavior you do not want and makes it more available, not less.
|
|
58
|
+
|
|
59
|
+
- State the target behavior, so the banned one is never spoken.
|
|
60
|
+
- Keep a prohibition only as a hard guardrail you cannot phrase in positive form. Pair it with the positive target.
|
|
61
|
+
- A weak instruction the model already obeys by default says nothing. Delete it. When it fails the default test, the fix is a stronger word, not more words.
|
|
62
|
+
|
|
63
|
+
## Pruning
|
|
64
|
+
|
|
65
|
+
- Keep each meaning in one authoritative place, so a change is a one-place edit. The same meaning in two places costs maintenance and tokens.
|
|
66
|
+
- The environment is a source of truth too: config files, scripts, directory layout, help output. Do not restate what the agent can look up. It goes stale.
|
|
67
|
+
- Cache only what the environment cannot show: the reason behind a choice, the trap, the convention nobody wrote down.
|
|
68
|
+
- Check every line for relevance on every edit. Stale layers settle because adding feels safe and removing feels risky. Core down through them.
|
|
69
|
+
- Delete a sentence that fails the default test whole. Do not trim words from it.
|
|
70
|
+
|
|
71
|
+
## Skill files
|
|
72
|
+
|
|
73
|
+
When the document is a skill file, add:
|
|
74
|
+
|
|
75
|
+
- Frontmatter holds the name and the description. The description states when to use the skill. It never summarizes the workflow.
|
|
76
|
+
- Keep the skill auto-invoked when the agent must reach it on its own. Restrict it to manual use only when the human is the sole caller.
|
|
77
|
+
- When manual skills multiply past memory, one router names them all, and when to reach for each.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Docs standard
|
|
2
|
+
|
|
3
|
+
The standard behind the document writer, as four questions. Ask them in order, when you draft and when you review.
|
|
4
|
+
|
|
5
|
+
## What job does this document do?
|
|
6
|
+
|
|
7
|
+
A document does one job. Settle the job before the first sentence. Two facts pick the job. Does the reader try to get something done, or to understand? Are they learning the field, or already working in it?
|
|
8
|
+
|
|
9
|
+
| Job | What the reader leaves with |
|
|
10
|
+
|---|---|
|
|
11
|
+
| Tutorial | A working thing they built with you, step by step. |
|
|
12
|
+
| How-to | A solved problem, through steps alone. |
|
|
13
|
+
| Reference | The fact they came to look up. |
|
|
14
|
+
| Explanation | The reason the thing is the way it is. |
|
|
15
|
+
|
|
16
|
+
**Tutorial.** You carry the newcomer. Their finished result is your responsibility, not theirs. Start with the thing they will have at the end. Every step ends in something they can see: output, a changed prompt, a log line. Park the theory in one clause and a link. Teach in the first person plural, as commands.
|
|
17
|
+
|
|
18
|
+
**How-to.** The reader already works in the field. Give the path to one goal and hold the teaching. Steps, decisions at forks, and links for the background. Name the page after the task the reader came for.
|
|
19
|
+
|
|
20
|
+
**Reference.** The reader is mid-task and wants a fact. Give facts, options, limits, and failure modes, with no opinion and no persuasion. Shape the page like the thing it describes, so both can be walked in the same order. Where code can generate the page, generate it.
|
|
21
|
+
|
|
22
|
+
**Explanation.** One bounded subject that still reads outside the product. Open on a real question about why. Bring in the decisions, the history, the constraints, and the roads not taken. This is the one job where the writer may argue a position.
|
|
23
|
+
|
|
24
|
+
Keep the jobs apart. A reference table inside a tutorial stalls the lesson; a how-to that argues slows the fix. Split the page and link.
|
|
25
|
+
|
|
26
|
+
## Do the sentences talk to the reader?
|
|
27
|
+
|
|
28
|
+
- Write to "you", in the now. Reserve "will" for events that truly sit in the future.
|
|
29
|
+
- Give every action an owner: "the loader parses the file". The passive voice earns its place only when the doer is unknown or beside the point.
|
|
30
|
+
- Steps are commands: "Click Submit." A step never "should be done"; it is done.
|
|
31
|
+
- Put the gate before the action it guards, so a reader who does not qualify can jump past.
|
|
32
|
+
- The normal path comes first. The exceptions wait below it.
|
|
33
|
+
- Write like a colleague who knows the subject. Instructions skip "please". Procedures never claim to be "simple", "easy", or "quick"; a reader in a procedure is stuck, or they would not be there.
|
|
34
|
+
- Promise nothing ahead of time, and do not open two sentences in a row with the same words.
|
|
35
|
+
- A link says where it goes, in its own words. A bare "click here" says nothing.
|
|
36
|
+
- Headings state the point, in sentence case. A task heading is a verb phrase; a concept heading is a noun phrase. One h1, no level skips.
|
|
37
|
+
- Sequences take numbers. Everything else takes dashes. A list gets a lead-in sentence and parallel items.
|
|
38
|
+
- Code sits in code font, screen parts in bold, series get their final comma. When a list is partial, say so up front instead of ending with "etc.".
|
|
39
|
+
|
|
40
|
+
## Does each sentence carry one thing?
|
|
41
|
+
|
|
42
|
+
- One instruction, or one thought, per sentence. Long sentences split: near 20 words for instructions, near 25 elsewhere.
|
|
43
|
+
- Warnings arrive before the step they protect.
|
|
44
|
+
- Articles stay. "Remove backup file" asks a question; "Remove the backup file" answers it.
|
|
45
|
+
- A word keeps one meaning and one role for the whole document.
|
|
46
|
+
- One verb per action, kept for the whole document.
|
|
47
|
+
- Procedures are commands, never stories and never passive.
|
|
48
|
+
- The "-ing" form of a verb takes on too many roles. Prefer the plain form.
|
|
49
|
+
|
|
50
|
+
## Can any sentence be read two ways?
|
|
51
|
+
|
|
52
|
+
- "Only" and "not" stand next to the word they change. "Only fails on growth" and "fails only on growth" disagree.
|
|
53
|
+
- Unstack the nouns. "The proto import budget check script" becomes "the script that checks the proto-import budget".
|
|
54
|
+
- Every "it", "they", and "this" points at exactly one thing. In doubt, say the noun again.
|
|
55
|
+
- Half-written pairs mislead. "Phase 1 moves the converters and Phase 2 the runtime" starves Phase 2 of its verb. Give it one.
|
|
56
|
+
- Small joining words stay when they settle the parse: "Ensure that the switch is off".
|
|
57
|
+
- Two articles prevent a false pair: "the client and the host" when they are two things.
|
|
58
|
+
- Say what "and" and "or" join: "both, and", "either, or", "if, then".
|
|
59
|
+
- A period beats a semicolon. A new sentence replaces a dash.
|
|
60
|
+
- Parentheses hold a whole grammatical unit, or nothing. Plurals never come from "(s)".
|
|
61
|
+
- Write "a, b, or both" over "a/b".
|
|
62
|
+
- One thing carries one name across the whole document. Three names for one thing force three memories.
|
|
63
|
+
- Idioms, slang, and Latin shortforms leave. A reader working in a second language, a translator, and an agent all parse plain constructions fastest.
|
|
64
|
+
|
|
65
|
+
## Three rules above all
|
|
66
|
+
|
|
67
|
+
1. When the sentence survives without a word, the word goes.
|
|
68
|
+
2. The short everyday word wins, unless the long one buys precision.
|
|
69
|
+
3. A rule that makes the sentence worse loses. Fix the sentence another way, or leave it.
|
|
70
|
+
|
|
71
|
+
The codebase supplies the words. Name the real symbol, file, flag, and command. Jargon you invent gets replaced by what a developer would say out loud.
|
|
72
|
+
|
|
73
|
+
## Keep it human
|
|
74
|
+
|
|
75
|
+
A page can pass every rule and still read like a machine wrote it. Every sentence the same length. No position taken. Nothing particular in sight.
|
|
76
|
+
|
|
77
|
+
- Vary the length on purpose. A short sentence lands a point. A long one carries a fact together with its condition or its cost.
|
|
78
|
+
- Take a position where the job allows it. Explanation weighs options, so say which one you favor. Reference stays neutral.
|
|
79
|
+
- Trade the sterile for the particular. "Schema changes can cause issues" says nothing; "a column rename fails the build" says the thing.
|
|
80
|
+
|
|
81
|
+
## Claims and evidence
|
|
82
|
+
|
|
83
|
+
- Write the symbols and paths that exist at this commit.
|
|
84
|
+
- A count or a tree in the page stays true at the commit that carries it, and the page includes the command that regenerates it.
|
|
85
|
+
- PR bodies and commit messages are documents too, with every rule here except the job rule. A PR body is a one-minute briefing.
|
|
86
|
+
- Product UI text is not a document. The product copy rules own it.
|
|
87
|
+
|
|
88
|
+
## Worked example
|
|
89
|
+
|
|
90
|
+
Before:
|
|
91
|
+
```text
|
|
92
|
+
The configuration of retry behavior for the mail client is handled in
|
|
93
|
+
client.json. Running the client with --dry-run will output what would
|
|
94
|
+
have been sent, which is useful to know. If settings are wrong, errors
|
|
95
|
+
may occur.
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
After:
|
|
99
|
+
```text
|
|
100
|
+
`mail.ts` reads the retry count and the delay from `client.json`. Each
|
|
101
|
+
retry waits twice as long as the one before it. Run `mail.ts --dry-run`
|
|
102
|
+
to print the messages without sending them.
|
|
103
|
+
```
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Simplified Technical English rules
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Write prose that a non-native English reader understands at first read, without guessing. These rules follow the Issue 9 principles of ASD-STE100.
|
|
6
|
+
|
|
7
|
+
## Scope
|
|
8
|
+
|
|
9
|
+
Applies to chat replies, commit messages, PR descriptions, documentation, release notes, status updates, and bug reports.
|
|
10
|
+
Does not apply to code identifiers, product UI copy, quoted user text, file paths, and shell commands.
|
|
11
|
+
|
|
12
|
+
## Writing rules
|
|
13
|
+
|
|
14
|
+
1. Keep sentences short. Use 20 words or fewer in instructions. Use 25 words or fewer in descriptive text.
|
|
15
|
+
2. Write one instruction, or one topic, per sentence.
|
|
16
|
+
3. Use the active voice. Use the passive voice only when the agent is unknown. Name the agent when you know it.
|
|
17
|
+
4. Write one topic per paragraph. Use 6 sentences or fewer per paragraph.
|
|
18
|
+
5. Use simple verb forms only: simple present, simple past, simple future, imperative, infinitive.
|
|
19
|
+
6. Do not use the "-ing" form of a verb unless it is a technical noun.
|
|
20
|
+
7. Use each word with one meaning only.
|
|
21
|
+
8. Do not use multi-word nouns with more than three words.
|
|
22
|
+
9. Do not use idioms, slang, metaphors, jokes, or cultural references.
|
|
23
|
+
10. Do not use double negatives. Write one clear negative, or write the positive statement.
|
|
24
|
+
11. Do not use contractions. Keep the articles "the" and "a" in sentences.
|
|
25
|
+
12. Use the same word for the same thing. Do not alternate synonyms.
|
|
26
|
+
13. Use vertical lists for data or steps with more than two items.
|
|
27
|
+
14. In procedures, start each step with the command verb. Put warnings before the step.
|
|
28
|
+
15. Split complex text into more sentences. Do not omit the subject or the article to make a sentence shorter.
|
|
29
|
+
|
|
30
|
+
## Word guidance
|
|
31
|
+
|
|
32
|
+
- Prefer the shortest common word: "use", not "utilize". Write "start", not "initiate". Write "before", not "prior to".
|
|
33
|
+
- Treat the approved word list of STE, about 900 words, as the target vocabulary. Approximate it with common English words, one sense each.
|
|
34
|
+
- Technical terms are allowed. Define a technical term on first use.
|
|
35
|
+
- Do not invent a new term for a thing you already named.
|
|
36
|
+
|
|
37
|
+
## Examples
|
|
38
|
+
|
|
39
|
+
Commit message, before and after:
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
Before: "Refactored auth layer to leverage modern async patterns, kicking
|
|
43
|
+
off the long-overdue cleanup of the legacy session nightmare."
|
|
44
|
+
After: "Make the auth module use async functions. Remove the old session
|
|
45
|
+
code. Do not migrate session data. See ticket ABC-123."
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Status update, before and after:
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
Before: "We're currently experiencing some issues with the deployment
|
|
52
|
+
pipeline, which has been acting up since this morning."
|
|
53
|
+
After: "The deployment pipeline failed at 09:15. The build step gave error
|
|
54
|
+
E403. We are investigating the cause. The next update comes at 14:00."
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Bug report, before and after:
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
Before: "Users can't seem to export their reports whenever the dataset is
|
|
61
|
+
particularly large. It just silently fails without any error."
|
|
62
|
+
After: "Export fails for datasets larger than 50000 rows. The app shows no
|
|
63
|
+
error. To reproduce: load the sample dataset, click Export, wait 60 seconds."
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Conflicts with other styles
|
|
67
|
+
|
|
68
|
+
When another active style conflicts with these rules, these rules win for prose. A brief style may shorten sentences further. It keeps every fact, negation, and number.
|
|
69
|
+
|
|
70
|
+
## Compliance check
|
|
71
|
+
|
|
72
|
+
- Are all sentences 25 words or fewer?
|
|
73
|
+
- Does each sentence give one instruction or one topic?
|
|
74
|
+
- Is the voice active, except where the agent is unknown?
|
|
75
|
+
- Are there no idioms, jokes, metaphors, contractions, or double negatives?
|
|
76
|
+
- Is every technical term defined on first use, and is each term stable?
|
|
77
|
+
|
|
78
|
+
## Sources
|
|
79
|
+
|
|
80
|
+
- https://asd-ste100.org/
|
|
81
|
+
- https://en.wikipedia.org/wiki/Simplified_Technical_English
|
|
82
|
+
- https://github.com/danyuchn/asd-ste100-skill
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: write-jira
|
|
3
|
+
description: >
|
|
4
|
+
Use when the user asks for Jira epics, stories, tickets, or story points,
|
|
5
|
+
or asks to break a plan, spec, or discussion into ticket text.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Write Jira tickets
|
|
9
|
+
|
|
10
|
+
Turn a plan into tickets an engineer can pick up without a meeting. Each story cuts through all layers and works on its own. Slice vertical, never by layer.
|
|
11
|
+
|
|
12
|
+
## Read first
|
|
13
|
+
|
|
14
|
+
1. Read the plan, the spec, or the discussion the user names.
|
|
15
|
+
2. Read the code area when access exists. Use the domain words of the codebase.
|
|
16
|
+
3. List the slices before you write the tickets. Confirm the list with the user.
|
|
17
|
+
|
|
18
|
+
## When the plan is thin
|
|
19
|
+
|
|
20
|
+
A plan without a goal, a number, or a constraint is not a plan yet. Do not slice it.
|
|
21
|
+
|
|
22
|
+
1. Name what is missing: the user-visible goal, the current numbers, the constraints.
|
|
23
|
+
2. Ask for those facts before you draft. A story with invented targets tests nothing.
|
|
24
|
+
3. When the user wants a draft anyway, mark every invented target as an assumption. Carry every unknown into the points reason.
|
|
25
|
+
|
|
26
|
+
## Slice rules
|
|
27
|
+
|
|
28
|
+
1. One story is one complete path through the stack: data, API, interface, tests.
|
|
29
|
+
2. A finished story demos on its own. A layer without a user-visible result is not a story.
|
|
30
|
+
3. Size a story to fit one work session. Split anything larger.
|
|
31
|
+
4. Name the blocking stories of each story. A story with no blockers can start.
|
|
32
|
+
5. A mechanical change that touches the whole repo gets its own sequence. Add the new form beside the old. Move the callers in batches. Then delete the old form.
|
|
33
|
+
|
|
34
|
+
## Epic template
|
|
35
|
+
|
|
36
|
+
```markdown
|
|
37
|
+
Title: <outcome, not a feature word>
|
|
38
|
+
|
|
39
|
+
Outcome:
|
|
40
|
+
<the user-visible state when this epic closes>
|
|
41
|
+
|
|
42
|
+
Scope:
|
|
43
|
+
- <story list, one line each>
|
|
44
|
+
|
|
45
|
+
Out of scope:
|
|
46
|
+
- <what this epic does not do>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Story template
|
|
50
|
+
|
|
51
|
+
```markdown
|
|
52
|
+
Title: <what works when this story closes>
|
|
53
|
+
|
|
54
|
+
Story:
|
|
55
|
+
As a <role>, I <action>, so that <value>.
|
|
56
|
+
|
|
57
|
+
Acceptance criteria:
|
|
58
|
+
- [ ] <a testable condition>
|
|
59
|
+
- [ ] <a testable condition>
|
|
60
|
+
|
|
61
|
+
Blocked by:
|
|
62
|
+
- <ticket key or title, or "none">
|
|
63
|
+
|
|
64
|
+
Points: <n>
|
|
65
|
+
Points reason: <size, risk, or unknowns, in one line>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Story points
|
|
69
|
+
|
|
70
|
+
1. Estimate from three inputs: size, risk, and unknowns.
|
|
71
|
+
2. Every estimate carries one reason line. A bare number carries no information.
|
|
72
|
+
3. When estimates differ by much, the story hides an unknown. Split it, or list the unknown in the story.
|
|
73
|
+
4. Points measure effort, not value. The value lives in the story line.
|
|
74
|
+
|
|
75
|
+
## Rules
|
|
76
|
+
|
|
77
|
+
- Write criteria a test can check. "The query answers in 200 ms at 10000 rows" is a criterion. "Works fast" is not.
|
|
78
|
+
- Keep file paths and code out of tickets. They go stale. A schema or type shape that holds a decision can go in, trimmed to the decision.
|
|
79
|
+
- This block writes text only. It never creates, edits, or moves an item in Jira.
|
|
80
|
+
|
|
81
|
+
## Output language
|
|
82
|
+
|
|
83
|
+
Write prose in ASD-STE100 Simplified Technical English. The rules live in `references/ste.md`.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "write-jira",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"prompt": "Break this plan into a Jira epic with stories and story points. Plan: users want to attach files to tasks. The backend needs an attachment table and upload endpoint, the web app needs an attach button and preview, and the mobile app needs the same. Each surface should ship on its own.",
|
|
7
|
+
"expected_output": "One epic named for the outcome, plus stories that each cut a complete vertical path: data, endpoint, one client surface, tests. Each story has a testable acceptance checklist, a blocked-by line, and story points with a one-line reason built from size, risk, and unknowns.",
|
|
8
|
+
"assertions": [
|
|
9
|
+
"Epic title states the outcome, not a feature word",
|
|
10
|
+
"Each story is a vertical slice, not a layer",
|
|
11
|
+
"Acceptance criteria are testable checkboxes",
|
|
12
|
+
"Blocked-by lines present",
|
|
13
|
+
"Every points value carries a reason line",
|
|
14
|
+
"No bare points number"
|
|
15
|
+
],
|
|
16
|
+
"files": []
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": 2,
|
|
20
|
+
"prompt": "Break this into Jira stories. Plan: rename the column users.email to users.login across the whole codebase. The rename touches every service that reads the column, and no vertical slice can land green on its own.",
|
|
21
|
+
"expected_output": "A sequenced chain instead of vertical slices: add the new column beside the old, migrate readers in batches, then delete the old column. Each story names the stories that block it, and the delete story is blocked by every migration batch.",
|
|
22
|
+
"assertions": [
|
|
23
|
+
"First story adds the new form beside the old",
|
|
24
|
+
"Middle stories migrate callers in batches",
|
|
25
|
+
"Final story deletes the old form",
|
|
26
|
+
"Blocking edges form a correct chain",
|
|
27
|
+
"No forced vertical slice"
|
|
28
|
+
],
|
|
29
|
+
"files": []
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": 3,
|
|
33
|
+
"prompt": "Break this into Jira stories. Plan: make the dashboard faster. That is all the input you get.",
|
|
34
|
+
"expected_output": "The skill does not invent a breakdown from nothing. It asks for the missing facts, or lists the unknowns explicitly, before or instead of producing stories. Any stories it does draft carry the unknowns in the story text, and points come with a reason that names the unknowns.",
|
|
35
|
+
"assertions": [
|
|
36
|
+
"Asks for missing context or lists the unknowns",
|
|
37
|
+
"Does not fabricate measurements or causes",
|
|
38
|
+
"Stories, if drafted, carry the unknowns",
|
|
39
|
+
"Points reasons mention the unknowns"
|
|
40
|
+
],
|
|
41
|
+
"files": []
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
}
|