@dirtydishes/skills 0.1.1
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.
- package/README.md +165 -0
- package/bin/skills.js +408 -0
- package/catalog/skills.json +32 -0
- package/package.json +26 -0
- package/skills/dirtyloops/SKILL.md +67 -0
- package/skills/dirtyloops/examples/README.md +8 -0
- package/skills/dirtyloops/examples/orchestrator-callback/README.md +18 -0
- package/skills/dirtyloops/examples/orchestrator-callback/docs/implementation/example-stream/00-roadmap.md +26 -0
- package/skills/dirtyloops/examples/orchestrator-callback/docs/implementation/example-stream/01-foundation.md +51 -0
- package/skills/dirtyloops/examples/orchestrator-callback/docs/implementation/example-stream/02-integration.md +45 -0
- package/skills/dirtyloops/examples/orchestrator-callback/docs/implementation/example-stream/IMPLEMENT.md +68 -0
- package/skills/dirtyloops/examples/orchestrator-callback/docs/implementation/example-stream/loop-state.md +36 -0
- package/skills/dirtyloops/examples/orchestrator-callback/docs/implementation/example-stream/prompts/implementation-thread.md +30 -0
- package/skills/dirtyloops/examples/orchestrator-callback/docs/implementation/example-stream/prompts/review-thread.md +35 -0
- package/skills/dirtyloops/examples/orchestrator-callback/docs/implementation/example-stream/prompts/run-loop.md +33 -0
- package/skills/dirtyloops/examples/orchestrator-callback/docs/implementation/example-stream/turn-docs/01-foundation.md +79 -0
- package/skills/dirtyloops/examples/single-thread-subagent/README.md +14 -0
- package/skills/dirtyloops/examples/single-thread-subagent/docs/implementation/example-stream/00-roadmap.md +16 -0
- package/skills/dirtyloops/examples/single-thread-subagent/docs/implementation/example-stream/01-foundation.md +36 -0
- package/skills/dirtyloops/examples/single-thread-subagent/docs/implementation/example-stream/02-integration.md +23 -0
- package/skills/dirtyloops/examples/single-thread-subagent/docs/implementation/example-stream/IMPLEMENT.md +50 -0
- package/skills/dirtyloops/examples/single-thread-subagent/docs/implementation/example-stream/loop-state.md +28 -0
- package/skills/dirtyloops/examples/single-thread-subagent/docs/implementation/example-stream/prompts/run-loop.md +22 -0
- package/skills/dirtyloops/examples/single-thread-subagent/docs/implementation/example-stream/turn-docs/01-foundation.md +32 -0
- package/skills/dirtyloops/plan.html +587 -0
- package/skills/dirtyloops/references/beads.md +114 -0
- package/skills/dirtyloops/references/common.md +66 -0
- package/skills/dirtyloops/references/create-loop.md +85 -0
- package/skills/dirtyloops/references/help.md +170 -0
- package/skills/dirtyloops/references/inspect-loop.md +11 -0
- package/skills/dirtyloops/references/review-ci.md +37 -0
- package/skills/dirtyloops/references/run-loop.md +41 -0
- package/skills/dirtyloops/references/storyboard.md +64 -0
- package/skills/dirtyloops/references/swarms.md +59 -0
- package/skills/dirtyloops/references/turn-docs.md +29 -0
- package/skills/dirtyloops/references/workflows/orchestrator-callback.md +120 -0
- package/skills/dirtyloops/references/workflows/single-thread-subagent.md +45 -0
- package/skills/dirtyloops/schemas/implementation-callback.schema.json +38 -0
- package/skills/dirtyloops/schemas/review-callback.schema.json +35 -0
- package/skills/dirtyloops/schemas/swarm-report.schema.json +43 -0
- package/skills/dirtyloops/templates/common/00-roadmap.md.template +33 -0
- package/skills/dirtyloops/templates/common/IMPLEMENT.md.template +79 -0
- package/skills/dirtyloops/templates/common/loop-state.md.template +39 -0
- package/skills/dirtyloops/templates/common/phase.md.template +56 -0
- package/skills/dirtyloops/templates/common/run-loop.md.template +46 -0
- package/skills/dirtyloops/templates/common/storyboard-post-run.html.template +77 -0
- package/skills/dirtyloops/templates/common/turn-doc.md.template +61 -0
- package/skills/dirtyloops/templates/workflows/orchestrator-callback/implementation-thread-prompt.md.template +40 -0
- package/skills/dirtyloops/templates/workflows/orchestrator-callback/review-thread-prompt.md.template +38 -0
- package/skills/dirtyloops/templates/workflows/orchestrator-callback/run-loop-addendum.md.template +17 -0
- package/skills/dirtyloops/templates/workflows/single-thread-subagent/run-loop-addendum.md.template +12 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Loop State
|
|
2
|
+
|
|
3
|
+
Canonical tracker: Beads epic `example-epic`
|
|
4
|
+
|
|
5
|
+
This file is a compact resume aid only. If this file disagrees with Beads, Beads wins.
|
|
6
|
+
|
|
7
|
+
Status: active
|
|
8
|
+
|
|
9
|
+
Stream: `example-stream`
|
|
10
|
+
|
|
11
|
+
Workflow: `single-thread-subagent`
|
|
12
|
+
|
|
13
|
+
Current phase: none
|
|
14
|
+
|
|
15
|
+
Current Beads issue: none
|
|
16
|
+
|
|
17
|
+
Current PR: none
|
|
18
|
+
|
|
19
|
+
Last completed phase: none
|
|
20
|
+
|
|
21
|
+
Blocked: no
|
|
22
|
+
|
|
23
|
+
## Phase Ledger
|
|
24
|
+
|
|
25
|
+
| Phase | Beads Issue | Status | PR | Turn Doc |
|
|
26
|
+
|---|---|---|---|---|
|
|
27
|
+
| Foundation | `example-epic.1` | pending | | `turn-docs/01-foundation.md` |
|
|
28
|
+
| Integration | `example-epic.2` | pending | | `turn-docs/02-integration.md` |
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Run Loop: Example Stream
|
|
2
|
+
|
|
3
|
+
Workflow: `single-thread-subagent`
|
|
4
|
+
|
|
5
|
+
Canonical tracker: Beads epic `example-epic`
|
|
6
|
+
|
|
7
|
+
## Rules
|
|
8
|
+
|
|
9
|
+
- Beads is canonical.
|
|
10
|
+
- Do not create separate Codex worker or reviewer threads.
|
|
11
|
+
- Continue phase-by-phase until the epic is complete, blocked, interrupted, or review/CI is unresolved.
|
|
12
|
+
- The main thread owns integration, branch state, PR state, Beads updates, and closeout.
|
|
13
|
+
- Use bounded selector/scout/slice/implementation-helper/reviewer/CI subagent swarms.
|
|
14
|
+
- Use 8+ subagents by default for broad scout, slice, implementation-helper, and review work.
|
|
15
|
+
- Run a slice planning swarm before broad implementation.
|
|
16
|
+
- Reviewer agents use `thermo-nuclear-code-quality-review`.
|
|
17
|
+
- Reviewer and CI verification agents own CI evidence.
|
|
18
|
+
- Update the existing Markdown turn doc.
|
|
19
|
+
|
|
20
|
+
## Start Prompt
|
|
21
|
+
|
|
22
|
+
Run the Example Stream dirtyloop with workflow `single-thread-subagent`. Use Beads epic `example-epic` as canonical. Read `docs/implementation/example-stream/IMPLEMENT.md` and `docs/implementation/example-stream/loop-state.md`, select one next ready Beads child issue, use mass subagent swarms for selector/scout/slice/implementation-helper/review/CI work, synthesize the slice plan before broad implementation, integrate only the selected phase in the main thread, update the existing Markdown turn doc, update Beads first, then update `loop-state.md`. Continue to the next ready phase unless the epic is complete, blocked, interrupted, or review/CI is unresolved.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Phase 01 Turn Doc: Foundation
|
|
2
|
+
|
|
3
|
+
Beads issue: `example-epic.1`
|
|
4
|
+
|
|
5
|
+
Phase doc: `docs/implementation/example-stream/01-foundation.md`
|
|
6
|
+
|
|
7
|
+
## Phase Selection
|
|
8
|
+
|
|
9
|
+
Selected by the main coordinator after Beads showed `example-epic.1` ready.
|
|
10
|
+
|
|
11
|
+
## Subagent Swarms
|
|
12
|
+
|
|
13
|
+
- Selector swarm confirmed no dependencies.
|
|
14
|
+
- Scout swarm checked old reporting behavior.
|
|
15
|
+
- Slice planning swarm split implementation into `slice-model-boundary`, `slice-tests`, and `slice-adapter-cleanup`.
|
|
16
|
+
- Implementation helper swarm prepared patch guidance for each slice.
|
|
17
|
+
- Reviewer swarm used `thermo-nuclear-code-quality-review`.
|
|
18
|
+
- CI verification swarm resolved gate evidence.
|
|
19
|
+
|
|
20
|
+
## Implementation Log
|
|
21
|
+
|
|
22
|
+
The main coordinator synthesized swarm reports, integrated the selected patches, resolved conflicts, and opened PR `#123`.
|
|
23
|
+
|
|
24
|
+
## CI And Gates
|
|
25
|
+
|
|
26
|
+
CI owner: reviewer/verification subagents
|
|
27
|
+
|
|
28
|
+
Current CI state: `ci-green`
|
|
29
|
+
|
|
30
|
+
## Closeout
|
|
31
|
+
|
|
32
|
+
Coordinator updated Beads, refreshed the export, and selected the next ready phase because the loop runs until complete by default.
|
|
@@ -0,0 +1,587 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>dirtyloops plan</title>
|
|
7
|
+
<style>
|
|
8
|
+
:root {
|
|
9
|
+
color-scheme: light;
|
|
10
|
+
--bg: oklch(0.98 0.01 250);
|
|
11
|
+
--ink: oklch(0.18 0.03 255);
|
|
12
|
+
--muted: oklch(0.42 0.03 255);
|
|
13
|
+
--surface: oklch(1 0 0);
|
|
14
|
+
--surface-2: oklch(0.95 0.015 250);
|
|
15
|
+
--line: oklch(0.86 0.02 250);
|
|
16
|
+
--accent: oklch(0.58 0.16 168);
|
|
17
|
+
--accent-2: oklch(0.55 0.17 28);
|
|
18
|
+
--accent-3: oklch(0.54 0.16 285);
|
|
19
|
+
--good: oklch(0.52 0.14 150);
|
|
20
|
+
--warn: oklch(0.62 0.15 70);
|
|
21
|
+
--bad: oklch(0.56 0.18 25);
|
|
22
|
+
--shadow: 0 8px 24px oklch(0.2 0.03 255 / 0.08);
|
|
23
|
+
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
* {
|
|
27
|
+
box-sizing: border-box;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
body {
|
|
31
|
+
margin: 0;
|
|
32
|
+
background:
|
|
33
|
+
radial-gradient(circle at top left, oklch(0.9 0.08 168 / 0.35), transparent 34rem),
|
|
34
|
+
linear-gradient(180deg, var(--bg), oklch(0.95 0.02 250));
|
|
35
|
+
color: var(--ink);
|
|
36
|
+
line-height: 1.55;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
main {
|
|
40
|
+
width: min(1180px, calc(100% - 32px));
|
|
41
|
+
margin: 0 auto;
|
|
42
|
+
padding: 56px 0 72px;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
header {
|
|
46
|
+
display: grid;
|
|
47
|
+
grid-template-columns: minmax(0, 1.4fr) minmax(280px, 0.6fr);
|
|
48
|
+
gap: 28px;
|
|
49
|
+
align-items: end;
|
|
50
|
+
margin-bottom: 36px;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
h1,
|
|
54
|
+
h2,
|
|
55
|
+
h3 {
|
|
56
|
+
margin: 0;
|
|
57
|
+
letter-spacing: -0.025em;
|
|
58
|
+
text-wrap: balance;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
h1 {
|
|
62
|
+
font-size: clamp(3rem, 8vw, 5.8rem);
|
|
63
|
+
line-height: 0.92;
|
|
64
|
+
max-width: 10ch;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
h2 {
|
|
68
|
+
font-size: clamp(1.8rem, 4vw, 3rem);
|
|
69
|
+
line-height: 1;
|
|
70
|
+
margin-bottom: 16px;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
h3 {
|
|
74
|
+
font-size: 1.05rem;
|
|
75
|
+
line-height: 1.2;
|
|
76
|
+
margin-bottom: 10px;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
p {
|
|
80
|
+
margin: 0;
|
|
81
|
+
color: var(--muted);
|
|
82
|
+
max-width: 72ch;
|
|
83
|
+
text-wrap: pretty;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
code {
|
|
87
|
+
font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
|
|
88
|
+
font-size: 0.92em;
|
|
89
|
+
background: oklch(0.93 0.015 250);
|
|
90
|
+
border: 1px solid var(--line);
|
|
91
|
+
border-radius: 6px;
|
|
92
|
+
padding: 0.08rem 0.28rem;
|
|
93
|
+
color: oklch(0.26 0.08 255);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
pre {
|
|
97
|
+
margin: 0;
|
|
98
|
+
overflow: auto;
|
|
99
|
+
border: 1px solid var(--line);
|
|
100
|
+
background: oklch(0.16 0.03 255);
|
|
101
|
+
color: oklch(0.94 0.01 255);
|
|
102
|
+
border-radius: 12px;
|
|
103
|
+
padding: 16px;
|
|
104
|
+
box-shadow: var(--shadow);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
pre code {
|
|
108
|
+
color: inherit;
|
|
109
|
+
background: transparent;
|
|
110
|
+
border: 0;
|
|
111
|
+
padding: 0;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
a {
|
|
115
|
+
color: oklch(0.42 0.16 168);
|
|
116
|
+
text-decoration-thickness: 0.08em;
|
|
117
|
+
text-underline-offset: 0.18em;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.deck {
|
|
121
|
+
font-size: 1.15rem;
|
|
122
|
+
color: oklch(0.34 0.04 255);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.stat-strip {
|
|
126
|
+
display: grid;
|
|
127
|
+
grid-template-columns: repeat(3, 1fr);
|
|
128
|
+
gap: 10px;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.stat {
|
|
132
|
+
padding: 14px;
|
|
133
|
+
border: 1px solid var(--line);
|
|
134
|
+
border-radius: 12px;
|
|
135
|
+
background: oklch(1 0 0 / 0.78);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.stat strong {
|
|
139
|
+
display: block;
|
|
140
|
+
font-size: 1.5rem;
|
|
141
|
+
line-height: 1;
|
|
142
|
+
color: var(--ink);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.stat span {
|
|
146
|
+
color: var(--muted);
|
|
147
|
+
font-size: 0.9rem;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
section {
|
|
151
|
+
margin-top: 42px;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.panel {
|
|
155
|
+
border: 1px solid var(--line);
|
|
156
|
+
border-radius: 16px;
|
|
157
|
+
background: oklch(1 0 0 / 0.84);
|
|
158
|
+
box-shadow: var(--shadow);
|
|
159
|
+
padding: 24px;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.grid {
|
|
163
|
+
display: grid;
|
|
164
|
+
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
|
165
|
+
gap: 16px;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.workflow {
|
|
169
|
+
display: grid;
|
|
170
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
171
|
+
gap: 18px;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.workflow-card {
|
|
175
|
+
position: relative;
|
|
176
|
+
overflow: hidden;
|
|
177
|
+
border: 1px solid var(--line);
|
|
178
|
+
border-radius: 16px;
|
|
179
|
+
background: var(--surface);
|
|
180
|
+
padding: 22px;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.workflow-card::before {
|
|
184
|
+
content: "";
|
|
185
|
+
position: absolute;
|
|
186
|
+
inset: 0;
|
|
187
|
+
height: 5px;
|
|
188
|
+
background: var(--accent);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.workflow-card.callback::before {
|
|
192
|
+
background: var(--accent-3);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.chip-row {
|
|
196
|
+
display: flex;
|
|
197
|
+
flex-wrap: wrap;
|
|
198
|
+
gap: 8px;
|
|
199
|
+
margin: 14px 0 0;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.chip {
|
|
203
|
+
display: inline-flex;
|
|
204
|
+
align-items: center;
|
|
205
|
+
min-height: 28px;
|
|
206
|
+
border-radius: 999px;
|
|
207
|
+
padding: 4px 10px;
|
|
208
|
+
background: var(--surface-2);
|
|
209
|
+
border: 1px solid var(--line);
|
|
210
|
+
color: oklch(0.3 0.04 255);
|
|
211
|
+
font-size: 0.86rem;
|
|
212
|
+
white-space: nowrap;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.flow {
|
|
216
|
+
display: grid;
|
|
217
|
+
gap: 10px;
|
|
218
|
+
margin-top: 16px;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.node {
|
|
222
|
+
display: grid;
|
|
223
|
+
grid-template-columns: 32px 1fr;
|
|
224
|
+
gap: 12px;
|
|
225
|
+
align-items: start;
|
|
226
|
+
border: 1px solid var(--line);
|
|
227
|
+
border-radius: 12px;
|
|
228
|
+
background: oklch(0.98 0.008 250);
|
|
229
|
+
padding: 12px;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.node b {
|
|
233
|
+
display: grid;
|
|
234
|
+
place-items: center;
|
|
235
|
+
width: 32px;
|
|
236
|
+
height: 32px;
|
|
237
|
+
border-radius: 999px;
|
|
238
|
+
background: oklch(0.88 0.08 168);
|
|
239
|
+
color: oklch(0.22 0.06 168);
|
|
240
|
+
font-size: 0.9rem;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.node.callback b {
|
|
244
|
+
background: oklch(0.88 0.08 285);
|
|
245
|
+
color: oklch(0.25 0.08 285);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
.node strong {
|
|
249
|
+
display: block;
|
|
250
|
+
color: var(--ink);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
.node span {
|
|
254
|
+
color: var(--muted);
|
|
255
|
+
font-size: 0.95rem;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
.table-wrap {
|
|
259
|
+
overflow: auto;
|
|
260
|
+
border: 1px solid var(--line);
|
|
261
|
+
border-radius: 14px;
|
|
262
|
+
background: var(--surface);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
table {
|
|
266
|
+
border-collapse: collapse;
|
|
267
|
+
min-width: 780px;
|
|
268
|
+
width: 100%;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
th,
|
|
272
|
+
td {
|
|
273
|
+
padding: 14px;
|
|
274
|
+
border-bottom: 1px solid var(--line);
|
|
275
|
+
text-align: left;
|
|
276
|
+
vertical-align: top;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
th {
|
|
280
|
+
color: var(--ink);
|
|
281
|
+
background: oklch(0.96 0.012 250);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
td {
|
|
285
|
+
color: var(--muted);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
tr:last-child td {
|
|
289
|
+
border-bottom: 0;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
.callout {
|
|
293
|
+
border: 1px solid oklch(0.78 0.09 70);
|
|
294
|
+
background: oklch(0.96 0.04 70);
|
|
295
|
+
border-radius: 14px;
|
|
296
|
+
padding: 16px;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
.callout strong {
|
|
300
|
+
color: oklch(0.35 0.09 70);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
.paths {
|
|
304
|
+
display: grid;
|
|
305
|
+
gap: 10px;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
.path {
|
|
309
|
+
display: flex;
|
|
310
|
+
gap: 10px;
|
|
311
|
+
align-items: center;
|
|
312
|
+
justify-content: space-between;
|
|
313
|
+
border: 1px solid var(--line);
|
|
314
|
+
background: var(--surface);
|
|
315
|
+
border-radius: 12px;
|
|
316
|
+
padding: 12px 14px;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
.path span {
|
|
320
|
+
color: var(--muted);
|
|
321
|
+
font-size: 0.92rem;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
.footer {
|
|
325
|
+
margin-top: 56px;
|
|
326
|
+
color: var(--muted);
|
|
327
|
+
font-size: 0.95rem;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
@media (max-width: 800px) {
|
|
331
|
+
header,
|
|
332
|
+
.workflow {
|
|
333
|
+
grid-template-columns: 1fr;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
h1 {
|
|
337
|
+
max-width: 100%;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
.stat-strip {
|
|
341
|
+
grid-template-columns: 1fr;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
.path {
|
|
345
|
+
align-items: flex-start;
|
|
346
|
+
flex-direction: column;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
351
|
+
.panel,
|
|
352
|
+
.workflow-card,
|
|
353
|
+
.path {
|
|
354
|
+
animation: enter 600ms cubic-bezier(.16, 1, .3, 1) both;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
.workflow-card:nth-child(2) {
|
|
358
|
+
animation-delay: 80ms;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
@keyframes enter {
|
|
362
|
+
from {
|
|
363
|
+
opacity: 0.001;
|
|
364
|
+
transform: translateY(12px);
|
|
365
|
+
}
|
|
366
|
+
to {
|
|
367
|
+
opacity: 1;
|
|
368
|
+
transform: translateY(0);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
</style>
|
|
373
|
+
</head>
|
|
374
|
+
<body>
|
|
375
|
+
<main>
|
|
376
|
+
<header>
|
|
377
|
+
<div>
|
|
378
|
+
<h1>dirtyloops</h1>
|
|
379
|
+
<p class="deck">A Beads-canonical loop skill for turning finalized plans into executable phase streams, then running them with either one coordinator thread or the original callback-driven thread topology.</p>
|
|
380
|
+
</div>
|
|
381
|
+
<div class="stat-strip" aria-label="dirtyloops summary">
|
|
382
|
+
<div class="stat">
|
|
383
|
+
<strong>2</strong>
|
|
384
|
+
<span>workflow topologies</span>
|
|
385
|
+
</div>
|
|
386
|
+
<div class="stat">
|
|
387
|
+
<strong>5</strong>
|
|
388
|
+
<span>branches: help, create, run, inspect, closeout</span>
|
|
389
|
+
</div>
|
|
390
|
+
<div class="stat">
|
|
391
|
+
<strong>1</strong>
|
|
392
|
+
<span>canonical tracker: Beads</span>
|
|
393
|
+
</div>
|
|
394
|
+
</div>
|
|
395
|
+
</header>
|
|
396
|
+
|
|
397
|
+
<section class="panel">
|
|
398
|
+
<h2>Core Contract</h2>
|
|
399
|
+
<p>dirtyloops keeps status and ordering in Beads, stores execution context in phase docs, records phase history in one Markdown turn doc, pushes review through a strict quality skill, makes reviewer and CI agents own CI, and finishes with a storyboard HTML artifact.</p>
|
|
400
|
+
<div class="chip-row" aria-label="core contract tags">
|
|
401
|
+
<span class="chip">Beads canonical</span>
|
|
402
|
+
<span class="chip">one phase at a time</span>
|
|
403
|
+
<span class="chip">Markdown turn docs</span>
|
|
404
|
+
<span class="chip">subagent swarms</span>
|
|
405
|
+
<span class="chip">reviewer-owned CI</span>
|
|
406
|
+
<span class="chip">storyboard closeout</span>
|
|
407
|
+
</div>
|
|
408
|
+
</section>
|
|
409
|
+
|
|
410
|
+
<section>
|
|
411
|
+
<h2>Branches</h2>
|
|
412
|
+
<div class="grid">
|
|
413
|
+
<article class="panel">
|
|
414
|
+
<h3><code>$dirtyloops help</code></h3>
|
|
415
|
+
<p>Explains commands, workflow choice, required inputs, generated files, examples, and how to run a loop. This branch is read-only.</p>
|
|
416
|
+
</article>
|
|
417
|
+
<article class="panel">
|
|
418
|
+
<h3><code>$dirtyloops create</code></h3>
|
|
419
|
+
<p>Turns the finalized plan into a Beads epic, child phase issues, typed loop metadata, implementation docs, workflow prompts, schemas, loop state, and a paste-ready run prompt.</p>
|
|
420
|
+
</article>
|
|
421
|
+
<article class="panel">
|
|
422
|
+
<h3><code>$dirtyloops run</code></h3>
|
|
423
|
+
<p>Reads Beads, executes ready phases through the selected workflow, updates the existing turn docs and Beads, then continues until complete, blocked, interrupted, unresolved, or <code>--once</code>.</p>
|
|
424
|
+
</article>
|
|
425
|
+
<article class="panel">
|
|
426
|
+
<h3><code>$dirtyloops inspect</code></h3>
|
|
427
|
+
<p>Reads Beads and loop docs without mutation, then reports current phase, active PR or thread state, blockers, and the next safe action.</p>
|
|
428
|
+
</article>
|
|
429
|
+
<article class="panel">
|
|
430
|
+
<h3><code>$dirtyloops closeout</code></h3>
|
|
431
|
+
<p>Verifies every phase is resolved, then generates <code>storyboard-post-run-mm-dd-yyyy.html</code>. It uses impeccable when available and installs the SSR diff renderer when needed.</p>
|
|
432
|
+
</article>
|
|
433
|
+
</div>
|
|
434
|
+
</section>
|
|
435
|
+
|
|
436
|
+
<section>
|
|
437
|
+
<h2>Workflow Topologies</h2>
|
|
438
|
+
<div class="workflow">
|
|
439
|
+
<article class="workflow-card">
|
|
440
|
+
<h3>single-thread-subagent</h3>
|
|
441
|
+
<p>One visible coordinator owns loop state, integration, PRs, and closeout. Mass subagent swarms handle scouting, slice planning, implementation help, review, and CI.</p>
|
|
442
|
+
<div class="flow">
|
|
443
|
+
<div class="node">
|
|
444
|
+
<b>1</b>
|
|
445
|
+
<div><strong>Coordinator reads Beads</strong><span>Selects one ready phase from the epic.</span></div>
|
|
446
|
+
</div>
|
|
447
|
+
<div class="node">
|
|
448
|
+
<b>2</b>
|
|
449
|
+
<div><strong>Mass swarms split the phase</strong><span>Scout, slice, implementation-helper, reviewer, and CI agents return compact reports.</span></div>
|
|
450
|
+
</div>
|
|
451
|
+
<div class="node">
|
|
452
|
+
<b>3</b>
|
|
453
|
+
<div><strong>Coordinator integrates</strong><span>Broad solo implementation is a violation; branch, PR, Beads updates, and closeout stay with the coordinator.</span></div>
|
|
454
|
+
</div>
|
|
455
|
+
</div>
|
|
456
|
+
</article>
|
|
457
|
+
|
|
458
|
+
<article class="workflow-card callback">
|
|
459
|
+
<h3>orchestrator-callback</h3>
|
|
460
|
+
<p>The original loop shape. A main orchestrator creates standard-speed implementation and review threads with concrete callback targets, then advances after validated callbacks.</p>
|
|
461
|
+
<div class="flow">
|
|
462
|
+
<div class="node callback">
|
|
463
|
+
<b>1</b>
|
|
464
|
+
<div><strong>Orchestrator selects phase</strong><span>Selector subagent reads Beads and linked phase docs.</span></div>
|
|
465
|
+
</div>
|
|
466
|
+
<div class="node callback">
|
|
467
|
+
<b>2</b>
|
|
468
|
+
<div><strong>Implementation thread opens PR</strong><span>Worker uses the exact callback id, updates the turn doc, and calls back once.</span></div>
|
|
469
|
+
</div>
|
|
470
|
+
<div class="node callback">
|
|
471
|
+
<b>3</b>
|
|
472
|
+
<div><strong>Review thread owns CI</strong><span>Reviewer uses thermo-nuclear review, handles CI/repairs, then echoes the callback id.</span></div>
|
|
473
|
+
</div>
|
|
474
|
+
</div>
|
|
475
|
+
</article>
|
|
476
|
+
</div>
|
|
477
|
+
</section>
|
|
478
|
+
|
|
479
|
+
<section>
|
|
480
|
+
<h2>Authority Matrix</h2>
|
|
481
|
+
<div class="table-wrap">
|
|
482
|
+
<table>
|
|
483
|
+
<thead>
|
|
484
|
+
<tr>
|
|
485
|
+
<th>Responsibility</th>
|
|
486
|
+
<th>single-thread-subagent</th>
|
|
487
|
+
<th>orchestrator-callback</th>
|
|
488
|
+
</tr>
|
|
489
|
+
</thead>
|
|
490
|
+
<tbody>
|
|
491
|
+
<tr>
|
|
492
|
+
<td>Phase selection</td>
|
|
493
|
+
<td>Main coordinator with selector subagents.</td>
|
|
494
|
+
<td>Orchestrator with selector subagent.</td>
|
|
495
|
+
</tr>
|
|
496
|
+
<tr>
|
|
497
|
+
<td>Implementation</td>
|
|
498
|
+
<td>Mass subagents split and assist; coordinator integrates glue, conflicts, and final repairs.</td>
|
|
499
|
+
<td>Implementation thread created by orchestrator with exact callback target and standard defaults.</td>
|
|
500
|
+
</tr>
|
|
501
|
+
<tr>
|
|
502
|
+
<td>Review</td>
|
|
503
|
+
<td>Reviewer subagents report to the coordinator.</td>
|
|
504
|
+
<td>Review thread created by orchestrator; reviewer subagents report inside that thread.</td>
|
|
505
|
+
</tr>
|
|
506
|
+
<tr>
|
|
507
|
+
<td>CI</td>
|
|
508
|
+
<td>Reviewer and CI verification subagents own evidence.</td>
|
|
509
|
+
<td>Review thread owns CI through reviewer and verification subagents.</td>
|
|
510
|
+
</tr>
|
|
511
|
+
<tr>
|
|
512
|
+
<td>Beads closeout</td>
|
|
513
|
+
<td>Main coordinator updates Beads first, then loop-state.</td>
|
|
514
|
+
<td>Orchestrator updates Beads after implementation/review callbacks.</td>
|
|
515
|
+
</tr>
|
|
516
|
+
<tr>
|
|
517
|
+
<td>Next phase</td>
|
|
518
|
+
<td>Main coordinator continues after closeout unless complete, blocked, interrupted, unresolved, or <code>--once</code>.</td>
|
|
519
|
+
<td>Orchestrator launches the next selector after closeout unless complete, blocked, interrupted, unresolved, or <code>--once</code>.</td>
|
|
520
|
+
</tr>
|
|
521
|
+
</tbody>
|
|
522
|
+
</table>
|
|
523
|
+
</div>
|
|
524
|
+
</section>
|
|
525
|
+
|
|
526
|
+
<section class="panel">
|
|
527
|
+
<h2>Review And CI Gate</h2>
|
|
528
|
+
<p>Reviewer agents must use <code>thermo-nuclear-code-quality-review</code>. CI is not an orchestrator afterthought: reviewer and CI verification agents own inspection, diagnosis, repairs, reruns, and evidence.</p>
|
|
529
|
+
<div class="chip-row">
|
|
530
|
+
<span class="chip">ci-green</span>
|
|
531
|
+
<span class="chip">ci-repaired-and-green</span>
|
|
532
|
+
<span class="chip">ci-unavailable-with-evidence</span>
|
|
533
|
+
<span class="chip">ci-blocked-with-cause</span>
|
|
534
|
+
</div>
|
|
535
|
+
</section>
|
|
536
|
+
|
|
537
|
+
<section class="panel">
|
|
538
|
+
<h2>Post-Run Storyboard</h2>
|
|
539
|
+
<p>When the epic is complete, dirtyloops generates <code>storyboard-post-run-mm-dd-yyyy.html</code> from every Markdown turn doc. The document tells the implementation story phase by phase, including discoveries, repairs, review moments, PRs, CI evidence, and follow-ups.</p>
|
|
540
|
+
<div class="callout">
|
|
541
|
+
<strong>Required:</strong> closeout installs <code>@pierre/diffs</code> in the target repo when missing, and every diff block is rendered with <code>@pierre/diffs/ssr</code>. Use <code>impeccable</code> when available; if it is missing, complete the storyboard and note that it was skipped.
|
|
542
|
+
</div>
|
|
543
|
+
</section>
|
|
544
|
+
|
|
545
|
+
<section>
|
|
546
|
+
<h2>Skill Files</h2>
|
|
547
|
+
<div class="paths">
|
|
548
|
+
<div class="path">
|
|
549
|
+
<code>SKILL.md</code>
|
|
550
|
+
<span>Router and checkable branch steps.</span>
|
|
551
|
+
</div>
|
|
552
|
+
<div class="path">
|
|
553
|
+
<code>references/</code>
|
|
554
|
+
<span>Shared rules, branch instructions, and workflow definitions.</span>
|
|
555
|
+
</div>
|
|
556
|
+
<div class="path">
|
|
557
|
+
<code>templates/</code>
|
|
558
|
+
<span>Reusable generated-file templates for loop creation.</span>
|
|
559
|
+
</div>
|
|
560
|
+
<div class="path">
|
|
561
|
+
<code>examples/</code>
|
|
562
|
+
<span>Concrete output shapes for both workflows.</span>
|
|
563
|
+
</div>
|
|
564
|
+
<div class="path">
|
|
565
|
+
<code>schemas/</code>
|
|
566
|
+
<span>Callback and swarm report schemas.</span>
|
|
567
|
+
</div>
|
|
568
|
+
</div>
|
|
569
|
+
</section>
|
|
570
|
+
|
|
571
|
+
<section>
|
|
572
|
+
<h2>Example Invocation</h2>
|
|
573
|
+
<pre><code>$dirtyloops create orchestrator-callback from the finalized plan above
|
|
574
|
+
|
|
575
|
+
Repo: .
|
|
576
|
+
Stream slug: example-stream
|
|
577
|
+
Epic title: Example stream migration
|
|
578
|
+
Run policy: until complete; use --once only for one-shot operation
|
|
579
|
+
Thread defaults: implementation standard, review standard
|
|
580
|
+
Quality gates: bun test, bun run typecheck, targeted browser QA
|
|
581
|
+
Branch/PR policy: one active implementation PR at a time</code></pre>
|
|
582
|
+
</section>
|
|
583
|
+
|
|
584
|
+
<p class="footer">dirtyloops is intentionally user-invoked: you choose when to spend attention on a durable loop, and the skill keeps the process predictable once invoked.</p>
|
|
585
|
+
</main>
|
|
586
|
+
</body>
|
|
587
|
+
</html>
|