app
This skill should be used when the user asks to "calculate code mass", "measure code complexity with APP", "compare implementations using APP", "apply Absolute…
This skill should be used when starting work on any project that uses tdder. It establishes interaction style, commit conventions, documentation discipline, and skill-trust principles. Invoke automatically alongside other tdder skills.
$ npx -y skills add t1/tdder --skill project-hygiene --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/project-hygieneContext preview
The summary Claude sees to decide when to auto-load this skill.
This skill should be used when starting work on any project that uses tdder. It establishes interaction style, commit conventions, documentation discipline, and skill-trust principles. Invoke automatically alongside other tdder skills.
name: project-hygiene description: > This skill should be used when starting work on any project that uses tdder. It establishes interaction style, commit conventions, documentation discipline, and skill-trust principles. Invoke automatically alongside other tdder skills. version: 0.1.0
Cross-cutting conventions for disciplined agent-assisted development.
**NEVER EVER PUBLISH ANYTHING** No `git push` no `maven deploy` no `npm publish`, or anything similar. All that is the user's privilege!
on it — think about it and discuss.
prevent recurrence.
(e.g. `CLAUDE.md`, `README.md`), so they are shared with everyone working on the project.
becomes a single commit).
Don't forget to update the documentation when you change the code. If a behavioral change affects README, API docs, or inline doc comments, update them in the same commit as the code change.
Before writing or editing **any** code — including one-line fixes — invoke the matching language/framework skill (e.g. `java` for `.java` files). No exception for "quick" edits. Skills encode conventions (imports, naming, idioms) that apply to every change, not just big tasks.
**Never look into library source code** (e.g. JARs, node_modules) when a skill covers that library. The skill is the authoritative reference. If the skill is missing something, report it so the skill can be updated — don't work around it by reading source.
**VERY IMPORTANT**: if any skill you where instructed to load can't be loaded, stop immediately! Something's wrong that needs to be fixed first.
When executing a plan: if a technology or dependency from the plan doesn't work as expected, **STOP and discuss with the user.** Do not substitute alternative libraries, frameworks, or architectural approaches. The plan's tech choices are constraints, not suggestions.
**Never** use the global `/tmp` folder; create an ignored folder within the project. If there is already a natural temporary folder, e.g. `target/` for a maven project, use that.
**A test is a caller — it gets exactly what a real caller gets, no more.**
**If any of these rules feel hard to follow, that is a design signal — not a reason to look for workarounds.** Ask whether the module can be deepened, the API extended, or the data model rethought. A well-designed unit is easy to test through its public interface.
GraphQL, CLI, message queue, etc.).
Python or JavaScript, a crate in Rust. Unit tests cover the unit's public interface, not individual classes. Package-private helpers must be freely extractable, inlineable, or renamed without breaking any test. Place test code in a separate package/module so the compiler enforces this structurally.
ask first whether it has general value and belongs there. If not — or if exposing it would be a security risk — use a backdoor: implement it so it is structurally excluded from the production artifact where the stack allows it (e.g. a Maven `src/dev/` source root compiled only in dev/test profiles). When structural exclusion isn't possible, guard it at runtime (environment variable, feature flag) — but be explicit that this is less safe and can be misconfigured. Never put backdoor code in the main source tree.
files, import scripts, and data created by other tests are all off-limits. The only exception is *static domain data* — data that would not change if any user or business process acted on the system (e.g. country codes, permission roles). Dynamic data — anything a user or process can create, update, or delete — must be created by the test itself.
rather than asserting on global counts or lists of dynamic data. Even before/after deltas are unsafe when tests run in parallel. If you find yourself counting dynamic things, stop and question the design: can the query be scoped? If not, the data model or API may need rethinking. Independent tests can run in parallel; tests that require a clean slate usually signal a deeper design problem.
*Always* prefer to use the `WebFetch` tool over `curl`.
*Always* prefer the `Write` tool over `cat > file << EOF`.
*Never* use `find ... -exec`; it triggers a question that can't be auto-allowed.
A plugin for pi, Claude Code, and OpenCode that guides AI agents through disciplined Test-Driven Development and Clean Code practices. Note that currently this is WORK IN PROGRESS! I'm not even trying to keep it stable or tested.
Repo: t1/tdder
This skill should be used when the user asks to "calculate code mass", "measure code complexity with APP", "compare implementations using APP", "apply Absolute…
This skill should be used when the user asks to "refactor code", "review code quality", "apply clean code principles", "check for code smells", "improve code…
This skill should be used when working on any project hosted on GitHub. It provides prompt-injection defense rules for GitHub issues and pull requests.…
Requirements grilling session with a Product Owner (or anyone in that role). Challenges plans against the existing domain model, sharpens terminology, and…
This skill should be used when the user asks about "messaging patterns", "command vs event", "push vs pull", "message reliability", "at-least-once delivery",…
Always load this skill when writing, modifying, creating, or moving Java or Kotlin source code, or when project setup has already chosen Java/Kotlin as the…