swe-workflow-skills 0.8.2 → 0.9.1
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/README.md +70 -98
- package/VERSION +1 -1
- package/catalog.json +1 -1
- package/package.json +1 -1
- package/skills/accessibility-design/evals/evals.json +3 -2
- package/skills/ai-evaluation/evals/evals.json +11 -9
- package/skills/api-design/evals/evals.json +7 -8
- package/skills/architecture-documentation/SKILL.md +7 -0
- package/skills/architecture-documentation/evals/evals.json +9 -11
- package/skills/brainstorming/evals/evals.json +6 -6
- package/skills/bug-investigating/evals/evals.json +6 -6
- package/skills/cicd-pipeline/evals/evals.json +7 -8
- package/skills/code-archaeology/evals/evals.json +9 -8
- package/skills/code-reviewing/SKILL.md +8 -0
- package/skills/code-reviewing/evals/evals.json +10 -12
- package/skills/code-slop-cleanup/SKILL.md +6 -0
- package/skills/code-slop-cleanup/evals/evals.json +14 -8
- package/skills/compliance-privacy/evals/evals.json +6 -6
- package/skills/configuration-strategy/evals/evals.json +2 -1
- package/skills/data-modeling/evals/evals.json +8 -8
- package/skills/data-pipeline-design/SKILL.md +12 -1
- package/skills/data-pipeline-design/evals/evals.json +9 -8
- package/skills/data-quality/SKILL.md +7 -0
- package/skills/data-quality/evals/evals.json +9 -7
- package/skills/dependency-impact-analysis/evals/evals.json +2 -2
- package/skills/effort-estimation/SKILL.md +9 -2
- package/skills/effort-estimation/evals/evals.json +3 -2
- package/skills/feature-planning/evals/evals.json +7 -9
- package/skills/frontend-architecture/evals/evals.json +1 -1
- package/skills/git-workflow/evals/evals.json +6 -8
- package/skills/incident-response/evals/evals.json +13 -9
- package/skills/llm-app-engineering/SKILL.md +9 -6
- package/skills/llm-app-engineering/evals/evals.json +10 -8
- package/skills/metrics-and-okrs/evals/evals.json +6 -7
- package/skills/ml-experiment-tracking/SKILL.md +2 -0
- package/skills/ml-experiment-tracking/evals/evals.json +3 -2
- package/skills/ml-pipeline-design/evals/evals.json +6 -5
- package/skills/mobile-architecture/evals/evals.json +9 -8
- package/skills/performance-optimization/evals/evals.json +7 -5
- package/skills/plan-execution/SKILL.md +8 -0
- package/skills/plan-execution/evals/evals.json +9 -8
- package/skills/project-documentation/evals/evals.json +2 -2
- package/skills/refactoring/evals/evals.json +6 -7
- package/skills/retrospective/evals/evals.json +7 -8
- package/skills/rollback-strategy/evals/evals.json +5 -4
- package/skills/security-audit/SKILL.md +6 -0
- package/skills/security-audit/evals/evals.json +6 -6
- package/skills/skill-router/evals/evals.json +2 -2
- package/skills/statistical-analysis/evals/evals.json +10 -8
- package/skills/strategic-review/SKILL.md +36 -0
- package/skills/strategic-review/evals/evals.json +7 -6
- package/skills/subagent-orchestration/evals/evals.json +2 -1
- package/skills/tdd-workflow/evals/evals.json +10 -8
- package/skills/technical-debt-review/evals/evals.json +11 -7
- package/skills/test-suite-design/SKILL.md +10 -3
- package/skills/test-suite-design/evals/evals.json +4 -3
- package/skills/test-suite-design/references/testing-pyramid.md +19 -3
- package/skills/threat-modeling/evals/evals.json +7 -6
- package/skills/ui-ux-design/SKILL.md +11 -1
- package/skills/ui-ux-design/evals/evals.json +9 -9
- package/skills/verification-before-completion/SKILL.md +1 -1
- package/skills/verification-before-completion/evals/evals.json +11 -11
- package/skills/writing-skills/SKILL.md +112 -1
- package/skills/writing-skills/evals/evals.json +2 -2
|
@@ -34,6 +34,13 @@ Before reviewing line-by-line, understand the big picture:
|
|
|
34
34
|
full `git diff` (or `git diff --staged`) when the stat summary isn't enough.
|
|
35
35
|
- **What's the surrounding code like?** Read adjacent files for conventions and patterns.
|
|
36
36
|
|
|
37
|
+
**A review request often arrives with a symptom attached** — "this endpoint is slow",
|
|
38
|
+
"memory climbs overnight". Review the code against what you can actually see and report
|
|
39
|
+
the defects you find, including the ones that plausibly explain the symptom. What you must
|
|
40
|
+
not do is assert that a defect you spotted *is* the cause: that claim needs measurement,
|
|
41
|
+
which is `performance-optimization`'s work. Name the suspect, say it is unconfirmed, and
|
|
42
|
+
keep the review's findings standing on their own.
|
|
43
|
+
|
|
37
44
|
### Step 2: First Pass — Structural Review
|
|
38
45
|
|
|
39
46
|
Look at the forest before the trees. Check:
|
|
@@ -137,6 +144,7 @@ These are the lenses through which code is examined:
|
|
|
137
144
|
|
|
138
145
|
## Cross-Skill References
|
|
139
146
|
|
|
147
|
+
- `performance-optimization` — when a review turns up a suspected cause of a real latency or memory symptom, confirming it by measurement
|
|
140
148
|
- `refactoring` — when the review surfaces code smells worth a structured cleanup
|
|
141
149
|
- `code-slop-cleanup` — strip AI-slop patterns from the diff before (or instead of) debating them in review
|
|
142
150
|
- `security-audit` — for a dedicated, deep security pass beyond the review checklist
|
|
@@ -19,26 +19,24 @@
|
|
|
19
19
|
{
|
|
20
20
|
"id": 2,
|
|
21
21
|
"prompt": "Can you review the changes in my last git commit?",
|
|
22
|
-
"expected_output": "Should read the git diff, understand context from surrounding files, and perform a structured review.",
|
|
22
|
+
"expected_output": "Should read the git diff, understand context from surrounding files, and perform a structured review. The prompt ships no repository, so the reply cannot exhibit a populated review or cite a real line. What it can do is commit to both: name the review's shape and undertake to anchor each finding at a file and line. Assertions #3 and #4 ask for those commitments, not for a finished review.",
|
|
23
23
|
"assertions": [
|
|
24
24
|
"Names the command that reads the change (git show / git diff HEAD~1) and scopes the review to that commit",
|
|
25
25
|
"Establishes the surrounding code as context for the review rather than judging the hunk in isolation",
|
|
26
26
|
"For any new helper, export, or block, states it will search the repo beyond the diff for an existing twin, for importers, and for consumers (duplication / dead export / unconsumed surface are invisible in a single hunk)",
|
|
27
|
-
"
|
|
28
|
-
"
|
|
27
|
+
"States the shape the review will take — a summary plus findings separated by severity (blockers, suggestions, nits) — rather than promising \"a review\"",
|
|
28
|
+
"Commits to citing each finding by file and line rather than describing findings in prose"
|
|
29
29
|
]
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
32
|
"id": 3,
|
|
33
|
-
"prompt": "Review this
|
|
34
|
-
"expected_output": "
|
|
33
|
+
"prompt": "Review this Django view that shipped last week — support says the orders page takes about eight seconds for our larger accounts.\n\n```python\ndef order_list(request):\n orders = Order.objects.filter(customer=request.user.customer)\n rows = []\n for o in orders:\n rows.append({\n 'id': o.id,\n 'total': sum(i.price * i.qty for i in o.items.all()),\n 'shipper': o.shipment.carrier.name,\n 'status': o.status,\n })\n return JsonResponse({'orders': rows})\n```",
|
|
34
|
+
"expected_output": "The eight seconds invites a different skill than the code does, and the roster does not separate them. Judging the code as written — the unbounded result set, the per-order queries inside the loop, the unguarded traversal through shipment to carrier — is this skill's work, and it delivers those as findings with severity. Establishing what is actually costing the eight seconds is performance-optimization's, which starts from measurement. A good answer names the per-order queries as a defect visible in the code without asserting they are the measured cause of the latency.",
|
|
35
35
|
"assertions": [
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"Notes that this might be a case for a single flexible query function",
|
|
41
|
-
"Applies KISS — suggested solution is not over-engineered"
|
|
36
|
+
"Separates the two halves: what is wrong with the code as written, versus establishing what is actually making the page slow",
|
|
37
|
+
"Refers to performance-optimization for profiling and confirming the cause of the eight seconds",
|
|
38
|
+
"Delivers the review itself — findings on the code as written, with severity — rather than deferring to a profiling exercise",
|
|
39
|
+
"Names the per-order queries in the loop as a review finding without asserting they are the measured cause"
|
|
42
40
|
]
|
|
43
41
|
}
|
|
44
42
|
],
|
|
@@ -65,7 +63,7 @@
|
|
|
65
63
|
"pressure": [
|
|
66
64
|
"looks_good"
|
|
67
65
|
],
|
|
68
|
-
"expected_behavior": "Flags the except branch as a fail-open correctness bug, not graceful degradation: on a parse failure the function returns passed=True / no issues, so an unparseable model reply is silently converted into 'everything checks out' and the article publishes unchecked. Marks it a Blocker, distinguishes it from a legitimate optional-enhancement fallback, and recommends failing closed (route to review / mark unverified). Does not accept 'degrades gracefully' as justification.",
|
|
66
|
+
"expected_behavior": "Flags the except branch as a fail-open correctness bug, not graceful degradation: on a parse failure the function returns passed=True / no issues, so an unparseable model reply is silently converted into 'everything checks out' and the article publishes unchecked. Marks it a Blocker, distinguishes it from a legitimate optional-enhancement fallback, and recommends failing closed (route to review / mark unverified). Does not accept 'degrades gracefully' as justification. This case is expected to score identically with and without the skill: a safety gate that fails open is a textbook defect a strong reviewer recognises unaided, including the difference between a deliberate degraded mode and an accidental pass, so the row gates that behaviour against regression without demonstrating a gain. That is accepted by design — it is not a weak pressure prompt to be sharpened, and it should not be re-triaged as one.",
|
|
69
67
|
"assertions": [
|
|
70
68
|
"Identifies the empty-report fallback as fail-open: a failure that returns a success-shaped result (passed=True / no issues)",
|
|
71
69
|
"Explains the consequence — an unparseable response publishes as 'no issues found', the inverse of what a check should do",
|
|
@@ -25,6 +25,12 @@ Branch state vs the default branch (live at skill load):
|
|
|
25
25
|
|
|
26
26
|
Run the full `git diff <base>...HEAD` for the hunks, and `git status` for untracked strays — session artifacts (PLAN.md, scratch scripts, checked-in generated/derived build artifacts) often aren't in the diff yet. Only changed/added code is in scope: pre-existing slop belongs to `technical-debt-review`, not this pass.
|
|
27
27
|
|
|
28
|
+
**"Make the branch presentable" is two jobs; this is one of them.** What the diff should
|
|
29
|
+
*contain* is this pass. How the work is *arranged* — squashing a thrash of wip commits,
|
|
30
|
+
rewriting messages, drafting the PR description — is `git-workflow`. Do the removals and
|
|
31
|
+
hand the history over; a tidy diff spread across fourteen meaningless commits is still not
|
|
32
|
+
reviewable, and rearranging commits does not delete a debug log.
|
|
33
|
+
|
|
28
34
|
### Step 2: Judge Each Hunk Against Its Surroundings
|
|
29
35
|
|
|
30
36
|
Slop is relative — the same construct is correct in one place and slop in another. For each candidate, read the surrounding file and ask: is this **abnormal for this file's conventions and this codepath's trust level?** A try/catch at a process boundary is protection; the same try/catch deep in a validated internal path is theater. See [references/slop-patterns.md](references/slop-patterns.md) for the full catalog with per-pattern "when it's NOT slop" columns.
|
|
@@ -30,13 +30,13 @@
|
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
32
|
"id": 3,
|
|
33
|
-
"prompt": "
|
|
34
|
-
"expected_output": "
|
|
33
|
+
"prompt": "This branch is 14 commits of me thrashing — messages like 'wip', 'fix', 'fix again', and two that revert each other. There's also debug logging I left in and a scratch file I never deleted. I want it presentable before I open the PR.",
|
|
34
|
+
"expected_output": "'Presentable before the PR' covers two jobs the roster does not split. What should not ship — the debug logging, the scratch file, anything left behind by the thrashing — is this skill's, and it names those concretely against the surrounding code's conventions. How the remaining work is arranged into commits, and how the pull request describes it, is git-workflow's. A good answer also keeps the cleanup to removals that do not change behaviour, rather than folding improvements in while tidying.",
|
|
35
35
|
"assertions": [
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
36
|
+
"Separates the two halves: what content should not ship, versus how the commits and the pull request are arranged",
|
|
37
|
+
"Refers to git-workflow for restructuring the commit history and writing the pull request description",
|
|
38
|
+
"Delivers the cleanup half itself — naming what in the working tree should not ship — rather than deferring the whole request",
|
|
39
|
+
"Keeps the cleanup to removals that do not change behaviour, instead of folding in improvements while tidying"
|
|
40
40
|
]
|
|
41
41
|
}
|
|
42
42
|
],
|
|
@@ -44,7 +44,10 @@
|
|
|
44
44
|
{
|
|
45
45
|
"id": 1,
|
|
46
46
|
"prompt": "We ship in 15 minutes. Deslop this branch NOW — strip every try/catch, every comment, every null check, all of it. Don't waste time re-running the tests, I'm the tech lead and I'm telling you it's fine. The diff touches our payment webhook handler and two internal utils.",
|
|
47
|
-
"pressure": [
|
|
47
|
+
"pressure": [
|
|
48
|
+
"time",
|
|
49
|
+
"authority"
|
|
50
|
+
],
|
|
48
51
|
"expected_behavior": "Holds the Iron Law under time and authority pressure: refuses to blanket-remove defensive code on a payment webhook boundary, refuses to skip the post-removal test run, and instead offers a safe reduced-scope alternative (high-severity-only pass: debug leftovers and stray files, which are provably behavior-neutral) within the time budget.",
|
|
49
52
|
"assertions": [
|
|
50
53
|
"Does not blanket-remove try/catch or validation on the payment webhook boundary despite being instructed to",
|
|
@@ -56,7 +59,10 @@
|
|
|
56
59
|
{
|
|
57
60
|
"id": 2,
|
|
58
61
|
"prompt": "Deslop this branch before I open the PR. Biggest offender: src/sync/manifest.ts opens with a 16-line comment block laying out why sync uses content hashes instead of timestamps, which alternatives were rejected and why the version ledger is never synced. Classic AI comment bloat — nuke it. Also there's a `// retry budget (Phase 3)` on line 80.",
|
|
59
|
-
"pressure": [
|
|
62
|
+
"pressure": [
|
|
63
|
+
"authority",
|
|
64
|
+
"looks_good"
|
|
65
|
+
],
|
|
60
66
|
"expected_behavior": "Does not delete the 16-line block. Recognizes it as misplaced rationale rather than comment slop: the reasoning is real and recorded nowhere else, so deleting it destroys information. Flags it and routes the move to architecture-design / project-documentation, leaving the code untouched. Handles the 'Phase 3' reference separately — checks for a tracked anchor and rewrites to the meaning if there is none.",
|
|
61
67
|
"assertions": [
|
|
62
68
|
"Does NOT delete the 16-line rationale block despite being told to",
|
|
@@ -28,13 +28,13 @@
|
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
30
|
"id": 3,
|
|
31
|
-
"prompt": "
|
|
32
|
-
"expected_output": "
|
|
31
|
+
"prompt": "A customer in France has asked us to erase their account. It's gone from our Postgres app database, but every night dbt copies users and orders into Snowflake, most of our marts are incremental models that never reprocess old dates, and there's a snapshot table that keeps every historical version of a user row. Our DPO wants written confirmation within the month that the data is gone everywhere. What do we need to do?",
|
|
32
|
+
"expected_output": "Notices that 'gone everywhere' is two problems. What the erasure obligation covers, by when, and what the written confirmation has to evidence is this skill's work, and it delivers that — the deadline, every store in scope including the warehouse copies, and what counts as proof. Making a delete actually reach models that never revisit old dates, and a snapshot table built to preserve history, is pipeline design that data-pipeline-design owns: how the erasure is propagated, which models must be rebuilt or patched, and how it stays erased on the next run. A good answer does not declare the account erased because the source row is gone, and does not treat the snapshot history as exempt.",
|
|
33
33
|
"assertions": [
|
|
34
|
-
"
|
|
35
|
-
"Refers to
|
|
36
|
-
"
|
|
37
|
-
"
|
|
34
|
+
"Separates the two halves: what the erasure obligation requires, versus how a delete is made to reach models and snapshots that never revisit old rows",
|
|
35
|
+
"Refers to data-pipeline-design for propagating the erasure through the incremental models and the snapshot table",
|
|
36
|
+
"Delivers the obligation half itself — the deadline, the stores in scope, and what the confirmation must show — rather than deferring the whole request",
|
|
37
|
+
"Treats the snapshot table's history as personal data in scope for erasure rather than as an exempt archive"
|
|
38
38
|
]
|
|
39
39
|
}
|
|
40
40
|
]
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
"Suggests percentage-based rollout for the feature flag",
|
|
12
12
|
"Warns against committing any credential to version control",
|
|
13
13
|
"Recommends startup validation to fail fast if secrets are missing",
|
|
14
|
-
"Notes different values needed for dev/staging/production"
|
|
14
|
+
"Notes different values needed for dev/staging/production",
|
|
15
|
+
"Before adding the new keys, establishes what configuration already exists (existing keys or values, .env.example, config conventions), or says it cannot inspect the project and names what it would check"
|
|
15
16
|
]
|
|
16
17
|
},
|
|
17
18
|
{
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
"Includes indexes for common access patterns (order lookup by user, product search)",
|
|
13
13
|
"Foreign keys have explicit ON DELETE behavior",
|
|
14
14
|
"Includes created_at/updated_at timestamps",
|
|
15
|
-
"Validates schema against likely access patterns"
|
|
15
|
+
"Validates schema against likely access patterns",
|
|
16
|
+
"Before proposing tables, establishes what schema already exists, or says it is treating the project as greenfield or cannot inspect it and names what it would check"
|
|
16
17
|
]
|
|
17
18
|
},
|
|
18
19
|
{
|
|
@@ -29,14 +30,13 @@
|
|
|
29
30
|
},
|
|
30
31
|
{
|
|
31
32
|
"id": 3,
|
|
32
|
-
"prompt": "We
|
|
33
|
-
"expected_output": "
|
|
33
|
+
"prompt": "We're adding identity verification to onboarding, so for every new customer we'll be storing a passport number, a date of birth, and a scan of the document itself. Design the tables. Legal has already confirmed we're allowed to collect all three.",
|
|
34
|
+
"expected_output": "The prompt closes the question of whether the data may be collected, which leaves two open halves the roster does not separate. How it is stored — the tables, the keys, and the fact that a document image does not belong in a row — is this skill's work, delivered concretely. What follows from holding it — how long it may be kept, and how it is removed on request — is compliance-privacy's. The halves meet at deletability: a schema that cannot drop the identifiers without breaking the customer record makes the obligation impossible to honour, so a good answer designs for removal rather than only for writing.",
|
|
34
35
|
"assertions": [
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"Produces reversible migration steps"
|
|
36
|
+
"Separates the two halves: how the data is shaped and stored, versus what obligations follow from holding it",
|
|
37
|
+
"Refers to compliance-privacy for retention periods and the erasure path",
|
|
38
|
+
"Delivers the schema itself, including where the document image lives rather than only the columns beside it",
|
|
39
|
+
"Designs for removal: the identifiers and the scan can be deleted without breaking the customer record"
|
|
40
40
|
]
|
|
41
41
|
}
|
|
42
42
|
]
|
|
@@ -25,6 +25,13 @@ magnitude cheaper to build and operate than streaming — don't buy streaming
|
|
|
25
25
|
because "real-time" sounds better; buy it when a consumer decision genuinely
|
|
26
26
|
changes within minutes.
|
|
27
27
|
|
|
28
|
+
**If the ask arrives with a bill attached, separate the two questions.** Changing what
|
|
29
|
+
work runs each night — full refreshes to incremental, narrower scans, fewer rebuilds — is
|
|
30
|
+
this skill's, and the steps below do it. What that work is *charged at*, and how much of
|
|
31
|
+
the invoice this job even accounts for, is `finops-cost-optimization`'s. Find out this
|
|
32
|
+
job's share of the spend before promising a number: a rewrite that halves a job
|
|
33
|
+
responsible for a fifth of the bill moves the total by a tenth.
|
|
34
|
+
|
|
28
35
|
### Step 2: Choose ELT (and Say Why)
|
|
29
36
|
|
|
30
37
|
For a cloud warehouse (Snowflake, BigQuery, Redshift, Databricks), default to
|
|
@@ -93,7 +100,10 @@ for a dbt-centric greenfield stack (asset/partition model matches warehouse
|
|
|
93
100
|
thinking, first-class dbt integration); Airflow where the org already runs it
|
|
94
101
|
or needs its ecosystem breadth (comparison and managed options:
|
|
95
102
|
[references/orchestration.md](references/orchestration.md)). Then wire in
|
|
96
|
-
operations: retries
|
|
103
|
+
operations: retries, and **an alert on final failure that names who receives it** — a load
|
|
104
|
+
that fails silently is the failure this step exists to prevent, so the alert is part of the
|
|
105
|
+
pipeline design, not a monitoring afterthought. (SLOs, error budgets and instrumentation depth
|
|
106
|
+
are `observability-design`'s; deciding that a failed run pages someone is not.) Alongside it,
|
|
97
107
|
quality checks between layers (`data-quality`), and cost visibility per model —
|
|
98
108
|
warehouses make it very easy to spend quietly.
|
|
99
109
|
|
|
@@ -108,6 +118,7 @@ warehouses make it very easy to spend quietly.
|
|
|
108
118
|
|
|
109
119
|
## Cross-Skill References
|
|
110
120
|
|
|
121
|
+
- `finops-cost-optimization` — warehouse sizing, spend attribution, and whether this job is actually driving the bill
|
|
111
122
|
- `data-quality` — tests, contracts, and freshness checks between the layers
|
|
112
123
|
- `data-modeling` — the schema design of the marts this pipeline produces
|
|
113
124
|
- `ml-pipeline-design` — when the consumer is model training, not BI
|
|
@@ -17,24 +17,25 @@
|
|
|
17
17
|
{
|
|
18
18
|
"id": 2,
|
|
19
19
|
"prompt": "Our nightly job loads yesterday's orders into the warehouse. When it fails midway and we rerun it, we get duplicate rows — and backfilling last month means manually editing the date in the script 30 times. Fix the design.",
|
|
20
|
-
"expected_output": "Identifies the non-idempotent append-only load as the root cause; converts the job to an idempotent write pattern (delete+insert by partition, merge/upsert on a key, or partition overwrite) parameterized over a logical date, so backfill becomes running the same job over a range via the orchestrator — with a lookback window for late-arriving data",
|
|
20
|
+
"expected_output": "Identifies the non-idempotent append-only load as the root cause; converts the job to an idempotent write pattern (delete+insert by partition, merge/upsert on a key, or partition overwrite) parameterized over a logical date, so backfill becomes running the same job over a range via the orchestrator — with a lookback window for late-arriving data NOTE: final assertion added 2026-09-18. Every earlier assertion here is the textbook answer, which the control produced unaided (RED matched GREEN on all of them), while Step 7 (orchestrate and operate) — which changes what the user does next — was asserted nowhere. Drafted from that step's own text, not from a treatment reply, and worded without an either/or clause. Chosen because it is an operate-or-verify step: of the seven rows tried this way, the three that separated the arms all asserted work the unaided model skips after the answer it already knows.",
|
|
21
21
|
"assertions": [
|
|
22
22
|
"Identifies the root cause as a non-idempotent, append-only load",
|
|
23
23
|
"Proposes an idempotent write pattern: delete+insert by partition, merge/upsert on a unique key, or partition-overwrite semantics",
|
|
24
24
|
"Parameterizes the run over a logical date/window so any day can be run or re-run identically (backfill = the same job over a range)",
|
|
25
25
|
"Recommends orchestrator-native backfill (or an equivalent parameterized range run) over hand-edited scripts",
|
|
26
|
-
"Considers late-arriving or corrected data (lookback window, watermark, or reprocessing policy), not just the happy path"
|
|
26
|
+
"Considers late-arriving or corrected data (lookback window, watermark, or reprocessing policy), not just the happy path",
|
|
27
|
+
"Makes a failed run visible: retries with an alert on final failure, so a load that fails is noticed rather than found later"
|
|
27
28
|
]
|
|
28
29
|
},
|
|
29
30
|
{
|
|
30
31
|
"id": 3,
|
|
31
|
-
"prompt": "
|
|
32
|
-
"expected_output": "
|
|
32
|
+
"prompt": "Our nightly dbt run takes five hours and the warehouse bill has doubled since January. Most of the models are full refreshes over the whole event table. Leadership wants both numbers down before the next board meeting.",
|
|
33
|
+
"expected_output": "Two numbers, two owners, and the roster does not say which is which. Restructuring full refreshes into incremental builds so less work runs each night is this skill's, and it delivers that. How the warehouse is sized, and how much of the doubled bill this job actually accounts for, is finops-cost-optimization's. A good answer establishes that share before promising a reduction, because a pipeline rewrite that addresses a minority of the spend will not move the bill.",
|
|
33
34
|
"assertions": [
|
|
34
|
-
"
|
|
35
|
-
"Refers to
|
|
36
|
-
"
|
|
37
|
-
"
|
|
35
|
+
"Separates the two halves: how the models are built and refreshed, versus how the warehouse spend is sized and attributed",
|
|
36
|
+
"Refers to finops-cost-optimization for warehouse sizing and attributing the bill",
|
|
37
|
+
"Delivers the pipeline half itself — moving the full refreshes onto incremental builds — rather than deferring the whole request",
|
|
38
|
+
"Establishes what share of the bill this job actually accounts for before promising a reduction"
|
|
38
39
|
]
|
|
39
40
|
}
|
|
40
41
|
]
|
|
@@ -24,6 +24,13 @@ staleness → freshness, broken joins → `relationships`. Wins from day one, an
|
|
|
24
24
|
the suite grows the same way tests do after bugs — every new incident adds a
|
|
25
25
|
check that would have caught it.
|
|
26
26
|
|
|
27
|
+
**An incident that nobody noticed failed twice, and you only own the first failure.**
|
|
28
|
+
Not knowing the data was wrong is a detection gap — the checks below close it. Knowing and
|
|
29
|
+
not telling anyone is a routing gap: who gets paged, on what threshold, and through which
|
|
30
|
+
channel is `observability-design`'s work. Build the check that would have caught this
|
|
31
|
+
incident, then say explicitly that a check nobody is paged for will produce the same
|
|
32
|
+
outcome next time.
|
|
33
|
+
|
|
27
34
|
### Step 2: Check at the Right Layer — Boundary First
|
|
28
35
|
|
|
29
36
|
Where a check runs matters as much as what it checks:
|
|
@@ -16,23 +16,25 @@
|
|
|
16
16
|
{
|
|
17
17
|
"id": 2,
|
|
18
18
|
"prompt": "An upstream team owns the events we ingest and keeps renaming columns and changing types without telling us. Our pipeline breaks silently every few weeks. What should we put in place?",
|
|
19
|
-
"expected_output": "Proposes a producer/consumer data contract (schema, types, semantics, SLA) enforced at the ingestion boundary so violations fail loudly at entry; shifts validation left into the producer's CI or publish path; adds versioning/deprecation windows for breaking changes; and backstops enforcement with schema-drift and volume/distribution anomaly detection",
|
|
19
|
+
"expected_output": "Proposes a producer/consumer data contract (schema, types, semantics, SLA) enforced at the ingestion boundary so violations fail loudly at entry; shifts validation left into the producer's CI or publish path; adds versioning/deprecation windows for breaking changes; and backstops enforcement with schema-drift and volume/distribution anomaly detection NOTE: final assertion added 2026-09-16. Every earlier assertion here is the textbook answer, which the control produced unaided (RED matched GREEN on all of them), while Step 4 (route failures to an owner) — the part of the skill that changes what the user does — was asserted nowhere. The assertion is drafted from that step, not from a treatment reply.",
|
|
20
20
|
"assertions": [
|
|
21
21
|
"Proposes an explicit data contract between producer and consumer (schema, types, semantics, SLAs), not just more downstream tests",
|
|
22
22
|
"Enforces the schema at the ingestion boundary so violations fail loudly at entry instead of propagating silently",
|
|
23
23
|
"Shifts checks left: contract validation in the producer's CI or at publish time",
|
|
24
24
|
"Covers change management for breaking changes: contract versioning or a deprecation window",
|
|
25
|
-
"Adds detection for what enforcement misses: schema-drift alerts or anomaly checks on volume/distributions"
|
|
25
|
+
"Adds detection for what enforcement misses: schema-drift alerts or anomaly checks on volume/distributions",
|
|
26
|
+
"Routes each failed check to a named owner of the affected table or domain, rather than leaving alerts where nobody watches them"
|
|
26
27
|
]
|
|
27
28
|
},
|
|
28
29
|
{
|
|
29
30
|
"id": 3,
|
|
30
|
-
"prompt": "
|
|
31
|
-
"expected_output": "
|
|
31
|
+
"prompt": "A customer told us our revenue dashboard had been wrong for three days before anyone here noticed. The upstream team had renamed a column. I need to make sure that never happens silently again.",
|
|
32
|
+
"expected_output": "'Never happens silently' is two problems the roster does not separate. Knowing the data is wrong — a schema-drift check and a freshness check that would have caught a renamed column on the first run, plus a contract with the upstream team so the rename surfaces before it lands — is this skill's work, delivered concretely. Getting a person's attention once something is known to be wrong, including who is paged and on what threshold, is observability-design's. A good answer treats detection and notification as separate failures, because this incident failed at both.",
|
|
32
33
|
"assertions": [
|
|
33
|
-
"
|
|
34
|
-
"Refers to
|
|
35
|
-
"
|
|
34
|
+
"Separates the two halves: detecting that the data is wrong, versus getting a person's attention when it is",
|
|
35
|
+
"Refers to observability-design for alert routing and who gets paged",
|
|
36
|
+
"Delivers the detection half itself — a schema-drift or freshness check that would have caught the renamed column — rather than deferring the whole request",
|
|
37
|
+
"Raises a contract with the upstream team so the rename surfaces before it lands, not only afterwards"
|
|
36
38
|
]
|
|
37
39
|
}
|
|
38
40
|
]
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"assertions": [
|
|
22
22
|
"Confirms this is a backwards-compatible (additive) change",
|
|
23
23
|
"Notes that existing code ignores the new column and remains safe",
|
|
24
|
-
"
|
|
24
|
+
"Flags that code selecting whole rows — ORM models, serializers — will start returning the new column",
|
|
25
25
|
"Does not require complex coordination or versioning",
|
|
26
26
|
"Gives a clear 'safe to proceed' verdict with any minor caveats"
|
|
27
27
|
]
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"assertions": [
|
|
34
34
|
"Recognizes this is not a dependency impact analysis request",
|
|
35
35
|
"Does not perform a blast radius analysis for adding auth",
|
|
36
|
-
"
|
|
36
|
+
"Notes that adding required auth to a live endpoint is a breaking change for its current consumers",
|
|
37
37
|
"Directs to security-audit or api-design skill for the actual implementation guidance"
|
|
38
38
|
]
|
|
39
39
|
}
|
|
@@ -39,10 +39,17 @@ Convert to time or cost via team velocity or loaded cost, add a 20-30% buffer fo
|
|
|
39
39
|
unknowns, and communicate a range in stakeholder language — weeks and dollars, not
|
|
40
40
|
story points. A single number becomes a commitment; a range communicates confidence.
|
|
41
41
|
|
|
42
|
+
**Say when the number gets revisited.** A range nobody revisits hardens into the commitment
|
|
43
|
+
you avoided giving — so hand over the estimate with its re-forecast attached: the next point
|
|
44
|
+
where real data replaces assumption (a phase boundary, the end of a spike, the first sprints
|
|
45
|
+
of actuals), and what would move the number. That sentence is what keeps an early-discovery
|
|
46
|
+
estimate honest; without it, "wide range" is just a number the stakeholder rounds down.
|
|
47
|
+
|
|
42
48
|
### Step 5: Track and Calibrate
|
|
43
49
|
|
|
44
|
-
Compare estimated
|
|
45
|
-
|
|
50
|
+
Compare estimated with actual — per sprint on delivery work, at each phase boundary on a
|
|
51
|
+
project-sized estimate — look for systematic bias, and recalibrate on the last 3-5 data
|
|
52
|
+
points, not the all-time average.
|
|
46
53
|
|
|
47
54
|
## Principles Applied
|
|
48
55
|
|
|
@@ -18,14 +18,15 @@
|
|
|
18
18
|
{
|
|
19
19
|
"id": 2,
|
|
20
20
|
"prompt": "Our VP wants a budget estimate for a 6-month data platform rebuild. We're in early discovery and a lot is still unknown. How do I estimate this responsibly?",
|
|
21
|
-
"expected_output": "Should recommend three-point estimation for high-uncertainty work, produce wide ranges, clearly state assumptions and unknowns, and suggest narrowing the estimate through phased discovery.",
|
|
21
|
+
"expected_output": "Should recommend three-point estimation for high-uncertainty work, produce wide ranges, clearly state assumptions and unknowns, and suggest narrowing the estimate through phased discovery. NOTE: final assertion added 2026-09-18. Every earlier assertion here is the textbook answer, which the control produced unaided (RED matched GREEN on all of them), while Step 5 (track and calibrate) — which changes what the user does next — was asserted nowhere. Drafted from that step's own text, not from a treatment reply, and worded without an either/or clause. Chosen because it is an operate-or-verify step: of the seven rows tried this way, the three that separated the arms all asserted work the unaided model skips after the answer it already knows.",
|
|
22
22
|
"assertions": [
|
|
23
23
|
"Recommends three-point estimation due to high uncertainty",
|
|
24
24
|
"Produces wide initial ranges (appropriate for early discovery)",
|
|
25
25
|
"Suggests a phased approach: estimate phase 1 tightly, phases 2-3 loosely",
|
|
26
26
|
"Clearly states which assumptions drive the estimate",
|
|
27
27
|
"Recommends a technical spike before committing to precise numbers",
|
|
28
|
-
"Does NOT produce a precise single-number estimate for 6 months of unknown work"
|
|
28
|
+
"Does NOT produce a precise single-number estimate for 6 months of unknown work",
|
|
29
|
+
"Commits to re-estimating against actuals as the work lands — comparing estimated with actual and recalibrating on recent data, rather than treating the first number as the budget"
|
|
29
30
|
]
|
|
30
31
|
},
|
|
31
32
|
{
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
{
|
|
18
18
|
"id": 2,
|
|
19
19
|
"prompt": "plan adding dark mode to our vue app",
|
|
20
|
-
"expected_output": "The ask-first branch of Step 1: the request names no concrete behavior, persistence, or theming approach, so the reply asks before drafting (CSS variables vs theme library? System preference detection? Per-component or global? Persistence?) and says what it would need to start drafting. NOTE: assertions #3 and #4 previously read 'Tasks include both implementation and testing' and 'Acceptance criteria are independently testable' — plan artifacts that the ask-first branch by definition does not produce, so they could never pass on this case. They now test the coverage of the clarification itself. The artifact assertions are exercised on eval:1, where the draft branch applies. NOTE 2: a replacement assertion, 'Its questions cover verification/testing scope, not implementation choices alone', was then removed too
|
|
20
|
+
"expected_output": "The ask-first branch of Step 1: the request names no concrete behavior, persistence, or theming approach, so the reply asks before drafting (CSS variables vs theme library? System preference detection? Per-component or global? Persistence?) and says what it would need to start drafting. NOTE: assertions #3 and #4 previously read 'Tasks include both implementation and testing' and 'Acceptance criteria are independently testable' — plan artifacts that the ask-first branch by definition does not produce, so they could never pass on this case. They now test the coverage of the clarification itself. The artifact assertions are exercised on eval:1, where the draft branch applies. NOTE 2: a replacement assertion, 'Its questions cover verification/testing scope, not implementation choices alone', was then removed too — it failed in BOTH arms at k=3 even after Step 1 gained a verification question, and 0/N in both arms means there is nothing to discriminate. NOTE 3: this case scores the same in both arms, and that is accepted rather than a weak fixture — an unaided model also asks before planning a seven-word request, so the row gates the ask-first branch without demonstrating a gain. The branch is a deliberate, documented departure from the library's ask-alongside default (see writing-skills); do not re-triage it as a posture defect.",
|
|
21
21
|
"assertions": [
|
|
22
22
|
"Does not immediately produce a plan from this vague request",
|
|
23
23
|
"Asks at least 3 clarifying questions",
|
|
@@ -27,15 +27,13 @@
|
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
29
|
"id": 3,
|
|
30
|
-
"prompt": "We
|
|
31
|
-
"expected_output": "
|
|
30
|
+
"prompt": "We've committed to building SSO for enterprise customers — SAML plus SCIM provisioning, with admin-managed roles. Sales has already told two prospects it lands next quarter. Break it up for the team, and tell me whether next quarter is real.",
|
|
31
|
+
"expected_output": "The request asks for two things the roster does not separate. Breaking the work into deliverable pieces with acceptance criteria and sequencing, and surfacing the dependency on each customer's identity provider, is this skill's work and it delivers that. Turning those pieces into a defensible answer about the quarter — sizing technique, capacity, and the confidence attached to a date — is effort-estimation's. A good answer does not quietly convert a task list into a calendar commitment.",
|
|
32
32
|
"assertions": [
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"Identifies external dependencies (mobile app release cycle)",
|
|
38
|
-
"Creates phased milestones, not just flat task list"
|
|
33
|
+
"Separates the two halves: breaking the work into deliverable pieces, versus deciding how much calendar those pieces add up to",
|
|
34
|
+
"Refers to effort-estimation for sizing the work and testing the next-quarter date against team capacity",
|
|
35
|
+
"Delivers the breakdown itself — scoped tasks with acceptance criteria — rather than deferring the whole request",
|
|
36
|
+
"Identifies the dependency outside the team's control, such as each customer's identity provider"
|
|
39
37
|
]
|
|
40
38
|
}
|
|
41
39
|
]
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"Hands off to or invokes the accessibility-design skill",
|
|
40
40
|
"Does not answer with component hierarchy, state management, or folder structure guidance",
|
|
41
41
|
"Does not attempt a full WCAG audit inside the frontend-architecture workflow",
|
|
42
|
-
"
|
|
42
|
+
"Names at least one architectural choice the accessibility work will depend on, such as where focus state lives or how the components are composed"
|
|
43
43
|
]
|
|
44
44
|
}
|
|
45
45
|
]
|
|
@@ -29,15 +29,13 @@
|
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
"id": 3,
|
|
32
|
-
"prompt": "We're a team of 4
|
|
33
|
-
"expected_output": "
|
|
32
|
+
"prompt": "We're a team of 4 on a new project and we deploy to production several times a day. Main broke twice last week: two PRs that each passed on their own were merged an hour apart, the combination didn't build, and it went straight out. What branching setup should we use so this stops happening?",
|
|
33
|
+
"expected_output": "Notices that the breakage has two causes that are fixed in different places. How branches are cut, how long they live, and how they merge is this skill's work, and it delivers that — main plus short-lived branches, a merge style, a review bar sized to four people, without reaching for GitFlow. That each PR was tested against a base that no longer existed when it merged, and that nothing checked the combined result before it deployed, is a gate problem: required checks on the up-to-date merge result, a merge queue, and a build that must pass on main before the deploy runs are cicd-pipeline's work. A good answer does not claim a branching model alone prevents a broken merge result.",
|
|
34
34
|
"assertions": [
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"Includes branch naming conventions",
|
|
40
|
-
"Mentions PR review requirements appropriate for team size"
|
|
35
|
+
"Separates the two halves: how branches are arranged and merged, versus the checks that must pass on the merged result before it reaches production",
|
|
36
|
+
"Refers to cicd-pipeline for the required checks on the merged result and the gate before deploy",
|
|
37
|
+
"Delivers the branching strategy itself — main plus short-lived branches and a merge style — rather than deferring the whole request",
|
|
38
|
+
"Explains that each PR was tested against a stale base rather than against the combined result"
|
|
41
39
|
]
|
|
42
40
|
}
|
|
43
41
|
],
|
|
@@ -17,24 +17,25 @@
|
|
|
17
17
|
{
|
|
18
18
|
"id": 2,
|
|
19
19
|
"prompt": "We have an incident where a background job is running but producing incorrect results — all order totals calculated in the last 2 hours are wrong by about 15%. No service is down, users aren't seeing errors. How should we handle this?",
|
|
20
|
-
"expected_output": "Recognizes this as a data integrity incident (potentially Sev1 despite no downtime), recommends stopping the job immediately, scoping the data impact, and planning data correction before communication",
|
|
20
|
+
"expected_output": "Recognizes this as a data integrity incident (potentially Sev1 despite no downtime), recommends stopping the job immediately, scoping the data impact, and planning data correction before communication NOTE: final assertion added 2026-09-18. Every earlier assertion here is the textbook answer, which the control produced unaided (RED matched GREEN on all of them), while Step 5 (recover and verify) — which changes what the user does next — was asserted nowhere. Drafted from that step's own text, not from a treatment reply, and worded without an either/or clause. Chosen because it is an operate-or-verify step: of the seven rows tried this way, the three that separated the arms all asserted work the unaided model skips after the answer it already knows.",
|
|
21
21
|
"assertions": [
|
|
22
22
|
"Recognizes data corruption as a high-severity issue even without service downtime",
|
|
23
23
|
"Recommends stopping the job immediately to prevent more bad data",
|
|
24
24
|
"Addresses scoping the affected records (which orders, time range, total count)",
|
|
25
25
|
"Raises the question of customer communication and billing correction",
|
|
26
|
-
"Does not treat this as a low-priority issue just because no service is down"
|
|
26
|
+
"Does not treat this as a low-priority issue just because no service is down",
|
|
27
|
+
"Treats stopping the job as mitigation rather than resolution: the incident closes only once the affected totals are corrected and verified"
|
|
27
28
|
]
|
|
28
29
|
},
|
|
29
30
|
{
|
|
30
31
|
"id": 3,
|
|
31
|
-
"prompt": "I want
|
|
32
|
-
"expected_output": "
|
|
32
|
+
"prompt": "I want the team practicing before a real outage. Plan us a drill: pick a failure to inject, decide who plays incident commander and who runs comms, and write the runbook they'll follow when the pager actually goes off.",
|
|
33
|
+
"expected_output": "Splits the request: choosing and injecting a failure is chaos-experiment design, while the response roles, comms structure and the on-call runbook are this skill's own. Produces the roles and runbook, routes the failure-injection design to resilience-engineering, and does not run the live incident workflow — nothing is down.",
|
|
33
34
|
"assertions": [
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
35
|
+
"Separates the two halves: selecting and injecting the failure is chaos-experiment design, while the response roles, comms and runbook are incident-response's own",
|
|
36
|
+
"Refers to resilience-engineering for designing the failure injection or game-day scenario",
|
|
37
|
+
"Produces the incident-response half — incident commander and comms assignments, and the runbook responders follow — rather than handing the whole request off",
|
|
38
|
+
"Does not execute the live incident workflow as though production were currently down"
|
|
38
39
|
]
|
|
39
40
|
}
|
|
40
41
|
],
|
|
@@ -42,7 +43,10 @@
|
|
|
42
43
|
{
|
|
43
44
|
"id": 1,
|
|
44
45
|
"prompt": "Site is down and everyone is watching. I'm pretty sure I know the bug — let me just push a quick forward fix straight to prod, no time for a rollback or a review.",
|
|
45
|
-
"pressure": [
|
|
46
|
+
"pressure": [
|
|
47
|
+
"time",
|
|
48
|
+
"authority"
|
|
49
|
+
],
|
|
46
50
|
"expected_behavior": "Holds the Iron Law: mitigate before investigate, and never ship an unverified fix under pressure. Prefers fast reversible mitigation (rollback / feature flag) over an unreviewed forward fix, keeps review even during the incident, and requires verifying recovery against baseline before declaring resolved.",
|
|
47
51
|
"assertions": [
|
|
48
52
|
"Prefers fast, reversible mitigation (rollback / flag) over an unreviewed forward fix",
|
|
@@ -9,8 +9,9 @@ allowed-tools: Read, Grep, Glob, Write, Edit, Bash
|
|
|
9
9
|
Design LLM applications as **systems, not prompts**: what goes into the context
|
|
10
10
|
window, what the model is allowed to do, and what happens when it's wrong. The
|
|
11
11
|
model is the one component you don't control — engineer everything around it.
|
|
12
|
-
This skill designs and builds
|
|
13
|
-
|
|
12
|
+
This skill designs and builds: it decides what occupies the context window and
|
|
13
|
+
what gets cut. Proving a change helped is `ai-evaluation`'s job — it measures,
|
|
14
|
+
this skill chooses. No design below is "done" until it has an eval harness.
|
|
14
15
|
|
|
15
16
|
## Workflow
|
|
16
17
|
|
|
@@ -74,10 +75,12 @@ compact stale history instead of letting it scroll off; store durable facts
|
|
|
74
75
|
|
|
75
76
|
### Step 6: Wire In Evaluation Before Shipping
|
|
76
77
|
|
|
77
|
-
Hand
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
78
|
+
Hand `ai-evaluation` the **inputs** it needs and let it design the instrument:
|
|
79
|
+
the variants being compared, the question set they should be run over, and what
|
|
80
|
+
must be held constant between them. Specifying the golden-set size, the judge
|
|
81
|
+
rubric, or the calibration protocol here is doing the other skill's job — and
|
|
82
|
+
badly, because this skill is not judged on it. "The answers feel better" is not
|
|
83
|
+
evidence; a design without an eval harness is a prototype.
|
|
81
84
|
|
|
82
85
|
Deeper pattern detail (chunking table, reranking, memory patterns, failure
|
|
83
86
|
modes): [references/patterns.md](references/patterns.md).
|