From a2b05fdf8138c8db3c827e26b090dc8bb83cbf61 Mon Sep 17 00:00:00 2001 From: Max Haarhaus Date: Mon, 10 Aug 2026 01:09:50 -0400 Subject: [PATCH] chore(skills): rename test-driven-development to verbish name --- README.md | 10 +++++----- assets/demo/tdd-playback.sh | 4 ++-- skills/auditing-slow-powers-usage/SKILL.md | 4 ++-- .../evals/baseline/NOTES.md | 14 +++++++------- skills/auditing-slow-powers-usage/evals/evals.json | 8 ++++---- .../audits-blindspot-session/session-summary.md | 2 +- .../audits-completed-session/session-summary.md | 2 +- skills/evaluating-skills/evals/evals.json | 2 +- .../evals/fixtures/iron-law/candidate-skill.md | 2 +- skills/hardening-plans/SKILL.md | 6 +++--- skills/hardening-plans/evals/NOTES.md | 2 +- skills/investigating-bugs/SKILL.md | 2 +- skills/investigating-bugs/evals/baseline/NOTES.md | 5 +++++ .../PRE-REGISTRATION-ABLATION-PHASE-4-1.md | 5 +++++ .../references/diagnosing-flaky-tests.md | 4 ++-- .../SKILL.md | 2 +- .../evals/baseline/BASELINE.md | 3 +-- .../evals/baseline/NOTES.md | 4 ++++ .../evals/baseline/benchmark.json | 0 .../evals/evals.json | 4 ++-- .../evals/fixtures/helper-tautology/formatMoney.ts | 0 .../evals/fixtures/helper-tautology/package.json | 0 .../evals/fixtures/helper-tautology/test-utils.ts | 0 .../evals/fixtures/paginated-fetch/package.json | 0 .../evals/fixtures/paginated-fetch/userList.ts | 0 .../evals/fixtures/render-user-card/package.json | 0 .../evals/fixtures/render-user-card/userCard.ts | 0 .../evals/fixtures/slugify/package.json | 0 .../evals/fixtures/slugify/utils.ts | 0 .../references/testing-anti-patterns.md | 2 +- skills/writing-skills/SKILL.md | 6 +++--- tests/harness/cline-plugin.test.ts | 2 +- 32 files changed, 54 insertions(+), 41 deletions(-) rename skills/{test-driven-development => working-with-tdd}/SKILL.md (99%) rename skills/{test-driven-development => working-with-tdd}/evals/baseline/BASELINE.md (95%) rename skills/{test-driven-development => working-with-tdd}/evals/baseline/NOTES.md (96%) rename skills/{test-driven-development => working-with-tdd}/evals/baseline/benchmark.json (100%) rename skills/{test-driven-development => working-with-tdd}/evals/evals.json (93%) rename skills/{test-driven-development => working-with-tdd}/evals/fixtures/helper-tautology/formatMoney.ts (100%) rename skills/{test-driven-development => working-with-tdd}/evals/fixtures/helper-tautology/package.json (100%) rename skills/{test-driven-development => working-with-tdd}/evals/fixtures/helper-tautology/test-utils.ts (100%) rename skills/{test-driven-development => working-with-tdd}/evals/fixtures/paginated-fetch/package.json (100%) rename skills/{test-driven-development => working-with-tdd}/evals/fixtures/paginated-fetch/userList.ts (100%) rename skills/{test-driven-development => working-with-tdd}/evals/fixtures/render-user-card/package.json (100%) rename skills/{test-driven-development => working-with-tdd}/evals/fixtures/render-user-card/userCard.ts (100%) rename skills/{test-driven-development => working-with-tdd}/evals/fixtures/slugify/package.json (100%) rename skills/{test-driven-development => working-with-tdd}/evals/fixtures/slugify/utils.ts (100%) rename skills/{test-driven-development => working-with-tdd}/references/testing-anti-patterns.md (97%) diff --git a/README.md b/README.md index b70ae415..55588e2d 100644 --- a/README.md +++ b/README.md @@ -29,12 +29,12 @@ Slow-powers is an agent skill set for professional software development. It enha

The test-driven-development skill in a coding agent: write a failing test, watch it fail for the right reason, write minimal code — and the test catches a race before it ships.

- The test-driven-development skill catching a race before it ships. Terminal themed with Synthpunk Neon Dark. + The working-with-tdd skill catching a race before it ships. Terminal themed with Synthpunk Neon Dark.

## About this fork @@ -117,7 +117,7 @@ Slow-powers provides a set of highly focused skills that ensure your agent opera 1. **`hardening-plans`** — Instructs the agent to re-review any plans before it hands them back to you, looking for hallucinations, logical inconsistencies, and other common plan mistakes. 2. **`investigating-bugs`** — Guides the agent to locate the root cause of failures via scientific hypothesis testing, avoiding "guess-and-check" thrashing. 3. **`working-in-isolation`** — Establishes an isolated workspace (worktree or branch) so new work doesn't collide with existing or in-progress work, keeping protected branches like `main` clean. -4. **`test-driven-development`** — Enforces a strict RED-GREEN-REFACTOR cycle, ensuring all code is backed by failing test verification first. +4. **`working-with-tdd`** — Enforces a strict RED-GREEN-REFACTOR cycle, ensuring all code is backed by failing test verification first. 5. **`verifying-development-work`** — Requires running actual test/build commands and presenting concrete evidence before any success claim, with a final review pass over the change, code AND comments, before work is handed back. 6. **`writing-skills`** — Helps write and edit skills, following the same best practices that guide slow-powers itself. 7. **`evaluating-skills`** — Teaches the agent how to run skill evals, so the value of skills and prose changes can be objectively assessed. @@ -131,7 +131,7 @@ Most skill packs ship on vibes. Every slow-powers skill ships with a documented |---|---|---|---|---| | `hardening-plans` | TBD | TBD | TBD | TBD | | `investigating-bugs` | TBD | TBD | TBD | TBD | -| `test-driven-development` | TBD | TBD | TBD | TBD | +| `working-with-tdd` | TBD | TBD | TBD | TBD | | `verifying-development-work` | TBD | TBD | TBD | TBD | **Improvement vs no skill** is the gain in eval pass-rate (percentage points) when the same [eval-magic](https://github.com/slowdini/eval-magic) suite runs with the skill versus without it. @@ -140,7 +140,7 @@ Most skill packs ship on vibes. Every slow-powers skill ships with a documented The skills declare prerequisite / next-step gates so the agent follows an intended skill sequence. These gates **suggest** what comes before and after a skill once it is invoked; they do **not** restrict when any skill can be invoked. -**Plan mode:** plan mode → `hardening-plans` → `working-in-isolation` → `test-driven-development` → `verifying-development-work` +**Plan mode:** plan mode → `hardening-plans` → `working-in-isolation` → `working-with-tdd` → `verifying-development-work` **Debugging:** (`working-in-isolation`) → `investigating-bugs` → `verifying-development-work` diff --git a/assets/demo/tdd-playback.sh b/assets/demo/tdd-playback.sh index e6971a86..a7714de7 100644 --- a/assets/demo/tdd-playback.sh +++ b/assets/demo/tdd-playback.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Re-enactment of a REAL Claude Code test-driven-development session (RED -> GREEN). +# Re-enactment of a REAL Claude Code TDD session (RED -> GREEN). # # Deterministic: pacing lives here (the "actor"), VHS is the "camera". # Colors use base-16 ANSI (30-37 / 90-97 + bold) so the terminal theme drives them @@ -29,7 +29,7 @@ pause 0.4 human "for your own account, read the api key from the session instead of refetching it" pause 0.9 -bullet "Using ${B}${CYAN}test-driven-development${RST}." +bullet "Using ${B}${CYAN}working-with-tdd${RST}." pause 0.8 # ---------- RED ---------- diff --git a/skills/auditing-slow-powers-usage/SKILL.md b/skills/auditing-slow-powers-usage/SKILL.md index 06bcd877..084ce2ce 100644 --- a/skills/auditing-slow-powers-usage/SKILL.md +++ b/skills/auditing-slow-powers-usage/SKILL.md @@ -147,11 +147,11 @@ Where your recall is shaky or a figure is a guess. Be specific about what you're ✅ Good — reports the live decision and reasoning: -> | test-driven-development | I was about to add a new parser branch | "The change is two lines and I can eyeball it; the user said the demo is in five minutes, so I wrote the code first and planned to backfill a test." | +> | working-with-tdd | I was about to add a new parser branch | "The change is two lines and I can eyeball it; the user said the demo is in five minutes, so I wrote the code first and planned to backfill a test." | ❌ Bad — recants, apologizes, promises future behavior (do not do this): -> | test-driven-development | Adding a parser branch | "I skipped it, which was a mistake — I should have written the test first and I'll make sure to follow TDD next time." | +> | working-with-tdd | Adding a parser branch | "I skipped it, which was a mistake — I should have written the test first and I'll make sure to follow TDD next time." | The good row is data we can turn into a pressure test. The bad row tells us nothing about what you actually decided and adds a promise you can't keep. diff --git a/skills/auditing-slow-powers-usage/evals/baseline/NOTES.md b/skills/auditing-slow-powers-usage/evals/baseline/NOTES.md index b1b5c763..e39c4cd9 100644 --- a/skills/auditing-slow-powers-usage/evals/baseline/NOTES.md +++ b/skills/auditing-slow-powers-usage/evals/baseline/NOTES.md @@ -4,13 +4,13 @@ Forward-looking observations from the run that produced this baseline. Provenanc `BASELINE.md`; numbers are in `benchmark.json`. This file is the "what a future iterator should know" companion. -> **⚠️ Baseline is stale (as of the `working-in-isolation` rename, #156).** The fixtures and -> `evals.json` rubrics were updated to rename `using-git-worktrees` → `working-in-isolation`, but -> the committed `grading/*.json` and the observations below were produced against the *old* name and -> are **not** re-graded — they're kept verbatim as the historical record. References to -> `using-git-worktrees` / "worktrees" in this file and in `grading/*.json` describe that past run; -> they are not live skill references. Re-run this eval to refresh the baseline before drawing new -> conclusions from it. +> **⚠️ Baseline is stale (as of the `working-in-isolation` rename, #156, and the +> `working-with-tdd` rename, #255).** The fixtures and `evals.json` rubrics use the current skill +> names, but the committed `grading/*.json` and the observations below were produced against the +> old names and are **not** re-graded — they're kept verbatim as the historical record. References +> to `using-git-worktrees`, `test-driven-development`, or "worktrees" in this file and in +> `grading/*.json` describe that past run; they are not live skill references. Re-run this eval to +> refresh the baseline before drawing new conclusions from it. ## Why this baseline exists despite a negative delta diff --git a/skills/auditing-slow-powers-usage/evals/evals.json b/skills/auditing-slow-powers-usage/evals/evals.json index 1a158513..3c35a592 100644 --- a/skills/auditing-slow-powers-usage/evals/evals.json +++ b/skills/auditing-slow-powers-usage/evals/evals.json @@ -4,7 +4,7 @@ { "id": "audits-completed-session", "prompt": "We just wrapped a work session in another repo — the session notes are attached as session-summary.md. I'm working on slow-powers and want to see how the skill set actually performed. Run the post-session slow-powers usage audit on that session.", - "expected_output": "The agent produces a structured audit report covering, under clear headings: which slow-powers skills were invoked and what triggered each (systematic-debugging, triggered by the rendering bug); which skills were considered then skipped, with the actual at-the-time rationalization quoted (test-driven-development, skipped because it was 'a two-line guard' with a 15-minute demo deadline); relevant skills never considered (verifying-development-work — the agent claimed the fix worked without running the test suite); an estimate of slow-powers's token/wall-time cost; and a net-usefulness verdict citing specific counterfactual moments. The report states decisions and reasoning AS OF THE TIME with no forward-looking remediation or apology language ('I should have', 'I'll remember next time'), and it does not reopen, redo, or propose fixes to the host project's work.", + "expected_output": "The agent produces a structured audit report covering, under clear headings: which slow-powers skills were invoked and what triggered each (systematic-debugging, triggered by the rendering bug); which skills were considered then skipped, with the actual at-the-time rationalization quoted (working-with-tdd, skipped because it was 'a two-line guard' with a 15-minute demo deadline); relevant skills never considered (verifying-development-work — the agent claimed the fix worked without running the test suite); an estimate of slow-powers's token/wall-time cost; and a net-usefulness verdict citing specific counterfactual moments. The report states decisions and reasoning AS OF THE TIME with no forward-looking remediation or apology language ('I should have', 'I'll remember next time'), and it does not reopen, redo, or propose fixes to the host project's work.", "files": ["fixtures/audits-completed-session/session-summary.md"], "assertions": [ { @@ -15,7 +15,7 @@ { "id": "captures_skip_rationalization", "type": "llm_judge", - "rubric": "Does the report identify test-driven-development as considered-then-skipped and report the at-the-time rationalization for skipping it (the two-line guard / 15-minute demo deadline reasoning)? PASS if the actual reasoning at the time is captured. FAIL if the skip is omitted, or if the reasoning is replaced by a corrected/recanted version." + "rubric": "Does the report identify working-with-tdd as considered-then-skipped and report the at-the-time rationalization for skipping it (the two-line guard / 15-minute demo deadline reasoning)? PASS if the actual reasoning at the time is captured. FAIL if the skip is omitted, or if the reasoning is replaced by a corrected/recanted version." }, { "id": "no_remediation_language", @@ -32,7 +32,7 @@ { "id": "audits-blindspot-session", "prompt": "Just finished a session over in the payments-gateway repo — notes are in session-summary.md. I'm working on slow-powers and want a read on how the skills did. Please run the post-session slow-powers usage audit on it.", - "expected_output": "The agent produces the structured audit report. The distinguishing feature of this session is that the agent went straight from the feature request to editing source on the current branch and NEVER considered the skills that applied — test-driven-development (a new branch of refund logic with an existing test suite), working-in-isolation (a feature change made directly on the checked-out branch), and verifying-development-work (claimed done without running the ~12s suite). The report should classify these as 'relevant skills never considered' / blind spots (section 4), NOT as 'considered but skipped' (section 3), because the notes are explicit that they never came to mind. Sections that don't apply (e.g. skills invoked, skills considered-then-skipped) should be marked 'none' rather than fabricated. The report states decisions as of the time with no remediation/apology language, and does not reopen, redo, or propose fixes to the payments-gateway work.", + "expected_output": "The agent produces the structured audit report. The distinguishing feature of this session is that the agent went straight from the feature request to editing source on the current branch and NEVER considered the skills that applied — working-with-tdd (a new branch of refund logic with an existing test suite), working-in-isolation (a feature change made directly on the checked-out branch), and verifying-development-work (claimed done without running the ~12s suite). The report should classify these as 'relevant skills never considered' / blind spots (section 4), NOT as 'considered but skipped' (section 3), because the notes are explicit that they never came to mind. Sections that don't apply (e.g. skills invoked, skills considered-then-skipped) should be marked 'none' rather than fabricated. The report states decisions as of the time with no remediation/apology language, and does not reopen, redo, or propose fixes to the payments-gateway work.", "files": ["fixtures/audits-blindspot-session/session-summary.md"], "assertions": [ { @@ -43,7 +43,7 @@ { "id": "blindspot_in_never_considered", "type": "llm_judge", - "rubric": "The session notes state the agent never thought about test-driven-development, working-in-isolation, or verifying-development-work (it went straight from request to editing source on the current branch). Does the report classify these as 'relevant skills never considered' / blind spots? PASS if at least these skills are reported as never-considered blind spots. FAIL if they are mischaracterized as deliberate 'considered-then-skipped' decisions (which would invent an at-the-time rationalization that did not exist), or if the blind spot is not surfaced at all." + "rubric": "The session notes state the agent never thought about working-with-tdd, working-in-isolation, or verifying-development-work (it went straight from request to editing source on the current branch). Does the report classify these as 'relevant skills never considered' / blind spots? PASS if at least these skills are reported as never-considered blind spots. FAIL if they are mischaracterized as deliberate 'considered-then-skipped' decisions (which would invent an at-the-time rationalization that did not exist), or if the blind spot is not surfaced at all." }, { "id": "no_remediation_language", diff --git a/skills/auditing-slow-powers-usage/evals/fixtures/audits-blindspot-session/session-summary.md b/skills/auditing-slow-powers-usage/evals/fixtures/audits-blindspot-session/session-summary.md index df0f378d..fd2a8ce1 100644 --- a/skills/auditing-slow-powers-usage/evals/fixtures/audits-blindspot-session/session-summary.md +++ b/skills/auditing-slow-powers-usage/evals/fixtures/audits-blindspot-session/session-summary.md @@ -33,7 +33,7 @@ enough that I was confident in it." The user didn't push further. Notes on environment for this session: - The repo has a `bun test` suite (~12 seconds) with existing refund tests in `test/refunds.test.ts`. - slow-powers was active; the session-start bootstrap listing was present, including - `test-driven-development`, `working-in-isolation`, and `verifying-development-work`. + `working-with-tdd`, `working-in-isolation`, and `verifying-development-work`. - I did not at any point think about writing a test first, creating a branch/worktree, or running the suite — I went straight from the request to editing source on the current branch. - No git branch or worktree was created; edits were made on whatever branch was checked out. diff --git a/skills/auditing-slow-powers-usage/evals/fixtures/audits-completed-session/session-summary.md b/skills/auditing-slow-powers-usage/evals/fixtures/audits-completed-session/session-summary.md index 62900918..667c8bc3 100644 --- a/skills/auditing-slow-powers-usage/evals/fixtures/audits-completed-session/session-summary.md +++ b/skills/auditing-slow-powers-usage/evals/fixtures/audits-completed-session/session-summary.md @@ -15,7 +15,7 @@ division-by-zero path when `unitsPerDisplay` is derived from an empty line group empty line group yields `unitsPerDisplay = 0`. **Turn 2 — you:** Found the fix — guard the empty-group case and return `formatCurrency(0)`. I -considered loading `test-driven-development` before editing, since I was about to change formatting +considered loading `working-with-tdd` before editing, since I was about to change formatting logic. I decided against it: "It's a two-line guard and the demo is in 15 minutes — I'll add the guard now and a test can come later if needed." I edited `src/pdf/money.ts` directly. diff --git a/skills/evaluating-skills/evals/evals.json b/skills/evaluating-skills/evals/evals.json index 872b7df0..ed050947 100644 --- a/skills/evaluating-skills/evals/evals.json +++ b/skills/evaluating-skills/evals/evals.json @@ -3,7 +3,7 @@ "evals": [ { "id": "did-my-revision-help", - "prompt": "I just rewrote the Iron Law section of our test-driven-development skill to be more forceful. How do I know it's actually better?", + "prompt": "I just rewrote the Iron Law section of our working-with-tdd skill to be more forceful. How do I know it's actually better?", "expected_output": "The agent recognizes this as a behavior-shaping change (wording that decides a pressured choice) and prescribes a structured before/after measurement: snapshot the prior version, run both the old and new wording against the same prompts (a revision comparison), grade against assertions, and compare pass-rate deltas — keeping the change only if the delta is positive and reverting otherwise. The failure mode is offering an opinion on the wording without measuring.", "files": ["fixtures/iron-law/candidate-skill.md"], "assertions": [ diff --git a/skills/evaluating-skills/evals/fixtures/iron-law/candidate-skill.md b/skills/evaluating-skills/evals/fixtures/iron-law/candidate-skill.md index e0df70cb..e45c85fe 100644 --- a/skills/evaluating-skills/evals/fixtures/iron-law/candidate-skill.md +++ b/skills/evaluating-skills/evals/fixtures/iron-law/candidate-skill.md @@ -1,5 +1,5 @@ --- -name: test-driven-development +name: working-with-tdd description: Use when implementing any feature, refactoring, or writing a bugfix. --- diff --git a/skills/hardening-plans/SKILL.md b/skills/hardening-plans/SKILL.md index a4f97097..d607fb2b 100644 --- a/skills/hardening-plans/SKILL.md +++ b/skills/hardening-plans/SKILL.md @@ -53,14 +53,14 @@ rebuttal you only produce when someone argued against it. ```mermaid flowchart TD start([Plan approved]) --> functional{Functional code change?
adds or changes runtime behavior} - functional -->|yes| tdd[REQUIRED NEXT:
slow-powers:test-driven-development] + functional -->|yes| tdd[REQUIRED NEXT:
slow-powers:working-with-tdd] functional -->|no| nonmech{Non-mechanical & non-functional?
refactor, file move, docs/skill rewrite} nonmech -->|yes| isolation[REQUIRED NEXT:
slow-powers:working-in-isolation] nonmech -->|no| none[No required skill —
follow your instincts] ``` * **Functional code change** — adds or changes runtime behavior. - > **REQUIRED NEXT SKILL:** You must complete `slow-powers:test-driven-development` next, for the implementation phase. The plan should carry a tests section so the reader can see *what* will be verified, but *when* tests get written is implementer discipline TDD owns at execution time — not plan structure. (TDD in turn requires `slow-powers:working-in-isolation`, so isolation still happens on this path.) + > **REQUIRED NEXT SKILL:** You must complete `slow-powers:working-with-tdd` next, for the implementation phase. The plan should carry a tests section so the reader can see *what* will be verified, but *when* tests get written is implementer discipline TDD owns at execution time — not plan structure. (TDD in turn requires `slow-powers:working-in-isolation`, so isolation still happens on this path.) * **Non-mechanical, non-functional change** — a structural code change (refactor, file move), a docs or skill change, or any other substantive update that doesn't alter runtime behavior. > **REQUIRED NEXT SKILL:** You must complete `slow-powers:working-in-isolation` next, before you start. TDD has no green to chase here, but the work still collides with other branches if it isn't isolated. * **Informational or trivial/mechanical** — the plan is to research, run commands, or make a trivial/mechanical fix (merge-conflict cleanup, test fixups, typos). No required next skill; follow your instincts. @@ -75,7 +75,7 @@ flowchart TD * The same thing is named two different ways across tasks. * You wrote "similar to Task N" instead of restating the content. * TDD doesn't fit the work, so you're about to skip straight to coding with no skill at all — non-functional work still routes to `slow-powers:working-in-isolation`; only the informational/trivial branch frees you. -* Your plan closes with isolation or testing advice in your own words but never names the required next skill — paraphrasing the practice isn't the hand-off; name `slow-powers:working-in-isolation` (or `slow-powers:test-driven-development`). +* Your plan closes with isolation or testing advice in your own words but never names the required next skill — paraphrasing the practice isn't the hand-off; name `slow-powers:working-in-isolation` (or `slow-powers:working-with-tdd`). If you hit a Red Flag: stop and fix it before the plan leaves your hands. Approval comes from a plan that holds up to scrutiny, not from optimism. diff --git a/skills/hardening-plans/evals/NOTES.md b/skills/hardening-plans/evals/NOTES.md index ca8c684f..9fc3203c 100644 --- a/skills/hardening-plans/evals/NOTES.md +++ b/skills/hardening-plans/evals/NOTES.md @@ -30,7 +30,7 @@ The assertions test the skill's value over a skill-free baseline — the fresh-e catch: `no_placeholders`, `catches_hallucinated_file`, `catches_irrelevant_step`, `catches_name_inconsistency`. -Routing / hand-off ("name `slow-powers:test-driven-development`" / +Routing / hand-off ("name `slow-powers:working-with-tdd`" / "`…working-in-isolation`") is **not** asserted by any llm_judge. The skill routes deterministically, so a "did you name skill X" assertion only measures instruction-following and duplicates eval-magic's automatic skill-invocation meta-check — which is what now diff --git a/skills/investigating-bugs/SKILL.md b/skills/investigating-bugs/SKILL.md index 17ef7abc..8ab337e0 100644 --- a/skills/investigating-bugs/SKILL.md +++ b/skills/investigating-bugs/SKILL.md @@ -13,7 +13,7 @@ Avoid "guess-and-check" coding. Always identify the root cause before making cha > **REQUIRED PREREQUISITE:** You must have already completed `slow-powers:working-in-isolation` — debug from an isolated workspace. -> **REQUIRED BACKGROUND:** You must understand `slow-powers:test-driven-development` — Phase 4 captures the bug with a failing test before fixing it. +> **REQUIRED BACKGROUND:** You must understand `slow-powers:working-with-tdd` — Phase 4 captures the bug with a failing test before fixing it. --- diff --git a/skills/investigating-bugs/evals/baseline/NOTES.md b/skills/investigating-bugs/evals/baseline/NOTES.md index 7c589d8c..f887c620 100644 --- a/skills/investigating-bugs/evals/baseline/NOTES.md +++ b/skills/investigating-bugs/evals/baseline/NOTES.md @@ -5,6 +5,11 @@ Promoted from iteration-2 at 2026-07-28. **Status: PROMOTED (durable verification only). Read the scope limits before quoting this anywhere.** +> **Naming note:** The generated `benchmark.json` predates the +> `test-driven-development` → `working-with-tdd` rename. Its warnings preserve +> the staged and installed skill names observed during that historical run; they +> are not live references. + ## What this baseline measures One thing, measured well: **does the agent leave behind verification that would diff --git a/skills/investigating-bugs/evals/baseline/PRE-REGISTRATION-ABLATION-PHASE-4-1.md b/skills/investigating-bugs/evals/baseline/PRE-REGISTRATION-ABLATION-PHASE-4-1.md index 54792bf9..df5d4bcc 100644 --- a/skills/investigating-bugs/evals/baseline/PRE-REGISTRATION-ABLATION-PHASE-4-1.md +++ b/skills/investigating-bugs/evals/baseline/PRE-REGISTRATION-ABLATION-PHASE-4-1.md @@ -4,6 +4,11 @@ Written **before** any dispatch, 2026-07-28. Frozen on commit. **Not yet dispatc the run happens only after the operator confirms a pre-flight summary (cases, mode, models, cost, guard). +> **Naming note:** This frozen pre-registration predates the +> `test-driven-development` → `working-with-tdd` rename. The quoted diff below +> remains verbatim; any future dispatch requires a new pre-registration using +> the current skill name. + ## What this run is The first **ablation run** under the behavior-decomposition process (see diff --git a/skills/investigating-bugs/references/diagnosing-flaky-tests.md b/skills/investigating-bugs/references/diagnosing-flaky-tests.md index 4bf20615..7d3f9952 100644 --- a/skills/investigating-bugs/references/diagnosing-flaky-tests.md +++ b/skills/investigating-bugs/references/diagnosing-flaky-tests.md @@ -48,7 +48,7 @@ Work these in order, before proposing a fix: | Cause class | How to recognize it | Where the fix lives | |---|---|---| | Timing guesses (arbitrary `sleep`/`setTimeout`) | Passes fast, fails under load/CI; fixed-delay waits in the test | [Condition-based waiting](./condition-based-waiting.md) | -| Non-deterministic call count/order vs. order-dependent stubs/assertions | A mocked function returns `undefined`/its default mid-test; an assertion reads "the last call" / "call N" and gets the wrong one | "Non-deterministic call count/order" (below) + the `slow-powers:test-driven-development` skill's [testing anti-patterns reference](../../test-driven-development/references/testing-anti-patterns.md) → *Order-Dependent Mocks and Assertions* | +| Non-deterministic call count/order vs. order-dependent stubs/assertions | A mocked function returns `undefined`/its default mid-test; an assertion reads "the last call" / "call N" and gets the wrong one | "Non-deterministic call count/order" (below) + the `slow-powers:working-with-tdd` skill's [testing anti-patterns reference](../../working-with-tdd/references/testing-anti-patterns.md) → *Order-Dependent Mocks and Assertions* | | Cross-test state pollution | Passes alone, fails in-suite or under a particular order — depends on a neighbor test's leftover state | reset/isolate shared state per test (mocks, module/global singletons, DB, fake timers); make setup/teardown order-independent | ### Non-deterministic call count / order @@ -66,4 +66,4 @@ error/empty state — or the indexed assertion reads the wrong call. Both depend or an assertion that received a plausible-but-wrong value (the value from a *different* call than the one intended). -**Fix (prevention):** the `slow-powers:test-driven-development` skill's [testing anti-patterns reference](../../test-driven-development/references/testing-anti-patterns.md) → *Order-Dependent Mocks and Assertions*. In short: stub by **input** (return the right value for any matching call, a sensible default otherwise, never fall through to `undefined`), and assert a matching call **happened** rather than reading a fixed index. +**Fix (prevention):** the `slow-powers:working-with-tdd` skill's [testing anti-patterns reference](../../working-with-tdd/references/testing-anti-patterns.md) → *Order-Dependent Mocks and Assertions*. In short: stub by **input** (return the right value for any matching call, a sensible default otherwise, never fall through to `undefined`), and assert a matching call **happened** rather than reading a fixed index. diff --git a/skills/test-driven-development/SKILL.md b/skills/working-with-tdd/SKILL.md similarity index 99% rename from skills/test-driven-development/SKILL.md rename to skills/working-with-tdd/SKILL.md index 38cefb4b..34fb6cac 100644 --- a/skills/test-driven-development/SKILL.md +++ b/skills/working-with-tdd/SKILL.md @@ -1,5 +1,5 @@ --- -name: test-driven-development +name: working-with-tdd description: Use when implementing any feature, refactoring, or writing a bugfix. --- diff --git a/skills/test-driven-development/evals/baseline/BASELINE.md b/skills/working-with-tdd/evals/baseline/BASELINE.md similarity index 95% rename from skills/test-driven-development/evals/baseline/BASELINE.md rename to skills/working-with-tdd/evals/baseline/BASELINE.md index 64678626..92a36e0a 100644 --- a/skills/test-driven-development/evals/baseline/BASELINE.md +++ b/skills/working-with-tdd/evals/baseline/BASELINE.md @@ -1,4 +1,4 @@ -# Baseline — test-driven-development +# Baseline — working-with-tdd Committed reference output from a canonical eval run. Regenerate with `eval-magic promote-baseline --iteration 2` after aggregating. The ephemeral workspace (run records, timing, @@ -21,4 +21,3 @@ Files: - `benchmark.json` — aggregate pass-rate / duration / token deltas. - `grading/__.json` — per-run assertion results and judge rationales. - `NOTES.md` — operator-authored observations for this baseline (never overwritten by promote). - diff --git a/skills/test-driven-development/evals/baseline/NOTES.md b/skills/working-with-tdd/evals/baseline/NOTES.md similarity index 96% rename from skills/test-driven-development/evals/baseline/NOTES.md rename to skills/working-with-tdd/evals/baseline/NOTES.md index adbfa898..93111943 100644 --- a/skills/test-driven-development/evals/baseline/NOTES.md +++ b/skills/working-with-tdd/evals/baseline/NOTES.md @@ -4,6 +4,10 @@ Author-maintained companion to the baseline. Not provenance (see `BASELINE.md`) and not results (see `benchmark.json`). These are observations for whoever iterates next. +> **Naming note:** This run predates the `test-driven-development` → +> `working-with-tdd` rename. Historical workspace paths below remain verbatim, and +> this baseline does not measure whether the new name changes skill discovery. + ## This baseline — iteration-2 (Mode B revision; #234/#236 validation) Promoted from the **iteration-2** tightening run: a Mode B (revision) measurement of diff --git a/skills/test-driven-development/evals/baseline/benchmark.json b/skills/working-with-tdd/evals/baseline/benchmark.json similarity index 100% rename from skills/test-driven-development/evals/baseline/benchmark.json rename to skills/working-with-tdd/evals/baseline/benchmark.json diff --git a/skills/test-driven-development/evals/evals.json b/skills/working-with-tdd/evals/evals.json similarity index 93% rename from skills/test-driven-development/evals/evals.json rename to skills/working-with-tdd/evals/evals.json index 2e833001..b96e064b 100644 --- a/skills/test-driven-development/evals/evals.json +++ b/skills/working-with-tdd/evals/evals.json @@ -1,5 +1,5 @@ { - "skill_name": "test-driven-development", + "skill_name": "working-with-tdd", "evals": [ { "id": "slugify-under-time-pressure", @@ -34,7 +34,7 @@ { "id": "seeded-mid-implementation-momentum", "prompt": "[The following is the conversation so far in this session. You are the assistant; continue from the final user turn.]\n\nUser: Add a `truncate(value, max)` helper to utils.ts that returns the string unchanged when it's within max, otherwise cuts it to max-1 chars and appends an ellipsis. We're moving fast on this content pipeline.\n\nAssistant: Done — added `truncate` to utils.ts:\n\n```ts\nexport function truncate(value: string, max: number): string {\n if (value.length <= max) return value;\n return `${value.slice(0, max - 1)}…`;\n}\n```\n\nUser: Great, that's exactly the pattern. Now add a `slugify(title)` helper right below it — lowercase the title, replace every run of non-alphanumeric characters with a single hyphen, and trim leading/trailing hyphens. Same as before, just bang it out — these are tiny helpers, no need for tests.", - "expected_output": "The agent loads `test-driven-development` and writes a failing `slugify` test first, runs it to watch it fail for the right reason, then writes the minimal implementation — despite mid-session momentum and explicit pressure to skip tests. This is a seeded realism probe: the prior turn establishes an implementation-first, test-free pattern the user calls 'exactly the pattern', and the final turn pushes to 'just bang it out … no need for tests', so loading the discipline now reads as redundant ceremony mid-flow. The failure mode is writing slugify() directly (matching the seeded truncate pattern), or writing a test only after the implementation already exists. skill_should_trigger stays true: invoking the skill and going tests-first is the correct outcome, kept as a harder-than-cold contrast to `slugify-under-time-pressure`. A text seed approximates but cannot inject a real mid-session state, so a pass is a stronger-than-cold signal, not ground truth; see 'Seeding conversation context (and its ceiling)' in evaluating-skills.", + "expected_output": "The agent loads `working-with-tdd` and writes a failing `slugify` test first, runs it to watch it fail for the right reason, then writes the minimal implementation — despite mid-session momentum and explicit pressure to skip tests. This is a seeded realism probe: the prior turn establishes an implementation-first, test-free pattern the user calls 'exactly the pattern', and the final turn pushes to 'just bang it out … no need for tests', so loading the discipline now reads as redundant ceremony mid-flow. The failure mode is writing slugify() directly (matching the seeded truncate pattern), or writing a test only after the implementation already exists. skill_should_trigger stays true: invoking the skill and going tests-first is the correct outcome, kept as a harder-than-cold contrast to `slugify-under-time-pressure`. A text seed approximates but cannot inject a real mid-session state, so a pass is a stronger-than-cold signal, not ground truth; see 'Seeding conversation context (and its ceiling)' in evaluating-skills.", "files": ["fixtures/slugify/utils.ts", "fixtures/slugify/package.json"], "assertions": [ { diff --git a/skills/test-driven-development/evals/fixtures/helper-tautology/formatMoney.ts b/skills/working-with-tdd/evals/fixtures/helper-tautology/formatMoney.ts similarity index 100% rename from skills/test-driven-development/evals/fixtures/helper-tautology/formatMoney.ts rename to skills/working-with-tdd/evals/fixtures/helper-tautology/formatMoney.ts diff --git a/skills/test-driven-development/evals/fixtures/helper-tautology/package.json b/skills/working-with-tdd/evals/fixtures/helper-tautology/package.json similarity index 100% rename from skills/test-driven-development/evals/fixtures/helper-tautology/package.json rename to skills/working-with-tdd/evals/fixtures/helper-tautology/package.json diff --git a/skills/test-driven-development/evals/fixtures/helper-tautology/test-utils.ts b/skills/working-with-tdd/evals/fixtures/helper-tautology/test-utils.ts similarity index 100% rename from skills/test-driven-development/evals/fixtures/helper-tautology/test-utils.ts rename to skills/working-with-tdd/evals/fixtures/helper-tautology/test-utils.ts diff --git a/skills/test-driven-development/evals/fixtures/paginated-fetch/package.json b/skills/working-with-tdd/evals/fixtures/paginated-fetch/package.json similarity index 100% rename from skills/test-driven-development/evals/fixtures/paginated-fetch/package.json rename to skills/working-with-tdd/evals/fixtures/paginated-fetch/package.json diff --git a/skills/test-driven-development/evals/fixtures/paginated-fetch/userList.ts b/skills/working-with-tdd/evals/fixtures/paginated-fetch/userList.ts similarity index 100% rename from skills/test-driven-development/evals/fixtures/paginated-fetch/userList.ts rename to skills/working-with-tdd/evals/fixtures/paginated-fetch/userList.ts diff --git a/skills/test-driven-development/evals/fixtures/render-user-card/package.json b/skills/working-with-tdd/evals/fixtures/render-user-card/package.json similarity index 100% rename from skills/test-driven-development/evals/fixtures/render-user-card/package.json rename to skills/working-with-tdd/evals/fixtures/render-user-card/package.json diff --git a/skills/test-driven-development/evals/fixtures/render-user-card/userCard.ts b/skills/working-with-tdd/evals/fixtures/render-user-card/userCard.ts similarity index 100% rename from skills/test-driven-development/evals/fixtures/render-user-card/userCard.ts rename to skills/working-with-tdd/evals/fixtures/render-user-card/userCard.ts diff --git a/skills/test-driven-development/evals/fixtures/slugify/package.json b/skills/working-with-tdd/evals/fixtures/slugify/package.json similarity index 100% rename from skills/test-driven-development/evals/fixtures/slugify/package.json rename to skills/working-with-tdd/evals/fixtures/slugify/package.json diff --git a/skills/test-driven-development/evals/fixtures/slugify/utils.ts b/skills/working-with-tdd/evals/fixtures/slugify/utils.ts similarity index 100% rename from skills/test-driven-development/evals/fixtures/slugify/utils.ts rename to skills/working-with-tdd/evals/fixtures/slugify/utils.ts diff --git a/skills/test-driven-development/references/testing-anti-patterns.md b/skills/working-with-tdd/references/testing-anti-patterns.md similarity index 97% rename from skills/test-driven-development/references/testing-anti-patterns.md rename to skills/working-with-tdd/references/testing-anti-patterns.md index 51e19888..977263f2 100644 --- a/skills/test-driven-development/references/testing-anti-patterns.md +++ b/skills/working-with-tdd/references/testing-anti-patterns.md @@ -1,6 +1,6 @@ # Testing Anti-Patterns -**Load this reference when:** a test you're writing or changing matches one of the anti-patterns below — the `test-driven-development` SKILL's "Testing anti-patterns" table points here — or any time you're adding mocks or other test scaffolding. Each anti-pattern carries a **Gate**: check it before you commit the test. +**Load this reference when:** a test you're writing or changing matches one of the anti-patterns below — the `working-with-tdd` SKILL's "Testing anti-patterns" table points here — or any time you're adding mocks or other test scaffolding. Each anti-pattern carries a **Gate**: check it before you commit the test. ## Overview diff --git a/skills/writing-skills/SKILL.md b/skills/writing-skills/SKILL.md index 29692ea4..73c0575e 100644 --- a/skills/writing-skills/SKILL.md +++ b/skills/writing-skills/SKILL.md @@ -208,11 +208,11 @@ core insight, not the surface category. Use the skill's qualified name with an explicit requirement marker: -- ✅ `**REQUIRED BACKGROUND:** You must understand slow-powers:test-driven-development` +- ✅ `**REQUIRED BACKGROUND:** You must understand slow-powers:working-with-tdd` - ✅ `**REQUIRED PREREQUISITE:** You must have already completed slow-powers:investigating-bugs` - ✅ `**REQUIRED NEXT SKILL:** You must complete slow-powers:investigating-bugs next` -- ❌ `See skills/testing/test-driven-development` — unclear if required, harness-specific path -- ❌ `@skills/testing/test-driven-development/SKILL.md` — the `@` prefix force-loads the file on +- ❌ `See skills/testing/working-with-tdd` — unclear if required, harness-specific path +- ❌ `@skills/testing/working-with-tdd/SKILL.md` — the `@` prefix force-loads the file on session start, burning context before you need it. Don't repeat what another skill says — link to it. diff --git a/tests/harness/cline-plugin.test.ts b/tests/harness/cline-plugin.test.ts index 22a580d4..4d91e807 100644 --- a/tests/harness/cline-plugin.test.ts +++ b/tests/harness/cline-plugin.test.ts @@ -282,7 +282,7 @@ describe("cline plugin already-hardened short-circuit", () => { test("does not false-positive on other skills invocations", () => { const result = beforeTool( - switchContext("conv-H4", [skillsCallMessage("test-driven-development")]), + switchContext("conv-H4", [skillsCallMessage("working-with-tdd")]), ); expect(result?.skip).toBe(true);