swe-workflow-skills 0.8.1 → 0.9.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/README.md +6 -5
- 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 +9 -8
- 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/browser-verification/evals/evals.json +7 -7
- 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/data-modeling/evals/evals.json +6 -7
- 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-model-deployment/SKILL.md +8 -1
- 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 +2 -2
- package/skills/plan-execution/SKILL.md +14 -0
- package/skills/plan-execution/evals/evals.json +9 -9
- package/skills/project-documentation/SKILL.md +8 -0
- package/skills/project-documentation/evals/evals.json +4 -4
- package/skills/refactoring/evals/evals.json +6 -7
- package/skills/retrospective/evals/evals.json +11 -12
- 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 +48 -3
- package/skills/strategic-review/evals/evals.json +13 -11
- package/skills/tdd-workflow/SKILL.md +3 -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 -14
- package/skills/writing-skills/SKILL.md +111 -0
- package/skills/writing-skills/evals/evals.json +3 -3
package/README.md
CHANGED
|
@@ -26,8 +26,8 @@ don't cover:
|
|
|
26
26
|
intent to the right skill(s) and chains them across phases. Community measurements put
|
|
27
27
|
Claude's own description-based auto-triggering at roughly a coin flip to ~84%; here
|
|
28
28
|
activation is *routed and deterministic* instead, and the routing eval harness measures
|
|
29
|
-
it (top-1 accuracy
|
|
30
|
-
CI) — see the [routing benchmark](docs/ROUTING-BENCHMARK.md). This is the one thing the
|
|
29
|
+
it (top-1 accuracy 65/65 and one boundary misroute in 65 on the committed k=3 baseline,
|
|
30
|
+
regression-gated in CI) — see the [routing benchmark](docs/ROUTING-BENCHMARK.md). This is the one thing the
|
|
31
31
|
platform still doesn't do for you.
|
|
32
32
|
- **Every skill stays reachable, no pre-picking.** Claude Code injects skill descriptions
|
|
33
33
|
only up to ~1% of context, so large libraries silently stop auto-triggering past ~20–40
|
|
@@ -38,9 +38,10 @@ don't cover:
|
|
|
38
38
|
([how it works](docs/ROLES.md)).
|
|
39
39
|
- **Tested like code, not prose.** Every skill ships 3 evals; two LLM-as-judge
|
|
40
40
|
harnesses (content quality and routing accuracy) replay them with skill loaded vs
|
|
41
|
-
absent and gate regressions in CI. Across all 66 skills — 234 cases, 1315 assertions
|
|
42
|
-
the same model passes **
|
|
43
|
-
loaded, and **no skill scores below the
|
|
41
|
+
absent and gate regressions in CI. Across all 66 skills — 234 cases, 1315 assertions,
|
|
42
|
+
every row measured at k>=3 — the same model passes **64.1%** of assertions without the
|
|
43
|
+
skill's content and **97.9%** with the skill loaded, and **no skill scores below the
|
|
44
|
+
no-content baseline on any case**
|
|
44
45
|
([results](docs/EVALS.md#results-content-evals-full-catalog)). Safety-critical skills
|
|
45
46
|
(deploys, releases, tests, incidents, security) are **hardened**: an Iron Law, a
|
|
46
47
|
rationalization table distilled from real baseline failures, and pressure tests that
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.9.0
|
package/catalog.json
CHANGED
|
@@ -323,7 +323,7 @@
|
|
|
323
323
|
},
|
|
324
324
|
{
|
|
325
325
|
"name": "verification-before-completion",
|
|
326
|
-
"description": "Evidence gate before
|
|
326
|
+
"description": "Evidence gate before any claim that work is done, fixed, passing, or deployed. Route here when a message declares the work finished or asks to commit, push, merge, ship, or close it out, including a brief sign-off, and before git-workflow or release-management act on it. Writing the commit message or PR text itself → git-workflow. Triggers: is it done, did it work, tests pass, verify, ready to commit, before I push, confirm the fix.",
|
|
327
327
|
"path": "verification-before-completion/SKILL.md"
|
|
328
328
|
},
|
|
329
329
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "swe-workflow-skills",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
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": {
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
{
|
|
21
21
|
"id": 2,
|
|
22
22
|
"prompt": "Audit this React component for accessibility issues:\n\n<div className=\"card\" onClick={() => navigate(`/project/${id}`)}>\n <div className=\"title\">{name}</div>\n <img src={thumbnail} />\n <div className=\"badge\" style={{color: status === 'active' ? 'green' : 'red'}}>\n {status}\n </div>\n <div className=\"actions\">\n <div className=\"btn\" onClick={(e) => { e.stopPropagation(); onDelete(id); }}>\n 🗑️\n </div>\n </div>\n</div>",
|
|
23
|
-
"expected_output": "Should identify all accessibility issues: clickable div instead of link/button, missing alt on img, color-only status indicator, icon button without label, no keyboard support. Assertion #2 was reworded 2026-08-28: it asserted a color-ONLY indicator, which this fixture does not contain — the badge renders {status} as text, so color is redundant reinforcement and WCAG 1.4.1 is not violated. At k=5, 7 of 10 judges recorded the reply correctly ruling 1.4.1 out and flagging 1.4.3 contrast instead; the assertion was punishing the right answer. It now targets the failure the fixture really has.",
|
|
23
|
+
"expected_output": "Should identify all accessibility issues: clickable div instead of link/button, missing alt on img, color-only status indicator, icon button without label, no keyboard support. Assertion #2 was reworded 2026-08-28: it asserted a color-ONLY indicator, which this fixture does not contain — the badge renders {status} as text, so color is redundant reinforcement and WCAG 1.4.1 is not violated. At k=5, 7 of 10 judges recorded the reply correctly ruling 1.4.1 out and flagging 1.4.3 contrast instead; the assertion was punishing the right answer. It now targets the failure the fixture really has. 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 7 (validate) — 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, which let controls pass on substance in an earlier case.",
|
|
24
24
|
"assertions": [
|
|
25
25
|
"Identifies clickable div should be an <a> or <Link> (for navigation)",
|
|
26
26
|
"Identifies missing alt attribute on the image",
|
|
@@ -29,7 +29,8 @@
|
|
|
29
29
|
"Identifies emoji icon without accessible label (aria-label needed)",
|
|
30
30
|
"Notes that div+onClick has no keyboard support (no Enter/Space handling)",
|
|
31
31
|
"Provides corrected accessible version of the component",
|
|
32
|
-
"Corrected version uses semantic HTML (a, button, img alt)"
|
|
32
|
+
"Corrected version uses semantic HTML (a, button, img alt)",
|
|
33
|
+
"Recommends validating the corrected component manually with a keyboard-only pass and a screen reader, not only by reading the code or running an automated checker"
|
|
33
34
|
]
|
|
34
35
|
},
|
|
35
36
|
{
|
|
@@ -16,24 +16,25 @@
|
|
|
16
16
|
{
|
|
17
17
|
"id": 2,
|
|
18
18
|
"prompt": "Our LLM feature summarizes long sales calls. We have no ground-truth summaries and no users yet. How do we evaluate quality with zero labeled data?",
|
|
19
|
-
"expected_output": "Does not treat missing labels as a blocker: proposes reference-free evaluation (rubric-based LLM-as-judge, groundedness against the source call, pairwise comparison between variants), bootstraps a small human-labeled golden set, calibrates the judge against human spot-checks, and plans online signals (feedback, A/B) once users exist",
|
|
19
|
+
"expected_output": "Does not treat missing labels as a blocker: proposes reference-free evaluation (rubric-based LLM-as-judge, groundedness against the source call, pairwise comparison between variants), bootstraps a small human-labeled golden set, calibrates the judge against human spot-checks, and plans online signals (feedback, A/B) once users exist 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 5 (gate changes in CI) — 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, which let controls pass on substance in an earlier case.",
|
|
20
20
|
"assertions": [
|
|
21
21
|
"Does not claim evaluation is impossible without labels — proposes reference-free approaches such as rubric-based LLM-as-judge, groundedness against the source transcript, or pairwise comparison between variants",
|
|
22
22
|
"Recommends bootstrapping a small human-labeled golden set (even tens of examples) and explains what it buys",
|
|
23
23
|
"Designs the judge with an explicit rubric or criteria decomposition rather than a bare overall score",
|
|
24
24
|
"Mentions checking the judge against human spot-checks (calibration/agreement) or using voting to reduce judge noise",
|
|
25
|
-
"Plans for online signals after launch (user feedback, A/B testing) as a complement to offline evals"
|
|
25
|
+
"Plans for online signals after launch (user feedback, A/B testing) as a complement to offline evals",
|
|
26
|
+
"Runs the golden set as a CI gate on every prompt or model change, failing on regression against the last accepted baseline rather than below an absolute score"
|
|
26
27
|
]
|
|
27
28
|
},
|
|
28
29
|
{
|
|
29
30
|
"id": 3,
|
|
30
|
-
"prompt": "
|
|
31
|
-
"expected_output": "
|
|
31
|
+
"prompt": "We're fine-tuning a summarizer. I want every run's hyperparameters logged so the team can compare them, and I want that comparison ranked by how good the summaries actually are — not by training loss. What should we set up?",
|
|
32
|
+
"expected_output": "Splits the request: capturing hyperparameters and comparing runs is tracking infrastructure, while deciding what 'good summary' means and how it is scored is evaluation design. Defines the quality measure — golden set, rubric or judge, the metric the ranking sorts on — and routes the run-logging half to ml-experiment-tracking.",
|
|
32
33
|
"assertions": [
|
|
33
|
-
"
|
|
34
|
-
"Refers to
|
|
35
|
-
"
|
|
36
|
-
"States the boundary: tracking records and compares
|
|
34
|
+
"Separates the two halves: run logging and comparison infrastructure versus defining the summary-quality measure the ranking needs",
|
|
35
|
+
"Refers to ml-experiment-tracking for capturing hyperparameters and comparing runs",
|
|
36
|
+
"Defines the quality measure itself — an evaluation set, a rubric or judge, and the metric the ranking would sort on — rather than handing the whole request off",
|
|
37
|
+
"States the boundary: tracking records and compares whatever score it is given; evaluation design decides what counts as good and how it is scored"
|
|
37
38
|
]
|
|
38
39
|
}
|
|
39
40
|
]
|
|
@@ -33,15 +33,14 @@
|
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
"id": 3,
|
|
36
|
-
"prompt": "We
|
|
37
|
-
"expected_output": "
|
|
36
|
+
"prompt": "We're adding a /transactions endpoint to our finance API. Clients need to page through a customer's transactions, filter by date range and by status, and sort by either amount or date. The table has around 400 million rows. I want the design settled before anyone writes code — what does the endpoint look like, and what has to be true underneath it to serve that?",
|
|
37
|
+
"expected_output": "Splits a request whose halves the skill roster does not separate. What the endpoint promises — the pagination style, how filters and sorts are expressed, what comes back for an invalid page cursor — is this skill's work, and it delivers that concretely. Whether the store can serve every filter and sort combination at 400 million rows is an index and partitioning question data-modeling owns. The two meet at the pagination choice: a cursor needs a stable unique ordering key, which is simultaneously a contract decision and an index decision, so a good answer names that dependency rather than treating cursor and offset as interchangeable.",
|
|
38
38
|
"assertions": [
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"Notes that this is a breaking change requiring versioning or migration plan"
|
|
39
|
+
"Separates the two halves: what the endpoint promises its clients, versus what the storage has to be shaped like to serve those promises",
|
|
40
|
+
"Refers to data-modeling for the index and partitioning strategy behind the filters and sorts",
|
|
41
|
+
"Delivers the endpoint contract itself — the pagination style and how filters and sorts are expressed — rather than deferring the whole request",
|
|
42
|
+
"Ties the pagination choice to a stable ordering key instead of presenting cursor and offset as interchangeable",
|
|
43
|
+
"States the boundary: API design fixes what the interface promises, while data modeling decides whether the store can keep that promise"
|
|
45
44
|
]
|
|
46
45
|
}
|
|
47
46
|
]
|
|
@@ -20,6 +20,13 @@ Understand what exists and what's needed before creating anything:
|
|
|
20
20
|
|
|
21
21
|
A simple monolith may only need one conceptual diagram. A distributed system with 5+ services likely needs canonical and runtime levels too.
|
|
22
22
|
|
|
23
|
+
**Split the ask before you start.** "Onboarding documentation" usually bundles two
|
|
24
|
+
different deliverables, and only one is this skill's. A reader who cannot tell which
|
|
25
|
+
service calls which needs a structural view — that is the work below. A reader who
|
|
26
|
+
cannot get the system running needs setup instructions, which live in the README and
|
|
27
|
+
belong to `project-documentation`. Say which half you are producing; a diagram does not
|
|
28
|
+
fix a broken local setup, and a README does not substitute for a container view.
|
|
29
|
+
|
|
23
30
|
### Step 2: Choose Abstraction Levels
|
|
24
31
|
|
|
25
32
|
Architecture documentation works at three distinct levels. Not every system needs all three — apply YAGNI.
|
|
@@ -19,28 +19,26 @@
|
|
|
19
19
|
{
|
|
20
20
|
"id": 2,
|
|
21
21
|
"prompt": "I have a simple CRUD application — Express.js backend, PostgreSQL database, deployed on a single EC2 instance behind nginx. My manager read about C4 and wants me to create all four C4 levels plus deployment diagrams plus data flow diagrams. Can you help me set this up?",
|
|
22
|
-
"expected_output": "Edge case — pushing back on unnecessary documentation complexity. Should apply YAGNI and recommend only the diagrams that earn their maintenance for a simple monolith, without refusing the request outright, and name what would later justify more detail.",
|
|
22
|
+
"expected_output": "Edge case — pushing back on unnecessary documentation complexity. Should apply YAGNI and recommend only the diagrams that earn their maintenance for a simple monolith, without refusing the request outright, and name what would later justify more detail. Whatever subset it produces uses one shared vocabulary of element names across every diagram.",
|
|
23
23
|
"assertions": [
|
|
24
24
|
"Pushes back on creating all four C4 levels for a simple monolith",
|
|
25
25
|
"Applies YAGNI — recommends only the diagrams that add value for this system's complexity",
|
|
26
|
-
"Recommends at most a system context and a single container diagram",
|
|
27
26
|
"Explains that Code-level C4 diagrams are almost never worth maintaining manually",
|
|
28
27
|
"Does not refuse the request entirely — provides a pragmatic subset",
|
|
29
28
|
"Suggests conceptual-level documentation may be sufficient for this system",
|
|
30
|
-
"Explains what would trigger the need for more detailed documentation in the future"
|
|
29
|
+
"Explains what would trigger the need for more detailed documentation in the future",
|
|
30
|
+
"Establishes a shared naming vocabulary (a glossary of element names) that every diagram uses exactly"
|
|
31
31
|
]
|
|
32
32
|
},
|
|
33
33
|
{
|
|
34
34
|
"id": 3,
|
|
35
|
-
"prompt": "
|
|
36
|
-
"expected_output": "
|
|
35
|
+
"prompt": "Three engineers joined this month and all three got stuck the same way: they can't work out which of our nine services actually calls which, and they couldn't get the stack running locally. I'd rather fix the documentation than answer these questions a fourth time. Where do we start?",
|
|
36
|
+
"expected_output": "Notices that the two complaints are not one problem. The map of which service calls which is this skill's work — which diagram levels answer that question, and what triggers an update or a review so the map does not drift once drawn — and it delivers that. Getting the stack running on a laptop is README and setup material that project-documentation owns. A good answer resists treating 'onboarding docs' as a single deliverable, because the two halves rot for different reasons and are maintained in different places. NOTE: assertion #3 was reworded 2026-09-16 from 'Names what triggers a diagram update and who owns it'. Under reply-only judges it split 2-1 on the ownership conjunct while every round named the triggers — and the skill never teaches assigning an owner (Step 6 gives update triggers and a review cadence, nothing more), so the conjunct asserted behaviour the skill does not contain. If ownership is wanted, it is a content change to Step 6, measured on its own.",
|
|
37
37
|
"assertions": [
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"If diagramming the proposed state, labels it as non-canonical since the decision hasn't been made yet",
|
|
43
|
-
"Suggests that canonical diagrams should only be updated after the decision is accepted"
|
|
38
|
+
"Separates the two halves: the map of which services call which, versus the instructions for getting the stack running locally",
|
|
39
|
+
"Refers to project-documentation for the README and the local setup instructions",
|
|
40
|
+
"Delivers the architecture-documentation half itself — which diagram levels answer the what-calls-what question — rather than deferring the whole request",
|
|
41
|
+
"Names what triggers a diagram update — the structural changes that should force one, or a review cadence — rather than leaving the diagrams' accuracy to good intentions"
|
|
44
42
|
]
|
|
45
43
|
}
|
|
46
44
|
]
|
|
@@ -27,13 +27,13 @@
|
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
29
|
"id": 3,
|
|
30
|
-
"prompt": "
|
|
31
|
-
"expected_output": "
|
|
30
|
+
"prompt": "Our nightly analytics reports are slow enough that people have started complaining. The team has split into two camps — precompute everything on a schedule, or generate on demand and stream results back — and we want to land on one this week so we can start building. Though I'll admit nobody has checked whether report speed is actually what people are unhappy about. Help us get to an answer.",
|
|
31
|
+
"expected_output": "Notices the request contains a closed question and an open one, and does not treat them alike. Choosing between precompute and on-demand streaming is a costly-to-reverse structural decision with a trade-off record, which architecture-design owns. Whether slow reports are the real complaint is still genuinely open, and that is where divergent work belongs: probe what users are actually unhappy about, and widen past the two camps to options nobody has put on the table. Does not simply adjudicate the two-way split, and does not relitigate it either.",
|
|
32
32
|
"assertions": [
|
|
33
|
-
"
|
|
34
|
-
"Refers to
|
|
35
|
-
"
|
|
36
|
-
"
|
|
33
|
+
"Separates the two questions: whether slow reports are the real complaint is still open, while precompute-versus-on-demand is a decision waiting to be made",
|
|
34
|
+
"Refers to architecture-design for choosing between precompute and on-demand and recording the trade-off",
|
|
35
|
+
"Probes what users are actually unhappy about before the two camps are compared, rather than accepting report speed as the settled problem",
|
|
36
|
+
"Generates options beyond the two the team has already named"
|
|
37
37
|
]
|
|
38
38
|
}
|
|
39
39
|
]
|
|
@@ -4,25 +4,25 @@
|
|
|
4
4
|
{
|
|
5
5
|
"id": 1,
|
|
6
6
|
"prompt": "I just finished implementing the new signup form (client validation + POST to /api/users + success toast). Unit tests pass. Can you verify it actually works in the browser before I open the PR?",
|
|
7
|
-
"expected_output": "Defines the proving flow (fill form
|
|
7
|
+
"expected_output": "Defines the proving flow (fill form -> submit -> 201 -> toast -> user exists), names how it would drive the real stack with seeded/realistic state, names the three evidence channels it will watch (console errors; network endpoint/payload/status; UI state), names the non-happy paths (validation errors, double-submit), and commits to reporting observed evidence rather than 'looks good'. NOTE: assertions #1-#4 were reworded 2026-09-04 from accomplished acts ('Runs the actual app stack ... drives the flow interactively', 'Checks all three evidence channels', 'Exercises non-happy paths', 'Reports in evidence terms - screenshots and observed results') to the COMMITMENT each states. Both arms of the harness are tool-less by construction (workflow-runner.mjs:80 tells RED 'Do NOT use any tools'; :83 tells GREEN 'do NOT run commands'), so no reply of either arm can perform any of those acts. The judge was therefore grading GREEN's promise against RED's punt, and the case's +4 margin was partly assertion wording rather than skill quality - a bad shape for THIS skill in particular, whose whole purpose is to stop claims made without evidence. This is docs/EVALS.md limitation 4 with the sign flipped: unperformable assertions usually fail GREEN forever and gate nothing (see verification-before-completion pressure:7), but here they rewarded GREEN for promising and inflated lift. The reworded assertions test what a tool-less reply can actually show, and still discriminate: RED punts with 'you drive, I read'. Verify the acts themselves in a real session or the layer-3 routing harness, which hands the model tools.",
|
|
8
8
|
"assertions": [
|
|
9
9
|
"Defines the user-visible flow that proves the change (form fill → submit → success), not just that the page loads",
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
10
|
+
"Names how it will drive the flow against the running app — the automation tool or the manual steps — and what it needs to start the stack with realistic state",
|
|
11
|
+
"Names all three evidence channels it will check: console errors, network requests (endpoint/payload/status), and the rendered UI outcome",
|
|
12
|
+
"Names the non-happy paths it will exercise for this change, such as validation errors and double-submit or backend failure",
|
|
13
|
+
"Commits to reporting observed results as evidence (e.g. 'POST /api/users returned 201, toast rendered, zero console errors') and withholds a works verdict until it has them"
|
|
14
14
|
]
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
17
|
"id": 2,
|
|
18
18
|
"prompt": "QA says the orders dashboard 'sometimes shows nothing' but every time I open it, it looks fine and there are no errors in our logs. Verify whether the page is actually broken.",
|
|
19
|
-
"expected_output": "Recognizes 'works on my visit' isn't verification of the failure condition: reproduces the states where lists show nothing — empty data, slow API (throttled loading state), failed request (5xx/CORS with the error swallowed client-side), auth/role differences, race on refresh/back — while watching the browser console and network tab (server logs won't show client-side failures), and either reproduces it with evidence or reports precisely which states were exercised and ruled out",
|
|
19
|
+
"expected_output": "Recognizes 'works on my visit' isn't verification of the failure condition: reproduces the states where lists show nothing — empty data, slow API (throttled loading state), failed request (5xx/CORS with the error swallowed client-side), auth/role differences, race on refresh/back — while watching the browser console and network tab (server logs won't show client-side failures), and either reproduces it with evidence or reports precisely which states were exercised and ruled out NOTE: assertion #4 was reworded 2026-09-05 from 'Concludes with evidence: either a reproduced failure with its trigger, or a precise list of exercised-and-passing states — not 'seems fine''. It demanded a CONCLUSION drawn from verification the harness forbids — both arms are tool-less, there is no app, URL or browser, so no reply can have reproduced a failure or exercised a state. 5 of 6 rounds failed while the judges credited the very behaviour the skill exists to produce: 'It commendably refuses to close as cannot reproduce', 'It does correctly refuse seems fine', 'the honesty about not being able to judge from one visit'. The single pass is the model: a 'What you'll get back' section committing to exactly the two evidence forms. This is the SAME defect fixed in eval:1 of this skill on 2026-09-04 (accomplished act -> commitment), which was not caught here at the time. The case had also collapsed to full parity (GREEN 4/5, RED 4/5, down from +4 at k=1) and was spent as a discriminator in its old form. Verify the actual conclusion-with-evidence behaviour in a real session or the layer-3 harness, which hands the model tools.",
|
|
20
20
|
"assertions": [
|
|
21
21
|
"Recognizes that the page rendering fine on one visit does not rule out state-dependent failure, and enumerates candidate states: empty data, slow/failed API responses, auth/role differences, or refresh/back races",
|
|
22
22
|
"Uses browser-side evidence (console, network tab) explicitly noting that server logs miss client-side failures like swallowed errors or CORS",
|
|
23
23
|
"Manipulates state to reproduce — seeding empty data, throttling, or forcing API failure — rather than only reloading the page",
|
|
24
24
|
"Checks the loading and empty states specifically (infinite spinner or blank-on-empty are classic 'shows nothing' causes)",
|
|
25
|
-
"
|
|
25
|
+
"Commits to concluding with evidence in one of two forms — a reproduced failure with its trigger, or a precise list of states exercised and passing — and explicitly rules out closing as 'seems fine' or 'cannot reproduce'"
|
|
26
26
|
]
|
|
27
27
|
},
|
|
28
28
|
{
|
|
@@ -42,14 +42,14 @@
|
|
|
42
42
|
"pressure_tests": [
|
|
43
43
|
{
|
|
44
44
|
"id": 1,
|
|
45
|
-
"prompt": "
|
|
45
|
+
"prompt": "Quick one. Prod logs show this a few times an hour:\n\njava.lang.NullPointerException: Cannot invoke \"Profile.getTimezone()\" because the return value of \"User.getProfile()\" is null\n at com.acme.notify.DigestScheduler.nextSendTime(DigestScheduler.java:88)\n\nLine 88 is `ZoneId zone = ZoneId.of(user.getProfile().getTimezone());`\n\nProfile is optional in our schema: SSO users created by the SCIM sync don't get one until they first log in. The job retries on failure and the retry goes through fine, so nothing is actually lost. Just guard it and fall back to UTC when the profile is null. It's a one-liner, no investigation needed.",
|
|
46
46
|
"pressure": ["time"],
|
|
47
|
-
"expected_behavior": "Holds the Iron Law: no fix without a confirmed root cause.
|
|
47
|
+
"expected_behavior": "Holds the Iron Law: no fix without a confirmed root cause. The developer's explanation does not fit the evidence: a user without a profile would fail on every attempt, yet the retry of the same job succeeds, so the profile exists and something makes it read as null intermittently. A UTC fallback would hide that behind silently wrong send times. Declines to ship the guard as the fix, names the mismatch, and offers a fast, bounded route to the cause (log the user id on failure and check whether those users have profiles; look at how the user is loaded on the path that fails).",
|
|
48
48
|
"assertions": [
|
|
49
|
-
"Does NOT simply add the
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"Offers a fast route to root cause under time pressure rather than skipping it"
|
|
49
|
+
"Does NOT simply add the UTC fallback as the fix",
|
|
50
|
+
"Notices that the stated cause does not fit the evidence: the retry of the same job succeeds, so the user's profile exists and the null is intermittent rather than a user who has no profile",
|
|
51
|
+
"Explains that a guard without a confirmed cause masks the symptom (for example digests sent at the wrong time for users who do have a timezone) rather than fixing it",
|
|
52
|
+
"Offers a fast route to the root cause under time pressure (such as logging the failing user id and checking whether that user has a profile, or examining how the user is loaded on the failing path) rather than skipping it"
|
|
53
53
|
]
|
|
54
54
|
}
|
|
55
55
|
]
|
|
@@ -33,15 +33,14 @@
|
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
"id": 3,
|
|
36
|
-
"prompt": "
|
|
37
|
-
"expected_output": "
|
|
36
|
+
"prompt": "We publish our SDK to npm from GitHub Actions. Today a maintainer bumps the version by hand, writes the changelog entry by hand, and then whoever notices runs the publish job. We've shipped a wrong version twice. I want one reliable process — sort it out.",
|
|
37
|
+
"expected_output": "Two different kinds of decision are tangled in one request and the roster does not separate them. What version this release is, and what belongs in the changelog, is release-management's policy work. The stages that build, test and publish — and the gate that must pass before the publish step can run at all — are this skill's, and it delivers them. A good answer wires the pipeline to carry out a policy it does not invent, rather than hard-coding a versioning scheme into the workflow file.",
|
|
38
38
|
"assertions": [
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"Does not respond by producing another full CI/CD pipeline from scratch"
|
|
39
|
+
"Separates the two halves: deciding what version a release gets and what goes in the changelog, versus wiring the steps that build and publish it",
|
|
40
|
+
"Refers to release-management for the versioning scheme and changelog generation",
|
|
41
|
+
"Delivers the pipeline half itself — the stages and the gate that must pass before publish can run — rather than deferring the whole request",
|
|
42
|
+
"Does not invent a versioning scheme or a changelog format inside the workflow file",
|
|
43
|
+
"States the boundary: release management decides what a release is, while the pipeline is what carries it out"
|
|
45
44
|
]
|
|
46
45
|
}
|
|
47
46
|
]
|
|
@@ -17,24 +17,25 @@
|
|
|
17
17
|
{
|
|
18
18
|
"id": 2,
|
|
19
19
|
"prompt": "There's a bizarre guard clause in our payment processor: `if amount == 999999: amount = amount - 1`. No comment, no test, git blame just shows a 'fixes' commit from 2019 by someone who left. Everyone's afraid to delete it. Should I?",
|
|
20
|
-
"expected_output": "Does not say 'yes, delete it' outright: digs into the 2019 commit's full context (message, sibling changes, linked ticket, the PR discussion), searches for related production data or downstream systems that might depend on the cap, and if all sources come up empty, proposes proving it's dead (logging/telemetry on the branch for a period) plus a characterization test — removal only with evidence and a safety net, not on vibes",
|
|
20
|
+
"expected_output": "Does not say 'yes, delete it' outright: digs into the 2019 commit's full context (message, sibling changes, linked ticket, the PR discussion), searches for related production data or downstream systems that might depend on the cap, and if all sources come up empty, proposes proving it's dead (logging/telemetry on the branch for a period) plus a characterization test — removal only with evidence and a safety net, not on vibes 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 6 (leave the map better than you found it) — 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, which let controls pass on substance in an earlier case. This case is expected to score identically with and without the skill: Chesterton’s fence on a magic-number guard is textbook, and a strong model unaided reaches for the pickaxe search, the units and sentinel reading, runtime evidence and a characterization test. The row gates that behaviour against regression without demonstrating a gain. That is accepted by design; it should not be re-triaged as a weak prompt.",
|
|
21
21
|
"assertions": [
|
|
22
22
|
"Investigates the 2019 commit's full context (message, other files in the same commit, linked ticket/PR discussion) rather than accepting blame's surface result",
|
|
23
23
|
"Considers that production data or a downstream system may depend on the behavior before judging it vestigial",
|
|
24
24
|
"Proposes gathering runtime evidence (logging/telemetry on the branch) to prove the code path is dead rather than assuming it",
|
|
25
25
|
"Recommends a characterization test or equivalent safety net around the behavior before/when removing it",
|
|
26
|
-
"Does not recommend immediate deletion based on the code looking senseless"
|
|
26
|
+
"Does not recommend immediate deletion based on the code looking senseless",
|
|
27
|
+
"Records the recovered reason for the guard where the next reader will find it, whether the guard is kept or removed"
|
|
27
28
|
]
|
|
28
29
|
},
|
|
29
30
|
{
|
|
30
31
|
"id": 3,
|
|
31
|
-
"prompt": "
|
|
32
|
-
"expected_output": "
|
|
32
|
+
"prompt": "I've just inherited our warehouse-routing service. The two people who built it left last month, and nobody can explain why orders for two of our regions go through a completely separate code path. Next sprint we have to fold that path into the main one, and at least three other teams consume the routing decisions this service publishes. Where do I start?",
|
|
33
|
+
"expected_output": "Notices that folding the path in safely needs two different kinds of knowledge. Why the regional path exists and what it really does — mining its history, tracing one real order through it, and treating it as load-bearing until evidence says otherwise — is this skill's work, and it delivers that. Who consumes the routing decisions the service publishes, which of them would see a changed decision or payload once the path is folded in, and how the change must be sequenced across those teams is a blast-radius question that dependency-impact-analysis owns. A good answer does not treat understanding the code as the same thing as knowing who the change will break.",
|
|
33
34
|
"assertions": [
|
|
34
|
-
"
|
|
35
|
-
"Refers to
|
|
36
|
-
"
|
|
37
|
-
"
|
|
35
|
+
"Separates the two halves: recovering why the regional path exists, versus finding who consumes its routing decisions and what folding it in would break for them",
|
|
36
|
+
"Refers to dependency-impact-analysis for mapping the consuming teams and what the change would break",
|
|
37
|
+
"Delivers the comprehension half itself — history mining and tracing one order through the separate path — rather than deferring the whole request",
|
|
38
|
+
"Treats the separate regional code path as possibly load-bearing until history or production data says otherwise"
|
|
38
39
|
]
|
|
39
40
|
}
|
|
40
41
|
]
|
|
@@ -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
|
]
|