

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
1234# Principles for Phased Development56**Hard rule for every plan** (local or GSD): each phase is either **Behavior** or **Structure**, **stop-safe**, and delivers **one observable behavior** (or one structure change that enables only the immediate next behavior). See below. GSD roadmap/phase scaffolding is welcome; it must still obey this grammar when writing or splitting plans.78## Behavior and Structure distinction910**Behavior** (external behavior) has 3 parts: **pre-condition**, **trigger**, and **post-condition**. Each part is:1112 * externally observable13 * of user value14 * typically involves state change.1516**Structure** (internal structure) is how code is organized. We want structure to be cohesive, mapped to the domain, and exposing as little information as possible from each module.1718## Phase principles1920Every phase is one of two types:2122| Type | What it does | Constraint |23|------|-------------|------------|24| **Behavior** | Delivers user value directly observable from the external perspective. | Must be externally observable and testable. **One** observable behavior per phase. |25| **Structure** | Restructures internals to prepare for the **immediate next** behavior phase, without changing any external behavior. | All changes must be **verifiable from the external perspective** (existing tests still pass, no observable difference). No speculative prep for phases beyond the next behavior phase. |2627### Sequencing rules28291. **Stop-safe ordering** — The user may decide to stop after **any** phase. The value delivered must be proportional to (or greater than) the number of completed phases, with close to **zero waste** if remaining phases are never implemented.302. **Order by value** — Earlier phases = higher user value and usability first.313. **Many phases are good** — Split as finely as you can while each phase still meets the type constraints above.324. **Structure phases only justify themselves through the next behavior phase** — A structure phase that is not immediately followed by the behavior phase it enables is speculative waste.3334**To decompose a task into phases**, use the **phased-planning** skill (or GSD `/gsd-plan-phase` / discuss — still apply this grammar to every plan task).3536### Time budget (one problem slice)3738Applies to any agent or sub-agent working on **one** breakdown — e.g. making a specific test pass, or solving one Behavior/Structure unit. Wall-clock includes implementation **and** test execution.3940| Elapsed | Expectation |41|---------|-------------|42| **≤ ~5 min** | Fuzzy goal. Size each slice so it can finish in about five minutes. |43| **> 5 min** | Scrutinize the breakdown. Prefer finer decompose → revert WIP → retry a smaller slice when the slice was oversized or thrashing. |44| **> 10 min** | **Hard trigger:** stop, revert uncommitted WIP for that attempt, finer-decompose with **phased-planning**, and retry — **unless** there is a stated good reason to continue (e.g. a single targeted test that itself needs >10 min, blocked on developer input, or irreversible mid-migration already validated). |4546Do not use Cursor timer hooks for this; agents self-enforce while working.4748---4950## Planning layout (GSD-aligned)5152Active work lives under `.planning/`:5354| Path | Role |55|------|------|56| `.planning/PROJECT.md`, `REQUIREMENTS.md`, `ROADMAP.md`, `STATE.md`, `config.json` | GSD project memory (create via `/gsd-new-project` or `/gsd-onboard`) |57| `.planning/phases/NN-slug/` | Phase directory: `*-CONTEXT.md`, `*-PLAN.md`, `*-SUMMARY.md`, `*-VERIFICATION.md`, … |58| `.planning/codebase/` | Codebase maps |59| `.planning/quick/` | Ad-hoc plans that are not yet on the roadmap |60| `ongoing/` | Legacy only — do not put new plans here |6162Prefer GSD phase dirs and filenames. Local flat `.planning/<name>.md` is legacy-compatible for execute-plan but **new** plans should use `.planning/phases/NN-slug/` or `.planning/quick/NNN-slug/`.6364**Product code, tests, and permanent docs** stay capability-named — never encode phase numbers there. Phase numbers belong only under `.planning/`.6566### Plan history (resume vs cleanup)6768- **While a plan is in progress:** keep enough history under `.planning/` (STATE, CONTEXT, PLAN status, brief learnings, SUMMARY for completed steps) so work can **stop and resume across sessions and environments**.69- **As soon as the plan is fully executed** and outcomes live in code and permanent docs: **actively clean up** spent planning history (prune done-phase detail, delete disposable notes, drop obsolete SUMMARY/discussion noise). Keep only what still helps a future reader of the *product*, or a short pointer in ROADMAP/STATE if the milestone continues.70- Do **not** leave completed plans as a permanent diary under `.planning/`.7172---7374## Testing And Completion7576- Name tests and permanent artifacts by capability, not phase number.77- Prefer observable behavior tests through high-level entry points; use direct unit tests for pure helpers and edge paths.78- Run targeted E2E for touched behavior, not the full suite unless explicitly required.79- Do not leave failing tests at a phase boundary; remove `@wip` once scenarios pass.80- Clean up dead code and update the plan before closing a phase.8182## Phase discipline (checklist)8384Before closing a phase and starting the next:85861. **Clean up** — Remove dead or unreachable code; run **post-change-refactor** on the uncommitted change.872. **No failing tests** — All unit tests and existing E2E tests must pass at the **merge / CI** gate. No test may be left in a failing state at the end of any phase or sub-phase. **Locally and for AI agents:** satisfy this by running **targeted** E2E (`cypress run --spec` for the feature(s) you touched); do **not** run the **full** E2E suite unless CI, the workflow, or the user **explicitly** requires it.883. **`@wip` for not-yet-passing E2E scenarios** — Tag test-first E2E `@wip` until they pass. CI skips `@wip` and caps count at 5.894. **Jidoka** — Before starting a phase and after finishing it: stop for developer judgment on value/design forks, credentials, or unexpected blockers (see **execute-plan**).905. **Update the plan** — Mark the phase done; prune obsolete detail; adjust remaining phases from what you learned. Keep resume-useful history until the whole plan completes, then clean up (see **Plan history** above).916. **Deploy gate** — **Commit and push** (and let **CD deploy** when applicable) before the next phase. Required for local execute-plan and for GSD execute in this repo.927. **Parallelism** — Safe parallel execution (GSD waves / multiple sub-agents) is allowed when plans do not conflict on the same files or shared mutable state; otherwise run sequentially.9394### Test-driven workflow (when adding or changing behavior)9596For **multi-step** E2E scenarios, prefer **E2E-led decomposition** (see phased-planning skill). Tag new E2E scenarios `@wip` while working toward making them pass.97981. Add or change the **E2E or unit** test; **run it** and confirm it **fails**.992. Confirm it fails for the **right reason** (not a typo or env issue).1003. If the failure is unclear, **improve the assertion or message** so the next reader learns what was wrong.1014. Implement the **smallest** change that makes the test pass.1025. **Refactor** with tests green, then continue.1036. Remove the `@wip` tag from any E2E scenario that now passes.104105---106107## Interim behavior108109- **Allowed** when it gets the feature to users faster **or** gives the team **earlier end-to-end feedback**.110- **Remove** interim behavior when a **later phase** replaces it with the intended design.111112## GSD coexistence113114Compatible defaults and **must-keep local** overlays: see `.cursor/rules/gsd-coexistence.mdc`.115
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| nerds-odd-e/doughnut.cursor/rules/general.mdc · 49 | Cursor rules | styledo-not | 49/100 | 14 days ago | |
| nerds-odd-e/doughnut.clinerules/daisyui.md · 49 | Cline rules | setuplint-formatstyleui+1 | 57/100 | 14 days ago | |
| nerds-odd-e/doughnut.cursor/rules/architecture-decisions.mdc · 49 | Cursor rules | no sections | 16/100 | 14 days ago | |
| nerds-odd-e/doughnut.cursor/rules/backend-code.mdc · 49 | Cursor rules | styletypesdatabasedo-not | 61/100 | 14 days ago | |
| nerds-odd-e/doughnut.cursor/rules/backend-testing.mdc · 49 | Cursor rules | buildteststyletesting-strategy+2 | 73/100 | 14 days ago | |
| nerds-odd-e/doughnut.cursor/rules/cli.mdc · 49 | Cursor rules | setupbuildteststyle+4 | 96/100 | 14 days ago | |
| nerds-odd-e/doughnut.cursor/rules/db-migration.mdc · 49 | Cursor rules | stylearchdatabasedeployment | 64/100 | 14 days ago | |
| nerds-odd-e/doughnut.cursor/rules/e2e-authoring.mdc · 49 | Cursor rules | setupteststylearch+3 | 80/100 | 14 days ago | |
| nerds-odd-e/doughnut.cursor/rules/e2e-ocr.mdc · 49 | Cursor rules | setuptesting-strategydo-not | 46/100 | 14 days ago | |
| nerds-odd-e/doughnut.cursor/rules/frontend-api.mdc · 49 | Cursor rules | styletesting-strategyapido-not | 57/100 | 14 days ago | |
| nerds-odd-e/doughnut.cursor/rules/frontend-component.mdc · 49 | Cursor rules | testlint-formatstylearch+2 | 76/100 | 14 days ago | |
| nerds-odd-e/doughnut.cursor/rules/frontend-storybook.mdc · 49 | Cursor rules | buildteststyletesting-strategy+1 | 69/100 | 14 days ago | |
| nerds-odd-e/doughnut.cursor/rules/frontend-testing.mdc · 49 | Cursor rules | buildteststyletesting-strategy+2 | 89/100 | 14 days ago | |
| nerds-odd-e/doughnut.cursor/rules/gsd-coexistence.mdc · 49 | Cursor rules | style | 60/100 | 14 days ago | |
| nerds-odd-e/doughnut.cursor/rules/linting_formating.mdc · 49 | Cursor rules | testlint-formatstylearch+6 | 88/100 | 14 days ago | |
| nerds-odd-e/doughnut.cursor/rules/mcp-server.mdc · 49 | Cursor rules | buildtestlint-formatarch+2 | 85/100 | 14 days ago | |
| nerds-odd-e/doughnut.cursor/rules/script.mdc · 49 | Cursor rules | testarch | 58/100 | 14 days ago | |
| nerds-odd-e/doughnutAGENTS.md · 49 | AGENTS.md | no sections | 47/100 | 14 days ago | |
| nerds-odd-e/doughnutCLAUDE.md · 49 | CLAUDE.md | agent-behaviour | 47/100 | 14 days ago |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| hiromaily/go-crypto-wallet.cursor/rules/typescript.mdc · 126 | Cursor rules | setupbuildtestlint-format+6 | 100/100 | 14 days ago | |
| TechSquidTV/Hermes.cursor/rules/10-hermes-api.mdc · 46 | Cursor rules | testlint-formatstylearch+5 | 100/100 | 14 days ago | |
| markstev/mark-starter.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+6 | 99/100 | 14 days ago | |
| deifos/clipmira-subtitles.cursor/rules/frontend.mdc · 1 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 14 days ago | |
| dodgecfr/combatfilms-webapp.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 14 days ago | |
| Allymahmoud/case-intake-platform.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 14 days ago | |
| langflow-ai/langflow.cursor/rules/docs_development.mdc · 153k | Cursor rules | setupbuildtestlint-format+7 | 97/100 | 14 days ago | |
| TechSquidTV/Hermes.cursor/rules/20-hermes-api-tests.mdc · 46 | Cursor rules | teststyletesting-strategysecurity+3 | 97/100 | 14 days ago |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/nerds-odd-e-doughnut-cursor-rules-planning)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.