@sylad/cadence 1.6.0 → 1.8.0
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +47 -1734
- package/agents/acceptance-writer.md +1 -0
- package/bin/cadence.js +4 -1
- package/dist/audit.js +4 -3
- package/dist/cli.js +68 -7
- package/dist/config.js +46 -0
- package/dist/corrections.js +57 -22
- package/dist/deliver.js +8 -1
- package/dist/orchestrate/accept.js +8 -3
- package/dist/orchestrate/briefs.js +1 -1
- package/dist/orchestrate/command.js +3 -0
- package/dist/orchestrate/cycle.js +68 -6
- package/dist/perf.js +559 -0
- package/dist/state.js +29 -0
- package/docs/cadence-hud.md +50 -0
- package/docs/corrections.md +24 -0
- package/docs/cycle-vague-dark.svg +42 -0
- package/docs/cycle-vague-light.svg +42 -0
- package/docs/deliver.md +204 -0
- package/docs/fonctionnement-lead-dark.svg +101 -0
- package/docs/fonctionnement-lead-light.svg +101 -0
- package/docs/fonctionnement-lot-dark.svg +38 -0
- package/docs/fonctionnement-lot-light.svg +38 -0
- package/docs/fonctionnement-service-dark.svg +23 -0
- package/docs/fonctionnement-service-light.svg +23 -0
- package/docs/fonctionnement-wave-dark.svg +66 -0
- package/docs/fonctionnement-wave-light.svg +66 -0
- package/docs/fonctionnement.md +106 -0
- package/docs/lead-workflow-dark.svg +200 -0
- package/docs/lead-workflow-light.svg +200 -0
- package/docs/lead.md +149 -0
- package/docs/news.md +245 -0
- package/docs/orchestrate.md +639 -0
- package/docs/overview.md +27 -0
- package/docs/perf.md +84 -0
- package/docs/raf.md +192 -0
- package/docs/releasing.md +59 -0
- package/docs/session.md +107 -0
- package/docs/skills.md +76 -0
- package/docs/spec.md +60 -0
- package/docs/stabilite.md +35 -0
- package/docs/whats-new.md +83 -0
- package/package.json +29 -1
- package/skills/lead/SKILL.md +7 -0
- package/templates/acceptation-runner.mjs +1 -1
- package/templates/fiche-back.yaml +1 -1
- package/templates/fiche.yaml +1 -1
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1100 190" width="1100" height="190" role="img" font-family="-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif" font-size="13" fill="#e6edf3">
|
|
2
|
+
<title>Life of a lot in the plan</title>
|
|
3
|
+
<desc>A lot goes from todo to doing, receives commits that cite it, gets its review and UX verdicts, becomes done, then is delivered by cadence deliver.</desc>
|
|
4
|
+
<defs><marker id="arr1" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" fill="#8b949e"/></marker></defs>
|
|
5
|
+
<rect width="1100" height="190" fill="#0d1117"/>
|
|
6
|
+
<rect x="20" y="40" width="110" height="56" rx="6" fill="#0d1117" stroke="#8b949e" stroke-width="1.5"/>
|
|
7
|
+
<text x="75" y="64.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#e6edf3">todo</text>
|
|
8
|
+
<text x="75" y="79.5" text-anchor="middle" font-size="11.5" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" fill="#8b949e">raf add</text>
|
|
9
|
+
<rect x="230" y="40" width="130" height="56" rx="6" fill="#0d1117" stroke="#8b949e" stroke-width="1.5"/>
|
|
10
|
+
<text x="295" y="64.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#e6edf3">doing</text>
|
|
11
|
+
<text x="295" y="79.5" text-anchor="middle" font-size="11.5" fill="#8b949e">commits « Lx »</text>
|
|
12
|
+
<rect x="470" y="40" width="170" height="56" rx="6" fill="#0d1117" stroke="#8b949e" stroke-width="1.5"/>
|
|
13
|
+
<text x="555" y="64.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#e6edf3">Verdicts recorded</text>
|
|
14
|
+
<text x="555" y="79.5" text-anchor="middle" font-size="11.5" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" fill="#8b949e">raf review · raf ux</text>
|
|
15
|
+
<rect x="740" y="40" width="110" height="56" rx="6" fill="#0d1117" stroke="#8b949e" stroke-width="1.5"/>
|
|
16
|
+
<text x="795" y="64.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#e6edf3">done</text>
|
|
17
|
+
<text x="795" y="79.5" text-anchor="middle" font-size="11.5" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" fill="#8b949e">raf done</text>
|
|
18
|
+
<rect x="950" y="40" width="130" height="56" rx="6" fill="#0c2d6b" stroke="#58a6ff" stroke-width="2"/>
|
|
19
|
+
<text x="1015" y="64.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#e6edf3">Delivered</text>
|
|
20
|
+
<text x="1015" y="79.5" text-anchor="middle" font-size="11.5" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" fill="#8b949e">cadence deliver</text>
|
|
21
|
+
<polyline points="130,68 228,68" fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arr1)"/>
|
|
22
|
+
<text x="180" y="60" text-anchor="middle" font-size="11.5" fill="#8b949e">raf start</text>
|
|
23
|
+
<polyline points="360,68 468,68" fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arr1)"/>
|
|
24
|
+
<text x="415" y="60" text-anchor="middle" font-size="11.5" fill="#8b949e">reviews</text>
|
|
25
|
+
<polyline points="640,68 738,68" fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arr1)"/>
|
|
26
|
+
<text x="690" y="60" text-anchor="middle" font-size="11.5" fill="#8b949e">gates passed</text>
|
|
27
|
+
<polyline points="850,68 948,68" fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arr1)"/>
|
|
28
|
+
<text x="900" y="60" text-anchor="middle" font-size="11.5" fill="#8b949e">push</text>
|
|
29
|
+
<text x="75" y="124" text-anchor="middle" font-size="11.5" fill="#8b949e">raf drop → dropped</text>
|
|
30
|
+
<text x="295" y="124" text-anchor="middle" font-size="11.5" fill="#8b949e">pre-commit: hook.autostart</text>
|
|
31
|
+
<text x="295" y="140" text-anchor="middle" font-size="11.5" fill="#8b949e">warn · refuse · start</text>
|
|
32
|
+
<text x="555" y="124" text-anchor="middle" font-size="11.5" fill="#8b949e">review: any lot with commits</text>
|
|
33
|
+
<text x="555" y="140" text-anchor="middle" font-size="11.5" fill="#8b949e">ux: visible lot</text>
|
|
34
|
+
<text x="795" y="124" text-anchor="middle" font-size="11.5" fill="#8b949e">refused with an open sub-task</text>
|
|
35
|
+
<text x="1015" y="124" text-anchor="middle" font-size="11.5" fill="#8b949e">CI of the sha → deploy</text>
|
|
36
|
+
<text x="1015" y="140" text-anchor="middle" font-size="11.5" fill="#8b949e">→ effect checks</text>
|
|
37
|
+
<text x="1015" y="164" text-anchor="middle" font-size="11.5" fill="#8b949e">visible lot: news entry + capture</text>
|
|
38
|
+
</svg>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1100 190" width="1100" height="190" role="img" font-family="-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif" font-size="13" fill="#1f2328">
|
|
2
|
+
<title>Life of a lot in the plan</title>
|
|
3
|
+
<desc>A lot goes from todo to doing, receives commits that cite it, gets its review and UX verdicts, becomes done, then is delivered by cadence deliver.</desc>
|
|
4
|
+
<defs><marker id="arr1" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" fill="#57606a"/></marker></defs>
|
|
5
|
+
<rect width="1100" height="190" fill="#ffffff"/>
|
|
6
|
+
<rect x="20" y="40" width="110" height="56" rx="6" fill="#ffffff" stroke="#57606a" stroke-width="1.5"/>
|
|
7
|
+
<text x="75" y="64.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#1f2328">todo</text>
|
|
8
|
+
<text x="75" y="79.5" text-anchor="middle" font-size="11.5" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" fill="#57606a">raf add</text>
|
|
9
|
+
<rect x="230" y="40" width="130" height="56" rx="6" fill="#ffffff" stroke="#57606a" stroke-width="1.5"/>
|
|
10
|
+
<text x="295" y="64.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#1f2328">doing</text>
|
|
11
|
+
<text x="295" y="79.5" text-anchor="middle" font-size="11.5" fill="#57606a">commits « Lx »</text>
|
|
12
|
+
<rect x="470" y="40" width="170" height="56" rx="6" fill="#ffffff" stroke="#57606a" stroke-width="1.5"/>
|
|
13
|
+
<text x="555" y="64.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#1f2328">Verdicts recorded</text>
|
|
14
|
+
<text x="555" y="79.5" text-anchor="middle" font-size="11.5" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" fill="#57606a">raf review · raf ux</text>
|
|
15
|
+
<rect x="740" y="40" width="110" height="56" rx="6" fill="#ffffff" stroke="#57606a" stroke-width="1.5"/>
|
|
16
|
+
<text x="795" y="64.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#1f2328">done</text>
|
|
17
|
+
<text x="795" y="79.5" text-anchor="middle" font-size="11.5" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" fill="#57606a">raf done</text>
|
|
18
|
+
<rect x="950" y="40" width="130" height="56" rx="6" fill="#ddf4ff" stroke="#0969da" stroke-width="2"/>
|
|
19
|
+
<text x="1015" y="64.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#1f2328">Delivered</text>
|
|
20
|
+
<text x="1015" y="79.5" text-anchor="middle" font-size="11.5" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" fill="#57606a">cadence deliver</text>
|
|
21
|
+
<polyline points="130,68 228,68" fill="none" stroke="#57606a" stroke-width="1.5" marker-end="url(#arr1)"/>
|
|
22
|
+
<text x="180" y="60" text-anchor="middle" font-size="11.5" fill="#57606a">raf start</text>
|
|
23
|
+
<polyline points="360,68 468,68" fill="none" stroke="#57606a" stroke-width="1.5" marker-end="url(#arr1)"/>
|
|
24
|
+
<text x="415" y="60" text-anchor="middle" font-size="11.5" fill="#57606a">reviews</text>
|
|
25
|
+
<polyline points="640,68 738,68" fill="none" stroke="#57606a" stroke-width="1.5" marker-end="url(#arr1)"/>
|
|
26
|
+
<text x="690" y="60" text-anchor="middle" font-size="11.5" fill="#57606a">gates passed</text>
|
|
27
|
+
<polyline points="850,68 948,68" fill="none" stroke="#57606a" stroke-width="1.5" marker-end="url(#arr1)"/>
|
|
28
|
+
<text x="900" y="60" text-anchor="middle" font-size="11.5" fill="#57606a">push</text>
|
|
29
|
+
<text x="75" y="124" text-anchor="middle" font-size="11.5" fill="#57606a">raf drop → dropped</text>
|
|
30
|
+
<text x="295" y="124" text-anchor="middle" font-size="11.5" fill="#57606a">pre-commit: hook.autostart</text>
|
|
31
|
+
<text x="295" y="140" text-anchor="middle" font-size="11.5" fill="#57606a">warn · refuse · start</text>
|
|
32
|
+
<text x="555" y="124" text-anchor="middle" font-size="11.5" fill="#57606a">review: any lot with commits</text>
|
|
33
|
+
<text x="555" y="140" text-anchor="middle" font-size="11.5" fill="#57606a">ux: visible lot</text>
|
|
34
|
+
<text x="795" y="124" text-anchor="middle" font-size="11.5" fill="#57606a">refused with an open sub-task</text>
|
|
35
|
+
<text x="1015" y="124" text-anchor="middle" font-size="11.5" fill="#57606a">CI of the sha → deploy</text>
|
|
36
|
+
<text x="1015" y="140" text-anchor="middle" font-size="11.5" fill="#57606a">→ effect checks</text>
|
|
37
|
+
<text x="1015" y="164" text-anchor="middle" font-size="11.5" fill="#57606a">visible lot: news entry + capture</text>
|
|
38
|
+
</svg>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1010 140" width="1010" height="140" role="img" font-family="-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif" font-size="13" fill="#e6edf3">
|
|
2
|
+
<title>Putting cadence itself in service</title>
|
|
3
|
+
<desc>The cadence code on the PATH is a separate worktree, updated only by npm run service on a reviewed sha; a wave cannot put unreviewed code in service.</desc>
|
|
4
|
+
<defs><marker id="arr4" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" fill="#8b949e"/></marker></defs>
|
|
5
|
+
<rect width="1010" height="140" fill="#0d1117"/>
|
|
6
|
+
<rect x="20" y="38" width="220" height="62" rx="6" fill="#0d1117" stroke="#8b949e" stroke-width="1.5"/>
|
|
7
|
+
<text x="130" y="65.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#e6edf3">Working repository</text>
|
|
8
|
+
<text x="130" y="80.5" text-anchor="middle" font-size="11.5" fill="#8b949e">waves, build = typecheck only</text>
|
|
9
|
+
<rect x="320" y="38" width="260" height="62" rx="6" fill="#0c2d6b" stroke="#58a6ff" stroke-width="2"/>
|
|
10
|
+
<text x="450" y="65.5" text-anchor="middle" font-size="11.5" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" fill="#8b949e">npm run service -- <sha></text>
|
|
11
|
+
<text x="450" y="80.5" text-anchor="middle" font-size="11.5" fill="#8b949e">ancestor of HEAD · cited lots done</text>
|
|
12
|
+
<rect x="660" y="38" width="220" height="62" rx="6" fill="#0d1117" stroke="#8b949e" stroke-width="1.5"/>
|
|
13
|
+
<text x="770" y="65.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#e6edf3">Service worktree</text>
|
|
14
|
+
<text x="770" y="80.5" text-anchor="middle" font-size="11.5" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" fill="#8b949e">~/.local/share/cadence</text>
|
|
15
|
+
<text x="945" y="74" text-anchor="middle" font-weight="600" font-size="13.5" fill="#e6edf3">PATH</text>
|
|
16
|
+
<polyline points="240,69 318,69" fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arr4)"/>
|
|
17
|
+
<text x="279" y="60" text-anchor="middle" font-size="11.5" fill="#8b949e">the lead,</text>
|
|
18
|
+
<text x="279" y="92" text-anchor="middle" font-size="11.5" fill="#8b949e">after review</text>
|
|
19
|
+
<polyline points="580,69 658,69" fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arr4)"/>
|
|
20
|
+
<text x="619" y="60" text-anchor="middle" font-size="11.5" fill="#8b949e">build</text>
|
|
21
|
+
<polyline points="880,69 918,69" fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arr4)"/>
|
|
22
|
+
<text x="450" y="126" text-anchor="middle" font-size="11.5" fill="#8b949e">a dropped lot whose every commit is undone by a revert no longer blocks</text>
|
|
23
|
+
</svg>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1010 140" width="1010" height="140" role="img" font-family="-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif" font-size="13" fill="#1f2328">
|
|
2
|
+
<title>Putting cadence itself in service</title>
|
|
3
|
+
<desc>The cadence code on the PATH is a separate worktree, updated only by npm run service on a reviewed sha; a wave cannot put unreviewed code in service.</desc>
|
|
4
|
+
<defs><marker id="arr4" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" fill="#57606a"/></marker></defs>
|
|
5
|
+
<rect width="1010" height="140" fill="#ffffff"/>
|
|
6
|
+
<rect x="20" y="38" width="220" height="62" rx="6" fill="#ffffff" stroke="#57606a" stroke-width="1.5"/>
|
|
7
|
+
<text x="130" y="65.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#1f2328">Working repository</text>
|
|
8
|
+
<text x="130" y="80.5" text-anchor="middle" font-size="11.5" fill="#57606a">waves, build = typecheck only</text>
|
|
9
|
+
<rect x="320" y="38" width="260" height="62" rx="6" fill="#ddf4ff" stroke="#0969da" stroke-width="2"/>
|
|
10
|
+
<text x="450" y="65.5" text-anchor="middle" font-size="11.5" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" fill="#57606a">npm run service -- <sha></text>
|
|
11
|
+
<text x="450" y="80.5" text-anchor="middle" font-size="11.5" fill="#57606a">ancestor of HEAD · cited lots done</text>
|
|
12
|
+
<rect x="660" y="38" width="220" height="62" rx="6" fill="#ffffff" stroke="#57606a" stroke-width="1.5"/>
|
|
13
|
+
<text x="770" y="65.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#1f2328">Service worktree</text>
|
|
14
|
+
<text x="770" y="80.5" text-anchor="middle" font-size="11.5" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" fill="#57606a">~/.local/share/cadence</text>
|
|
15
|
+
<text x="945" y="74" text-anchor="middle" font-weight="600" font-size="13.5" fill="#1f2328">PATH</text>
|
|
16
|
+
<polyline points="240,69 318,69" fill="none" stroke="#57606a" stroke-width="1.5" marker-end="url(#arr4)"/>
|
|
17
|
+
<text x="279" y="60" text-anchor="middle" font-size="11.5" fill="#57606a">the lead,</text>
|
|
18
|
+
<text x="279" y="92" text-anchor="middle" font-size="11.5" fill="#57606a">after review</text>
|
|
19
|
+
<polyline points="580,69 658,69" fill="none" stroke="#57606a" stroke-width="1.5" marker-end="url(#arr4)"/>
|
|
20
|
+
<text x="619" y="60" text-anchor="middle" font-size="11.5" fill="#57606a">build</text>
|
|
21
|
+
<polyline points="880,69 918,69" fill="none" stroke="#57606a" stroke-width="1.5" marker-end="url(#arr4)"/>
|
|
22
|
+
<text x="450" y="126" text-anchor="middle" font-size="11.5" fill="#57606a">a dropped lot whose every commit is undone by a revert no longer blocks</text>
|
|
23
|
+
</svg>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1320 350" width="1320" height="350" role="img" font-family="-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif" font-size="13" fill="#e6edf3">
|
|
2
|
+
<title>A lot inside an orchestrate wave</title>
|
|
3
|
+
<desc>A lot without commits starts with a precheck (unless orchestrate.precheck is false), then by type through spec, mockup or sheet review and sealed acceptance tests, or straight to the implementation; then the code review, corrections (two passes, a third if the review converges), the UX pass if visible, once, after the compliant code review, and an automatic raf review.</desc>
|
|
4
|
+
<defs><marker id="arr2" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" fill="#8b949e"/></marker></defs>
|
|
5
|
+
<rect width="1320" height="350" fill="#0d1117"/>
|
|
6
|
+
<rect x="20" y="140" width="120" height="52" rx="6" fill="#0d1117" stroke="#8b949e" stroke-width="1.5" stroke-dasharray="6 4"/>
|
|
7
|
+
<text x="80" y="162.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#e6edf3">Precheck</text>
|
|
8
|
+
<text x="80" y="177.5" text-anchor="middle" font-size="11.5" fill="#8b949e">local or Sonnet</text>
|
|
9
|
+
<text x="80" y="212" text-anchor="middle" font-size="11.5" fill="#8b949e">already delivered?</text>
|
|
10
|
+
<text x="80" y="227" text-anchor="middle" font-size="11.5" fill="#8b949e">yes → handed to the lead</text>
|
|
11
|
+
<polyline points="140,166 165,166 165,60 198,60" fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
12
|
+
<polyline points="165,166 198,166" fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
13
|
+
<polyline points="165,166 165,272 728,272" fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
14
|
+
<text x="200" y="26" text-anchor="start" font-size="11.5" fill="#8b949e">screen: page only</text>
|
|
15
|
+
<rect x="200" y="34" width="130" height="52" rx="6" fill="#0d1117" stroke="#8b949e" stroke-width="1.5"/>
|
|
16
|
+
<text x="265" y="56.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#e6edf3">Spec</text>
|
|
17
|
+
<text x="265" y="71.5" text-anchor="middle" font-size="11.5" fill="#8b949e">mockup + sheet</text>
|
|
18
|
+
<rect x="360" y="34" width="150" height="52" rx="6" fill="#0d1117" stroke="#8b949e" stroke-width="1.5"/>
|
|
19
|
+
<text x="435" y="56.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#e6edf3">Mockup review</text>
|
|
20
|
+
<text x="435" y="71.5" text-anchor="middle" font-size="11.5" fill="#8b949e">ux-reviewer · ≤ 2</text>
|
|
21
|
+
<polyline points="330,60 358,60" fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
22
|
+
<polyline points="510,60 558,60" fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
23
|
+
<text x="200" y="132" text-anchor="start" font-size="11.5" fill="#8b949e">spec: true</text>
|
|
24
|
+
<rect x="200" y="140" width="130" height="52" rx="6" fill="#0d1117" stroke="#8b949e" stroke-width="1.5"/>
|
|
25
|
+
<text x="265" y="162.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#e6edf3">Back-end spec</text>
|
|
26
|
+
<text x="265" y="177.5" text-anchor="middle" font-size="11.5" fill="#8b949e">cases · rules · contracts</text>
|
|
27
|
+
<rect x="360" y="140" width="150" height="52" rx="6" fill="#0d1117" stroke="#8b949e" stroke-width="1.5"/>
|
|
28
|
+
<text x="435" y="162.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#e6edf3">Sheet review</text>
|
|
29
|
+
<text x="435" y="177.5" text-anchor="middle" font-size="11.5" fill="#8b949e">code-reviewer · ≤ 2</text>
|
|
30
|
+
<polyline points="330,166 358,166" fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
31
|
+
<polyline points="510,166 558,166" fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
32
|
+
<rect x="560" y="34" width="130" height="158" rx="6" fill="#0d1117" stroke="#8b949e" stroke-width="1.5" stroke-dasharray="6 4"/>
|
|
33
|
+
<text x="625" y="98" text-anchor="middle" font-weight="600" font-size="13.5" fill="#e6edf3">Accept</text>
|
|
34
|
+
<text x="625" y="116" text-anchor="middle" font-size="11.5" fill="#8b949e">red tests</text>
|
|
35
|
+
<text x="625" y="131" text-anchor="middle" font-size="11.5" fill="#8b949e">sealed</text>
|
|
36
|
+
<text x="625" y="146" text-anchor="middle" font-size="11.5" fill="#8b949e">if orchestrate.accept</text>
|
|
37
|
+
<polyline points="690,166 728,166" fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
38
|
+
<text x="200" y="262" text-anchor="start" font-size="11.5" fill="#8b949e">any other lot, component and journey included, unless it already has a sheet</text>
|
|
39
|
+
<rect x="730" y="140" width="130" height="158" rx="6" fill="#0c2d6b" stroke="#58a6ff" stroke-width="2"/>
|
|
40
|
+
<text x="795" y="208" text-anchor="middle" font-weight="600" font-size="13.5" fill="#e6edf3">Implementation</text>
|
|
41
|
+
<text x="795" y="223" text-anchor="middle" font-size="11.5" fill="#8b949e">test first</text>
|
|
42
|
+
<text x="795" y="238" text-anchor="middle" font-size="11.5" fill="#8b949e">commits citing the lot</text>
|
|
43
|
+
<rect x="888" y="193" width="140" height="52" rx="6" fill="#0d1117" stroke="#8b949e" stroke-width="1.5"/>
|
|
44
|
+
<text x="958" y="215.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#e6edf3">Code review</text>
|
|
45
|
+
<text x="958" y="230.5" text-anchor="middle" font-size="11.5" fill="#8b949e">Opus, Sonnet if ≤ 0.25 d</text>
|
|
46
|
+
<polyline points="860,219 886,219" fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
47
|
+
<rect x="1050" y="193" width="140" height="52" rx="6" fill="#0d1117" stroke="#8b949e" stroke-width="1.5" stroke-dasharray="6 4"/>
|
|
48
|
+
<text x="1120" y="215.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#e6edf3">UX pass</text>
|
|
49
|
+
<text x="1120" y="230.5" text-anchor="middle" font-size="11.5" fill="#8b949e">visible lot · once, last</text>
|
|
50
|
+
<polyline points="1028,219 1048,219" fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
51
|
+
<rect x="1050" y="286" width="140" height="48" rx="6" fill="#0d1117" stroke="#8b949e" stroke-width="1.5"/>
|
|
52
|
+
<text x="1120" y="306.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#e6edf3">Correction</text>
|
|
53
|
+
<text x="1120" y="321.5" text-anchor="middle" font-size="11.5" fill="#8b949e">fresh session</text>
|
|
54
|
+
<polyline points="1100,245 1100,284" fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
55
|
+
<text x="1094" y="270" text-anchor="end" font-size="11.5" fill="#8b949e">not compliant</text>
|
|
56
|
+
<polyline points="1140,286 1140,247" fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
57
|
+
<text x="1147" y="262" text-anchor="start" font-size="11.5" fill="#8b949e">≤ 2 passes,</text>
|
|
58
|
+
<text x="1147" y="277" text-anchor="start" font-size="11.5" fill="#8b949e">3rd if it converges</text>
|
|
59
|
+
<rect x="1230" y="193" width="80" height="52" rx="6" fill="#0c2d6b" stroke="#58a6ff" stroke-width="2"/>
|
|
60
|
+
<text x="1270" y="215.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#e6edf3">raf review</text>
|
|
61
|
+
<text x="1270" y="230.5" text-anchor="middle" font-size="11.5" fill="#8b949e">recorded</text>
|
|
62
|
+
<polyline points="1190,219 1228,219" fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
63
|
+
<text x="900" y="162" text-anchor="start" font-size="11.5" fill="#8b949e">small lot: one pass,</text>
|
|
64
|
+
<text x="900" y="177" text-anchor="start" font-size="11.5" fill="#8b949e">review-small if visible</text>
|
|
65
|
+
<text x="1210" y="186" text-anchor="middle" font-size="11.5" fill="#8b949e">compliant</text>
|
|
66
|
+
</svg>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1320 350" width="1320" height="350" role="img" font-family="-apple-system,BlinkMacSystemFont,'Segoe UI',Helvetica,Arial,sans-serif" font-size="13" fill="#1f2328">
|
|
2
|
+
<title>A lot inside an orchestrate wave</title>
|
|
3
|
+
<desc>A lot without commits starts with a precheck (unless orchestrate.precheck is false), then by type through spec, mockup or sheet review and sealed acceptance tests, or straight to the implementation; then the code review, corrections (two passes, a third if the review converges), the UX pass if visible, once, after the compliant code review, and an automatic raf review.</desc>
|
|
4
|
+
<defs><marker id="arr2" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" fill="#57606a"/></marker></defs>
|
|
5
|
+
<rect width="1320" height="350" fill="#ffffff"/>
|
|
6
|
+
<rect x="20" y="140" width="120" height="52" rx="6" fill="#ffffff" stroke="#57606a" stroke-width="1.5" stroke-dasharray="6 4"/>
|
|
7
|
+
<text x="80" y="162.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#1f2328">Precheck</text>
|
|
8
|
+
<text x="80" y="177.5" text-anchor="middle" font-size="11.5" fill="#57606a">local or Sonnet</text>
|
|
9
|
+
<text x="80" y="212" text-anchor="middle" font-size="11.5" fill="#57606a">already delivered?</text>
|
|
10
|
+
<text x="80" y="227" text-anchor="middle" font-size="11.5" fill="#57606a">yes → handed to the lead</text>
|
|
11
|
+
<polyline points="140,166 165,166 165,60 198,60" fill="none" stroke="#57606a" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
12
|
+
<polyline points="165,166 198,166" fill="none" stroke="#57606a" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
13
|
+
<polyline points="165,166 165,272 728,272" fill="none" stroke="#57606a" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
14
|
+
<text x="200" y="26" text-anchor="start" font-size="11.5" fill="#57606a">screen: page only</text>
|
|
15
|
+
<rect x="200" y="34" width="130" height="52" rx="6" fill="#ffffff" stroke="#57606a" stroke-width="1.5"/>
|
|
16
|
+
<text x="265" y="56.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#1f2328">Spec</text>
|
|
17
|
+
<text x="265" y="71.5" text-anchor="middle" font-size="11.5" fill="#57606a">mockup + sheet</text>
|
|
18
|
+
<rect x="360" y="34" width="150" height="52" rx="6" fill="#ffffff" stroke="#57606a" stroke-width="1.5"/>
|
|
19
|
+
<text x="435" y="56.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#1f2328">Mockup review</text>
|
|
20
|
+
<text x="435" y="71.5" text-anchor="middle" font-size="11.5" fill="#57606a">ux-reviewer · ≤ 2</text>
|
|
21
|
+
<polyline points="330,60 358,60" fill="none" stroke="#57606a" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
22
|
+
<polyline points="510,60 558,60" fill="none" stroke="#57606a" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
23
|
+
<text x="200" y="132" text-anchor="start" font-size="11.5" fill="#57606a">spec: true</text>
|
|
24
|
+
<rect x="200" y="140" width="130" height="52" rx="6" fill="#ffffff" stroke="#57606a" stroke-width="1.5"/>
|
|
25
|
+
<text x="265" y="162.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#1f2328">Back-end spec</text>
|
|
26
|
+
<text x="265" y="177.5" text-anchor="middle" font-size="11.5" fill="#57606a">cases · rules · contracts</text>
|
|
27
|
+
<rect x="360" y="140" width="150" height="52" rx="6" fill="#ffffff" stroke="#57606a" stroke-width="1.5"/>
|
|
28
|
+
<text x="435" y="162.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#1f2328">Sheet review</text>
|
|
29
|
+
<text x="435" y="177.5" text-anchor="middle" font-size="11.5" fill="#57606a">code-reviewer · ≤ 2</text>
|
|
30
|
+
<polyline points="330,166 358,166" fill="none" stroke="#57606a" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
31
|
+
<polyline points="510,166 558,166" fill="none" stroke="#57606a" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
32
|
+
<rect x="560" y="34" width="130" height="158" rx="6" fill="#ffffff" stroke="#57606a" stroke-width="1.5" stroke-dasharray="6 4"/>
|
|
33
|
+
<text x="625" y="98" text-anchor="middle" font-weight="600" font-size="13.5" fill="#1f2328">Accept</text>
|
|
34
|
+
<text x="625" y="116" text-anchor="middle" font-size="11.5" fill="#57606a">red tests</text>
|
|
35
|
+
<text x="625" y="131" text-anchor="middle" font-size="11.5" fill="#57606a">sealed</text>
|
|
36
|
+
<text x="625" y="146" text-anchor="middle" font-size="11.5" fill="#57606a">if orchestrate.accept</text>
|
|
37
|
+
<polyline points="690,166 728,166" fill="none" stroke="#57606a" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
38
|
+
<text x="200" y="262" text-anchor="start" font-size="11.5" fill="#57606a">any other lot, component and journey included, unless it already has a sheet</text>
|
|
39
|
+
<rect x="730" y="140" width="130" height="158" rx="6" fill="#ddf4ff" stroke="#0969da" stroke-width="2"/>
|
|
40
|
+
<text x="795" y="208" text-anchor="middle" font-weight="600" font-size="13.5" fill="#1f2328">Implementation</text>
|
|
41
|
+
<text x="795" y="223" text-anchor="middle" font-size="11.5" fill="#57606a">test first</text>
|
|
42
|
+
<text x="795" y="238" text-anchor="middle" font-size="11.5" fill="#57606a">commits citing the lot</text>
|
|
43
|
+
<rect x="888" y="193" width="140" height="52" rx="6" fill="#ffffff" stroke="#57606a" stroke-width="1.5"/>
|
|
44
|
+
<text x="958" y="215.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#1f2328">Code review</text>
|
|
45
|
+
<text x="958" y="230.5" text-anchor="middle" font-size="11.5" fill="#57606a">Opus, Sonnet if ≤ 0.25 d</text>
|
|
46
|
+
<polyline points="860,219 886,219" fill="none" stroke="#57606a" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
47
|
+
<rect x="1050" y="193" width="140" height="52" rx="6" fill="#ffffff" stroke="#57606a" stroke-width="1.5" stroke-dasharray="6 4"/>
|
|
48
|
+
<text x="1120" y="215.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#1f2328">UX pass</text>
|
|
49
|
+
<text x="1120" y="230.5" text-anchor="middle" font-size="11.5" fill="#57606a">visible lot · once, last</text>
|
|
50
|
+
<polyline points="1028,219 1048,219" fill="none" stroke="#57606a" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
51
|
+
<rect x="1050" y="286" width="140" height="48" rx="6" fill="#ffffff" stroke="#57606a" stroke-width="1.5"/>
|
|
52
|
+
<text x="1120" y="306.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#1f2328">Correction</text>
|
|
53
|
+
<text x="1120" y="321.5" text-anchor="middle" font-size="11.5" fill="#57606a">fresh session</text>
|
|
54
|
+
<polyline points="1100,245 1100,284" fill="none" stroke="#57606a" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
55
|
+
<text x="1094" y="270" text-anchor="end" font-size="11.5" fill="#57606a">not compliant</text>
|
|
56
|
+
<polyline points="1140,286 1140,247" fill="none" stroke="#57606a" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
57
|
+
<text x="1147" y="262" text-anchor="start" font-size="11.5" fill="#57606a">≤ 2 passes,</text>
|
|
58
|
+
<text x="1147" y="277" text-anchor="start" font-size="11.5" fill="#57606a">3rd if it converges</text>
|
|
59
|
+
<rect x="1230" y="193" width="80" height="52" rx="6" fill="#ddf4ff" stroke="#0969da" stroke-width="2"/>
|
|
60
|
+
<text x="1270" y="215.5" text-anchor="middle" font-weight="600" font-size="13.5" fill="#1f2328">raf review</text>
|
|
61
|
+
<text x="1270" y="230.5" text-anchor="middle" font-size="11.5" fill="#57606a">recorded</text>
|
|
62
|
+
<polyline points="1190,219 1228,219" fill="none" stroke="#57606a" stroke-width="1.5" marker-end="url(#arr2)"/>
|
|
63
|
+
<text x="900" y="162" text-anchor="start" font-size="11.5" fill="#57606a">small lot: one pass,</text>
|
|
64
|
+
<text x="900" y="177" text-anchor="start" font-size="11.5" fill="#57606a">review-small if visible</text>
|
|
65
|
+
<text x="1210" y="186" text-anchor="middle" font-size="11.5" fill="#57606a">compliant</text>
|
|
66
|
+
</svg>
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# How cadence works
|
|
2
|
+
|
|
3
|
+
A versioned plan (`raf`) tied to the commits, waves of fresh sessions driven by a program
|
|
4
|
+
(`cadence orchestrate`), a lead that decides and re-verifies, then deliveries proved by their effect.
|
|
5
|
+
Four figures go from the isolated lot to the tool itself. Dashed boxes are conditional steps; a
|
|
6
|
+
box with a blue outline is where the work is kept or checked.
|
|
7
|
+
|
|
8
|
+
## 1. The life of a lot in the plan
|
|
9
|
+
|
|
10
|
+
<picture>
|
|
11
|
+
<source media="(prefers-color-scheme: dark)" srcset="fonctionnement-lot-dark.svg">
|
|
12
|
+
<img alt="A lot goes from todo to doing, receives commits that cite it, gets its review and UX verdicts, becomes done, then is delivered by cadence deliver" src="fonctionnement-lot-light.svg">
|
|
13
|
+
</picture>
|
|
14
|
+
|
|
15
|
+
The plan (`docs/plan/raf.yaml`, or the file `cadence.yaml` names) is the single source of truth:
|
|
16
|
+
`raf check` reports every commit that cites no lot (unless a motivated `raf ignore` covers it).
|
|
17
|
+
`hook.autostart` in `cadence.yaml` sets what the pre-commit hook does with a commit that cites a lot
|
|
18
|
+
still `todo`: `warn` (the default), `refuse`, or `start` it in the same commit. `raf done` is refused
|
|
19
|
+
while a sub-task is open. A delivery is finished only when its effect checks pass.
|
|
20
|
+
|
|
21
|
+
## 2. A lot inside a wave
|
|
22
|
+
|
|
23
|
+
<picture>
|
|
24
|
+
<source media="(prefers-color-scheme: dark)" srcset="fonctionnement-wave-dark.svg">
|
|
25
|
+
<img alt="A lot without commits starts with a precheck (unless disabled), then by type through spec, mockup or sheet review and sealed acceptance tests, or straight to the implementation; then the UX pass if visible, the code review, corrections and an automatic raf review" src="fonctionnement-wave-light.svg">
|
|
26
|
+
</picture>
|
|
27
|
+
|
|
28
|
+
A lot without commits yet starts with the **precheck** (unless `orchestrate.precheck: false`; a lot that already has commits is never pre-checked): is the deliverable already there? « Yes » hands the lot back
|
|
29
|
+
to the lead; « partial » passes what exists to the implementation. Then:
|
|
30
|
+
|
|
31
|
+
- `screen: page` only: **spec** (mockup and screen sheet), **mockup review** (`ux-reviewer`, two
|
|
32
|
+
passes at most), then **accept**. `screen: component` and `screen: journey` lots take the ordinary
|
|
33
|
+
path, unless their sheet already exists.
|
|
34
|
+
- `spec: true` (a lot with a behaviour to pin down and no screen): **back-end spec** (cases, rules,
|
|
35
|
+
contracts), **sheet review** (`code-reviewer` in sheet mode, two passes at most), then **accept**.
|
|
36
|
+
A mixed lot (a page whose sheet has a `sujet` block) gets both reviews and a single second spec pass.
|
|
37
|
+
- **accept** writes the acceptance tests from the sheet, committed red and locked, when the project
|
|
38
|
+
declares `orchestrate.accept`.
|
|
39
|
+
- every other lot goes straight to the **implementation**: test first, commits that cite the lot.
|
|
40
|
+
|
|
41
|
+
After the implementation: the **code review** (Opus, Sonnet for a lot of 0.25 day or less); a
|
|
42
|
+
**correction** in a fresh session if the review is not compliant, two passes at most, and a third
|
|
43
|
+
only when the review converges (the count of blocking + major findings dropped and only one is
|
|
44
|
+
left), each followed by a review. A compliant review makes the program record `raf review` itself;
|
|
45
|
+
for a `visible` lot whose project says how to see its app (`orchestrate.ux`), the **UX pass** comes
|
|
46
|
+
once, after the compliant code review (a blocking or major UX finding sends the lot to a correction,
|
|
47
|
+
then the code review, then the UX pass again).
|
|
48
|
+
A small lot (estimate of 0.5 day or less, or `quickwin`) has a single review pass, with no separate UX pass:
|
|
49
|
+
`review-small` covering code and usability when the lot is `visible`, a code `review` otherwise.
|
|
50
|
+
|
|
51
|
+
## 3. The lead drives the waves
|
|
52
|
+
|
|
53
|
+
<picture>
|
|
54
|
+
<source media="(prefers-color-scheme: dark)" srcset="fonctionnement-lead-dark.svg">
|
|
55
|
+
<img alt="Three lanes: the human chooses and decides, the lead starts, relays, re-verifies and delivers, the orchestrate program runs the lots and chains the next wave while the context stays under 60 percent" src="fonctionnement-lead-light.svg">
|
|
56
|
+
</picture>
|
|
57
|
+
|
|
58
|
+
The lead does not code and never commits where a wave runs. It re-verifies itself (git log, tests,
|
|
59
|
+
build, `raf check`) before `raf done`, delivers one project at a time, and never pushes above a
|
|
60
|
+
handed-back lot (only « livrable jusqu'à `<sha>` »). The UX verdict is the human's, or the lead's
|
|
61
|
+
when the parent folder's `cadence.yaml` says `lead.ux: lead`; the human is then asked only at the
|
|
62
|
+
slightest doubt. The step-by-step version, with its three lanes, is in [lead.md](lead.md).
|
|
63
|
+
|
|
64
|
+
## 4. Putting cadence itself in service
|
|
65
|
+
|
|
66
|
+
<picture>
|
|
67
|
+
<source media="(prefers-color-scheme: dark)" srcset="fonctionnement-service-dark.svg">
|
|
68
|
+
<img alt="The cadence code on the PATH is a separate worktree, updated only by npm run service on a reviewed sha" src="fonctionnement-service-light.svg">
|
|
69
|
+
</picture>
|
|
70
|
+
|
|
71
|
+
On the cadence repository itself, the `raf` and `cadence` commands of the `PATH` do not read the
|
|
72
|
+
working repository's `dist/`: they read a separate worktree under `~/.local/share/cadence`, updated
|
|
73
|
+
only by `npm run service -- <sha>`. The command refuses a sha that is not an ancestor of `HEAD` and a
|
|
74
|
+
sha whose cited lots are not `done`, so a wave cannot put unreviewed code in service. In the
|
|
75
|
+
working repository, `npm run build` is a typecheck only. A `dropped` lot whose every commit is undone
|
|
76
|
+
by a `git revert` under the sha no longer blocks.
|
|
77
|
+
|
|
78
|
+
## Budget of a lot
|
|
79
|
+
|
|
80
|
+
The budget a wave gives a lot is derived from its estimate, measured on the runs of the project:
|
|
81
|
+
|
|
82
|
+
| Lot | Budget |
|
|
83
|
+
|---|---|
|
|
84
|
+
| up to 0.5 day | 540 k tokens |
|
|
85
|
+
| 0.5 to 1 day | 750 k |
|
|
86
|
+
| beyond | 570 k per day, 750 k at least |
|
|
87
|
+
| `screen: page` | 1.3 M at least, or the ordinary budget + 450 k if that is more |
|
|
88
|
+
| `spec: true` | ordinary budget + 450 k |
|
|
89
|
+
| fix pass and short review | 155 k reserved |
|
|
90
|
+
|
|
91
|
+
The final review is always played; the budget bounds the writing passes. A `screen: component` or
|
|
92
|
+
`screen: journey` lot takes the ordinary budget, unless its sheet already exists: it then gets the
|
|
93
|
+
`screen: page` budget.
|
|
94
|
+
|
|
95
|
+
## Permanent rules
|
|
96
|
+
|
|
97
|
+
- **Session cap.** As many sessions or subagents running at once as the cap (2 by default, set by the
|
|
98
|
+
human with `CADENCE_MAX_SESSIONS` or `--max-sessions`). The lead never raises it itself.
|
|
99
|
+
- Never two sessions in the same repository at the same time.
|
|
100
|
+
- A session cannot ask the human anything: it stops and reports, and the lead brings the question back.
|
|
101
|
+
- A sealed acceptance test that contradicts its sheet is corrected by the lead with
|
|
102
|
+
`cadence spec reseal <lot> <test> --reason "…"`, never by editing `acceptation.json`.
|
|
103
|
+
- Deliveries and the `raf ux` / `raf review` verdicts belong to the lead, one project at a time.
|
|
104
|
+
|
|
105
|
+
See also the [orchestrate](orchestrate.md#orchestrate) page and the
|
|
106
|
+
[lead tour](lead.md#lead-tour).
|