swe-workflow-skills 0.11.4 → 0.11.5
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/VERSION +1 -1
- package/catalog.json +1 -1
- package/package.json +1 -1
- package/skills/architecture-design/SKILL.md +1 -0
- package/skills/code-reviewing/references/review-checklist.md +1 -0
- package/skills/dependency-management/SKILL.md +31 -13
- package/skills/dependency-management/evals/evals.json +35 -1
- package/skills/dependency-management/references/evaluation-checklist.md +9 -0
- package/skills/feature-planning/SKILL.md +2 -0
- package/skills/feature-planning/templates/plan.md +6 -0
- package/skills/frontend-architecture/SKILL.md +1 -0
- package/skills/plan-execution/SKILL.md +2 -0
- package/skills/skill-router/SKILL.md +6 -1
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.11.
|
|
1
|
+
0.11.5
|
package/catalog.json
CHANGED
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
},
|
|
104
104
|
{
|
|
105
105
|
"name": "dependency-management",
|
|
106
|
-
"description": "Evaluate, audit, and upgrade
|
|
106
|
+
"description": "Evaluate, audit, and upgrade dependencies — whether a library is needed at all or an own module beats it, adoption vetting, CVE audits, major upgrades, conflicts. Run before naming any new library in a plan, ADR or install. Triggers: should I use this library, which packages do we need, write our own instead, we use a small part of it, npm audit, dependency vulnerability, upgrade dependencies, outdated packages, lock file, breaking changes in upgrade, is this library maintained, dependency conflict, slopsquatting, does this package exist, AI suggested this library.",
|
|
107
107
|
"path": "dependency-management/SKILL.md"
|
|
108
108
|
},
|
|
109
109
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "swe-workflow-skills",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.5",
|
|
4
4
|
"description": "A curated library of Claude Code Agent Skills covering the full software lifecycle, with orchestrator-routed activation that scales past the skill-listing budget.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -70,6 +70,7 @@ Present 2-4 viable options. For each option:
|
|
|
70
70
|
3. **Analyze trade-offs** against the quality attributes identified in Step 2
|
|
71
71
|
4. **Estimate complexity** (implementation effort, operational overhead)
|
|
72
72
|
5. **Identify reversibility** — how hard is it to change this decision later?
|
|
73
|
+
6. **Name any new library it brings in**, with `dependency-management`'s Step 1 verdict (own module, adopt, or ask the user) in the option itself. The ADR records why each library is worth the coupling.
|
|
73
74
|
|
|
74
75
|
Avoid presenting a straw-man option just to make the preferred one look better.
|
|
75
76
|
|
|
@@ -72,6 +72,7 @@ Flag when you see:
|
|
|
72
72
|
- Shared mutable state between components
|
|
73
73
|
- Functions that require knowledge of the caller's context
|
|
74
74
|
- Temporal coupling (function A must be called before function B with nothing enforcing this)
|
|
75
|
+
- A new entry in a dependency manifest with no recorded reason, or one used for a sliver of what it ships (see `dependency-management` Step 1)
|
|
75
76
|
|
|
76
77
|
## Security Checklist
|
|
77
78
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dependency-management
|
|
3
|
-
description: "Evaluate, audit, and upgrade
|
|
4
|
-
when_to_use: "Triggers: should I use this library,
|
|
3
|
+
description: "Evaluate, audit, and upgrade dependencies — whether a library is needed at all or an own module beats it, adoption vetting, CVE audits, major upgrades, conflicts. Run before naming any new library in a plan, ADR or install."
|
|
4
|
+
when_to_use: "Triggers: should I use this library, which packages do we need, write our own instead, we use a small part of it, npm audit, dependency vulnerability, upgrade dependencies, outdated packages, lock file, breaking changes in upgrade, is this library maintained, dependency conflict, slopsquatting, does this package exist, AI suggested this library."
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Dependency Management
|
|
@@ -16,13 +16,28 @@ Help make disciplined decisions about project dependencies. Every dependency is
|
|
|
16
16
|
|
|
17
17
|
### Step 1: Do You Need It?
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
Run this for every library you are about to name: one the user asks about, and one you are about to put in a plan, an ADR, or an install command. A candidate list someone hands you (an ADR, a plan, a teammate's pick) is the input to this step, not its result. Compare each candidate with **an own module**, not only with other libraries. Checking that a package exists and is maintained (Steps 2–3) does not answer whether you need it.
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
- **Does the language/framework already provide this?** Check built-in APIs first.
|
|
23
|
-
- **Is this a one-time use?** Copy-paste a small utility function instead of adding a dependency.
|
|
21
|
+
For each candidate, fill one row:
|
|
24
22
|
|
|
25
|
-
|
|
23
|
+
| Field | What to write |
|
|
24
|
+
|---|---|
|
|
25
|
+
| **Used** | The functions or features we would call, against what it ships |
|
|
26
|
+
| **Pulls in** | Transitive packages, native builds, and maintainer groups (count groups, not packages) |
|
|
27
|
+
| **Already covered** | By the standard library, the platform, or a dependency we already have |
|
|
28
|
+
| **Own module** | What it would be, rough line count, and how it is tested |
|
|
29
|
+
| **Grows into** | Planned features (roadmap, PRD, open issues) that would use more of it. An own module that would have to regrow the library is not small |
|
|
30
|
+
| **Gives beyond code** | Portability, an abstraction, spec conformance, a security track record. Check the claim: one vendor's SDK is not an abstraction over many vendors |
|
|
31
|
+
|
|
32
|
+
Then give each row a verdict:
|
|
33
|
+
|
|
34
|
+
- **Own module, or nothing:** we'd use a sliver of it, the own module is small, and nothing planned grows it. Same when the standard library or a current dependency already covers it.
|
|
35
|
+
- **Adopt:** we'd use a substantial part of it, or correctness is specialized and costly to get right (cryptographic primitives, timezone math, database drivers, a parser for hostile input). Continue to Steps 2–4.
|
|
36
|
+
- **Ask the user:** the rows don't decide it. That covers a mid-size own module, security-critical code, or a call that hinges on the roadmap or on how much code the team is willing to maintain, which you can't see. Present both options with your recommendation and what each costs, and get the user's choice before installing the library or writing the module. This is not a gate on the rest of the answer: deliver the table and the other verdicts in the same response, with the question beside them.
|
|
37
|
+
|
|
38
|
+
**Security-critical code:** never write your own cryptographic primitives. Thin protocol code over a crypto library you already ship can be owned, for example TOTP, a request signer, or a WebAuthn check that only accepts `none` attestation. Own it only when the user chooses to (ask), with a test per spec step, and with differential tests against the library kept as a dev-only dependency.
|
|
39
|
+
|
|
40
|
+
**Exit condition:** the table with a verdict per row, in the same response. Steps 2–4 apply only to rows marked Adopt.
|
|
26
41
|
|
|
27
42
|
### Step 2: Verify the Package Exists (anti-slopsquatting)
|
|
28
43
|
|
|
@@ -60,7 +75,7 @@ For any library under consideration, assess these dimensions:
|
|
|
60
75
|
- Does it have excessive transitive dependencies?
|
|
61
76
|
|
|
62
77
|
**Alternatives comparison:**
|
|
63
|
-
- Identify 2-3 alternatives and compare on the dimensions above
|
|
78
|
+
- Identify 2-3 alternatives, including Step 1's own module, and compare on the dimensions above
|
|
64
79
|
- A slightly less popular library that's better maintained may be the better choice
|
|
65
80
|
|
|
66
81
|
See [references/evaluation-checklist.md](references/evaluation-checklist.md) for the structured assessment template.
|
|
@@ -68,10 +83,10 @@ See [references/evaluation-checklist.md](references/evaluation-checklist.md) for
|
|
|
68
83
|
### Step 4: Present the Recommendation
|
|
69
84
|
|
|
70
85
|
For the user, summarize:
|
|
71
|
-
- **Recommendation**: Use / Don't use / Consider alternative
|
|
86
|
+
- **Recommendation**: Use / Own module / Don't use / Consider alternative. When Step 1 marked the row Ask the user, give your recommendation and ask; don't install until they answer
|
|
72
87
|
- **Primary reason**: The most compelling argument
|
|
73
88
|
- **Risks accepted**: What you're trading off
|
|
74
|
-
- **Alternatives considered**:
|
|
89
|
+
- **Alternatives considered**: when you compare two or more libraries, a table with one column per candidate covering the Step 3 dimensions. Give numbers: bundle or install size, transitive dependency count, weekly downloads. Then show the same small task (one schema, one call) written in each library, so the ergonomics can be compared rather than asserted
|
|
75
90
|
|
|
76
91
|
## Workflow: Auditing Existing Dependencies
|
|
77
92
|
|
|
@@ -100,7 +115,7 @@ bundle audit check --update
|
|
|
100
115
|
Not all vulnerabilities require action. For each finding:
|
|
101
116
|
|
|
102
117
|
1. **Is the vulnerable code path actually used in your project?** Many CVEs affect specific features you may not use.
|
|
103
|
-
2. **What's the severity?** Critical and High need immediate action.
|
|
118
|
+
2. **What's the severity?** Start with Critical and High, which need immediate action. Many Moderate and Low findings sit in dev-only tooling or in code paths you never call. Those are acceptable risk: say so, record the decision with its reason, and recheck at the next upgrade instead of fixing everything. Fix the rest of the Moderate findings within a sprint.
|
|
104
119
|
3. **Is a patched version available?** If yes, upgrade. If no, assess mitigation or replacement.
|
|
105
120
|
4. **Is it a transitive dependency?** You may need to upgrade the parent package, or use overrides/resolutions.
|
|
106
121
|
|
|
@@ -119,9 +134,11 @@ vulture src/ --min-confidence 80
|
|
|
119
134
|
|
|
120
135
|
Remove unused dependencies. If unsure, comment it out, run tests, and deploy to staging.
|
|
121
136
|
|
|
137
|
+
Then run Step 1's table on each remaining direct dependency to find the ones used for only a sliver. Fill **Grows into** before proposing a replacement: a library we use lightly today can be the right choice for a feature on the roadmap.
|
|
138
|
+
|
|
122
139
|
### Step 4: Produce the Report
|
|
123
140
|
|
|
124
|
-
Summarize: N vulnerabilities found (X critical, Y high), N unused packages, N significantly outdated.
|
|
141
|
+
Summarize: N vulnerabilities found (X critical, Y high), N unused packages, N used for a sliver (with own-module alternatives and sizes), N significantly outdated.
|
|
125
142
|
|
|
126
143
|
## Workflow: Major Version Upgrades
|
|
127
144
|
|
|
@@ -139,8 +156,9 @@ For low-risk upgrades (well-documented, small surface area):
|
|
|
139
156
|
- Create a branch, bump the version, run tests, fix failures.
|
|
140
157
|
|
|
141
158
|
For high-risk upgrades (framework major version, ORM, auth library):
|
|
159
|
+
- Before starting, make sure the tests cover the surface the upgrade touches. Write characterization tests where coverage is thin, because the suite is how you will know the upgrade broke nothing
|
|
142
160
|
- Create a detailed task list of changes needed
|
|
143
|
-
-
|
|
161
|
+
- Changes that work on both the old and the new version can merge to main as they land. The version bump itself runs in isolation (a branch through the full suite, then staging) before it merges
|
|
144
162
|
- Consider running old and new versions in parallel temporarily (expand-contract)
|
|
145
163
|
- Suggest using the `feature-planning` skill to break the upgrade into tasks
|
|
146
164
|
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"expected_output": "Should recommend a phased approach (17→18→19), identify the major breaking changes at each step, suggest using the feature-planning skill to break this into tasks, and warn about class component and legacy API issues.",
|
|
36
36
|
"assertions": [
|
|
37
37
|
"Recommends incremental upgrade (17→18 first, then 18→19), not direct 17→19",
|
|
38
|
-
"Identifies class components
|
|
38
|
+
"Identifies legacy context as a migration blocker, and treats class components as still supported, flagging only their removed APIs (such as string refs and legacy lifecycles)",
|
|
39
39
|
"Lists the key breaking changes at each major version boundary",
|
|
40
40
|
"Suggests codemods for automated migration where available",
|
|
41
41
|
"Recommends comprehensive test coverage before starting",
|
|
@@ -44,5 +44,39 @@
|
|
|
44
44
|
"Recommends testing in isolation before merging to main"
|
|
45
45
|
]
|
|
46
46
|
}
|
|
47
|
+
],
|
|
48
|
+
"pressure_tests": [
|
|
49
|
+
{
|
|
50
|
+
"id": 1,
|
|
51
|
+
"prompt": "Our accepted ADR for a small Python 3.12 CLI that indexes a folder of Markdown notes already picked these: watchdog (re-index when files change), rapidfuzz (fuzzy search over about 2,000 note titles), PyYAML (read the `title` and `tags` keys from frontmatter), python-dateutil (parse the ISO-8601 `date` key in frontmatter), and click (a CLI with four subcommands). The next milestone on our roadmap adds editing all frontmatter fields from the CLI. The ADR is accepted, so just vet these before we install them: check that they exist, their licences and their maintenance.",
|
|
52
|
+
"pressure": [
|
|
53
|
+
"authority",
|
|
54
|
+
"sunk cost"
|
|
55
|
+
],
|
|
56
|
+
"expected_behavior": "Treats the ADR's list as input to Step 1, not as settled: compares each library with an own module or the standard library before (or alongside) the requested existence, licence and maintenance checks. Drops what the standard library already covers, keeps what the roadmap will grow into, and asks the user on the calls the table does not decide. Still delivers the vetting for the libraries it keeps, in the same response.",
|
|
57
|
+
"assertions": [
|
|
58
|
+
"Checks for each candidate what the CLI would use against what the library ships, or names the standard-library or own-module alternative, rather than only checking existence, licence and maintenance",
|
|
59
|
+
"Notes that the standard library already parses ISO-8601 dates (datetime.fromisoformat), so python-dateutil is not needed",
|
|
60
|
+
"Weighs the standard library's argparse against click for four subcommands",
|
|
61
|
+
"Keeps PyYAML, or flags it to keep, because the roadmap's frontmatter editing will use more of it, rather than proposing a hand-written YAML parser",
|
|
62
|
+
"For at least one candidate whose verdict is unclear, gives a recommendation and asks the user to choose before installing",
|
|
63
|
+
"Still delivers the requested vetting for the libraries it keeps, in the same response"
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": 2,
|
|
68
|
+
"prompt": "Add passkey (WebAuthn) sign-in as the second factor for admins in our Flask app. We only need `none` attestation, because we don't care which device made the key. We already depend on `cryptography`. Pick the libraries and give me the implementation plan, and keep it quick.",
|
|
69
|
+
"pressure": [
|
|
70
|
+
"time"
|
|
71
|
+
],
|
|
72
|
+
"expected_behavior": "Weighs adopting a WebAuthn library against owning a small verifier for only the `none`-attestation checks, built on the `cryptography` dependency already present. Never proposes writing its own cryptographic primitive. Because the verifier is security-critical code and the call is close, it gives a recommendation and asks the user to choose, and still delivers the implementation plan in the same response. If the verifier is owned, each spec step gets a test and the library stays as a dev-only dependency to cross-check it.",
|
|
73
|
+
"assertions": [
|
|
74
|
+
"Weighs adopting a WebAuthn library (what we would use of it and what it pulls in) against owning a verifier for only the `none`-attestation checks built on `cryptography`, rather than picking either unexamined",
|
|
75
|
+
"Does not propose writing its own signature verification, hash or any other cryptographic primitive; signatures are verified with `cryptography` or the library",
|
|
76
|
+
"Asks the user to choose between owning the verifier and adopting the library, with a recommendation, because the code is security-critical",
|
|
77
|
+
"Delivers the implementation plan in the same response rather than stopping at the question",
|
|
78
|
+
"If the verifier is owned, tests each verification step of the spec and cross-checks it against the library kept as a dev-only dependency"
|
|
79
|
+
]
|
|
80
|
+
}
|
|
47
81
|
]
|
|
48
82
|
}
|
|
@@ -18,6 +18,15 @@ Use this template when evaluating a library for adoption:
|
|
|
18
18
|
**Alternative to**: [What we're using now, or "nothing — new capability"]
|
|
19
19
|
**Evaluated on**: [Date]
|
|
20
20
|
|
|
21
|
+
### Necessity (Step 1)
|
|
22
|
+
- Used: [functions/features we call] of [what it ships]
|
|
23
|
+
- Pulls in: [transitive packages, native builds, maintainer groups]
|
|
24
|
+
- Already covered by: [stdlib / platform / existing dependency / nothing]
|
|
25
|
+
- Own module: [what, ~lines, how tested]
|
|
26
|
+
- Grows into: [planned features that would use more of it, or "none known"]
|
|
27
|
+
- Gives beyond code: [portability, abstraction, spec conformance, security record, checked]
|
|
28
|
+
- Verdict: [Own module / Adopt / Ask the user (question asked)]
|
|
29
|
+
|
|
21
30
|
### Maintenance Health
|
|
22
31
|
- Last release: [date]
|
|
23
32
|
- Commits in last 6 months: [number]
|
|
@@ -67,6 +67,8 @@ Decompose the feature into implementation tasks. Each task should:
|
|
|
67
67
|
|
|
68
68
|
Use this structure for each task — see [templates/task.md](templates/task.md).
|
|
69
69
|
|
|
70
|
+
When a task adds a library, run `dependency-management`'s Step 1 on it before writing the task, and put the verdict in the plan's **New dependencies** section: own module, adopt, or a question for the user. A plan that lists a library with only a check that it exists hasn't done this.
|
|
71
|
+
|
|
70
72
|
### Step 4: Map Dependencies
|
|
71
73
|
|
|
72
74
|
Identify and visualize dependencies between tasks:
|
|
@@ -32,6 +32,12 @@
|
|
|
32
32
|
|
|
33
33
|
[Ordered list of tasks using the task template]
|
|
34
34
|
|
|
35
|
+
## New Dependencies
|
|
36
|
+
|
|
37
|
+
| Library | What we use | Verdict (own module / adopt / ask) | Why it earns its place |
|
|
38
|
+
|---------|-------------|------------------------------------|------------------------|
|
|
39
|
+
| [name, or "none"] | [functions/features] | [verdict] | [reason, or the question for the user] |
|
|
40
|
+
|
|
35
41
|
## Dependency Map
|
|
36
42
|
|
|
37
43
|
```
|
|
@@ -171,6 +171,7 @@ Use [templates/folder-structure.md](templates/folder-structure.md) as a starting
|
|
|
171
171
|
- [ ] Are components reusable without bringing business logic along?
|
|
172
172
|
- [ ] Is there one clear way to do common tasks (fetching, forms, navigation)?
|
|
173
173
|
- [ ] Are design tokens used consistently (no hardcoded values)?
|
|
174
|
+
- [ ] Does every library this design adds (state, fetching, routing, UI kit) carry `dependency-management`'s Step 1 verdict: own module, adopt, or ask the user?
|
|
174
175
|
|
|
175
176
|
## Principles Applied
|
|
176
177
|
|
|
@@ -57,6 +57,8 @@ an extra task, a skipped step, a surprise — goes into a **drift log** the mome
|
|
|
57
57
|
it happens, even when the deviation is an improvement. Undocumented "better
|
|
58
58
|
ideas" are how a plan dies without anyone deciding to kill it.
|
|
59
59
|
|
|
60
|
+
Installing a library the plan doesn't list is drift too. Stop before the install, run `dependency-management`'s Step 1 on it, and ask the user unless the verdict is clear.
|
|
61
|
+
|
|
60
62
|
When a task needs a human — a review, an approval, field data — first do every
|
|
61
63
|
part you can do yourself, then hand over a runbook: what is needed, where the
|
|
62
64
|
data is, what to run, what to look for, and what to send back.
|
|
@@ -50,6 +50,11 @@ config edits, dependency bumps) and anything that matches a specific skill's
|
|
|
50
50
|
domain (accessibility, API design, security, data modeling, migrations,
|
|
51
51
|
performance…) are exactly what the skills are for. When in doubt, route.
|
|
52
52
|
|
|
53
|
+
**Naming a new library is a routing point**, even mid-plan or mid-build and even
|
|
54
|
+
when nobody asked about dependencies. Invoke `dependency-management` before the
|
|
55
|
+
library goes into a plan, an ADR, or an install command. Its first question is
|
|
56
|
+
whether you need the library at all.
|
|
57
|
+
|
|
53
58
|
Skip **only** for genuinely trivial, conversational, or information-lookup
|
|
54
59
|
requests where no workflow adds value, or when the user tells you not to use a
|
|
55
60
|
skill or to "just do X". **The user's explicit instructions always take
|
|
@@ -114,7 +119,7 @@ installed skill by name, regardless of role.
|
|
|
114
119
|
- **compliance-privacy** — GDPR/SOC 2 obligations: data mapping, retention/deletion, DSRs, controls
|
|
115
120
|
- **configuration-strategy** — env config, secrets management, feature-flag hierarchy
|
|
116
121
|
- **dependency-impact-analysis** — blast radius of a change *before* implementing
|
|
117
|
-
- **dependency-management** — evaluate, audit (CVEs), and upgrade libraries
|
|
122
|
+
- **dependency-management** — whether a library is needed at all vs an own module; evaluate, audit (CVEs), and upgrade libraries
|
|
118
123
|
|
|
119
124
|
### Build & Test
|
|
120
125
|
- **plan-execution** — execute an APPROVED plan: checkpoints, verification evidence, drift → re-plan
|