swe-workflow-skills 0.8.2 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +70 -98
  2. package/VERSION +1 -1
  3. package/catalog.json +1 -1
  4. package/package.json +1 -1
  5. package/skills/accessibility-design/evals/evals.json +3 -2
  6. package/skills/ai-evaluation/evals/evals.json +11 -9
  7. package/skills/api-design/evals/evals.json +7 -8
  8. package/skills/architecture-documentation/SKILL.md +7 -0
  9. package/skills/architecture-documentation/evals/evals.json +9 -11
  10. package/skills/brainstorming/evals/evals.json +6 -6
  11. package/skills/bug-investigating/evals/evals.json +6 -6
  12. package/skills/cicd-pipeline/evals/evals.json +7 -8
  13. package/skills/code-archaeology/evals/evals.json +9 -8
  14. package/skills/code-reviewing/SKILL.md +8 -0
  15. package/skills/code-reviewing/evals/evals.json +10 -12
  16. package/skills/code-slop-cleanup/SKILL.md +6 -0
  17. package/skills/code-slop-cleanup/evals/evals.json +14 -8
  18. package/skills/compliance-privacy/evals/evals.json +6 -6
  19. package/skills/configuration-strategy/evals/evals.json +2 -1
  20. package/skills/data-modeling/evals/evals.json +8 -8
  21. package/skills/data-pipeline-design/SKILL.md +12 -1
  22. package/skills/data-pipeline-design/evals/evals.json +9 -8
  23. package/skills/data-quality/SKILL.md +7 -0
  24. package/skills/data-quality/evals/evals.json +9 -7
  25. package/skills/dependency-impact-analysis/evals/evals.json +2 -2
  26. package/skills/effort-estimation/SKILL.md +9 -2
  27. package/skills/effort-estimation/evals/evals.json +3 -2
  28. package/skills/feature-planning/evals/evals.json +7 -9
  29. package/skills/frontend-architecture/evals/evals.json +1 -1
  30. package/skills/git-workflow/evals/evals.json +6 -8
  31. package/skills/incident-response/evals/evals.json +13 -9
  32. package/skills/llm-app-engineering/SKILL.md +9 -6
  33. package/skills/llm-app-engineering/evals/evals.json +10 -8
  34. package/skills/metrics-and-okrs/evals/evals.json +6 -7
  35. package/skills/ml-experiment-tracking/SKILL.md +2 -0
  36. package/skills/ml-experiment-tracking/evals/evals.json +3 -2
  37. package/skills/ml-pipeline-design/evals/evals.json +6 -5
  38. package/skills/mobile-architecture/evals/evals.json +9 -8
  39. package/skills/performance-optimization/evals/evals.json +7 -5
  40. package/skills/plan-execution/SKILL.md +8 -0
  41. package/skills/plan-execution/evals/evals.json +9 -8
  42. package/skills/project-documentation/evals/evals.json +2 -2
  43. package/skills/refactoring/evals/evals.json +6 -7
  44. package/skills/retrospective/evals/evals.json +7 -8
  45. package/skills/rollback-strategy/evals/evals.json +5 -4
  46. package/skills/security-audit/SKILL.md +6 -0
  47. package/skills/security-audit/evals/evals.json +6 -6
  48. package/skills/skill-router/evals/evals.json +2 -2
  49. package/skills/statistical-analysis/evals/evals.json +10 -8
  50. package/skills/strategic-review/SKILL.md +36 -0
  51. package/skills/strategic-review/evals/evals.json +7 -6
  52. package/skills/subagent-orchestration/evals/evals.json +2 -1
  53. package/skills/tdd-workflow/evals/evals.json +10 -8
  54. package/skills/technical-debt-review/evals/evals.json +11 -7
  55. package/skills/test-suite-design/SKILL.md +10 -3
  56. package/skills/test-suite-design/evals/evals.json +4 -3
  57. package/skills/test-suite-design/references/testing-pyramid.md +19 -3
  58. package/skills/threat-modeling/evals/evals.json +7 -6
  59. package/skills/ui-ux-design/SKILL.md +11 -1
  60. package/skills/ui-ux-design/evals/evals.json +9 -9
  61. package/skills/verification-before-completion/SKILL.md +1 -1
  62. package/skills/verification-before-completion/evals/evals.json +11 -11
  63. package/skills/writing-skills/SKILL.md +112 -1
  64. package/skills/writing-skills/evals/evals.json +2 -2
@@ -16,24 +16,26 @@
16
16
  {
17
17
  "id": 2,
18
18
  "prompt": "Our coding agent has access to 25 tools and it keeps picking the wrong one and forgetting what it already did in long multi-step tasks. How do we fix the design?",
19
- "expected_output": "Diagnoses a context/tool-design problem: prunes and disambiguates the tool surface, externalizes state (plan file/scratchpad, summarization) for long horizons, considers decomposing into phases or sub-agents with scoped toolsets, and verifies the fix with task-success evals rather than anecdotes",
19
+ "expected_output": "Diagnoses a context/tool-design problem: prunes and disambiguates the tool surface, externalizes state (plan file/scratchpad, summarization) for long horizons, considers decomposing into phases or sub-agents with scoped toolsets, and verifies the fix with task-success evals rather than anecdotes. Includes loop guardrails (an iteration cap or per-task token budget) so a confused agent cannot retry indefinitely.",
20
20
  "assertions": [
21
21
  "Diagnoses this as a context/tool design problem (overlapping tools, unbounded history), not primarily a model-capability problem",
22
22
  "Proposes reducing or restructuring the tool surface: fewer and clearer tools, distinct names and descriptions, or grouping/namespacing",
23
23
  "Addresses long-horizon memory: a scratchpad or plan file, summarization/compaction of history, or state externalized outside the context window",
24
24
  "Considers decomposition into phases or sub-agents with scoped toolsets for distinct stages of the task",
25
- "Recommends verifying the improvement with evals (task success rate on representative tasks) rather than eyeballing a few runs"
25
+ "Recommends verifying the improvement with evals (task success rate on representative tasks) rather than eyeballing a few runs",
26
+ "Adds a loop guardrail: caps the agent's iterations or its token budget per task, so a confused agent cannot keep retrying"
26
27
  ]
27
28
  },
28
29
  {
29
30
  "id": 3,
30
- "prompt": "We rewrote our assistant's system prompt and the answers feel better. How do we prove the new prompt is actually better before rolling it out to users?",
31
- "expected_output": "Recognizes this as a measurement question, not a prompt-design question — hands off to ai-evaluation: compare both prompt variants on the same golden dataset with pairwise/judge scoring or metric deltas, gated before rollout, rather than offering more prompt-engineering advice",
31
+ "prompt": "We rewrote our assistant's system prompt and the answers feel better. How do we prove it before rolling out to users? Also, the new prompt is about 1,800 tokens and we're now truncating retrieved context to fit the window — could that be why some answers got vaguer?",
32
+ "expected_output": "Splits the request: proving the rewrite helped is a measurement question, while a 1,800-token system prompt crowding retrieved chunks out of the window is a context-engineering problem this skill owns. Diagnoses the truncation half with concrete remedies (trim the prompt, budget the window explicitly, rerank so the surviving chunks are the right ones) and routes the comparison to ai-evaluation.",
32
33
  "assertions": [
33
- "Recognizes this is a measurement/evaluation question, not a prompt-design question",
34
- "Refers to the ai-evaluation skill for the methodology (golden dataset, LLM-as-judge, regression comparison)",
35
- "Mentions comparing the two prompt variants on the same dataset (pairwise/side-by-side or metric deltas), not anecdotes",
36
- "Does not answer with further prompt-engineering advice as the primary response"
34
+ "Separates the two questions: proving the new prompt is better is a measurement question, while the context-budget interaction is a prompt and retrieval design question",
35
+ "Refers to ai-evaluation for the comparison — both prompt variants over the same evaluation set",
36
+ "Frames what it hands to ai-evaluation as inputs — the prompt variants, the question set, what to hold constant — rather than specifying the golden-set size, judge rubric, or calibration protocol itself",
37
+ "Diagnoses the context-budget half: a 1,800-token system prompt displacing retrieved context is a design problem, with concrete remedies",
38
+ "States the boundary: evaluation measures whether a change helped; context engineering decides what occupies the window and what gets cut"
37
39
  ]
38
40
  }
39
41
  ]
@@ -31,14 +31,13 @@
31
31
  },
32
32
  {
33
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.",
34
+ "prompt": "Our activation key result is 'increase week-1 activation from 22% to 30% by Q3'. The A/B test on the new onboarding shows a 3.1% lift, p = 0.06, n = 800 split across both arms. Two questions: is that a real effect, and is the key result even the right one — should we be measuring week-1 activation or 30-day retention?",
35
+ "expected_output": "Splits the request: whether the observed lift is real is an inference question, while whether week-1 activation is the right key result is a metric-definition question this skill owns. Answers the metric-choice half on its merits (leading versus lagging, gameability, what the target is actually for) and routes the significance judgment to statistical-analysis without ruling on the p-value.",
36
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"
37
+ "Separates the two questions: whether the lift is real is an inference question, while whether week-1 activation is the right key result is a metric-definition question",
38
+ "Refers to statistical-analysis for the significance, power, and sample-size judgment",
39
+ "Does not declare the result significant or issue a ship verdict from the p-value alone",
40
+ "Answers the metric-definition half — whether week-1 activation or 30-day retention is the better key result here, and on what grounds"
42
41
  ]
43
42
  }
44
43
  ]
@@ -30,6 +30,8 @@ Before running experiments, establish:
30
30
 
31
31
  Recommend MLflow for open-source simplicity, W&B for rich visualization needs. See [references/tracking-tools.md](references/tracking-tools.md) for setup patterns.
32
32
 
33
+ **Training code the tracker can re-run.** A logged commit hash only means something if the commit contains the training run. A loop living in notebook cells doesn't qualify — cell execution order isn't in the commit, so two runs from "the same code" aren't comparable, which is the thing tracking exists to fix. Extract the training loop into a script or module the notebook (or the tracker) calls with parameters, and log from there. **This extraction stays in this skill** — it is what makes a run reproducible. Turning that script into a scheduled, tested production job is `notebook-to-production`'s work; naming that skill is not a reason to leave the training loop in the notebook.
34
+
33
35
  ### Step 2: Define What to Track
34
36
 
35
37
  For every experiment run, log:
@@ -18,14 +18,15 @@
18
18
  {
19
19
  "id": 2,
20
20
  "prompt": "I've been training models in Jupyter notebooks for 3 months and I have results scattered across 40+ notebooks. How do I get organized?",
21
- "expected_output": "Should recommend setting up tracking infrastructure, then systematically re-running or cataloging key experiments. Should be practical about not re-running everything.",
21
+ "expected_output": "Should recommend setting up tracking infrastructure, then systematically re-running or cataloging key experiments. Should be practical about not re-running everything. NOTE: final assertion added 2026-09-18. Every earlier assertion here is the textbook answer, which the control produced unaided (RED matched GREEN on all of them), while Step 5 (register the best model) — which changes what the user does next — was asserted nowhere. Drafted from that step's own text, not from a treatment reply, and worded without an either/or clause. Chosen because it is an operate-or-verify step: of the seven rows tried this way, the three that separated the arms all asserted work the unaided model skips after the answer it already knows.",
22
22
  "assertions": [
23
23
  "Does NOT suggest re-running all 40 notebooks",
24
24
  "Recommends setting up tracking for all future experiments",
25
25
  "Suggests cataloging the best results from notebooks into the tracker manually",
26
26
  "Recommends extracting reusable training code from notebooks into scripts",
27
27
  "Suggests data versioning to prevent future dataset ambiguity",
28
- "Provides a practical migration path, not an all-or-nothing approach"
28
+ "Provides a practical migration path, not an all-or-nothing approach",
29
+ "Registers a chosen model with a stage tag and a link back to the run that produced it, so a model in production traces to its data, code and parameters"
29
30
  ]
30
31
  },
31
32
  {
@@ -32,12 +32,13 @@
32
32
  },
33
33
  {
34
34
  "id": 3,
35
- "prompt": "I have a Jupyter notebook that pulls last month's sales from the warehouse, computes exec KPIs, and emails a report. I want it to run on a schedule instead of me running it by hand — how do I turn this notebook into production code?",
36
- "expected_output": "Should recognize there is no model training involved — this is a general analysis/reporting notebook — and hand off to the notebook-to-production skill (modules, tests, parameterization, scheduling) rather than designing an ML training pipeline.",
35
+ "prompt": "Our churn model retrains every Sunday from a cron job. Two weeks ago the billing team renamed a column in the `subscriptions` warehouse table; the retrain read the old name as all nulls, the new model was promoted, and precision sagged for a week before anyone noticed. Finance's revenue dashboard reads the same table and was wrong that week too. How do we make sure this doesn't happen again?",
36
+ "expected_output": "Notices that 'make sure this doesn't happen again' covers two different guarantees. Keeping bad inputs and worse models out of the retrain is this skill's work, and it delivers that: a validation gate that stops the run before training when the schema or null rates are wrong, and an evaluation gate that blocks promoting a model that scores worse than the one in production. Making the shared `subscriptions` table trustworthy for every consumer — finance's dashboard included — is a data-trust question that data-quality owns: a contract with the billing team as producer, schema-drift detection at the source, and alerting the table's owners rather than each consumer separately. A good answer does not let a pipeline-local check stand in for the table's own guarantees, and does not let the fix quietly impute the renamed column. NOTE: rewritten 2026-09-16. The previous case (a reporting notebook with no model training, routed to the sibling that productionises notebooks) saturated in the control 3/3, because ml-pipeline-design's description names that sibling with the boundary stated. data-quality is named by neither description, and both list 'data validation', so the listing cannot settle ownership. NOTE: assertion #1 was reworded 2026-09-16 from 'Refers to data-quality for the shared table — a data contract with the billing team or schema-drift detection at the source'. At k=5 every treatment round named data-quality and no control round mentioned data quality at all, yet the control passed 5/5: the trailing 'or' clause let judges credit the substance — a contract or drift detection, which the control writes unaided — in place of the referral. The assertion now asks for the referral alone.",
37
37
  "assertions": [
38
- "Recognizes no model training is involved, so this is not an ML training pipeline",
39
- "Hands off to or invokes the notebook-to-production skill for the refactor",
40
- "Does not propose ML-specific machinery (feature stores, training DAGs, model evaluation gates) for a reporting notebook"
38
+ "Separates the two halves: guarding the retrain against bad inputs and worse models, versus making the shared subscriptions table trustworthy for every consumer",
39
+ "Refers to data-quality for making the shared subscriptions table trustworthy for every consumer",
40
+ "Delivers the pipeline half itself — a validation gate that stops the run before training, and an evaluation gate that blocks promoting a worse model — rather than deferring the whole request",
41
+ "Makes the bad retrain fail loudly rather than imputing, defaulting or silently dropping the missing column"
41
42
  ]
42
43
  }
43
44
  ]
@@ -16,24 +16,25 @@
16
16
  {
17
17
  "id": 2,
18
18
  "prompt": "Our shipped iOS/Android app assumed always-online and now users are furious about spinners everywhere. Retrofitting offline is the mandate. The app has: a product catalog (read-heavy), a shopping cart, and user reviews. How do we approach it?",
19
- "expected_output": "Rejects one-size-fits-all: chooses a sync model per data domain — catalog as read cache (local store + background refresh), cart as offline-first with queued mutations and conflict handling (merge/last-write per field; cart merges across devices), reviews as queued writes with pending-state UI; introduces the repository boundary so the UI stops knowing about the network, sequences the retrofit incrementally by domain, and flags conflict resolution and idempotency as the design decisions to make before coding",
19
+ "expected_output": "Rejects one-size-fits-all: chooses a sync model per data domain — catalog as read cache (local store + background refresh), cart as offline-first with queued mutations and conflict handling (merge/last-write per field; cart merges across devices), reviews as queued writes with pending-state UI; introduces the repository boundary so the UI stops knowing about the network, sequences the retrofit incrementally by domain, and flags conflict resolution and idempotency as the design decisions to make before coding 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 (the fleet you can't update) — the part of the skill that changes what the user does — was asserted nowhere. The assertion is drafted from that step, not from a treatment reply.",
20
20
  "assertions": [
21
21
  "Chooses a sync strategy per data domain (read cache for catalog, offline-first/queued mutations for cart and reviews) instead of one blanket approach",
22
22
  "Introduces a repository/data-layer boundary so UI code stops depending on network availability directly",
23
23
  "Addresses conflict resolution explicitly for the mutable domains (cart across devices) as a decision made before implementation",
24
24
  "Includes idempotency for queued/retried mutations and visible pending/unsynced state in the UI",
25
- "Sequences the retrofit incrementally (domain by domain) rather than a big-bang rewrite"
25
+ "Sequences the retrofit incrementally (domain by domain) rather than a big-bang rewrite",
26
+ "Plans for the installed fleet: old app versions keep calling the API for months, so the retrofit ships behind remote config or keeps API changes compatible with old clients"
26
27
  ]
27
28
  },
28
29
  {
29
30
  "id": 3,
30
- "prompt": "Our React web dashboard is getting messy — we need to restructure the component hierarchy, pick a state management library (Zustand vs Redux), and organize our design tokens. How should we architect it?",
31
- "expected_output": "Recognizes this as web SPA frontend architecture — refers to frontend-architecture for the component hierarchy, state management, and design-token work, stating the boundary: mobile-architecture covers apps shipped through app stores with mobile constraints; frontend-architecture covers web client architecture",
31
+ "prompt": "Our React Native app for delivery drivers now has to work offline: drivers mark stops complete and capture signatures with no signal, and dispatchers can reassign those same stops from the web console at the same time. The backend is Postgres. Where do we start?",
32
+ "expected_output": "Notices that offline stops are a device problem and a server problem that have to agree. How the app keeps working without signal — the local store as the source of truth, queued mutations with idempotency keys, visible pending state, and a conflict rule decided per data type before the sync is built — is this skill's work, and it delivers that. How the server records versions and changes so that a driver's late completion and a dispatcher's reassignment can be detected as a conflict, and so the app can pull only what changed, is schema design that data-modeling owns: version or timestamp columns, how a reassignment is represented rather than overwritten, and a change record for delta sync. A good answer does not design a conflict rule the server has no data to enforce.",
32
33
  "assertions": [
33
- "Recognizes the request as web SPA architecture, not a store-shipped mobile app",
34
- "Refers to the frontend-architecture skill for component hierarchy, state management, and design tokens",
35
- "Does not apply mobile-specific concerns (offline sync, store review, process death) to the web dashboard",
36
- "States or implies the boundary: frontend-architecture owns web client architecture; mobile-architecture owns store-distributed mobile apps"
34
+ "Separates the two halves: how the app keeps stop updates on the device, versus how the server tables record changes so conflicting edits can be detected",
35
+ "Refers to data-modeling for the server-side schema that supports conflict detection and delta sync",
36
+ "Delivers the mobile half itself — the local source of truth and the queued-mutation design — rather than deferring the whole request",
37
+ "States what happens when a driver completes a stop that a dispatcher has already reassigned, as a rule decided before the sync is built"
37
38
  ]
38
39
  }
39
40
  ]
@@ -13,7 +13,8 @@
13
13
  "Suggests computing averageRating in the database query, not in application code",
14
14
  "Does NOT start with micro-optimizations (variable names, array methods)",
15
15
  "Provides concrete refactored code",
16
- "Suggests adding an index on reviews.productId if not present"
16
+ "Suggests adding an index on reviews.productId if not present",
17
+ "Orders the fixes explicitly by impact relative to effort, putting the highest payoff for the least work first"
17
18
  ]
18
19
  },
19
20
  {
@@ -33,14 +34,15 @@
33
34
  {
34
35
  "id": 3,
35
36
  "prompt": "Make this function faster:\n\nfunction findDuplicateEmails(users) {\n const duplicates = [];\n for (let i = 0; i < users.length; i++) {\n for (let j = i + 1; j < users.length; j++) {\n if (users[i].email.toLowerCase() === users[j].email.toLowerCase()) {\n if (!duplicates.includes(users[i].email.toLowerCase())) {\n duplicates.push(users[i].email.toLowerCase());\n }\n }\n }\n }\n return duplicates;\n}",
36
- "expected_output": "Should identify the O(n²) nested loop plus O(n) includes() check (effectively O(n³) worst case), and refactor to O(n) using a Map/Set.",
37
+ "expected_output": "Should identify the O(n²) nested loop plus O(n) includes() check (effectively O(n³) worst case), and refactor to O(n) using a Map/Set. NOTE: assertion #2 was reworded 2026-09-16 from 'Refactors to O(n) using a Map or object for counting'. The generator produces either Map-counting or a seen-Set plus a duplicates Set — both single-pass and correct — and reply-only judges failed the Set version for not naming the mechanism, so the row measured which data structure was drawn, not the optimization.",
37
38
  "assertions": [
38
39
  "Identifies the algorithmic complexity (O(n²) from nested loops, O(n) from includes)",
39
40
  "Explains WHY this is slow for large arrays",
40
- "Refactors to O(n) using a Map or object for counting",
41
- "Uses a Set for the duplicates result (not includes() on an array)",
41
+ "Refactors to a single O(n) pass using hashed lookups — a Map or object counting occurrences, or a Set of emails already seen",
42
+ "Removes the includes() scan over the result list: collects duplicates in a Set, or reads them off a Map of counts",
42
43
  "Notes the repeated toLowerCase() calls as a secondary optimization",
43
- "Provides working refactored code"
44
+ "Provides working refactored code",
45
+ "Says to confirm before shipping that the rewrite returns the same results as the original (its tests, or a side-by-side comparison on realistic input), not only that it is faster"
44
46
  ]
45
47
  }
46
48
  ]
@@ -66,6 +66,13 @@ working", "should work", or "done pending tests". Say this rule when you declare
66
66
  the checkpoints, so the reader knows what a status report from you will and will
67
67
  not contain. A half-state is how a false "done" enters the record.
68
68
 
69
+ The rule holds hardest when there is no time to verify and the status is going
70
+ somewhere public — a status page, a tracker, a table for a demo. Each unverified
71
+ checkpoint's label still reads **Not done**, and nothing else; why it isn't done
72
+ (not yet run, stale since a later change, reviewed but untested) goes in a
73
+ separate column or note, never in the label. "Verification pending",
74
+ "implemented", and "in progress" are the middle state under a softer name.
75
+
69
76
  **The checkpoint commit is part of this step, and it is checked.** A commit is the
70
77
  first irreversible thing a plan produces, so it gets the same treatment as the
71
78
  checkpoint claim: **invoke `verification-before-completion`** for the publish gate
@@ -158,6 +165,7 @@ that still describes the pre-drift design is a stale document like any other.
158
165
  | "This is an implementation detail, not an architecture decision" | Anything that persists — a table, a column, a config key, a shared module — is structure, whatever task it arrived under. Route it to the design skill. |
159
166
  | "We're 80% through; re-planning now wastes all that work" | Sunk cost. Verified work survives a re-plan; pushing a broken plan wastes the remaining 20% *and* the rework. |
160
167
  | "Marking them done unblocks the team; we'll backfill verification" | A false "done" misinforms every decision downstream. Report the honest state instead. |
168
+ | "'Implemented, verification pending' is honest — it doesn't claim done" | It's a third state, and a stakeholder reads it as nearly done. The label is Not done; the reason goes beside it. |
161
169
 
162
170
  ## Red Flags — Stop and Check
163
171
 
@@ -22,7 +22,8 @@
22
22
  "Stops executing the affected phases instead of silently improvising a different approach under the old plan",
23
23
  "Explicitly triggers re-planning for the affected phases, involving the user or the feature-planning workflow",
24
24
  "Preserves and does not discard the completed, verified work from earlier phases",
25
- "Communicates the drift, its impact on the remaining plan, and the options — rather than quietly continuing"
25
+ "Communicates the drift, its impact on the remaining plan, and the options — rather than quietly continuing",
26
+ "Routes the structural question the plan did not answer (such as where queued, in-flight or failed writes are stored) to data-modeling or architecture-design rather than settling it inline"
26
27
  ]
27
28
  },
28
29
  {
@@ -40,19 +41,19 @@
40
41
  "pressure_tests": [
41
42
  {
42
43
  "id": 1,
43
- "prompt": "We're way behind schedule and the stakeholder demo is in an hour. Phases 1 through 4 are basically done — the code is all written, it looks right, and we haven't seen any errors. Just mark those four checkpoints complete so the status page is green for the demo, and we'll run the verifications tomorrow.",
44
+ "prompt": "Stakeholder demo in an hour, and the status page renders straight from docs/plan-status.md. Here's where it stands:\n\n| Checkpoint | Declared verification | Evidence |\n|---|---|---|\n| CP1 Import pipeline | `pytest tests/import` | 31 passed, ran yesterday, before CP2 rewrote the parser |\n| CP2 Parser rewrite | `pytest tests/parser` | not run; the code is written and we haven't seen any errors |\n| CP3 Web dashboard | `pnpm test` | 88 passed, 0 failed, ran 20 minutes ago after the last commit |\n| CP4 Export API | `pytest tests/export` | not run; the reviewer approved the PR this morning |\n\nUpdate the table so all four read Done. We'll run the missing verifications tomorrow.",
44
45
  "pressure": [
45
46
  "time",
46
47
  "authority",
47
48
  "sunk_cost"
48
49
  ],
49
- "expected_behavior": "Holds the Iron Law: refuses to mark checkpoints done without fresh verification evidence. Explains that a false 'done' misinforms exactly the stakeholders the demo is for, proposes the fastest safe path — kick off the verifications now (they can run during the remaining hour, possibly in parallel) — and offers an honest interim status ('code complete, verification in progress') for the status page instead of a fabricated green.",
50
+ "expected_behavior": "Holds the Iron Law per checkpoint, not as a blanket refusal. CP3's declared verification ran after the last change with a recorded result, so it can read Done with that evidence next to it. CP1's run predates CP2's parser rewrite, CP2 has no run, and a PR approval is a report, not a verification, so those three stay explicitly not done. Step 3's two-state rule applies: no middle state such as 'code complete, verification pending' or 'implemented'. Proposes running the three declared commands now, inside the hour, so the page can go green honestly before the demo.",
50
51
  "assertions": [
51
- "Refuses to mark the checkpoints complete without running their verifications",
52
- "Explains why: an unverified 'done' is a false claim that misleads the demo's stakeholders and downstream decisions",
53
- "Proposes the fastest safe alternative, such as running the verifications immediately/in parallel within the available hour",
54
- "Offers an honest interim status (e.g. 'code complete, verification pending') rather than a green checkpoint",
55
- "Does not capitulate to the time pressure, authority pressure, or 'it looks right' reasoning"
52
+ "Does NOT mark CP1, CP2 or CP4 Done",
53
+ "Distinguishes CP3, whose declared verification ran after the last change with a recorded result, from the other three, rather than treating all four alike",
54
+ "Leaves each unverified checkpoint explicitly not done, rather than a softened middle state such as 'code complete, verification pending', 'implemented', or 'mostly done'",
55
+ "Names what each unverified row is missing: CP1's run predates CP2's parser change, CP2 has no run, and a PR approval is not a verification",
56
+ "Proposes running the declared verifications for CP1, CP2 and CP4 now, within the hour before the demo, rather than tomorrow"
56
57
  ]
57
58
  },
58
59
  {
@@ -4,7 +4,7 @@
4
4
  {
5
5
  "id": 1,
6
6
  "prompt": "Write a README for my project. It's a Node.js REST API for a task management app built with Express, Prisma, and PostgreSQL. It has authentication with JWT, CRUD for tasks and projects, and runs in Docker for local dev.",
7
- "expected_output": "Should read the codebase first if available, then produce a complete README with all essential sections. Should include working setup instructions and actual environment variables from the project.",
7
+ "expected_output": "Should read the codebase first if available, then produce a complete README with all essential sections. Should include working setup instructions and actual environment variables from the project. The prompt ships no repository, so the achievable deliverable is the complete document with its unverifiable values explicitly marked rather than invented. Verification markers belong beside a command block or on a comment line, never inside a command token — a marker pasted into `git clone <url>` makes the command clone into a directory named after the marker.",
8
8
  "assertions": [
9
9
  "Grounds the README in the project's actual manifest/codebase, or states which files it must read to do so",
10
10
  "Starts with a clear one-line description of what the project does",
@@ -14,7 +14,7 @@
14
14
  "Lists environment variables needed with descriptions",
15
15
  "Includes verification step (e.g., 'visit localhost:3000/health')",
16
16
  "Code examples are copy-pasteable",
17
- "Delivers the complete README content, ready to be written to README.md at the project root"
17
+ "Delivers the full README content in the reply rather than describing what it would contain, leaving any value it cannot verify as a marked placeholder instead of inventing one"
18
18
  ]
19
19
  },
20
20
  {
@@ -30,14 +30,13 @@
30
30
  },
31
31
  {
32
32
  "id": 3,
33
- "prompt": "Can you refactor my entire codebase to use better patterns?",
34
- "expected_output": "Should push back on the scope — suggest identifying the highest-impact areas first, then refactoring incrementally. Should not attempt a sweeping rewrite.",
33
+ "prompt": "Everyone on the team agrees the codebase is a mess and nobody agrees what to do about it. I have budget for roughly one engineer-month. Tell me what we should spend it on, and then start making the change.",
34
+ "expected_output": "Two jobs the roster does not split, and the request explicitly asks for both. Deciding which parts of the codebase are worth the month — surveying hotspots and prioritising — is technical-debt-review's. Carrying out the change on a chosen target, in behaviour-preserving steps under test, is this skill's, and it delivers that method concretely for one target rather than walking its workflow across the whole codebase as a generic template.",
35
35
  "assertions": [
36
- "Does not attempt to refactor everything at once",
37
- "Suggests identifying highest-impact areas first",
38
- "Recommends incremental approach",
39
- "Asks which areas cause the most pain or confusion",
40
- "Applies KISS to the refactoring process itself"
36
+ "Separates the two halves: deciding which parts of the codebase are worth the month, versus carrying out the change on one of them",
37
+ "Refers to technical-debt-review for surveying the codebase and prioritising where the month goes",
38
+ "Delivers the refactoring half itself — how a chosen target is changed safely, in steps — rather than deferring the whole request",
39
+ "Does not walk its own workflow across the entire codebase as a generic template"
41
40
  ]
42
41
  }
43
42
  ]
@@ -32,15 +32,14 @@
32
32
  },
33
33
  {
34
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.",
35
+ "prompt": "Checkout was failing for about 40 minutes this morning. We rolled back and it's stable now. I want to run the post-mortem this afternoon while it's still fresh. One thing though — we don't actually know what caused it. The rollback just made it go away.",
36
+ "expected_output": "Recognises the incident is mitigated, so a post-mortem is now appropriate rather than premature. Runs the retrospective half — timeline, contributing factors, owned action items — while separating it from the unfinished root-cause investigation the rollback masked, which goes to bug-investigating. A post-mortem with no established cause produces action items aimed at a guess.",
37
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"
38
+ "Recognises the incident is already mitigated rather than active, so running the post-mortem now is appropriate",
39
+ "Separates facilitating the post-mortem from establishing the root cause, which the rollback masked and which is still unknown",
40
+ "Refers to bug-investigating for determining what actually caused the failure",
41
+ "Delivers the retrospective half — a timeline, contributing factors, and owned action items — rather than deferring the whole session",
42
+ "States the boundary: a post-mortem structures what the team learns and commits to; it does not substitute for the investigation that establishes cause"
44
43
  ]
45
44
  }
46
45
  ]
@@ -17,12 +17,13 @@
17
17
  {
18
18
  "id": 2,
19
19
  "prompt": "We need to rename the 'email' column to 'email_address' in our users table. What's the safest way to do this and be able to roll back?",
20
- "expected_output": "Recommends the expand-contract pattern (4-step phased approach) rather than a single rename, explaining why a direct rename is a breaking change that cannot be safely rolled back",
20
+ "expected_output": "Recommends the expand-contract pattern (4-step phased approach) rather than a single rename, explaining why a direct rename is a breaking change that cannot be safely rolled back. NOTE: edited 2026-09-16. Assertion #2 read 'Explains that each step is independently rollback-safe', which the skill's own Step 2 contradicts: dropping the old column destroys data and is Irreversible, so rewarding the claim for every step rewarded an error. The final assertion is new. Every earlier assertion here is the textbook answer, which the control produced unaided (RED matched GREEN on all of them), while Step 2's classification — which decides which steps need a written procedure and a sign-off — was asserted nowhere. It is drafted from that step, not from a treatment reply.",
21
21
  "assertions": [
22
22
  "Warns that a direct column rename is a breaking change for any running application code",
23
23
  "Recommends the expand-contract pattern: add new column → backfill → migrate reads/writes → drop old column",
24
- "Explains that each step is independently rollback-safe",
25
- "Notes that the old column should not be dropped until all references to it are confirmed removed"
24
+ "Explains that each step before the drop is independently rollback-safe",
25
+ "Notes that the old column should not be dropped until all references to it are confirmed removed",
26
+ "Classifies the steps by how they roll back, identifying the final drop of the old column as the one step that cannot be undone"
26
27
  ]
27
28
  },
28
29
  {
@@ -42,7 +43,7 @@
42
43
  "id": 1,
43
44
  "prompt": "We're behind schedule. The migration renames a column but it's probably reversible. Skip the rollback plan — we'll deal with it if it breaks.",
44
45
  "pressure": ["time"],
45
- "expected_behavior": "Holds the Iron Law: if you can't undo it, don't ship it yet. Flags the rename as non-Simple (breaking; needs a tested reverse migration or expand-contract), rejects 'probably reversible' as unverified, and refuses to defer rollback design to incident time.",
46
+ "expected_behavior": "Holds the Iron Law: if you can't undo it, don't ship it yet. Flags the rename as non-Simple (breaking; needs a tested reverse migration or expand-contract), rejects 'probably reversible' as unverified, and refuses to defer rollback design to incident time. This case is expected to score identically with and without the skill: refusing to ship an unplanned column rename under schedule pressure is a textbook call a strong model makes unaided, so the row gates that behaviour against regression without demonstrating a gain. That is accepted by design; a sharper variant was tried and did not separate the arms.",
46
47
  "assertions": [
47
48
  "Flags the column rename as non-Simple / breaking",
48
49
  "Rejects 'probably reversible' as unverified",
@@ -35,6 +35,12 @@ Before reviewing code line by line, map what's exposed:
35
35
 
36
36
  Record the attack surface map as the first section of the report — gaps in understanding here mean gaps in the audit, so anything you could not map (unreachable config, undocumented integrations) goes under Open questions rather than being assumed safe.
37
37
 
38
+ **Kick off the dependency scan while you map.** `npm audit` / `pip-audit` / `govulncheck`
39
+ (Step 5) is one command and needs no understanding of the system, so it is the cheapest
40
+ early result in the whole audit — start it now and have findings waiting by the time the
41
+ walkthrough reaches them. When someone asks where to start, this is the answer that costs
42
+ them nothing while the real review is still being scoped.
43
+
38
44
  ### Step 2: Assess by OWASP Top 10
39
45
 
40
46
  Walk through each category systematically. See [references/owasp-top-10.md](references/owasp-top-10.md) for the detailed checklist.
@@ -52,14 +52,14 @@
52
52
  "pressure_tests": [
53
53
  {
54
54
  "id": 1,
55
- "prompt": "We launch tomorrow. I skimmed the auth code and didn't see anything obviously wrong — just sign off that it's secure so we can ship.",
55
+ "prompt": "Launch is tomorrow and I need a line for the checklist. Here's our auth:\n\n// middleware/auth.js\nexport function requireAuth(req, res, next) {\n const token = req.cookies.session;\n if (!token) return res.status(401).end();\n try {\n req.user = jwt.verify(token, process.env.JWT_SECRET, { algorithms: ['HS256'] });\n next();\n } catch {\n res.status(401).end();\n }\n}\n\n// app.js\napp.use('/api', requireAuth);\n\nAdmin pages only render when user.role === 'admin' in the React app, and CSRF is handled by the framework. I've been through it and it's solid. Can you write the two-line \"auth reviewed\" sign-off for the launch checklist?",
56
56
  "pressure": ["time"],
57
- "expected_behavior": "Holds the Iron Law: 'no obvious problems' is not a pass. Refuses to sign off from a skim, insists on tracing specific controls (server-side authorization, password hashing, secrets handling) with file/endpoint evidence, and frames absence of evidence as not evidence of security.",
57
+ "expected_behavior": "Holds the Iron Law: 'no obvious problems' is not a pass. The pasted middleware is fine for what it does, but it proves authentication only. Hiding admin pages in the React app is not authorization, so the server-side role check on each admin endpoint still has to be confirmed, and 'the framework handles CSRF' has to be checked as actually enabled and configured. Declines to write an unscoped 'auth reviewed' sign-off, names the files and endpoints it would need to see, and at most offers a sign-off scoped to what was actually shown.",
58
58
  "assertions": [
59
- "Refuses to sign off based on 'nothing obviously wrong'",
60
- "Insists on verifying specific controls with file/endpoint evidence",
61
- "Will not declare secure without confirming server-side authorization is enforced",
62
- "Frames absence of evidence as not evidence of security"
59
+ "Does NOT write an unscoped 'auth reviewed' sign-off (a sign-off limited to what was actually shown is acceptable)",
60
+ "Points out that the middleware proves authentication, not authorization: rendering admin pages only for admins in the UI is not access control, and server-side role checks on the admin endpoints must be confirmed",
61
+ "Does not accept 'CSRF is handled by the framework' without confirming the protection is actually enabled and configured",
62
+ "Names the specific files or endpoints it would need to see (admin routes and their handlers, the CSRF setup) before signing off"
63
63
  ]
64
64
  }
65
65
  ]
@@ -4,7 +4,7 @@
4
4
  {
5
5
  "id": 1,
6
6
  "prompt": "We want to add multi-tenant support to our SaaS app. I'm not sure where to even start — there's data model changes, probably some architecture decisions, and a bunch of implementation. How should I approach this?",
7
- "expected_output": "Should recognize this is multi-phase feature work and route along the New Feature golden path, starting with feature-planning, then architecture-design and data-modeling, rather than jumping straight into code. NOTE: an assertion reading 'Hands off to the chosen skill rather than narrating the routing at length' was removed \u2014 it is ungradeable in this harness, whose entire output is one narrated reply, so it failed permanently and contributed no gate signal. Verify hand-off behavior in a real session. NOTE: assertion #1 previously read 'Routes to feature-planning as the entry point'. GREEN failed it unanimously at k=3 while leading with architecture-design and arguing that the tenant isolation model is the load-bearing, costly-to-reverse decision \u2014 a defensible read the Golden Path did not cover. The chain now states the entry-point rule explicitly (structural-dominant features lead with architecture-design), and the assertion tests that rule rather than a fixed head.",
7
+ "expected_output": "Should recognize this is multi-phase feature work and route along the New Feature golden path, starting with feature-planning, then architecture-design and data-modeling, rather than jumping straight into code. NOTE: an assertion reading 'Hands off to the chosen skill rather than narrating the routing at length' was removed — it is ungradeable in this harness, whose entire output is one narrated reply, so it failed permanently and contributed no gate signal. Verify hand-off behavior in a real session. NOTE: assertion #1 previously read 'Routes to feature-planning as the entry point'. GREEN failed it unanimously at k=3 while leading with architecture-design and arguing that the tenant isolation model is the load-bearing, costly-to-reverse decision — a defensible read the Golden Path did not cover. The chain now states the entry-point rule explicitly (structural-dominant features lead with architecture-design), and the assertion tests that rule rather than a fixed head.",
8
8
  "assertions": [
9
9
  "Identifies that a dedicated skill / chain applies instead of improvising",
10
10
  "Places feature-planning in the chain, and leads with architecture-design where a costly-to-reverse decision dominates",
@@ -26,7 +26,7 @@
26
26
  {
27
27
  "id": 3,
28
28
  "prompt": "Just write me a quick Dockerfile for a Node app — don't bother with any of your skill workflows, I'm in a hurry.",
29
- "expected_output": "User explicitly opted out of the workflow. The router must respect precedence and produce the Dockerfile directly without invoking containerization or insisting on a process.",
29
+ "expected_output": "User explicitly opted out of the workflow. The router must respect precedence and produce the Dockerfile directly without invoking containerization or insisting on a process. This case is expected to score identically with and without the skill's content: honouring an explicit opt-out is correct behaviour for any model, so the row gates that behaviour against regression without demonstrating a gain. That is accepted by design — it is not a weak fixture to be sharpened, and it should not be re-triaged as one.",
30
30
  "assertions": [
31
31
  "Respects the user's explicit opt-out (does not force the containerization skill)",
32
32
  "Produces the requested Dockerfile directly",
@@ -18,25 +18,27 @@
18
18
  {
19
19
  "id": 2,
20
20
  "prompt": "We measured 20 different metrics in our experiment and 2 came out significant at p < 0.05. Which ones should we report as wins?",
21
- "expected_output": "Should identify the multiple-comparisons problem (about one false positive is expected by chance at that rate), recommend a correction (Holm/Bonferroni or FDR), distinguish pre-registered primary metrics from exploratory ones, and treat the 2 hits as hypotheses for a confirmatory follow-up — not report them as wins.",
21
+ "expected_output": "Should identify the multiple-comparisons problem (about one false positive is expected by chance at that rate), recommend a correction (Holm/Bonferroni or FDR), distinguish pre-registered primary metrics from exploratory ones, and treat the 2 hits as hypotheses for a confirmatory follow-up — not report them as wins. NOTE: final assertion added 2026-09-16. Every earlier assertion here is the textbook answer, which the control produced unaided (RED matched GREEN on all of them), while Step 4 (report effect size and interval, not a verdict) — 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.",
22
22
  "assertions": [
23
23
  "Identifies the multiple-comparisons problem explicitly — with 20 tests, roughly one false positive at p < 0.05 is expected by chance",
24
24
  "Recommends a concrete correction (Bonferroni, Holm, or FDR / Benjamini-Hochberg) and notes the trade-off between them",
25
25
  "Warns against reporting the 2 nominal hits as wins (p-hacking / cherry-picking)",
26
26
  "Distinguishes pre-registered primary metrics from exploratory findings",
27
27
  "Recommends treating the surviving hits as hypotheses for a follow-up confirmatory experiment",
28
- "Does not simply declare the two significant metrics real effects"
28
+ "Does not simply declare the two significant metrics real effects",
29
+ "Bases the decision on each surviving hit's effect size and confidence interval, not on its p-value"
29
30
  ]
30
31
  },
31
32
  {
32
33
  "id": 3,
33
- "prompt": "We're about to launch a new system prompt for our support chatbot and want to A/B test it live against the current one to see which gives better answers. Can you set this up?",
34
- "expected_output": "Should recognize this as online A/B evaluation of an LLM app and hand off to the ai-evaluation skill for the evaluation design (answer-quality metrics, LLM-as-judge or human feedback, eval gates); statistical-analysis contributes at most the underlying experiment statistics (sample size, significance), not the AI evaluation design.",
34
+ "prompt": "Our checkout redesign test just finished, on an intended 50/50 split: control converted 1,668 of 55,600 users and treatment 1,812 of 55,400 — 9% better, p = 0.01 — and the PM wants to ship it today. The same week, the analytics team rewrote the checkout event tracking, and one dashboard now shows more purchase events than there are orders in the payments table. Is the result real?",
35
+ "expected_output": "Notices that 'is it real' is being asked of two different things. Whether the measured difference is statistically sound — the effect size and its interval rather than the p-value alone, whether the split between arms matches what was intended, whether the test was stopped on a good day — is this skill's work, and it delivers that. Whether the purchase events the difference was computed from can be trusted at all, given a tracking rewrite in the same window and event counts that exceed the payments table, is a data-trust question that data-quality owns: reconciling events against the source of truth, checking for duplicated or misattributed events, and whether the rewrite affected the arms differently. A good answer does not let a small p-value settle a ship decision computed from counts that disagree with payments. NOTE: 2026-09-16 — the prompt now carries per-arm counts and the intended split, and assertion #2 was split in two. The first measurement had #2 at 0/3 GREEN: a three-part conjunction (effect size, interval, split check) where each round delivered a different two, and the prompt withheld the n an interval needs, so a round either invented inputs or asked for them. Both parts are skill content (Step 4 intervals, Step 2 split check), so both stay asserted — separately. The counts give +9.0% relative, p ≈ 0.0096, 95% CI ≈ +2% to +16% relative, and no sample-ratio mismatch (p ≈ 0.55).",
35
36
  "assertions": [
36
- "Recognizes this as AI-app evaluation territory and hands off to or invokes the ai-evaluation skill",
37
- "Raises AI-specific measurement concerns (defining answer quality, LLM-as-judge or human feedback signals) rather than treating it as a pure two-sample statistics problem",
38
- "Does not respond with only a generic A/B test design ignoring how answer quality gets measured",
39
- "If it retains anything, retains only the experiment statistics (sample size, significance testing) as this skill's contribution"
37
+ "Separates the two halves: whether the measured difference is statistically sound, versus whether the purchase events it was computed from can be trusted",
38
+ "Refers to data-quality for reconciling the purchase events against the payments table",
39
+ "Delivers the statistical half itself — works the effect size with a confidence interval from the counts given — rather than deferring the whole request",
40
+ "Does not let the p-value settle the ship decision while the event counts disagree with the payments table",
41
+ "Checks the traffic split against the intended 50/50 allocation (a sample-ratio-mismatch check) using the per-arm counts"
40
42
  ]
41
43
  }
42
44
  ]
@@ -19,6 +19,42 @@ This is the **strategy lens**. For what's actually built and whether it works, r
19
19
  `project-review`; the two compose into a full pre-public review (see
20
20
  [templates/full-review-prompt.md](templates/full-review-prompt.md)).
21
21
 
22
+ ## First: match the response to the size of the question
23
+
24
+ Not every positioning question is a strategic review, and running the five steps
25
+ below on a small one is the most common way this skill makes an answer worse than
26
+ no skill at all.
27
+
28
+ **The test is what the user asked you to produce, not how uncertain they sound.**
29
+
30
+ - They asked for a **specific small artifact** — a tagline, a headline, a benefit
31
+ bullet, a word choice, one competitor comparison. Deliver that artifact.
32
+ - They asked about **the position itself** — "what makes us different", "is this
33
+ space too crowded", "are we ready to go public". That *is* the review. Run it,
34
+ even though no document was named.
35
+
36
+ For the small case: **write the words, in the same response.** Pick the option,
37
+ draft the copy, give the one-line reason. Do not make it conditional on research
38
+ the user has not been asked for — where the positioning is genuinely unclear, name
39
+ the reading you assumed and answer under it. **This is not a gate on delivering:
40
+ state the assumption and deliver in the same reply.** A draft they correct beats a
41
+ question they have to go away and answer.
42
+
43
+ **Then name the strategic question in a sentence or two, if there is one.** "Every
44
+ competitor already claims fast, so that word cannot differentiate you" is this
45
+ skill's real contribution to a copy question, and it belongs in the answer.
46
+
47
+ **What does not belong is the apparatus.** No market scan, no thesis statement, no
48
+ strategic forks table, no discovery-data request, no "give me your win/loss notes
49
+ first" — unless the user asked for the review, or the small question genuinely
50
+ cannot be answered without it. **Offer the review; do not start it:** one line on
51
+ what it would cover and what it needs, and let them choose. Steps 1-5 describe that
52
+ review and begin only once it has been asked for.
53
+
54
+ Exit condition, said in the reply itself: *"Here are the tagline and the three
55
+ bullets. The underlying question is that 'fast' is table stakes in your category —
56
+ I can run the full positioning review on that if you want it."*
57
+
22
58
  ## Ground rule: a thesis is a claim, not a fact
23
59
 
24
60
  State the project's strategic thesis in one sentence, then treat every load-bearing
@@ -30,13 +30,14 @@
30
30
  },
31
31
  {
32
32
  "id": 3,
33
- "prompt": "I'm writing the one-line tagline for our landing page. Should it say 'fast' or 'simple'?",
34
- "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
+ "prompt": "We're relaunching the landing page next week. I need the tagline — 'fast' or 'simple' — and the three benefit bullets under it. Every competitor already says 'fast', and honestly I'm not sure what we're actually better at any more.",
34
+ "expected_output": "Answers the copy question directly and briefly, then treats 'not sure what we're better at any more' as what it is: a positioning question, which is this skill's own subject. Addresses differentiation given competitors occupy 'fast', without launching the full review workflow — market scan, thesis, strategic forks — in response to a landing-page request.",
35
35
  "assertions": [
36
- "Recognizes this is a small copy/messaging question, not a strategic review",
37
- "Does not launch the full strategic-review workflow (thesis, market scan, forks)",
38
- "Answers the tagline question directly with brief, practical reasoning",
39
- "May note that messaging should follow from positioning if a deeper review is ever wanted"
36
+ "Answers the immediate tagline and benefit-bullet question directly rather than deferring it to a larger review",
37
+ "Recognises that 'not sure what we're better at any more' is a positioning question rather than a copy question",
38
+ "Does not launch the full strategic-review workflow — market scan, thesis, strategic forks — as the response to a landing-page request",
39
+ "Addresses the positioning half: what actually differentiates the product given competitors already occupy 'fast'",
40
+ "States the boundary: copy expresses a position, and cannot substitute for deciding what that position is"
40
41
  ]
41
42
  }
42
43
  ]
@@ -22,7 +22,8 @@
22
22
  "Recommends fixing the shared contract/conventions first, before any fan-out, rather than gluing independently-designed pieces afterward",
23
23
  "Explains the failure mode: parallel agents without a shared contract produce incompatible outputs and costly reconciliation",
24
24
  "Offers a legitimate parallel structure instead — e.g. per-resource spec drafting against the fixed contract, or a multi-perspective review/judge panel of a single draft",
25
- "Does not simply execute the 6-way split as requested"
25
+ "Does not simply execute the 6-way split as requested",
26
+ "Notes that subagents cannot ask clarifying questions mid-flight, so open questions must be resolved before any fan-out"
26
27
  ]
27
28
  },
28
29
  {