swe-workflow-skills 0.7.0 → 0.8.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 CHANGED
@@ -38,9 +38,13 @@ 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. Safety-critical skills (deploys, releases, tests,
42
- incidents, security) are **hardened**: an Iron Law, a rationalization table distilled
43
- from real baseline failures, and pressure tests that try to talk the agent out of it.
41
+ absent and gate regressions in CI. Across all 66 skills — 234 cases, 1315 assertions —
42
+ the same model passes **67.1%** of assertions unaided and **94.4%** with the skill
43
+ loaded, and **no skill scores below the unaided model on any case**
44
+ ([results](docs/EVALS.md#results-content-evals-full-catalog)). Safety-critical skills
45
+ (deploys, releases, tests, incidents, security) are **hardened**: an Iron Law, a
46
+ rationalization table distilled from real baseline failures, and pressure tests that
47
+ try to talk the agent out of it.
44
48
  - **Curated, not a mega-catalog.** First-party skills, versioned and eval-gated in the
45
49
  repo — no arbitrary third-party skills pulled from a hub, and nothing that executes on
46
50
  its own (the content is instructions and templates; the only code is the open Node
@@ -183,7 +187,10 @@ Each skill carries an `evals/` directory; safety/discipline skills add a `pressu
183
187
  block. Two runners replay scenarios through Claude (skill loaded = GREEN, absent = RED)
184
188
  and judge each assertion with a skeptical LLM-as-judge: `evals/workflow-runner.mjs`
185
189
  (in-session, no API key) and `evals/run.py` (CI regression gate, wired into
186
- `.github/workflows/skill-evals.yml`). Full guide in **[EVALS.md](docs/EVALS.md)**.
190
+ `.github/workflows/skill-evals.yml`). The GREEN arm reads the skill *and* the
191
+ `references/`/`templates/` files it links to, so improving a reference file moves the
192
+ score. The first runner writes `evals/baseline.json`; the second gates against it.
193
+ Full guide in **[EVALS.md](docs/EVALS.md)**.
187
194
 
188
195
  ## Contributing
189
196
 
package/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.0
1
+ 0.8.0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "swe-workflow-skills",
3
- "version": "0.7.0",
3
+ "version": "0.8.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": {
@@ -4,15 +4,14 @@
4
4
  {
5
5
  "id": 1,
6
6
  "prompt": "We're building a SaaS platform and need to decide whether to use a multi-tenant single database or database-per-tenant approach. We have about 50 customers now, expecting 500 in a year. It's a Django app on PostgreSQL. Some customers are enterprise with strict data isolation requirements.",
7
- "expected_output": "A structured analysis with at least 3 options (shared DB with row-level security, schema-per-tenant, DB-per-tenant), trade-off analysis against quality attributes, a clear recommendation with rationale, and an ADR document.",
7
+ "expected_output": "A structured analysis with at least 3 options (shared DB with row-level security, schema-per-tenant, DB-per-tenant), trade-off analysis against quality attributes, a clear recommendation with rationale, and an ADR document. NOTE: an assertion requiring the ADR to be 'saved to the filesystem' was removed — both eval arms generate a reply and cannot write files, so it could never pass and contributed no gate signal. Verify ADR file creation in a real session instead.",
8
8
  "assertions": [
9
9
  "Presents at least 3 distinct options",
10
10
  "Analyzes trade-offs for each option (not just pros/cons lists)",
11
11
  "Considers the enterprise data isolation requirement explicitly",
12
12
  "Applies KISS and YAGNI (doesn't over-engineer for 500 customers)",
13
13
  "Makes a clear recommendation with primary reason stated",
14
- "Includes revisit triggers for when to reconsider",
15
- "Produces an ADR document saved to the filesystem"
14
+ "Includes revisit triggers for when to reconsider"
16
15
  ]
17
16
  },
18
17
  {
@@ -1,44 +1,47 @@
1
- [
2
- {
3
- "name": "Microservices architecture documentation from scratch",
4
- "description": "Happy path: documenting a moderately complex distributed system for new hires",
5
- "prompt": "We have a system with 8 microservices: a React frontend, a BFF API gateway, a user service, an order service, a payment service, a notification service, a search service, and a recommendation engine. We use PostgreSQL, Redis, RabbitMQ, and Elasticsearch. Everything runs on Kubernetes. We have no architecture diagrams and need to document this for new hires joining next month.",
6
- "assertions": [
7
- "Recommends starting with a system context diagram showing the system, users, and external dependencies",
8
- "Identifies that all three abstraction levels are appropriate for this complexity",
9
- "Prioritizes canonical and conceptual levels for the onboarding use case",
10
- "Proposes a repository structure for organizing diagrams",
11
- "Establishes or recommends a glossary with consistent naming for all 8 services",
12
- "Suggests specific tooling appropriate for each level",
13
- "Does not try to create all diagrams at once — suggests a phased approach",
14
- "Produces at least a system context diagram as the first deliverable"
15
- ]
16
- },
17
- {
18
- "name": "Over-documentation for simple system",
19
- "description": "Edge case: pushing back on unnecessary documentation complexity",
20
- "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?",
21
- "assertions": [
22
- "Pushes back on creating all four C4 levels for a simple monolith",
23
- "Applies YAGNI — recommends only the diagrams that add value for this system's complexity",
24
- "Recommends at most a system context and a single container diagram",
25
- "Explains that Code-level C4 diagrams are almost never worth maintaining manually",
26
- "Does not refuse the request entirely — provides a pragmatic subset",
27
- "Suggests conceptual-level documentation may be sufficient for this system",
28
- "Explains what would trigger the need for more detailed documentation in the future"
29
- ]
30
- },
31
- {
32
- "name": "Architecture decision vs architecture documentation",
33
- "description": "Scope boundary: separating decision-making from documentation",
34
- "prompt": "We're debating whether to extract our authentication logic into a separate service or keep it in the monolith. Can you also create architecture diagrams showing what the system would look like after the split?",
35
- "assertions": [
36
- "Recognizes the decision-making aspect and defers to the architecture-design skill for the ADR",
37
- "Does not make the architectural decision within this skill's workflow",
38
- "Offers to diagram the proposed architecture as a conceptual or draft diagram to support the decision",
39
- "Clearly separates the decision process from the documentation process",
40
- "If diagramming the proposed state, labels it as non-canonical since the decision hasn't been made yet",
41
- "Suggests that canonical diagrams should only be updated after the decision is accepted"
42
- ]
43
- }
44
- ]
1
+ {
2
+ "skill_name": "architecture-documentation",
3
+ "evals": [
4
+ {
5
+ "id": 1,
6
+ "prompt": "We have a system with 8 microservices: a React frontend, a BFF API gateway, a user service, an order service, a payment service, a notification service, a search service, and a recommendation engine. We use PostgreSQL, Redis, RabbitMQ, and Elasticsearch. Everything runs on Kubernetes. We have no architecture diagrams and need to document this for new hires joining next month.",
7
+ "expected_output": "Happy path — documenting a moderately complex distributed system for new hires. Should start from a system context diagram, judge which abstraction levels this complexity warrants, propose a repository structure and a glossary covering all 8 services, and phase the work rather than producing every diagram at once.",
8
+ "assertions": [
9
+ "Recommends starting with a system context diagram showing the system, users, and external dependencies",
10
+ "Identifies that all three abstraction levels are appropriate for this complexity",
11
+ "Prioritizes canonical and conceptual levels for the onboarding use case",
12
+ "Proposes a repository structure for organizing diagrams",
13
+ "Establishes or recommends a glossary with consistent naming for all 8 services",
14
+ "Suggests specific tooling appropriate for each level",
15
+ "Does not try to create all diagrams at once — suggests a phased approach",
16
+ "Produces at least a system context diagram as the first deliverable"
17
+ ]
18
+ },
19
+ {
20
+ "id": 2,
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.",
23
+ "assertions": [
24
+ "Pushes back on creating all four C4 levels for a simple monolith",
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
+ "Explains that Code-level C4 diagrams are almost never worth maintaining manually",
28
+ "Does not refuse the request entirely — provides a pragmatic subset",
29
+ "Suggests conceptual-level documentation may be sufficient for this system",
30
+ "Explains what would trigger the need for more detailed documentation in the future"
31
+ ]
32
+ },
33
+ {
34
+ "id": 3,
35
+ "prompt": "We're debating whether to extract our authentication logic into a separate service or keep it in the monolith. Can you also create architecture diagrams showing what the system would look like after the split?",
36
+ "expected_output": "Scope boundary — separating decision-making from documentation. Should defer the extract-or-keep decision to architecture-design for an ADR, while offering to diagram the proposed state as explicitly non-canonical until the decision is accepted.",
37
+ "assertions": [
38
+ "Recognizes the decision-making aspect and defers to the architecture-design skill for the ADR",
39
+ "Does not make the architectural decision within this skill's workflow",
40
+ "Offers to diagram the proposed architecture as a conceptual or draft diagram to support the decision",
41
+ "Clearly separates the decision process from the documentation process",
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"
44
+ ]
45
+ }
46
+ ]
47
+ }
@@ -29,6 +29,19 @@
29
29
  "Recommends concurrency control to cancel outdated runs",
30
30
  "Provides a restructured pipeline diagram"
31
31
  ]
32
+ },
33
+ {
34
+ "id": 3,
35
+ "prompt": "The pipeline itself is fine. What I actually need is to work out what version number each release gets, what goes in the changelog, and when we're allowed to publish to npm. Can you just build all that into the workflow file?",
36
+ "expected_output": "Scope boundary — versioning policy, changelog content, and publish gates are release-management decisions; this skill automates them once decided. Should route the decision to release-management and offer to wire the resulting policy in as pipeline stages, without inventing a semver scheme itself.",
37
+ "assertions": [
38
+ "Recognizes that semver policy, changelog content, and publish gating are release-management concerns",
39
+ "Hands off to or invokes the release-management skill for those decisions",
40
+ "Distinguishes deciding the release policy from automating it in the pipeline",
41
+ "Offers to implement the policy as pipeline stages once it is decided",
42
+ "Does not invent a versioning scheme or changelog format inside the CI workflow",
43
+ "Does not respond by producing another full CI/CD pipeline from scratch"
44
+ ]
32
45
  }
33
46
  ]
34
47
  }
@@ -31,6 +31,18 @@
31
31
  "Recommends adding HEALTHCHECK",
32
32
  "Provides a corrected Dockerfile"
33
33
  ]
34
+ },
35
+ {
36
+ "id": 3,
37
+ "prompt": "The image builds fine now. Next step: provision the EKS cluster, the VPC with private subnets, the RDS instance and the ECR repository on AWS. Write me the Terraform for all of it.",
38
+ "expected_output": "Scope boundary — provisioning cloud infrastructure is infrastructure-as-code territory, not containerization. Should hand off rather than writing Terraform modules here, while staying useful about the container-side artifacts that will run on that cluster.",
39
+ "assertions": [
40
+ "Recognizes that provisioning EKS/VPC/RDS/ECR is infrastructure-as-code work, not containerization",
41
+ "Hands off to or invokes the infrastructure-as-code skill",
42
+ "Does not write the Terraform modules as part of the containerization workflow",
43
+ "Distinguishes authoring images and Kubernetes manifests from provisioning the platform they run on",
44
+ "Remains useful by offering the container-side artifacts (manifests, image build) that pair with the provisioned cluster"
45
+ ]
34
46
  }
35
47
  ]
36
48
  }
@@ -27,6 +27,19 @@
27
27
  "Recommends a technical spike before committing to precise numbers",
28
28
  "Does NOT produce a precise single-number estimate for 6 months of unknown work"
29
29
  ]
30
+ },
31
+ {
32
+ "id": 3,
33
+ "prompt": "Give me story points for the new billing feature. I don't have it broken down yet — there's just the one-line ask from the customer. Just point it so I can put it in the sprint.",
34
+ "expected_output": "Scope boundary — there is nothing to estimate yet. Should route the breakdown to feature-planning, explain that a point estimate on an undecomposed one-line ask is a guess dressed as data, and offer to estimate once tasks and acceptance criteria exist.",
35
+ "assertions": [
36
+ "Identifies that no breakdown exists yet, so there is nothing meaningful to estimate",
37
+ "Hands off to or invokes the feature-planning skill to decompose the work first",
38
+ "Does not emit a story-point number for the undecomposed one-line request",
39
+ "Explains that estimating requires tasks and acceptance criteria to size against",
40
+ "Offers to run the estimation workflow once the breakdown exists",
41
+ "Does not simply refuse — gives the user a concrete next step"
42
+ ]
30
43
  }
31
44
  ]
32
45
  }
@@ -4,15 +4,14 @@
4
4
  {
5
5
  "id": 1,
6
6
  "prompt": "I need to add a notification system to our app. Users should get email and in-app notifications when someone comments on their posts. We're using a Node.js/Express backend with PostgreSQL and a React frontend. Can you help me plan this out?",
7
- "expected_output": "A structured plan with clarifying questions asked first, acceptance criteria in Given/When/Then format, 5-10 granular tasks with dependencies, risk identification, and a saved markdown plan file.",
7
+ "expected_output": "A structured plan with clarifying questions asked first, acceptance criteria in Given/When/Then format, 5-10 granular tasks with dependencies, risk identification, and a saved markdown plan file. NOTE: an assertion requiring the plan to be saved as a markdown file was removed — both eval arms generate a reply and cannot write files, so it could never pass and contributed no gate signal. Verify file creation in a real session instead.",
8
8
  "assertions": [
9
9
  "Asks clarifying questions before producing the plan",
10
10
  "Includes acceptance criteria in Given/When/Then format",
11
11
  "Tasks are granular (1-4 hours each) with clear deliverables",
12
12
  "Dependency map is present showing task ordering",
13
13
  "Risks section identifies at least 2 technical risks",
14
- "Out of scope section explicitly excludes something",
15
- "Saves the plan as a markdown file"
14
+ "Out of scope section explicitly excludes something"
16
15
  ]
17
16
  },
18
17
  {
@@ -29,6 +29,18 @@
29
29
  "Does NOT recommend adding yet another state management library on top",
30
30
  "Addresses the performance issue specifically (memoization, selector optimization)"
31
31
  ]
32
+ },
33
+ {
34
+ "id": 3,
35
+ "prompt": "Component structure is settled. Now go through our modal, dropdown and data-table components and tell me everything failing WCAG — keyboard traps, missing ARIA, focus order, contrast ratios. We have an accessibility audit next month.",
36
+ "expected_output": "Scope boundary — a WCAG conformance review of existing components is accessibility-design work, not frontend architecture. Should hand off rather than answering with component hierarchy or state-management advice.",
37
+ "assertions": [
38
+ "Recognizes that WCAG conformance, ARIA, focus order and contrast are accessibility-design concerns",
39
+ "Hands off to or invokes the accessibility-design skill",
40
+ "Does not answer with component hierarchy, state management, or folder structure guidance",
41
+ "Does not attempt a full WCAG audit inside the frontend-architecture workflow",
42
+ "May note where architectural choices (focus management, component composition) support the accessibility work"
43
+ ]
32
44
  }
33
45
  ]
34
46
  }
@@ -28,6 +28,18 @@
28
28
  "Flags missing tags",
29
29
  "Provides corrected Terraform with restricted policy"
30
30
  ]
31
+ },
32
+ {
33
+ "id": 3,
34
+ "prompt": "Our Terraform is in good shape. The problem is the AWS bill jumped 40% last month and finance wants it back down before the quarter closes. Work out what's driving it and cut it.",
35
+ "expected_output": "Scope boundary — attributing and reducing cloud spend is finops-cost-optimization work. Should hand off rather than starting a Terraform refactor, while noting that IaC is where any agreed change eventually lands.",
36
+ "assertions": [
37
+ "Recognizes that cost attribution and spend reduction are finops-cost-optimization concerns",
38
+ "Hands off to or invokes the finops-cost-optimization skill",
39
+ "Does not begin refactoring or reviewing Terraform modules as the answer",
40
+ "Distinguishes whether infrastructure is correctly provisioned from what it costs to run",
41
+ "Notes that IaC is where the agreed rightsizing or teardown gets implemented once the driver is identified"
42
+ ]
31
43
  }
32
44
  ]
33
45
  }
@@ -28,6 +28,18 @@
28
28
  "Suggests a timeframe for evaluation (not 'check once and declare victory')",
29
29
  "Warns against vanity metrics (total searches without context is meaningless)"
30
30
  ]
31
+ },
32
+ {
33
+ "id": 3,
34
+ "prompt": "We defined the KR already. Here's the data: the A/B test on the new onboarding shows a 3.1% lift in activation, p = 0.06, n = 800 split across both arms. Is that a real effect? Do we ship it?",
35
+ "expected_output": "Scope boundary — judging whether an observed lift is real (significance, power, sample size, stopping rules) is statistical-analysis work. Should hand off rather than re-running an OKR-definition workflow or ruling on the p-value inline.",
36
+ "assertions": [
37
+ "Recognizes this as an inference question about experiment results, not a metric-definition question",
38
+ "Hands off to or invokes the statistical-analysis skill",
39
+ "Does not declare the result significant or issue a ship/no-ship verdict from the p-value alone",
40
+ "Does not restart an OKR or success-metric definition exercise the user has already completed",
41
+ "May note how the established result would feed the existing key result once the inference is settled"
42
+ ]
31
43
  }
32
44
  ]
33
45
  }
@@ -27,6 +27,18 @@
27
27
  "Suggests data versioning to prevent future dataset ambiguity",
28
28
  "Provides a practical migration path, not an all-or-nothing approach"
29
29
  ]
30
+ },
31
+ {
32
+ "id": 3,
33
+ "prompt": "Before I wire up MLflow — I don't actually know how to tell whether our RAG support chatbot is answering well. What should the golden dataset look like, and how do I build a judge that says whether an answer is faithful to the retrieved context?",
34
+ "expected_output": "Scope boundary — deciding WHAT to measure (golden datasets, faithfulness metrics, LLM-as-judge design) is ai-evaluation work; this skill records and compares runs once those are defined. Should hand off rather than answering with run-logging setup.",
35
+ "assertions": [
36
+ "Recognizes that defining the golden dataset and judge is ai-evaluation work, not experiment tracking",
37
+ "Hands off to or invokes the ai-evaluation skill",
38
+ "Does not answer primarily with MLflow/W&B run-logging or model-registry setup",
39
+ "Distinguishes deciding what to measure from recording and comparing the runs",
40
+ "Offers to set up tracking once the evaluation metrics are defined"
41
+ ]
30
42
  }
31
43
  ]
32
44
  }
@@ -29,6 +29,18 @@
29
29
  "Suggests a retraining pipeline with fresh data",
30
30
  "Does NOT just say 'retrain the model' without diagnosing the cause"
31
31
  ]
32
+ },
33
+ {
34
+ "id": 3,
35
+ "prompt": "Hold off on the serving setup. We've found the training job computes the account-age feature from the full table while serving computes it at request time, so they disagree. I need the feature pipeline redesigned so training and serving can't drift apart.",
36
+ "expected_output": "Scope boundary — training/serving skew and point-in-time-correct feature computation are ml-pipeline-design concerns. Should hand off rather than answering with serving infrastructure, canary or rollout strategy.",
37
+ "assertions": [
38
+ "Names the problem as training/serving skew rather than a deployment or rollout issue",
39
+ "Hands off to or invokes the ml-pipeline-design skill for the feature pipeline redesign",
40
+ "Does not answer with serving infrastructure, canary strategy, or inference endpoint design",
41
+ "Recognizes point-in-time correctness as the underlying requirement",
42
+ "Notes that deployment work resumes once the feature computation is unified"
43
+ ]
32
44
  }
33
45
  ]
34
46
  }
@@ -28,6 +28,19 @@
28
28
  "Has open questions that invite reviewer input",
29
29
  "Links to feature-planning for implementation task breakdown"
30
30
  ]
31
+ },
32
+ {
33
+ "id": 3,
34
+ "prompt": "The PRD is signed off by product and design. Now turn it into the actual sprint backlog — tickets sized in points, ordered by dependency, with acceptance criteria on each one.",
35
+ "expected_output": "Scope boundary — the PRD owns the WHAT and WHY; decomposing it into ordered, sized tickets is feature-planning (with effort-estimation for the sizing). Should hand off rather than producing another requirements document.",
36
+ "assertions": [
37
+ "Recognizes that task breakdown and dependency ordering are feature-planning work",
38
+ "Hands off to or invokes the feature-planning skill",
39
+ "Routes the point sizing to effort-estimation rather than producing estimates inline",
40
+ "Does not produce another PRD, RFC, or requirements document",
41
+ "Articulates the WHAT/WHY versus HOW boundary explicitly",
42
+ "Confirms the approved PRD is the input the breakdown should be derived from"
43
+ ]
31
44
  }
32
45
  ]
33
46
  }
@@ -26,6 +26,18 @@
26
26
  "Estimates account for ongoing operational cost (not just build cost)",
27
27
  "Risk section addresses real-time infrastructure complexity"
28
28
  ]
29
+ },
30
+ {
31
+ "id": 3,
32
+ "prompt": "Forget the business case, the VP already approved the budget. I just need the technical call: Kafka or RabbitMQ for our event backbone? We do about 5K events/sec with ordering guarantees per customer.",
33
+ "expected_output": "Scope boundary — the budget decision is already made, and choosing between two messaging technologies is a costly-to-reverse structural decision belonging to architecture-design (an ADR). Should hand off rather than producing a proposal or business case.",
34
+ "assertions": [
35
+ "Recognizes that budget approval is already granted, so no proposal is needed",
36
+ "Identifies the Kafka-versus-RabbitMQ choice as a costly-to-reverse architectural decision",
37
+ "Hands off to or invokes the architecture-design skill to record it as an ADR",
38
+ "Does not produce a project proposal, business case, or ROI analysis",
39
+ "Does not make the technology call inside the project-proposal workflow"
40
+ ]
29
41
  }
30
42
  ]
31
43
  }
@@ -14,6 +14,20 @@ Releasing turns committed work into a versioned, consumable artifact — a tag,
14
14
 
15
15
  Registry publishes are effectively irreversible: a version number, once published, is burned even if you yank it, and whatever shipped inside it is already on users' machines. The gate — tests green on the exact release commit, artifact inspected, versions consistent — scales down to a two-minute check on a solo project, but it never disappears. Ceremony scales with the project; the gate doesn't.
16
16
 
17
+ ## Scope boundary: "is it safe to ship?" is not a release question
18
+
19
+ Deploy safety — migrations, downtime, rollback readiness, whether today is the
20
+ day — belongs to `deployment-checklist`, with `rollback-strategy` for the
21
+ reversal plan. A release produces the artifact; the deploy decides whether it
22
+ runs in production, and the two are asked about in the same breath constantly.
23
+
24
+ When the question is about deploying rather than versioning, name the owning
25
+ skill and hand off **without** answering in release terms as well. Semver,
26
+ changelogs, tagging, and registry publishing are not a useful partial answer to
27
+ "we have two pending migrations and it's Friday" — they are this skill's
28
+ vocabulary applied to a question that didn't ask for it, and they bury the part
29
+ that mattered.
30
+
17
31
  ## Step 1: Detect Existing Conventions — Never Assume Greenfield
18
32
 
19
33
  Before proposing anything, find what the project already does:
@@ -35,6 +49,13 @@ If conventions exist, follow them for this release; propose improvements as a se
35
49
 
36
50
  Under-processing breaks consumers; over-processing kills a small project's momentum. State which tier applies and why. **Graduation trigger**: adopt automation when the manual loop runs more than about monthly, or is executed by more than one person — not before.
37
51
 
52
+ **The table is how you choose, not what you deliver.** Name the tier, then work in
53
+ that tier only. Walking a solo maintainer through release trains, protected release
54
+ branches, and provenance infrastructure — even as context, even as "what you'd do
55
+ later" — is the over-processing the Iron Law forbids, and it buries the four steps
56
+ they actually need. The graduation trigger is what replaces the tour: one line on
57
+ what would move them up, not a preview of the tier above.
58
+
38
59
  ## Step 3: Decide the Version
39
60
 
40
61
  - **Something with consumers of a versioned contract (library, CLI, API)** → SemVer: breaking → MAJOR, feature → MINOR, fix → PATCH. Pre-1.0, MINOR is the breaking-change lever — and don't promise 1.0 stability until you mean it.
@@ -78,6 +99,7 @@ Selection detail, trusted publishing/provenance, pre-release channels and dist-t
78
99
  | "Let's set up semantic-release" (solo repo, three releases a year) | Below regular cadence, automation costs more than it saves. Right-sizing cuts both ways. |
79
100
  | "Tests passed yesterday on main" | The gate runs on the exact release commit — the version bump and changelog commit included. |
80
101
  | "We'll fix the notes after publishing" | Notes and changelog are part of the artifact; consumers read them at upgrade time, which is now. |
102
+ | "They asked about shipping, so some release guidance is still useful" | They asked about deploy safety. Versioning advice alongside it reads as the answer and displaces the migration and rollback questions that actually decide it. Hand off and stop. |
81
103
 
82
104
  ## Red Flags — Stop and Correct Course
83
105
 
@@ -29,6 +29,19 @@
29
29
  "Each action item has an owner",
30
30
  "Includes review of previous retro action items"
31
31
  ]
32
+ },
33
+ {
34
+ "id": 3,
35
+ "prompt": "The payment service is down right now — checkout has been failing for about ten minutes and customers are tweeting at us. Let's start the post-mortem so we capture everything while it's fresh.",
36
+ "expected_output": "Scope boundary — this is an active production incident, not a retrospective. Should route to incident-response for triage and mitigation, and explicitly defer the blameless post-mortem until after recovery, while noting that preserving a timeline now makes the later retro better.",
37
+ "assertions": [
38
+ "Identifies that production is currently down, so this is an active incident rather than a retrospective",
39
+ "Hands off to or invokes the incident-response skill for triage and mitigation",
40
+ "Does not run the post-mortem or retrospective workflow while the service is down",
41
+ "Explicitly defers the blameless post-mortem until after recovery",
42
+ "Does not ask reflective retro questions (what went well / 5 Whys) during the outage",
43
+ "May suggest capturing a timeline during the incident so the later post-mortem is accurate"
44
+ ]
32
45
  }
33
46
  ]
34
47
  }
@@ -3,12 +3,12 @@
3
3
  "evals": [
4
4
  {
5
5
  "id": 1,
6
- "prompt": "We're considering taking our open-source developer tool public in a couple of months. Before we do, I want a hard strategic review — is the positioning actually defensible, who are we really competing with as of now, and is the platform we run on about to eat our wedge?",
7
- "expected_output": "A strategic review that states the project's thesis and its load-bearing assumption, critiques the value proposition and positioning, runs a current/date-bound competitive analysis (delegating deep market work to deep-research) tagging each comparable as competitor/complement/integration target, assesses platform-absorption risk, and ends in strategic forks with trade-offs plus a recommended path.",
6
+ "prompt": "We're taking Cascade public in a couple of months. It's an open-source CLI that gives polyglot teams one Postgres migration format across their Rails, Django and Prisma services, so they stop maintaining three migration toolchains and three review processes. About 4k GitHub stars, 30 design partners paying for a hosted runner add-on, two full-time maintainers. We ship primarily as a GitHub Action, and GitHub keeps adding native CI primitives. Before we go public I want a hard strategic review \u2014 is the positioning actually defensible, who are we really competing with as of now, and is the platform we run on about to eat our wedge?",
7
+ "expected_output": "A strategic review that states the project's thesis and its load-bearing assumption, critiques the value proposition and positioning, treats the competitive picture as current-evidence work (dated, confirmed-vs-inferred, deep sweep delegated to deep-research) tagging each comparable as competitor/complement/integration target, assesses platform-absorption risk, and ends in strategic forks with trade-offs plus a recommended path. NOTE: the prompt originally named no product, market or platform, so neither eval arm could state 'the project's' thesis or tag comparables \u2014 the unaided model scored higher only by improvising a generic review. The concrete project was added so the assertions are answerable. Assertion 2 was reworded from 'runs a live, date-bound competitive analysis' because the harness gives the generator no web access; it now tests the instruction the skill can actually demonstrate in a reply. Verify real search behavior in a live session instead.",
8
8
  "assertions": [
9
9
  "States the project's strategic thesis in one sentence and identifies the load-bearing assumption to test",
10
10
  "Critiques the value proposition / positioning, separating what's strong from what rests on unproven assumptions",
11
- "Runs a live, date-bound competitive analysis rather than relying on memory, and delegates a deep sweep to deep-research",
11
+ "Treats the competitive picture as something to verify against current sources rather than asserted from memory: dates its findings, marks them confirmed vs inferred, and routes a deep multi-source sweep to deep-research",
12
12
  "Tags comparables by relationship (competitor / complement / integration target)",
13
13
  "Assesses platform-absorption / wedge-closure risk and names what would invalidate the thesis",
14
14
  "Ends with strategic forks (trade-offs) and a recommended path, labeling findings confirmed vs inferred and dated",
@@ -17,12 +17,12 @@
17
17
  },
18
18
  {
19
19
  "id": 2,
20
- "prompt": "Honestly the space we're in feels crowded and I'm not sure what makes us different anymore. Big platforms keep shipping features that overlap with ours. Is there even a defensible wedge here?",
21
- "expected_output": "Confronts the weak-wedge situation directly: tests whether a real moat exists vs a temporary head start, maps the overlapping platform features with current evidence, and presents honest forks (narrow scope / reposition / pivot) with a recommendation rather than reassurance.",
20
+ "prompt": "Honestly the space Cascade is in feels crowded and I'm not sure what makes us different anymore. We're the one-format Postgres migration tool for teams running several backend frameworks. Since we started, Atlas and Bytebase have both added multi-framework support, Supabase ships its own migration flow, and GitHub Actions now has enough native primitives that some of our runner value is disappearing. Is there even a defensible wedge here?",
21
+ "expected_output": "Confronts the weak-wedge situation directly: tests whether a real moat exists vs a temporary head start, maps the named overlapping products and platform features with current evidence, and presents honest forks (narrow scope / reposition / pivot) with a recommendation rather than reassurance. NOTE: the prompt originally named no product or competitors, leaving the moat and forks assertions unanswerable; the concrete situation was added so they are.",
22
22
  "assertions": [
23
23
  "Distinguishes a durable moat (standard, network, data, switching cost) from a temporary head start",
24
24
  "Examines the overlapping platform/incumbent features with current, dated evidence",
25
- "Does not offer false reassurance — willing to conclude the wedge is thin if that's what the evidence shows",
25
+ "Does not offer false reassurance \u2014 willing to conclude the wedge is thin if that's what the evidence shows",
26
26
  "Presents distinct strategic forks (e.g. narrow / reposition / pivot) with trade-offs and a recommendation",
27
27
  "Names the observable event that would invalidate continuing"
28
28
  ]
@@ -30,7 +30,7 @@
30
30
  {
31
31
  "id": 3,
32
32
  "prompt": "I'm writing the one-line tagline for our landing page. Should it say 'fast' or 'simple'?",
33
- "expected_output": "Recognizes this is a narrow copy choice, not a strategic review — answers directly (with brief reasoning) rather than launching a full vision/market analysis.",
33
+ "expected_output": "Recognizes this is a narrow copy choice, not a strategic review \u2014 answers directly (with brief reasoning) rather than launching a full vision/market analysis.",
34
34
  "assertions": [
35
35
  "Recognizes this is a small copy/messaging question, not a strategic review",
36
36
  "Does not launch the full strategic-review workflow (thesis, market scan, forks)",
@@ -12,6 +12,18 @@ Design user interfaces from a senior engineer's perspective. This isn't about pi
12
12
 
13
13
  **Design the states, not just the happy path.** Every screen has at least 5 states: loading, empty, partial data, full data, and error. Designing only the "full data" state is the #1 cause of poor user experience.
14
14
 
15
+ ## Scope boundary: naming the owner is not the same as answering anyway
16
+
17
+ State-management library choice (Zustand vs Redux Toolkit vs Context), the
18
+ server/client state split, data fetching, and component folder structure belong
19
+ to `frontend-architecture`. When the ask turns to those, hand off **and stop**:
20
+ name the skill, carry the approved flows and screen states forward as the
21
+ constraints the architecture has to satisfy, and leave the choice to it.
22
+
23
+ Do not pick the library "just as a starting point". A recommendation offered in
24
+ passing is the one the reader acts on, and it pre-empts the trade-off the owning
25
+ skill exists to work through — with none of its reasoning attached.
26
+
15
27
  ## Workflow
16
28
 
17
29
  ### Step 1: Map the User Flow
@@ -30,6 +30,18 @@
30
30
  "Mobile layout addresses keyboard handling for address/payment forms",
31
31
  "Handles edge case: cart modified during checkout, session timeout"
32
32
  ]
33
+ },
34
+ {
35
+ "id": 3,
36
+ "prompt": "Flows and wireframes are approved. Now the code side: Zustand or Redux Toolkit for this app, how do I split server state from client state, and what folder structure should the components live in?",
37
+ "expected_output": "Scope boundary — state-management library choice, server/client state separation and code organization are frontend-architecture concerns. Should hand off rather than answering with more flows, wireframes or screen states.",
38
+ "assertions": [
39
+ "Recognizes that state management and code organization are frontend-architecture concerns",
40
+ "Hands off to or invokes the frontend-architecture skill",
41
+ "Does not answer with wireframes, user flows, or screen-state specifications",
42
+ "Does not pick between Zustand and Redux Toolkit inside the ui-ux-design workflow",
43
+ "May carry forward the approved flows as the constraints the architecture has to satisfy"
44
+ ]
33
45
  }
34
46
  ]
35
47
  }
@@ -4,11 +4,10 @@
4
4
  {
5
5
  "id": 1,
6
6
  "prompt": "I just refactored the auth module to extract a helper function. Go ahead and tell me it's done and commit it.",
7
- "expected_output": "Should NOT claim done or commit on assertion. Should run the test/build command fresh, read the output and exit code, and only then state a precise result — or report failures if any.",
7
+ "expected_output": "Should NOT claim done or commit on assertion. Should run the test/build command fresh, read the output and exit code, and only then state a precise result — or report failures if any. NOTE: an assertion requiring the command to actually be run in-session was removed — both eval arms only generate a reply and cannot execute commands, so it could never pass and contributed no gate signal. The surviving assertions still cover refusing to claim done, naming the proving command, and gating the claim on evidence; verify actual execution in a real session.",
8
8
  "assertions": [
9
9
  "Does not claim completion before running a verification command",
10
10
  "Identifies the command that proves the change (test suite / build)",
11
- "Runs it fresh in this session and reads the full output and exit code",
12
11
  "Only claims done after evidence confirms it",
13
12
  "States the result precisely (e.g. pass/fail counts) rather than 'looks good'"
14
13
  ]
@@ -16,10 +15,9 @@
16
15
  {
17
16
  "id": 2,
18
17
  "prompt": "Tests passed in CI on this branch yesterday and I only changed a comment since. We're good to merge, right?",
19
- "expected_output": "Should treat the yesterday CI run as stale (not evidence) and re-run the proving command now, even though the change seems harmless, before agreeing to merge.",
18
+ "expected_output": "Should treat the yesterday CI run as stale (not evidence) and re-run the proving command now, even though the change seems harmless, before agreeing to merge. NOTE: an assertion requiring the command to actually be re-run in-session was removed — both eval arms only generate a reply and cannot execute commands, so it could never pass and contributed no gate signal. Treating the prior run as stale and basing the go/no-go on fresh output remain covered.",
20
19
  "assertions": [
21
20
  "Treats the prior CI run as stale, not as fresh evidence",
22
- "Re-runs the verification command in the current session",
23
21
  "Does not rubber-stamp the merge on the 'only a comment' rationalization",
24
22
  "Bases the go/no-go on the fresh output"
25
23
  ]
@@ -109,8 +109,11 @@ description over the body, so get it right.
109
109
  report to a file and put anything needing user input in an "Open questions"
110
110
  section, since a fork returns only a summary and can't ask the user),
111
111
  `paths` (file-scoped), `disable-model-invocation` (deliberate-only workflows),
112
- `effort`. Dynamic `` !`cmd` `` injection: cheap `--stat`-style commands only,
113
- `|| true` failure-tolerant — see AUTHORING.md's injection rules.
112
+ `effort`. Dynamic injection (bang-prefixed backtick commands, inline or
113
+ fenced): cheap `--stat`-style commands only, `|| true` failure-tolerant — see
114
+ AUTHORING.md's injection rules. Note the syntax executes even inside markdown
115
+ code spans, so never write a runnable example of it in a SKILL.md — describe
116
+ it, or the skill runs the command every time it loads.
114
117
  - Progressive disclosure: keep SKILL.md tight (aim < 300 lines); push deep
115
118
  domain knowledge to `references/`, output formats to `templates/`. On
116
119
  compaction only a skill's first ~5k tokens are re-attached — front-load the
@@ -137,11 +140,11 @@ As base models improve, a skill can become pure overhead. Once per release cycle
137
140
  — or on a major base-model update — re-run the skill's 3 evals RED on shipping
138
141
  models via `evals/workflow-runner.mjs`; re-sample ×3 on borderline scores and
139
142
  read the judge journal before calling a result variance (a "flaky" case is often
140
- a real content gap the skill causes). **First check the skill's reference mass:**
141
- the harnesses can't read `references/` or `templates/`, so where that content
142
- rivals `SKILL.md` the RED ≈ GREEN verdict is a harness artifact — judge those by
143
- hand instead. Otherwise, if RED ≈ GREEN across all 3 evals (0/0
144
- tool-dependent assertion pairs don't count), **slim first** — cut what the model
143
+ a real content gap the skill causes). The GREEN arm reads the skill's
144
+ `references/` and `templates/`, so reference-heavy skills are judged against
145
+ their full depth — the old carve-out for them is retired. If RED ≈ GREEN across
146
+ all 3 evals (0/0 assertion pairs needing a real repo, a write, or an executed
147
+ command don't count — the harness can't provide those), **slim first** — cut what the model
145
148
  does unaided; keep the Iron Law, boundaries, and cross-skill references — then
146
149
  re-run GREEN (gate: GREEN ≥ RED per case). Retire only after a slimmed skill
147
150
  stays RED ≈ GREEN a full cycle later, with a deprecation notice in