You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .agents/rules/ponytail.md
+17-1Lines changed: 17 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,6 +14,21 @@ Before writing any code, stop at the first rung that holds:
14
14
15
15
The ladder runs after you understand the problem, not instead of it: read the task and the code it touches, trace the real flow end to end, then climb.
16
16
17
+
Scope before simplicity:
18
+
19
+
- Lock the task's required outcome before simplifying. For bounded/local work,
20
+
simplify inside the stated behaviour. For complete/systemic work, preserve
21
+
the required end-to-end behaviour, coverage, integration, migration,
22
+
documentation, and verification, then simplify within that boundary.
23
+
- Target the smallest complete solution, not the smallest diff. Never drop
24
+
requested scope, test coverage, validation, error handling, or integration
25
+
to reduce lines.
26
+
- Test coverage follows the risk and behaviour matrix. One runnable check is a
27
+
floor for small non-trivial logic, never a ceiling for a complex test task.
28
+
- If a smaller result would only be a temporary patch, say so and do not call
29
+
it complete; ask or state the assumption when the intended boundary is
30
+
unclear.
31
+
17
32
Bug fix = root cause, not symptom: a report names a symptom. Grep every caller of the function you touch and fix the shared function once — one guard there is a smaller diff than one per caller, and patching only the path the ticket names leaves a sibling caller still broken.
18
33
19
34
Rules:
@@ -23,7 +38,8 @@ Rules:
23
38
- No boilerplate nobody asked for.
24
39
- Deletion over addition. Boring over clever. Fewest files possible.
25
40
- Shortest working diff wins, but only once you understand the problem. The smallest change in the wrong place isn't lazy, it's a second bug.
26
-
- Question complex requests: "Do you actually need X, or does Y cover it?"
41
+
- Question complex requests only after preserving the required boundary:
42
+
"Does Y cover X without dropping required behaviour?"
27
43
- Pick the edge-case-correct option when two stdlib approaches are the same size, lazy means less code, not the flimsier algorithm.
28
44
- Mark deliberate simplifications that cut a real corner with a known ceiling (global lock, O(n²) scan, naive heuristic) with a `ponytail:` comment naming the ceiling and upgrade path.
Copy file name to clipboardExpand all lines: .clinerules/ponytail.md
+17-1Lines changed: 17 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,6 +14,21 @@ Before writing any code, stop at the first rung that holds:
14
14
15
15
The ladder runs after you understand the problem, not instead of it: read the task and the code it touches, trace the real flow end to end, then climb.
16
16
17
+
Scope before simplicity:
18
+
19
+
- Lock the task's required outcome before simplifying. For bounded/local work,
20
+
simplify inside the stated behaviour. For complete/systemic work, preserve
21
+
the required end-to-end behaviour, coverage, integration, migration,
22
+
documentation, and verification, then simplify within that boundary.
23
+
- Target the smallest complete solution, not the smallest diff. Never drop
24
+
requested scope, test coverage, validation, error handling, or integration
25
+
to reduce lines.
26
+
- Test coverage follows the risk and behaviour matrix. One runnable check is a
27
+
floor for small non-trivial logic, never a ceiling for a complex test task.
28
+
- If a smaller result would only be a temporary patch, say so and do not call
29
+
it complete; ask or state the assumption when the intended boundary is
30
+
unclear.
31
+
17
32
Bug fix = root cause, not symptom: a report names a symptom. Grep every caller of the function you touch and fix the shared function once — one guard there is a smaller diff than one per caller, and patching only the path the ticket names leaves a sibling caller still broken.
18
33
19
34
Rules:
@@ -23,7 +38,8 @@ Rules:
23
38
- No boilerplate nobody asked for.
24
39
- Deletion over addition. Boring over clever. Fewest files possible.
25
40
- Shortest working diff wins, but only once you understand the problem. The smallest change in the wrong place isn't lazy, it's a second bug.
26
-
- Question complex requests: "Do you actually need X, or does Y cover it?"
41
+
- Question complex requests only after preserving the required boundary:
42
+
"Does Y cover X without dropping required behaviour?"
27
43
- Pick the edge-case-correct option when two stdlib approaches are the same size, lazy means less code, not the flimsier algorithm.
28
44
- Mark deliberate simplifications that cut a real corner with a known ceiling (global lock, O(n²) scan, naive heuristic) with a `ponytail:` comment naming the ceiling and upgrade path.
Copy file name to clipboardExpand all lines: .cursor/rules/ponytail.mdc
+17-1Lines changed: 17 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -20,6 +20,21 @@ Before writing any code, stop at the first rung that holds:
20
20
21
21
The ladder runs after you understand the problem, not instead of it: read the task and the code it touches, trace the real flow end to end, then climb.
22
22
23
+
Scope before simplicity:
24
+
25
+
- Lock the task's required outcome before simplifying. For bounded/local work,
26
+
simplify inside the stated behaviour. For complete/systemic work, preserve
27
+
the required end-to-end behaviour, coverage, integration, migration,
28
+
documentation, and verification, then simplify within that boundary.
29
+
- Target the smallest complete solution, not the smallest diff. Never drop
30
+
requested scope, test coverage, validation, error handling, or integration
31
+
to reduce lines.
32
+
- Test coverage follows the risk and behaviour matrix. One runnable check is a
33
+
floor for small non-trivial logic, never a ceiling for a complex test task.
34
+
- If a smaller result would only be a temporary patch, say so and do not call
35
+
it complete; ask or state the assumption when the intended boundary is
36
+
unclear.
37
+
23
38
Bug fix = root cause, not symptom: a report names a symptom. Grep every caller of the function you touch and fix the shared function once — one guard there is a smaller diff than one per caller, and patching only the path the ticket names leaves a sibling caller still broken.
24
39
25
40
Rules:
@@ -29,7 +44,8 @@ Rules:
29
44
- No boilerplate nobody asked for.
30
45
- Deletion over addition. Boring over clever. Fewest files possible.
31
46
- Shortest working diff wins, but only once you understand the problem. The smallest change in the wrong place isn't lazy, it's a second bug.
32
-
- Question complex requests: "Do you actually need X, or does Y cover it?"
47
+
- Question complex requests only after preserving the required boundary:
48
+
"Does Y cover X without dropping required behaviour?"
33
49
- Pick the edge-case-correct option when two stdlib approaches are the same size, lazy means less code, not the flimsier algorithm.
34
50
- Mark deliberate simplifications that cut a real corner with a known ceiling (global lock, O(n²) scan, naive heuristic) with a `ponytail:` comment naming the ceiling and upgrade path.
Copy file name to clipboardExpand all lines: .github/copilot-instructions.md
+17-1Lines changed: 17 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,6 +14,21 @@ Before writing any code, stop at the first rung that holds:
14
14
15
15
The ladder runs after you understand the problem, not instead of it: read the task and the code it touches, trace the real flow end to end, then climb.
16
16
17
+
Scope before simplicity:
18
+
19
+
- Lock the task's required outcome before simplifying. For bounded/local work,
20
+
simplify inside the stated behaviour. For complete/systemic work, preserve
21
+
the required end-to-end behaviour, coverage, integration, migration,
22
+
documentation, and verification, then simplify within that boundary.
23
+
- Target the smallest complete solution, not the smallest diff. Never drop
24
+
requested scope, test coverage, validation, error handling, or integration
25
+
to reduce lines.
26
+
- Test coverage follows the risk and behaviour matrix. One runnable check is a
27
+
floor for small non-trivial logic, never a ceiling for a complex test task.
28
+
- If a smaller result would only be a temporary patch, say so and do not call
29
+
it complete; ask or state the assumption when the intended boundary is
30
+
unclear.
31
+
17
32
Bug fix = root cause, not symptom: a report names a symptom. Grep every caller of the function you touch and fix the shared function once — one guard there is a smaller diff than one per caller, and patching only the path the ticket names leaves a sibling caller still broken.
18
33
19
34
Rules:
@@ -23,7 +38,8 @@ Rules:
23
38
- No boilerplate nobody asked for.
24
39
- Deletion over addition. Boring over clever. Fewest files possible.
25
40
- Shortest working diff wins, but only once you understand the problem. The smallest change in the wrong place isn't lazy, it's a second bug.
26
-
- Question complex requests: "Do you actually need X, or does Y cover it?"
41
+
- Question complex requests only after preserving the required boundary:
42
+
"Does Y cover X without dropping required behaviour?"
27
43
- Pick the edge-case-correct option when two stdlib approaches are the same size, lazy means less code, not the flimsier algorithm.
28
44
- Mark deliberate simplifications that cut a real corner with a known ceiling (global lock, O(n²) scan, naive heuristic) with a `ponytail:` comment naming the ceiling and upgrade path.
Copy file name to clipboardExpand all lines: .kiro/steering/ponytail.md
+17-1Lines changed: 17 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -19,6 +19,21 @@ Before writing any code, stop at the first rung that holds:
19
19
20
20
The ladder runs after you understand the problem, not instead of it: read the task and the code it touches, trace the real flow end to end, then climb.
21
21
22
+
Scope before simplicity:
23
+
24
+
- Lock the task's required outcome before simplifying. For bounded/local work,
25
+
simplify inside the stated behaviour. For complete/systemic work, preserve
26
+
the required end-to-end behaviour, coverage, integration, migration,
27
+
documentation, and verification, then simplify within that boundary.
28
+
- Target the smallest complete solution, not the smallest diff. Never drop
29
+
requested scope, test coverage, validation, error handling, or integration
30
+
to reduce lines.
31
+
- Test coverage follows the risk and behaviour matrix. One runnable check is a
32
+
floor for small non-trivial logic, never a ceiling for a complex test task.
33
+
- If a smaller result would only be a temporary patch, say so and do not call
34
+
it complete; ask or state the assumption when the intended boundary is
35
+
unclear.
36
+
22
37
Bug fix = root cause, not symptom: a report names a symptom. Grep every caller of the function you touch and fix the shared function once — one guard there is a smaller diff than one per caller, and patching only the path the ticket names leaves a sibling caller still broken.
23
38
24
39
Rules:
@@ -28,7 +43,8 @@ Rules:
28
43
- No boilerplate nobody asked for.
29
44
- Deletion over addition. Boring over clever. Fewest files possible.
30
45
- Shortest working diff wins, but only once you understand the problem. The smallest change in the wrong place isn't lazy, it's a second bug.
31
-
- Question complex requests: "Do you actually need X, or does Y cover it?"
46
+
- Question complex requests only after preserving the required boundary:
47
+
"Does Y cover X without dropping required behaviour?"
32
48
- Pick the edge-case-correct option when two stdlib approaches are the same size, lazy means less code, not the flimsier algorithm.
33
49
- Mark deliberate simplifications that cut a real corner with a known ceiling (global lock, O(n²) scan, naive heuristic) with a `ponytail:` comment naming the ceiling and upgrade path.
Copy file name to clipboardExpand all lines: .openclaw/skills/ponytail/SKILL.md
+21-1Lines changed: 21 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,6 +17,24 @@ ACTIVE EVERY RESPONSE. No drift back to over-building. Still active if
17
17
unsure. Off only: "stop ponytail" / "normal mode". Default: **full**.
18
18
Switch: `/ponytail lite|full|ultra`.
19
19
20
+
## Scope before simplicity
21
+
22
+
Before climbing the ladder, lock the task's required outcome and classify its
23
+
scope:
24
+
25
+
-**Bounded/local:** simplify freely inside the stated behaviour.
26
+
-**Complete/systemic:** preserve the end-to-end behaviour, coverage,
27
+
integration, migration, documentation, and verification the task requires;
28
+
then simplify the implementation inside that boundary.
29
+
30
+
The target is the **smallest complete solution**, not the smallest diff. Never
31
+
drop requested scope, test coverage, validation, error handling, or integration
32
+
just to reduce lines. For tests, coverage follows the risk and behaviour
33
+
matrix: the one-check rule is a floor for small non-trivial logic, never a
34
+
ceiling for a complex test task. If a smaller result would only be a temporary
35
+
patch, say so and do not present it as complete; ask or state the assumption
36
+
when the intended boundary is unclear.
37
+
20
38
## The ladder
21
39
22
40
Stop at the first rung that holds:
@@ -47,7 +65,9 @@ every sibling caller still broken. Fix it once, where all callers route through.
47
65
- No boilerplate, no scaffolding "for later", later can scaffold for itself.
48
66
- Deletion over addition. Boring over clever, clever is what someone decodes at 3am.
49
67
- Fewest files possible. Shortest working diff wins — but only once you understand the problem. The smallest change in the wrong place isn't lazy, it's a second bug.
50
-
- Complex request? Ship the lazy version and question it in the same response, "Did X; Y covers it. Need full X? Say so." Never stall on an answer you can default.
68
+
- Complex request? Complete the required boundary first, then use the ladder
69
+
inside it. Do not silently substitute a temporary patch for the requested
70
+
solution; if the boundary is unclear, ask or state the assumption.
51
71
- Two stdlib options, same size? Take the one that's correct on edge cases. Lazy means writing less code, not picking the flimsier algorithm.
52
72
- Mark deliberate simplifications that cut a real corner with a known ceiling (global lock, O(n²) scan, naive heuristic) with a `ponytail:` comment naming the ceiling and upgrade path (`# ponytail: global lock, per-account locks if throughput matters`).
Copy file name to clipboardExpand all lines: .qoder/rules/ponytail.md
+17-1Lines changed: 17 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,6 +14,21 @@ Before writing any code, stop at the first rung that holds:
14
14
15
15
The ladder runs after you understand the problem, not instead of it: read the task and the code it touches, trace the real flow end to end, then climb.
16
16
17
+
Scope before simplicity:
18
+
19
+
- Lock the task's required outcome before simplifying. For bounded/local work,
20
+
simplify inside the stated behaviour. For complete/systemic work, preserve
21
+
the required end-to-end behaviour, coverage, integration, migration,
22
+
documentation, and verification, then simplify within that boundary.
23
+
- Target the smallest complete solution, not the smallest diff. Never drop
24
+
requested scope, test coverage, validation, error handling, or integration
25
+
to reduce lines.
26
+
- Test coverage follows the risk and behaviour matrix. One runnable check is a
27
+
floor for small non-trivial logic, never a ceiling for a complex test task.
28
+
- If a smaller result would only be a temporary patch, say so and do not call
29
+
it complete; ask or state the assumption when the intended boundary is
30
+
unclear.
31
+
17
32
Bug fix = root cause, not symptom: a report names a symptom. Grep every caller of the function you touch and fix the shared function once — one guard there is a smaller diff than one per caller, and patching only the path the ticket names leaves a sibling caller still broken.
18
33
19
34
Rules:
@@ -23,7 +38,8 @@ Rules:
23
38
- No boilerplate nobody asked for.
24
39
- Deletion over addition. Boring over clever. Fewest files possible.
25
40
- Shortest working diff wins, but only once you understand the problem. The smallest change in the wrong place isn't lazy, it's a second bug.
26
-
- Question complex requests: "Do you actually need X, or does Y cover it?"
41
+
- Question complex requests only after preserving the required boundary:
42
+
"Does Y cover X without dropping required behaviour?"
27
43
- Pick the edge-case-correct option when two stdlib approaches are the same size, lazy means less code, not the flimsier algorithm.
28
44
- Mark deliberate simplifications that cut a real corner with a known ceiling (global lock, O(n²) scan, naive heuristic) with a `ponytail:` comment naming the ceiling and upgrade path.
Copy file name to clipboardExpand all lines: .windsurf/rules/ponytail.md
+17-1Lines changed: 17 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,6 +14,21 @@ Before writing any code, stop at the first rung that holds:
14
14
15
15
The ladder runs after you understand the problem, not instead of it: read the task and the code it touches, trace the real flow end to end, then climb.
16
16
17
+
Scope before simplicity:
18
+
19
+
- Lock the task's required outcome before simplifying. For bounded/local work,
20
+
simplify inside the stated behaviour. For complete/systemic work, preserve
21
+
the required end-to-end behaviour, coverage, integration, migration,
22
+
documentation, and verification, then simplify within that boundary.
23
+
- Target the smallest complete solution, not the smallest diff. Never drop
24
+
requested scope, test coverage, validation, error handling, or integration
25
+
to reduce lines.
26
+
- Test coverage follows the risk and behaviour matrix. One runnable check is a
27
+
floor for small non-trivial logic, never a ceiling for a complex test task.
28
+
- If a smaller result would only be a temporary patch, say so and do not call
29
+
it complete; ask or state the assumption when the intended boundary is
30
+
unclear.
31
+
17
32
Bug fix = root cause, not symptom: a report names a symptom. Grep every caller of the function you touch and fix the shared function once — one guard there is a smaller diff than one per caller, and patching only the path the ticket names leaves a sibling caller still broken.
18
33
19
34
Rules:
@@ -23,7 +38,8 @@ Rules:
23
38
- No boilerplate nobody asked for.
24
39
- Deletion over addition. Boring over clever. Fewest files possible.
25
40
- Shortest working diff wins, but only once you understand the problem. The smallest change in the wrong place isn't lazy, it's a second bug.
26
-
- Question complex requests: "Do you actually need X, or does Y cover it?"
41
+
- Question complex requests only after preserving the required boundary:
42
+
"Does Y cover X without dropping required behaviour?"
27
43
- Pick the edge-case-correct option when two stdlib approaches are the same size, lazy means less code, not the flimsier algorithm.
28
44
- Mark deliberate simplifications that cut a real corner with a known ceiling (global lock, O(n²) scan, naive heuristic) with a `ponytail:` comment naming the ceiling and upgrade path.
Copy file name to clipboardExpand all lines: AGENTS.md
+17-1Lines changed: 17 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,6 +14,21 @@ Before writing any code, stop at the first rung that holds:
14
14
15
15
The ladder runs after you understand the problem, not instead of it: read the task and the code it touches, trace the real flow end to end, then climb.
16
16
17
+
Scope before simplicity:
18
+
19
+
- Lock the task's required outcome before simplifying. For bounded/local work,
20
+
simplify inside the stated behaviour. For complete/systemic work, preserve
21
+
the required end-to-end behaviour, coverage, integration, migration,
22
+
documentation, and verification, then simplify within that boundary.
23
+
- Target the smallest complete solution, not the smallest diff. Never drop
24
+
requested scope, test coverage, validation, error handling, or integration
25
+
to reduce lines.
26
+
- Test coverage follows the risk and behaviour matrix. One runnable check is a
27
+
floor for small non-trivial logic, never a ceiling for a complex test task.
28
+
- If a smaller result would only be a temporary patch, say so and do not call
29
+
it complete; ask or state the assumption when the intended boundary is
30
+
unclear.
31
+
17
32
Bug fix = root cause, not symptom: a report names a symptom. Grep every caller of the function you touch and fix the shared function once — one guard there is a smaller diff than one per caller, and patching only the path the ticket names leaves a sibling caller still broken.
18
33
19
34
Rules:
@@ -23,7 +38,8 @@ Rules:
23
38
- No boilerplate nobody asked for.
24
39
- Deletion over addition. Boring over clever. Fewest files possible.
25
40
- Shortest working diff wins, but only once you understand the problem. The smallest change in the wrong place isn't lazy, it's a second bug.
26
-
- Question complex requests: "Do you actually need X, or does Y cover it?"
41
+
- Question complex requests only after preserving the required boundary:
42
+
"Does Y cover X without dropping required behaviour?"
27
43
- Pick the edge-case-correct option when two stdlib approaches are the same size, lazy means less code, not the flimsier algorithm.
28
44
- Mark deliberate simplifications that cut a real corner with a known ceiling (global lock, O(n²) scan, naive heuristic) with a `ponytail:` comment naming the ceiling and upgrade path.
0 commit comments