oh-my-githubcopilot 1.4.1 → 1.8.0-alpha.021bf87

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 (123) hide show
  1. package/.claude-plugin/plugin.json +36 -6
  2. package/.mcp.json +17 -0
  3. package/AGENTS.md +78 -9
  4. package/CHANGELOG.md +216 -1
  5. package/README.de.md +112 -26
  6. package/README.es.md +115 -29
  7. package/README.fr.md +114 -28
  8. package/README.it.md +114 -28
  9. package/README.ja.md +112 -26
  10. package/README.ko.md +112 -26
  11. package/README.md +96 -95
  12. package/README.pt.md +116 -30
  13. package/README.ru.md +116 -30
  14. package/README.tr.md +115 -29
  15. package/README.vi.md +116 -30
  16. package/README.zh.md +112 -26
  17. package/agents/analyst.agent.md +27 -0
  18. package/agents/architect.agent.md +24 -0
  19. package/agents/code-reviewer.agent.md +24 -0
  20. package/agents/critic.agent.md +24 -0
  21. package/agents/debugger.agent.md +24 -0
  22. package/agents/designer.agent.md +24 -0
  23. package/agents/document-specialist.agent.md +24 -0
  24. package/agents/executor.agent.md +27 -0
  25. package/agents/explorer.agent.md +23 -0
  26. package/agents/git-master.agent.md +24 -0
  27. package/agents/orchestrator.agent.md +26 -0
  28. package/agents/planner.agent.md +24 -0
  29. package/agents/qa-tester.agent.md +24 -0
  30. package/agents/researcher.agent.md +18 -0
  31. package/agents/reviewer.agent.md +23 -0
  32. package/agents/scientist.agent.md +20 -0
  33. package/agents/security-reviewer.agent.md +20 -0
  34. package/agents/simplifier.agent.md +20 -0
  35. package/agents/test-engineer.agent.md +20 -0
  36. package/agents/tester.agent.md +20 -0
  37. package/agents/tracer.agent.md +24 -0
  38. package/agents/verifier.agent.md +19 -0
  39. package/agents/writer.agent.md +24 -0
  40. package/bin/omp-statusline.mjs +179 -0
  41. package/bin/omp-statusline.mjs.map +7 -0
  42. package/bin/omp-statusline.sh +21 -0
  43. package/bin/omp.mjs +709 -16
  44. package/bin/omp.mjs.map +4 -4
  45. package/dist/hooks/hud-emitter.mjs +268 -82
  46. package/dist/hooks/hud-emitter.mjs.map +4 -4
  47. package/dist/hooks/keyword-detector.mjs +100 -23
  48. package/dist/hooks/keyword-detector.mjs.map +2 -2
  49. package/dist/hooks/model-router.mjs +1 -1
  50. package/dist/hooks/model-router.mjs.map +1 -1
  51. package/dist/hooks/stop-continuation.mjs +1 -1
  52. package/dist/hooks/stop-continuation.mjs.map +1 -1
  53. package/dist/hooks/token-tracker.mjs +2 -1
  54. package/dist/hooks/token-tracker.mjs.map +2 -2
  55. package/dist/mcp/server.mjs +85 -53
  56. package/dist/mcp/server.mjs.map +4 -4
  57. package/dist/skills/setup.mjs +39 -27
  58. package/dist/skills/setup.mjs.map +4 -4
  59. package/hooks/hooks.json +39 -45
  60. package/package.json +9 -4
  61. package/plugin.json +71 -0
  62. package/skills/ai-slop-cleaner/SKILL.md +137 -0
  63. package/skills/autopilot/SKILL.md +6 -0
  64. package/skills/configure-notifications/SKILL.md +6 -0
  65. package/skills/deep-interview/SKILL.md +6 -0
  66. package/skills/doctor/SKILL.md +188 -0
  67. package/skills/ecomode/SKILL.md +6 -0
  68. package/skills/graph-context/SKILL.md +119 -0
  69. package/skills/graph-provider/SKILL.md +6 -0
  70. package/skills/graphify/SKILL.md +6 -0
  71. package/skills/graphwiki/SKILL.md +6 -0
  72. package/skills/hud/SKILL.md +6 -0
  73. package/skills/improve-codebase-architecture/SKILL.md +214 -0
  74. package/skills/interactive-menu/SKILL.md +102 -0
  75. package/skills/interview/SKILL.md +203 -0
  76. package/skills/learner/SKILL.md +6 -0
  77. package/skills/mcp-setup/SKILL.md +6 -0
  78. package/skills/note/SKILL.md +6 -0
  79. package/skills/notifications/SKILL.md +190 -0
  80. package/skills/omp-doctor/SKILL.md +146 -0
  81. package/skills/omp-plan/SKILL.md +219 -2
  82. package/skills/omp-reference/SKILL.md +174 -0
  83. package/skills/omp-setup/SKILL.md +15 -1
  84. package/skills/pipeline/SKILL.md +6 -0
  85. package/skills/psm/SKILL.md +6 -0
  86. package/skills/ralph/SKILL.md +6 -0
  87. package/skills/ralplan/SKILL.md +148 -0
  88. package/skills/release/SKILL.md +6 -0
  89. package/skills/research/SKILL.md +149 -0
  90. package/skills/session/SKILL.md +220 -0
  91. package/skills/setup/SKILL.md +6 -0
  92. package/skills/skillify/SKILL.md +66 -0
  93. package/skills/spending/SKILL.md +6 -0
  94. package/skills/swarm/SKILL.md +6 -0
  95. package/skills/swe-bench/SKILL.md +6 -0
  96. package/skills/tdd/SKILL.md +246 -0
  97. package/skills/team/SKILL.md +6 -0
  98. package/skills/trace/SKILL.md +6 -0
  99. package/skills/ultrawork/SKILL.md +6 -0
  100. package/skills/wiki/SKILL.md +6 -0
  101. package/src/agents/analyst.md +0 -103
  102. package/src/agents/architect.md +0 -169
  103. package/src/agents/code-reviewer.md +0 -135
  104. package/src/agents/critic.md +0 -196
  105. package/src/agents/debugger.md +0 -132
  106. package/src/agents/designer.md +0 -103
  107. package/src/agents/document-specialist.md +0 -111
  108. package/src/agents/executor.md +0 -120
  109. package/src/agents/explorer.md +0 -98
  110. package/src/agents/git-master.md +0 -92
  111. package/src/agents/orchestrator.md +0 -125
  112. package/src/agents/planner.md +0 -106
  113. package/src/agents/qa-tester.md +0 -129
  114. package/src/agents/researcher.md +0 -102
  115. package/src/agents/reviewer.md +0 -100
  116. package/src/agents/scientist.md +0 -150
  117. package/src/agents/security-reviewer.md +0 -132
  118. package/src/agents/simplifier.md +0 -109
  119. package/src/agents/test-engineer.md +0 -124
  120. package/src/agents/tester.md +0 -102
  121. package/src/agents/tracer.md +0 -160
  122. package/src/agents/verifier.md +0 -100
  123. package/src/agents/writer.md +0 -96
@@ -0,0 +1,220 @@
1
+ ---
2
+ name: session
3
+ description: Worktree and tmux session management. Use for "new session", "worktree", "tmux", and "session management".
4
+ trigger: "session:, /session, /omp:session"
5
+ autoinvoke: false
6
+ ---
7
+ # Skill: Session
8
+
9
+ ## Metadata
10
+
11
+ | Field | Value |
12
+ |-------|-------|
13
+ | **ID** | `session` |
14
+ | **Keywords** | `session:`, `/session` |
15
+ | **Tier** | Developer Tool |
16
+ | **Source** | `src/skills/session.mts` |
17
+
18
+ ## Description
19
+
20
+ Manage development sessions with git worktrees and tmux. Create, attach, detach, list, and end sessions with isolated worktrees for parallel development.
21
+
22
+ ## Differentiation from psm
23
+
24
+ | Aspect | session | psm |
25
+ |--------|---------|-----|
26
+ | **Scope** | Git worktrees + tmux sessions for development isolation | OMP Plugin State Manager — inspect and update plugin runtime state |
27
+ | **Manages** | Branches, worktrees, tmux windows/panes, session lifecycle | OMP internal state, session metadata, plugin config values |
28
+ | **Use when** | You need to create/switch/end a development context | You need to inspect or modify OMP's running plugin state |
29
+
30
+ ## Interface
31
+
32
+ ```typescript
33
+ interface SkillInput {
34
+ trigger: string;
35
+ args: string[];
36
+ }
37
+
38
+ interface SkillOutput {
39
+ status: "ok" | "error";
40
+ message: string;
41
+ }
42
+
43
+ export async function activate(input: SkillInput): Promise<SkillOutput>
44
+ export function deactivate(): void
45
+ ```
46
+
47
+ ## Implementation
48
+
49
+ Spawns `bin/omp.mjs session [args]`. No persistent resources are maintained.
50
+
51
+ ## When to Use
52
+
53
+ - Creating new branches
54
+ - Managing multiple tasks
55
+ - Isolating work
56
+ - Session recovery
57
+ - Parallel development
58
+
59
+ ## Session Types
60
+
61
+ ### Development Session
62
+ - Feature work
63
+ - Bug fixes
64
+ - Single focused task
65
+
66
+ ### Exploration Session
67
+ - Research
68
+ - Prototyping
69
+ - Proof of concept
70
+
71
+ ### Review Session
72
+ - Code review
73
+ - Pair programming
74
+ - Pair review
75
+
76
+ ## Worktree Management
77
+
78
+ ### Create Worktree
79
+ ```bash
80
+ git worktree add {path} {branch}
81
+ ```
82
+
83
+ ### List Worktrees
84
+ ```bash
85
+ git worktree list
86
+ ```
87
+
88
+ ### Remove Worktree
89
+ ```bash
90
+ git worktree remove {path}
91
+ ```
92
+
93
+ ### Worktree for Feature
94
+ ```
95
+ {project}-feature-{name}
96
+ ```
97
+
98
+ ## Tmux Session Management
99
+
100
+ ### Session Structure
101
+ ```
102
+ session:{project}
103
+ └── window:feature-{name}
104
+ └── pane: editor
105
+ └── pane: terminal
106
+ └── pane: tests
107
+ ```
108
+
109
+ ### Commands
110
+ ```bash
111
+ # Create session
112
+ tmux new-session -s {name} -d
113
+
114
+ # Attach
115
+ tmux attach -t {name}
116
+
117
+ # List
118
+ tmux list-sessions
119
+
120
+ # Kill
121
+ tmux kill-session -t {name}
122
+ ```
123
+
124
+ ## Session Workflow
125
+
126
+ ### Start New Feature
127
+ 1. Create worktree
128
+ 2. Start tmux session
129
+ 3. Set up windows/panes
130
+ 4. Track session info
131
+ 5. Begin work
132
+
133
+ ### Switch Context
134
+ 1. Detach current session
135
+ 2. Attach target session
136
+ 3. Resume work
137
+
138
+ ### End Session
139
+ 1. Commit changes
140
+ 2. Push if needed
141
+ 3. Clean up tmux
142
+ 4. Optionally remove worktree
143
+ 5. Log session summary
144
+
145
+ ## Commands
146
+
147
+ ### Start Session
148
+ ```
149
+ /omp:session start {name}
150
+ ```
151
+
152
+ ### Attach Session
153
+ ```
154
+ /omp:session attach {name}
155
+ ```
156
+
157
+ ### Detach Session
158
+ ```
159
+ /omp:session detach
160
+ ```
161
+
162
+ ### List Sessions
163
+ ```
164
+ /omp:session list
165
+ ```
166
+
167
+ ### End Session
168
+ ```
169
+ /omp:session end {name}
170
+ ```
171
+
172
+ ### Create Worktree
173
+ ```
174
+ /omp:session worktree create {branch} {path}
175
+ ```
176
+
177
+ ## State
178
+
179
+ Session state is stored in `.omp/sessions/`. Each session has a JSON record with worktree path, branch, tmux session name, and timestamps.
180
+
181
+ ## Output Format
182
+
183
+ ```
184
+ ## Session: {name}
185
+
186
+ ### Type
187
+ {type}
188
+
189
+ ### Worktree
190
+ **Path:** {path}
191
+ **Branch:** {branch}
192
+ **Status:** {clean|dirty}
193
+
194
+ ### Tmux
195
+ **Session:** {tmux-session}
196
+ **Windows:** {n}
197
+ **Created:** {date}
198
+ **Last active:** {date}
199
+
200
+ ### Windows
201
+ | Window | Panes | Current |
202
+ |--------|-------|---------|
203
+ | {name} | {n} | {yes/no} |
204
+
205
+ ### Recent Sessions
206
+ | Name | Type | Last Active | Status |
207
+ |------|------|-------------|--------|
208
+ | {name} | {type} | {date} | {active/ended} |
209
+
210
+ ### Session Notes
211
+ {notes}
212
+ ```
213
+
214
+ ## Constraints
215
+
216
+ - Clean up completed sessions
217
+ - Don't forget worktree paths
218
+ - Keep session names unique
219
+ - Document session purpose
220
+ - Backup before major changes
@@ -1,3 +1,9 @@
1
+ ---
2
+ name: setup
3
+ description: OMP setup and onboarding wizard
4
+ trigger: "setup:, /setup, /omp:setup"
5
+ autoinvoke: false
6
+ ---
1
7
  # Skill: Setup
2
8
 
3
9
  ## Metadata
@@ -0,0 +1,66 @@
1
+ ---
2
+ name: skillify
3
+ description: Turn a repeatable workflow from the current session into a reusable OMP skill draft
4
+ triggers:
5
+ - /omp:skillify
6
+ ---
7
+
8
+ # Skillify
9
+
10
+ Use this skill when the current session uncovered a repeatable workflow that should become a reusable OMP skill.
11
+
12
+ ## Goal
13
+ Capture a successful multi-step workflow as a concrete skill draft instead of rediscovering it later.
14
+
15
+ ## Workflow
16
+ 1. Identify the repeatable task the session accomplished.
17
+ 2. Extract:
18
+ - inputs
19
+ - ordered steps
20
+ - success criteria
21
+ - constraints / pitfalls
22
+ - best target location for the skill
23
+ 3. Decide whether the workflow belongs as:
24
+ - a repo built-in skill (in `skills/` directory of oh-my-githubcopilot)
25
+ - a project learned skill (in `.omp/skills/<skill-name>.md`)
26
+ - documentation only
27
+ 4. When drafting a learned skill file, output a complete skill file that starts with YAML frontmatter.
28
+ - Never emit plain markdown-only skill files.
29
+ - Minimum frontmatter:
30
+ ```yaml
31
+ ---
32
+ name: <skill-name>
33
+ description: <one-line description>
34
+ triggers:
35
+ - /omp:<skill-name>
36
+ - <keyword-trigger>
37
+ ---
38
+ ```
39
+ - Write learned/project skills to:
40
+ - `.omp/skills/<skill-name>.md`
41
+ - Write repo built-in skills to:
42
+ - `skills/<skill-name>/SKILL.md` in the oh-my-githubcopilot repo
43
+ - `src/skills/<skill-name>.mts` in the oh-my-githubcopilot repo
44
+ 5. Draft the rest of the skill file with clear triggers, steps, and success criteria.
45
+ 6. Point out anything still too fuzzy to encode safely.
46
+
47
+ ## State Paths
48
+
49
+ OMP state uses the `.omp/` prefix:
50
+ - `.omp/skills/` — project-local learned skills
51
+ - `.omp/state/` — runtime state
52
+ - `.omp/notepad.md` — working notepad
53
+
54
+ ## Rules
55
+ - Only capture workflows that are actually repeatable.
56
+ - Keep the skill practical and scoped.
57
+ - Prefer explicit success criteria over vague prose.
58
+ - If the workflow still has unresolved branching decisions, note them before drafting.
59
+ - Use `omp:` prefix for all skill references, never `omc:` or `oma:`.
60
+ - Do not output model parameters (haiku/sonnet/opus) in skill files.
61
+
62
+ ## Output
63
+ - Proposed skill name
64
+ - Target location (repo built-in or `.omp/skills/`)
65
+ - Draft workflow structure
66
+ - Open questions, if any
@@ -1,3 +1,9 @@
1
+ ---
2
+ name: spending
3
+ description: Track and reset premium request usage
4
+ trigger: "spending:, /spending, /omp:spending"
5
+ autoinvoke: false
6
+ ---
1
7
  # Skill: Spending
2
8
 
3
9
  ## Metadata
@@ -1,3 +1,9 @@
1
+ ---
2
+ name: swarm
3
+ description: Parallel agent swarm for independent subtasks
4
+ trigger: "swarm:, /swarm, /omp:swarm"
5
+ autoinvoke: false
6
+ ---
1
7
  # Skill: Swarm
2
8
 
3
9
  ## Metadata
@@ -1,3 +1,9 @@
1
+ ---
2
+ name: swe-bench
3
+ description: SWE-bench evaluation harness runner
4
+ trigger: "swe-bench:, /swe-bench, /omp:swe-bench"
5
+ autoinvoke: false
6
+ ---
1
7
  # Skill: SWE-Bench
2
8
 
3
9
  ## Metadata
@@ -0,0 +1,246 @@
1
+ ---
2
+ name: tdd
3
+ description: Test-Driven Development with Red-Green-Refactor cycle, vertical slices, and tracer bullets
4
+ triggers:
5
+ - /omp:tdd
6
+ - tdd:
7
+ ---
8
+
9
+ # TDD — Test-Driven Development
10
+
11
+ Use this skill when implementing any feature or bugfix using the Red-Green-Refactor cycle. Write the failing test first, write minimal code to pass it, then refactor.
12
+
13
+ ## <Do_Not_Use_When>
14
+
15
+ - **Exploratory prototyping** — When you are still discovering the problem space and requirements are unclear, writing tests first creates a moving target and wastes cycles. Explore first, then TDD once the interface stabilizes.
16
+ - **One-off automation scripts** — Scripts with no expected reuse, no downstream consumers, and no need for regression coverage. A quick one-liner in a REPL is faster and cleaner.
17
+ - **Trivial boilerplate** — Generating getters/setters, scaffolding files, or copy-paste patterns that carry no behavioral logic.
18
+ - **UI/visual refinements** — Tweaking colors, spacing, or copy where the "right behavior" is subjective and visual inspection beats assertions.
19
+ - **Learning a new API** — When experimenting with unfamiliar SDKs or frameworks, write scratch code to build intuition first. Add tests once the API shape is stable.
20
+ - **Performance optimization passes** — Before measuring, you do not know what is slow. Tests written for correctness can conflict with benchmarks. Keep them separate.
21
+
22
+ ---
23
+
24
+ ## Red-Green-Refactor Cycle
25
+
26
+ The core TDD loop has exactly three phases. Never skip or reorder them.
27
+
28
+ ### RED: Write a focused failing test
29
+ Write a test that describes the behavior you want. Run it — it must fail. A test that passes before any implementation is written is not a test, it is a false signal.
30
+
31
+ ### GREEN: Write minimal code to pass
32
+ Write the smallest amount of production code that makes the test pass. Do not write code for future requirements. Do not generalize. Make the test green and stop.
33
+
34
+ ### REFACTOR: Clean up with tests green
35
+ With the test green, clean up the implementation — remove duplication, improve naming, extract deep modules. Run tests after every edit. If they go red, revert immediately.
36
+
37
+ Repeat this cycle for each behavioral slice.
38
+
39
+ ---
40
+
41
+ ## <Tool_Usage>
42
+
43
+ | Tool | When to Use |
44
+ |------|-------------|
45
+ | `Bash` (test runner) | Run `npm test`, `pytest`, `go test`, or equivalent to get fast per-file feedback during RED-GREEN cycles. |
46
+ | `Write` / `Edit` | Write failing test first (RED), then write minimal production code (GREEN), then clean up (REFACTOR). |
47
+ | `mcp__plugin_oh-my-claudecode_t__lsp_diagnostics` | Catch type errors and missing imports immediately after edits. |
48
+ | `mcp__plugin_oh-my-claudecode_t__lsp_diagnostics_directory` | Run full project diagnostics before marking a cycle done. |
49
+ | `Grep` | Find existing tests for the same module before writing a new one — avoid duplication. |
50
+ | `Glob` | Locate test files matching the module under development. |
51
+
52
+ **Typical cycle:**
53
+ 1. Write a failing test (RED) — `Write` to the test file.
54
+ 2. Run the test runner via `Bash` to confirm the failure.
55
+ 3. Write minimal code to pass (GREEN) — `Edit` the production file.
56
+ 4. Run diagnostics — `mcp__plugin_oh-my-claudecode_t__lsp_diagnostics` on both files.
57
+ 5. Refactor (REFACTOR) — `Edit` production code, confirm tests stay green.
58
+ 6. Repeat.
59
+
60
+ ---
61
+
62
+ ## <Why_This_Exists>
63
+
64
+ TDD provides a tight feedback loop that keeps implementation anchored to behavior. Without it, code grows inward — implementation details proliferate, coupling increases, and tests (when written at all) fight the code instead of guiding it.
65
+
66
+ The OMP-specific variant emphasizes **vertical slices via tracer bullets** rather than horizontal layering. Horizontal TDD (write all tests for Layer A, then all for Layer B) produces integration gaps: every layer compiles in isolation but the system fails end-to-end. Vertical TDD traces one complete path from user input to data storage before moving to the next slice, delivering working software incrementally.
67
+
68
+ Deep modules are preferred because they minimize the interface surface you must test, making each test more powerful and easier to reason about. A large, well-hidden implementation behind a small interface is easier to verify, easier to refactor, and cheaper to change.
69
+
70
+ ---
71
+
72
+ ## <Examples>
73
+
74
+ ### RED: Write a focused failing test
75
+
76
+ A test for a user-authentication module:
77
+
78
+ ```typescript
79
+ // auth.test.ts
80
+ import { authenticate } from './auth';
81
+
82
+ describe('authenticate', () => {
83
+ it('returns a session token when credentials are valid', async () => {
84
+ const token = await authenticate({ username: 'alice', password: 'secret123' });
85
+ expect(token).toMatch(/^[a-z0-9]{32}$/);
86
+ });
87
+
88
+ it('throws AuthError when password is incorrect', async () => {
89
+ await expect(
90
+ authenticate({ username: 'alice', password: 'wrong' })
91
+ ).rejects.toThrow('Invalid credentials');
92
+ });
93
+ });
94
+ ```
95
+
96
+ Notice: tests describe **what** the function returns and **when** it throws — not **how** it works internally.
97
+
98
+ ---
99
+
100
+ ### GREEN: Write minimal code
101
+
102
+ ```typescript
103
+ // auth.ts
104
+ import crypto from 'crypto';
105
+
106
+ export class AuthError extends Error {
107
+ constructor(message: string) {
108
+ super(message);
109
+ this.name = 'AuthError';
110
+ }
111
+ }
112
+
113
+ const VALID_CREDENTIALS = { alice: 'secret123' };
114
+
115
+ export async function authenticate({
116
+ username,
117
+ password,
118
+ }: {
119
+ username: string;
120
+ password: string;
121
+ }): Promise<string> {
122
+ const expected = VALID_CREDENTIALS[username];
123
+ if (!expected || expected !== password) {
124
+ throw new AuthError('Invalid credentials');
125
+ }
126
+ return crypto.randomBytes(16).toString('hex');
127
+ }
128
+ ```
129
+
130
+ This is the **minimum** code to make both tests pass. It is not the final architecture — it is the seed. The test survives refactoring because it tests behavior, not implementation.
131
+
132
+ ---
133
+
134
+ ### REFACTOR: Hide complexity behind a deep module
135
+
136
+ The first green pass exposes that the credentials check and token generation are interleaved. Refactor to a deep module:
137
+
138
+ ```typescript
139
+ // credentials.ts (deep module — small interface, large hidden implementation)
140
+ const STORE = new Map<string, string>(); // currently in-memory; swap to DB later
141
+
142
+ export async function checkCredentials(username: string, password: string): Promise<boolean> {
143
+ const stored = STORE.get(username);
144
+ return stored !== undefined && stored === password;
145
+ }
146
+
147
+ export async function addCredential(username: string, password: string): Promise<void> {
148
+ // future: hash before storing
149
+ STORE.set(username, password);
150
+ }
151
+ ```
152
+
153
+ The `authenticate` function becomes a thin, shallow orchestrator that delegates to deep modules. Tests for `authenticate` do not change — they only test the public interface.
154
+
155
+ ---
156
+
157
+ ### Vertical Slice: User signup end-to-end
158
+
159
+ **Slice 1 — Register and retrieve a user**
160
+
161
+ ```typescript
162
+ // user.test.ts
163
+ it('stores a user and retrieves them by id', async () => {
164
+ const id = await registerUser({ username: 'bob', password: 'pw' });
165
+ const user = await getUser(id);
166
+ expect(user.username).toBe('bob');
167
+ });
168
+ ```
169
+
170
+ Write minimal code: in-memory store, `registerUser` writes to it, `getUser` reads back.
171
+
172
+ **Slice 2 — Reject duplicate usernames**
173
+
174
+ ```typescript
175
+ it('throws DuplicateError when username is already taken', async () => {
176
+ await registerUser({ username: 'bob', password: 'pw' });
177
+ await expect(
178
+ registerUser({ username: 'bob', password: 'pw2' })
179
+ ).rejects.toThrow('Duplicate username');
180
+ });
181
+ ```
182
+
183
+ Add the check to the existing `registerUser` — no new classes, no abstraction layers yet.
184
+
185
+ **Slice 3 — Persist to database**
186
+
187
+ Swap the in-memory store for a real DB adapter. Tests pass unchanged because the interface is the same.
188
+
189
+ Horizontal TDD would have written all in-memory tests, then all DB tests, then all business-logic tests — producing a large integration gap before any slice works end-to-end. Vertical TDD delivered a working registration flow after Slice 1.
190
+
191
+ ---
192
+
193
+ ## <Escalation_And_Stop_Conditions>
194
+
195
+ ### Escalate when:
196
+
197
+ - **Test is flaky or environment-dependent** — A test that passes locally but fails in CI is noise, not signal. Escalate to omp architect to design a stable test fixture strategy.
198
+ - **The interface is unstable** — If the "right" public API is unclear after 3 cycles, stop. The problem definition is incomplete. Escalate to omp analyst to refine requirements.
199
+ - **A refactor breaks many tests** — Tests that fail because implementation details changed indicate the tests are testing internals. This is a signal to re-examine what the public interface should be. Escalate before continuing.
200
+ - **You are writing tests that replicate production logic** — If your test re-implements the function under test to verify it, you are testing the wrong thing. Escalate to omp verifier for a second opinion.
201
+
202
+ ### Stop when:
203
+
204
+ - All tests in the current slice pass and `lsp_diagnostics_directory` reports zero errors.
205
+ - The per-cycle checklist (below) is satisfied.
206
+ - The vertical slice connects all layers — input, business logic, and storage — in a working path.
207
+ - Next steps require business decisions (e.g., which user flow to slice next) — those belong to omp analyst or the user.
208
+
209
+ ---
210
+
211
+ ## <Per-Cycle_Checklist>
212
+
213
+ Run through these before marking a TDD cycle complete:
214
+
215
+ - [ ] **Is this test focused on a PUBLIC interface, not internals?**
216
+ Test `authenticate(params)` — not `authenticate._tokenCache` or any private state.
217
+
218
+ - [ ] **Does the test describe BEHAVIOR, not implementation?**
219
+ "returns a session token when credentials are valid" is behavior.
220
+ "calls `crypto.randomBytes`" is implementation — avoid it.
221
+
222
+ - [ ] **Will this test SURVIVE refactoring?**
223
+ If you refactor `credentials.ts` internals, does this test still pass?
224
+ If not, the test is coupled to internals — rewrite it.
225
+
226
+ - [ ] **Is the code I wrote the MINIMAL amount to pass?**
227
+ No early optimization. No generalized abstractions. No extra parameters.
228
+ Write what makes the test pass, nothing more.
229
+
230
+ - [ ] **Is this slice vertical — does it span from input to storage?**
231
+ If you only added a DB call without connecting it to the public API, the slice is incomplete.
232
+
233
+ ---
234
+
235
+ ## <Final_Checklist>
236
+
237
+ Before declaring a TDD skill session complete:
238
+
239
+ - [ ] All new test files exist and are committed to the repo alongside production files.
240
+ - [ ] `npm test` (or equivalent) runs green with zero failures.
241
+ - [ ] `lsp_diagnostics_directory` reports zero errors across the modified package.
242
+ - [ ] No `TODO`, `HACK`, `debugger`, or `console.log` statements remain in production or test code.
243
+ - [ ] Tracer-bullet slices are connected: at least one complete vertical path (input → logic → storage) is working and tested end-to-end.
244
+ - [ ] Tests are named for the behavior they verify, not the method they call.
245
+ - [ ] Deep modules are used for complex internals; orchestrators stay thin.
246
+ - [ ] Any new skill-worthy pattern (3+ repetitions of the same logic) is noted and escalated to omp analyst for skill extraction.
@@ -1,3 +1,9 @@
1
+ ---
2
+ name: team
3
+ description: Coordinated N-agent team with staged pipeline
4
+ trigger: "team:, /team, /omp:team"
5
+ autoinvoke: false
6
+ ---
1
7
  # Skill: Team
2
8
 
3
9
  ## Metadata
@@ -1,3 +1,9 @@
1
+ ---
2
+ name: trace
3
+ description: Execution tracing and debugging
4
+ trigger: "trace:, /trace, /omp:trace"
5
+ autoinvoke: false
6
+ ---
1
7
  # Skill: Trace
2
8
 
3
9
  ## Metadata
@@ -1,3 +1,9 @@
1
+ ---
2
+ name: ultrawork
3
+ description: Parallel multi-agent high-throughput implementation
4
+ trigger: "ulw:, ultrawork:, /ulw, /ultrawork, /omp:ulw, /omp:ultrawork"
5
+ autoinvoke: false
6
+ ---
1
7
  # Skill: Ultrawork
2
8
 
3
9
  ## Metadata
@@ -1,3 +1,9 @@
1
+ ---
2
+ name: wiki
3
+ description: Project wiki operations and management
4
+ trigger: "wiki:, /wiki, /omp:wiki"
5
+ autoinvoke: false
6
+ ---
1
7
  # Skill: Wiki
2
8
 
3
9
  ## Metadata