jackherd 1.6.1 → 1.7.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.
Files changed (156) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/INSTALL.md +176 -0
  3. package/README.md +228 -312
  4. package/assets/branding/README.md +7 -3
  5. package/assets/branding/jackherd-logo-dark-1024.png +0 -0
  6. package/assets/branding/jackherd-logo-dark-512.png +0 -0
  7. package/assets/branding/jackherd-logo-dark.svg +1 -1
  8. package/assets/icons/bark-dark.svg +1 -0
  9. package/assets/icons/bark.svg +1 -0
  10. package/assets/icons/bowl-dark.svg +1 -0
  11. package/assets/icons/bowl.svg +1 -0
  12. package/assets/icons/decide-dark.svg +1 -0
  13. package/assets/icons/decide.svg +1 -0
  14. package/assets/icons/ear-dark.svg +1 -0
  15. package/assets/icons/ear.svg +1 -0
  16. package/assets/icons/lanes-dark.svg +1 -0
  17. package/assets/icons/lanes.svg +1 -0
  18. package/assets/icons/plan-dark.svg +1 -0
  19. package/assets/icons/plan.svg +1 -0
  20. package/assets/icons/space.svg +1 -0
  21. package/dist/{chunk-QJSXHHQ3.js → chunk-OBUWTQ6Z.js} +25 -0
  22. package/dist/config.d.ts +14 -3
  23. package/dist/config.js +111 -10
  24. package/dist/plan-format.d.ts +180 -77
  25. package/dist/plan-format.js +292 -93
  26. package/docs/lanes-dark.svg +50 -0
  27. package/docs/lanes.svg +50 -1
  28. package/docs/skills-dark.svg +65 -0
  29. package/docs/skills.svg +65 -1
  30. package/docs/workflow-dark.svg +138 -0
  31. package/docs/workflow.svg +135 -169
  32. package/herdr-plugin/herdr-plugin.toml +6 -6
  33. package/herdr-plugin/open-plans.ts +1 -1
  34. package/herdr-plugin/restore-plans.ts +7 -7
  35. package/install.sh +1 -1
  36. package/kit/hooks/hooks/approval-gate/decision.ts +61 -0
  37. package/kit/hooks/hooks/approval-gate/herdr-panes.ts +24 -0
  38. package/kit/hooks/hooks/approval-gate/index.ts +69 -0
  39. package/kit/hooks/hooks/approval-gate/lane.ts +14 -0
  40. package/kit/hooks/hooks/approval-gate/request.ts +111 -0
  41. package/kit/hooks/hooks/approval-gate/run.ts +94 -0
  42. package/kit/hooks/hooks/approval-gate/settings.ts +26 -0
  43. package/kit/hooks/hooks/approval-gate/store.ts +70 -0
  44. package/kit/hooks/hooks/approval-gate/transcripts.ts +40 -0
  45. package/kit/hooks/hooks/merge-guard/approval.ts +11 -74
  46. package/kit/hooks/hooks/merge-guard/run.ts +2 -1
  47. package/kit/hooks/hooks/model-gate/agent-definition.ts +13 -0
  48. package/kit/hooks/hooks/model-gate/index.ts +58 -0
  49. package/kit/hooks/hooks/model-gate/run.ts +63 -0
  50. package/kit/hooks/hooks/model-log/index.ts +60 -0
  51. package/kit/hooks/hooks/model-log/run.ts +57 -0
  52. package/kit/hooks/hooks/model-log/store.ts +40 -0
  53. package/kit/hooks/hooks/model-log/transcript.ts +37 -0
  54. package/kit/hooks/hooks/shared/checkout.ts +22 -0
  55. package/kit/hooks/hooks/shared/command.ts +6 -0
  56. package/kit/hooks/hooks/shared/config.ts +21 -0
  57. package/kit/hooks/hooks/shared/dialog-answer.ts +5 -0
  58. package/kit/hooks/hooks/shared/dialog-answers.ts +74 -0
  59. package/kit/hooks/hooks/shared/files.ts +19 -0
  60. package/kit/hooks/hooks/shared/fresh.ts +4 -0
  61. package/kit/hooks/hooks/shared/json.ts +4 -0
  62. package/kit/hooks/hooks/shared/model-family.ts +48 -0
  63. package/kit/hooks/hooks/shared/plan-model-table.ts +41 -0
  64. package/kit/hooks/hooks/shared/private-directory.ts +29 -0
  65. package/kit/hooks/hooks/shared/repository-directory.ts +14 -0
  66. package/kit/hooks/hooks/shared/subagent-phase.ts +99 -0
  67. package/kit/hooks/hooks.json +25 -0
  68. package/kit/workflow/skills/follow/SKILL.md +4 -3
  69. package/kit/workflow/skills/implement/SKILL.md +6 -6
  70. package/kit/workflow/skills/orchestrate/SKILL.md +109 -27
  71. package/kit/workflow/skills/plan/SKILL.md +5 -5
  72. package/kit/workflow/skills/start/SKILL.md +2 -2
  73. package/package.json +4 -1
  74. package/schemas/jackherd.schema.json +43 -5
  75. package/src/check/command.ts +31 -4
  76. package/src/check/deferral-arrows.ts +1 -1
  77. package/src/check/parallel-report.ts +23 -0
  78. package/src/check/plan-structure-check.ts +120 -53
  79. package/src/cli.ts +8 -2
  80. package/src/config/legacy-names.ts +8 -0
  81. package/src/config/nested-quantifier.ts +73 -0
  82. package/src/config/repository-directory.ts +11 -0
  83. package/src/config/schema.ts +63 -8
  84. package/src/plan-format/board-prose.ts +36 -0
  85. package/src/plan-format/dependencies.ts +227 -0
  86. package/src/plan-format/documentation-gate.ts +16 -0
  87. package/src/plan-format/index.ts +23 -1
  88. package/src/plan-format/lanes.ts +35 -1
  89. package/src/plan-format/model-column.ts +52 -0
  90. package/src/plan-format/phases.ts +16 -1
  91. package/src/plan-format/plan-structure.ts +10 -28
  92. package/src/plan-format/progress.ts +7 -29
  93. package/src/plans/command.ts +3 -3
  94. package/src/plans/current-phase.ts +71 -0
  95. package/src/plans/ensure-panes.ts +2 -2
  96. package/src/plans/herd-command.ts +4 -0
  97. package/src/plans/lane-discovery.ts +14 -2
  98. package/src/plans/lane-tickets.ts +69 -0
  99. package/src/plans/layout.ts +182 -88
  100. package/src/plans/live.ts +5 -1
  101. package/src/plans/phase-models-read.ts +37 -0
  102. package/src/plans/phase-models.ts +70 -0
  103. package/src/plans/plan-panes.ts +8 -7
  104. package/src/plans/pull-requests.ts +78 -4
  105. package/src/plans/selection.ts +1 -40
  106. package/src/plans/settings.ts +9 -3
  107. package/src/plans/shown-with-more.ts +5 -0
  108. package/src/plans/snapshot.ts +82 -8
  109. package/src/plans/sprint-html.ts +2 -2
  110. package/src/plans/supervisor.ts +5 -4
  111. package/src/plans/symbols.ts +9 -6
  112. package/src/plans/texts.ts +30 -13
  113. package/src/plans/view.ts +1 -0
  114. package/src/sync/command.ts +16 -1
  115. package/src/sync/herdr-plugin.ts +1 -1
  116. package/src/sync/next-steps.ts +1 -1
  117. package/src/sync/render.ts +2 -1
  118. package/src/sync/setup-questions.ts +2 -2
  119. package/src/terminal/text.ts +4 -0
  120. package/src/terminal/types.ts +1 -1
  121. package/src/update/command.ts +4 -2
  122. package/src/update/update.ts +33 -9
  123. package/src/vocabulary/index.ts +39 -0
  124. package/src/watch/approvals.ts +96 -0
  125. package/src/watch/command.ts +154 -50
  126. package/src/watch/failed-tests.ts +52 -0
  127. package/src/watch/failure-read.ts +56 -0
  128. package/src/watch/failures.ts +107 -0
  129. package/src/watch/feedback-item.ts +21 -0
  130. package/src/watch/feedback-read.ts +2 -1
  131. package/src/watch/feedback.ts +37 -28
  132. package/src/watch/gh-process.ts +53 -0
  133. package/src/watch/gh.ts +10 -20
  134. package/src/watch/heartbeat-progress.ts +1 -1
  135. package/src/watch/lane-model.ts +54 -0
  136. package/src/watch/lane-parallel.ts +46 -0
  137. package/src/watch/lane-progress.ts +28 -4
  138. package/src/watch/lane-report.ts +62 -9
  139. package/src/watch/lane-sources.ts +1 -1
  140. package/src/watch/no-finding.ts +47 -0
  141. package/src/watch/plan-badges-read.ts +19 -7
  142. package/src/watch/plan-badges.ts +59 -7
  143. package/src/watch/plan-views.ts +5 -5
  144. package/src/watch/previews.ts +3 -9
  145. package/src/watch/pull-requests.ts +12 -2
  146. package/src/watch/recorded-reads.ts +25 -0
  147. package/src/watch/source-fields.ts +4 -0
  148. package/src/watch/source-tickets.ts +99 -0
  149. package/src/watch/sources.ts +62 -15
  150. package/src/watch/texts.ts +21 -1
  151. package/src/watch/watch-defaults.ts +8 -0
  152. package/src/watch/watch-events.ts +64 -4
  153. package/src/watch/watcher-lock.ts +1 -1
  154. package/src/watch/workflow-runs.ts +5 -7
  155. package/docs/lanes.mmd +0 -9
  156. package/docs/skills.mmd +0 -10
@@ -0,0 +1,138 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="960" height="708" viewBox="0 0 960 708" role="img" aria-labelledby="t d"><title id="t">jackherd in herdr</title><desc id="d">Animated schematic of one herdr window, told in five numbered steps. 1, Lane search works: its state is a teal dot and its progress counts up. 2, It hits an open question: search turns to an amber diamond and sends the question as text. 3, The coordinator asks you: the question appears in the coordinator pane as a choice. 4, You pick: option 1 is selected. 5, The lane works on: the answer goes back to search, which is a teal dot again, and the herd counts one more box.</desc><defs><style>.s{font-family:ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif}.m{font-family:ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace}@keyframes k1{0%{opacity:1.0}0%{opacity:1.0}38.12%{opacity:1.0}40%{opacity:0.42}80%{opacity:0.42}81.88%{opacity:1.0}100%{opacity:1.0}}.k1{animation:k1 16s linear infinite both}@keyframes k2{0%{opacity:0.42}40%{opacity:0.42}41.88%{opacity:1.0}81.88%{opacity:1.0}83.75%{opacity:0.42}100%{opacity:0.42}}.k2{animation:k2 16s linear infinite both}@keyframes k3{0%{opacity:0.42}100%{opacity:0.42}}.k3{animation:k3 16s linear infinite both}@keyframes k4{0%{opacity:0}21.25%{opacity:0}23.75%{opacity:1}82.5%{opacity:1}85%{opacity:0}100%{opacity:0}}.k4{animation:k4 16s linear infinite both}@keyframes k5{0%{opacity:0;transform:translate(64px,198px)}23.75%{opacity:0;transform:translate(64px,198px)}23.94%{opacity:1;transform:translate(64px,198px)}24.32%{opacity:1;transform:translate(60.4px,197.5px)}24.9%{opacity:1;transform:translate(57.1px,196.1px)}25.47%{opacity:1;transform:translate(54.2px,193.9px)}26.04%{opacity:1;transform:translate(51.6px,191.1px)}26.61%{opacity:1;transform:translate(49.4px,187.6px)}27.19%{opacity:1;transform:translate(47.6px,183.8px)}27.76%{opacity:1;transform:translate(46.3px,179.6px)}28.33%{opacity:1;transform:translate(45.4px,175.2px)}28.91%{opacity:1;transform:translate(45px,170.7px)}29.48%{opacity:1;transform:translate(45.1px,166.3px)}30.05%{opacity:1;transform:translate(45.8px,162px)}30.63%{opacity:0;transform:translate(47px,158px)}100%{opacity:0;transform:translate(47px,158px)}}.k5{animation:k5 16s linear infinite both}@keyframes k6{0%{opacity:0;transform:translate(47px,158px)}81.25%{opacity:0;transform:translate(47px,158px)}81.44%{opacity:1;transform:translate(47px,158px)}81.67%{opacity:1;transform:translate(45.8px,162px)}82.08%{opacity:1;transform:translate(45.1px,166.3px)}82.5%{opacity:1;transform:translate(45px,170.7px)}82.92%{opacity:1;transform:translate(45.4px,175.2px)}83.33%{opacity:1;transform:translate(46.3px,179.6px)}83.75%{opacity:1;transform:translate(47.6px,183.8px)}84.17%{opacity:1;transform:translate(49.4px,187.6px)}84.58%{opacity:1;transform:translate(51.6px,191.1px)}85%{opacity:1;transform:translate(54.2px,193.9px)}85.42%{opacity:1;transform:translate(57.1px,196.1px)}85.83%{opacity:1;transform:translate(60.4px,197.5px)}86.25%{opacity:0;transform:translate(64px,198px)}100%{opacity:0;transform:translate(64px,198px)}}.k6{animation:k6 16s linear infinite both}@keyframes k7{0%{opacity:0}31.25%{opacity:0}33.75%{opacity:1}96.25%{opacity:1}100%{opacity:0}}.k7{animation:k7 16s linear infinite both}@keyframes k8{0%{opacity:0}41.25%{opacity:0}43.75%{opacity:1}96.25%{opacity:1}100%{opacity:0}}.k8{animation:k8 16s linear infinite both}@keyframes k9{0%{opacity:0}63.75%{opacity:0}66.25%{opacity:1}96.25%{opacity:1}100%{opacity:0}}.k9{animation:k9 16s linear infinite both}@keyframes k10{0%{opacity:0}68.75%{opacity:0}71.25%{opacity:1}96.25%{opacity:1}100%{opacity:0}}.k10{animation:k10 16s linear infinite both}@keyframes k11{0%{opacity:0}81.25%{opacity:0}83.75%{opacity:1}96.25%{opacity:1}100%{opacity:0}}.k11{animation:k11 16s linear infinite both}@keyframes k12{0%{opacity:1}21.25%{opacity:1}23.75%{opacity:0}82.5%{opacity:0}85%{opacity:1}100%{opacity:1}}.k12{animation:k12 16s linear infinite both}@keyframes k13{0%{opacity:0}8.75%{opacity:0}10.62%{opacity:1}96.25%{opacity:1}100%{opacity:0}}.k13{animation:k13 16s linear infinite both}@keyframes k14{0%{opacity:0}88.75%{opacity:0}90.62%{opacity:1}96.25%{opacity:1}100%{opacity:0}}.k14{animation:k14 16s linear infinite both}@keyframes k15{0%{opacity:1}8.75%{opacity:1}10.62%{opacity:0}96.25%{opacity:0}100%{opacity:1}}.k15{animation:k15 16s linear infinite both}@keyframes k16{0%{opacity:0}8.75%{opacity:0}10.62%{opacity:1}88.75%{opacity:1}90.62%{opacity:0}100%{opacity:0}}.k16{animation:k16 16s linear infinite both}@keyframes k17{0%{opacity:0}88.75%{opacity:0}90.62%{opacity:1}96.25%{opacity:1}100%{opacity:0}}.k17{animation:k17 16s linear infinite both}@keyframes k18{0%{opacity:1}8.75%{opacity:1}10.62%{opacity:0}96.25%{opacity:0}100%{opacity:1}}.k18{animation:k18 16s linear infinite both}@keyframes k19{0%{opacity:0}8.75%{opacity:0}10.62%{opacity:1}88.75%{opacity:1}90.62%{opacity:0}100%{opacity:0}}.k19{animation:k19 16s linear infinite both}@keyframes k20{0%{opacity:0}88.75%{opacity:0}90.62%{opacity:1}96.25%{opacity:1}100%{opacity:0}}.k20{animation:k20 16s linear infinite both}@keyframes k21{0%{opacity:1}18.13%{opacity:1}20%{opacity:0}100%{opacity:0}}.k21{animation:k21 16s linear infinite both}@keyframes k22{0%{opacity:1}18.13%{opacity:1}20%{opacity:0.62}100%{opacity:0.62}}.k22{animation:k22 16s linear infinite both}@keyframes k23{0%{opacity:0}20%{opacity:0}21.88%{opacity:1}38.12%{opacity:1}40%{opacity:0}100%{opacity:0}}.k23{animation:k23 16s linear infinite both}@keyframes k24{0%{opacity:0.62}20%{opacity:0.62}21.88%{opacity:1.0}38.12%{opacity:1.0}40%{opacity:0.62}100%{opacity:0.62}}.k24{animation:k24 16s linear infinite both}@keyframes k25{0%{opacity:0}40%{opacity:0}41.88%{opacity:1}58.12%{opacity:1}60%{opacity:0}100%{opacity:0}}.k25{animation:k25 16s linear infinite both}@keyframes k26{0%{opacity:0.62}40%{opacity:0.62}41.88%{opacity:1.0}58.12%{opacity:1.0}60%{opacity:0.62}100%{opacity:0.62}}.k26{animation:k26 16s linear infinite both}@keyframes k27{0%{opacity:0}60%{opacity:0}61.88%{opacity:1}78.12%{opacity:1}80%{opacity:0}100%{opacity:0}}.k27{animation:k27 16s linear infinite both}@keyframes k28{0%{opacity:0.62}60%{opacity:0.62}61.88%{opacity:1.0}78.12%{opacity:1.0}80%{opacity:0.62}100%{opacity:0.62}}.k28{animation:k28 16s linear infinite both}@keyframes k29{0%{opacity:0}80%{opacity:0}81.88%{opacity:1}98.12%{opacity:1}100%{opacity:0}}.k29{animation:k29 16s linear infinite both}@keyframes k30{0%{opacity:0.62}80%{opacity:0.62}81.88%{opacity:1}98.12%{opacity:1}100%{opacity:0.62}}.k30{animation:k30 16s linear infinite both}@media (prefers-reduced-motion:reduce){*{animation:none!important}}</style><clipPath id="jack-clip"><rect width="240" height="240" rx="50"/></clipPath><symbol id="jack" viewBox="0 0 240 240"><rect width="240" height="240" rx="50" fill="#212E34"/><g clip-path="url(#jack-clip)"><g transform="translate(34 8)"><path fill="#4A4E51" d="M80 50.5c.2 .1 .2 .1 1 1c-.2 .6-.3 1.3-.5 2c-.7 .4-.7 .4-4 2c-6 3.3-6 3.3-7 6.5c1.2-.4 2.3-.6 3.5-1c.8 0 1.7 0 2.5 0c.2 .1 .2 .1 1 1c-.5 2-.5 2-5.5 6.5c-3 5-3 5-5.5 11c.2 .3 .2 .3 1 2c.2 .3 .3 .7 .5 1c-.7 .7-1.3 1.3-2 2c-1.3-.2-2.6-.3-4-.5c0-1.2 0-2.3 0-3.5c-.2 .1-.2 .1-1.5 .5c-1.2 2.7-2.4 5.3-3.5 8c-1 2.1-2 4.2-3 6.3c-2.5 5.7-2.5 5.7-3 8.2c.5 0 1 0 1.5 0c.1-.8 .4-1.7 .5-2.5c.6 0 1.3 0 2 0c.5 2 1 3.9 1.6 6c1 4 2.2 8 3.4 11.9c2.1 8.4 1.1 15.5-3 23.1c-.6-.2-1.3-.3-2-.5c-.1-1.5-.3-3-.5-4.6c-.3-2.6-.5-5.2-1-7.9c-.5 0-1 0-1.5 0c-.1 1.7-.4 3.3-.5 5c-2.7 10.2-2.7 10.2-6 13.5c-6.1-3.1-9-14.9-11-21c-1.1-8.2 .9-14.7 3.5-22.5c-8.4 8.3-8.3 20.5-9 31.5c-.6-.2-1.3-.3-2-.5c-5.4-8.9-5.1-15-3-25c.5-1 1-2 1.5-3c-3 1.5-3 1.5-6.5 5c-.4 0-.6 0-1 0c.8-6.5 3.2-10.2 7.5-15c.6-.8 .6-.8 3.5-5c2.6-2.6 5.2-5.1 8-7.5c.6-.6 .6-.6 3.5-3.5c-.5-2-.5-2-1-3.5c3.6-6 6.5-9.2 12.5-13c.4-.6 .6-1.3 1-2c-.5-.6-1-1.3-1.5-2c2-3 2-3 4.5-4.5c.5 1 .5 1 1 3.5c2.5-1 2.5-1 8.5-5.5c.3 0 .7 0 1 0c-.1-.4-.1-.4-.5-2.5c4.3-3.3 10-2.5 15-1zM153 69.5c1.2 .2 2.3 .3 3.5 .5c.3 .7 .7 1.3 1 2c.3 0 .7 0 1 0c.5 1.2 1 2.3 1.5 3.5c3.4 7.6 6.2 13.7 12.2 19.6c3.3 3.4 3.3 3.4 3.8 5.9c-.2 .2-.3 .3-.5 .5c.1 .7 .1 .7 .5 4.5c-.5 .3-1 .7-1.5 1c-.8-.3-1.7-.7-2.5-1c.3 .7 .7 1.3 1 2c1.2 5.8 1.4 10 1 16c-.7 0-1.3 0-2 0c-.4-1.3-.8-2.7-1.3-4.1c-2.1-6.1-5.2-11.4-8.7-16.9c-.2-.8-.2-.8-1.5-5c-.3-.6-.3-.6-2.1-3.5c-1.9-3.5-1.9-3.5-2.9-8.5c.7 0 1.3 0 2 0c.5 .5 1 1 1.5 1.5c-.8-2.3-1.7-4.6-2.5-7c-.7-2-1.3-4-2-6c-.7-1-1.3-2-2-3c.2-.7 .3-1.3 .5-2zM86.5 100.5c1 0 2 0 3 0c1.3 .8 2.7 1.7 4 2.5c-2.5 2.5-2.5 2.5-8 5.5c-5.5 4.3-8.6 7-10 14c-.8 2.2-1.7 4.3-2.5 6.5c-1.2 4.6-.5 9.3 0 14c-.5 0-1 0-1.5 0c-.2 2-.3 3.9-.5 6c-.7 0-1.3 0-2 0c-.3-.6-.3-.6-2-3.5c-1-.8-2-1.7-3-2.5c-.5-1.5-.5-1.5 1.5-8.5c.3-10.3-1-18.2-4-28c0-4 0-4 1-6c2 2 2 2 3 6.5c2.5-.5 2.5-.5 8-4c9.8-3.5 9.8-3.5 13-2.5zM43 161.5c2.5 2.5 2.5 2.5 3 5c-1.5 2.5-1.5 2.5-4 5c.5 3.5 .5 3.5 4 6.5c-.1 1.2-.4 2.3-.5 3.5c-5.3 3.5-5.3 3.5-8.5 3.5c-6-2.5-6-2.5-11.5-7c0-3 0-3 4-8c9.5-8.5 9.5-8.5 13.5-8.5z"/><path fill="#9B9D9E" d="M142.5 60.5c.5 1 .5 1-.5 4.5c1.2 1.5 2.3 3 3.5 4.5c2 4.5 2 4.5 2.5 9.5c-.5 .2-1 .3-1.5 .5c-.1 .2-.1 .2-.5 1c-2-1-3.9-2-6-3c-.8-.3-1.7-.7-2.5-1c-.3-.7-.7-1.3-1-2c.3-.5 .7-1 1-1.5c-.2-.7-.3-1.3-.5-2c-3.5 .5-3.5 .5-7.5 4c-.5 3-.5 3 0 5.5c-2 4-2 4-3.5 5.5c-.3 0-.7 0-1 0c0 .7 0 1.3 0 2c-2-1-2-1-2.5-2.5c.3-13.7 .3-13.7 4.8-18.5c4.1-3.9 6.3-4.8 11.7-6c1-.5 1-.5 3.5-.5zM98 70.5c.5 .3 1 .7 1.5 1c1.3 .3 2.7 .7 4 1c4.4 5.8 6.5 10.3 6.5 17.5c-2 2-2 2-5 2.5c-.3 .2-.3 .2-2 1c-.2-.2-.2-.2-1.5-1c.5-3 .5-3 1-5c-.7-.8-1.3-1.7-2-2.5c-.2-1.7-.3-3.3-.5-5c-4.5-2.7-8.5-3-13.5-2.5c-.1 .3-.1 .3-.5 1.5c1.3 .8 2.7 1.7 4 2.5c-.1 .4-.1 .4-.5 2.5c-2.3 1.2-4.6 2.3-7 3.5c-5.5 5.5-5.5 5.5-6.5 7c0 .5 0 1 0 1.5c.9-.1 .9-.1 5.5-.5c1 1.3 2 2.7 3 4c-.2 .5-.3 1-.5 1.5c-1.7 .5-3.2 1-5 1.6c-5.5 1.9-5.5 1.9-11 5.4c-.4 .1-.4 .1-2.5 .5c-1.5-1.5-1.5-1.5-2.5-6c-.4-.3-.6-.7-1-1c0-6.7 .9-11.7 3-18c.2-.6 .2-.6 1-3.5c7.8-9.7 20.5-14.1 32-9.5z"/><path fill="#FAF9F8" d="M103.5 40c0 .4 0 .6 0 1c2.2-.1 4.3-.4 6.5-.5c7 0 7 0 9.5 1c-.2 .6-.3 1.3-.5 2c-1.8 .6-3.7 1.3-5.5 2c-.2 .5-.3 1-.5 1.5c.7-.1 1.3-.4 2-.5c13.4-.3 13.4-.3 19.5 3.5c-.3 .6-.7 1.3-1 2c-1 0-2 0-3 0c0 .5 0 1 0 1.5c1.2 .1 1.2 .1 7 .5c3.5 2 3.5 2 5.5 4.5c0 1 0 2 0 3c-3.3 .9-6.7 1.6-10 2.5c-7.5 5-7.5 5-8.5 9c-.3 4.5-.4 9-.5 13.5c1.5 1 1.5 1 7.5 2.5c.9 .6 .9 .6 5.5 3.5c2 1 2 1 9 2.5c7.9 4 11.3 8.3 15 16.5c0 .5 0 1 0 1.5c-1 .2-2 .3-3 .5c.5 1.8 1 3.7 1.5 5.5c.3 8.5-.8 13.6-6 20.5c-.7-.2-1.3-.3-2-.5c0-1.7 0-3.3 0-5c-.7 .2-1.3 .3-2 .5c-1.3 2.7-2.7 5.3-4 8c-3.2 3.7-6.4 6.2-11 8c-1-1-1-1-1.5-3c-2.5 1.3-4.8 2.9-7 4.5c-6.3 2.8-10.8 3.2-17.6 1c-1.3-.5-2.6-1-3.9-1.5c.2 1.2 .3 2.3 .5 3.5c-.2 .3-.3 .7-.5 1c-5.9 0-9-1.8-14-5c-3-3.5-3-3.5-3-4.5c-.7 0-1.3 0-2 0c.5 2.2 1 4.3 1.5 6.5c-.3 .3-.7 .7-1 1c-4.5-.9-7.6-3.6-11-6.5c-4-6-4-9.3-4-16.5c2.5-7.5 2.5-7.5 3.5-9.5c.3-1.7 .7-3.3 1-5c6.4-8 14.7-13 24.5-16c6.4-6.3 6.4-6.3 8.5-10.5c0-6-1.6-9.8-4.5-15c-.2-.5-.3-1-.5-1.5c-1.7-.3-3.3-.7-5-1c-1.3-.7-2.7-1.3-4-2c-5.7-1.9-10.2-.3-15.5 1.5c-10 5.5-10 5.5-13 10c-.3-.2-.3-.2-2-1c1.3-6.8 4.6-11.7 9.5-16.5c.5-.3 1-.6 1.5-1c.2-.5 .3-1 .5-1.5c-1 .1-1 .1-6 1c-.3-.4-.7-.6-1-1c.5-2 .5-2 4-6c5-2.5 5-2.5 7.5-3c0-.5 0-1 0-1.5c-10.5-1.5-18.5 1-27 7c-.5 .9-1 1.6-1.5 2.5c-.9 .6-.9 .6-5.5 4c-4 3.5-7.6 7-11 11c-4.6 3.8-8.7 6.8-14 9.5c-.7-.3-1.3-.7-2-1c.2-.7 .3-1.3 .5-2c1.8-1 3.7-2 5.5-3c5.2-4.2 9.7-8.5 14-13.5c3.1-2.8 6.2-5.5 9.5-8c1.3-1.3 2.6-2.6 4-4c5.6-3.6 10.4-6.1 17-7c.5-1 1-2 1.5-3c7.2-2.4 12.5-2.2 20-.5c.2 .1 .2 .1 1 .5c3.5 0 3.5 0 8.5-3.5c1-.5 1-.5 3-.5zM118 92.5c-1 1.2-2 2.3-3 3.5c.5 2.5 .5 2.5 3 5c1.8 .8 3.7 1.7 5.5 2.5c.5 1 .5 1 .5 4.5c-4 4.8-6.1 5-12.5 6c0 .7 0 1.3 0 2c4.7 1.5 7.7 .2 12-1.5c1.2-.7 2.3-1.3 3.5-2c1.3 .3 2.7 .7 4 1c3.5 0 3.5 0 5.5-1.5c-.2-.5-.3-1-.5-1.5c-1.7-.3-3.3-.7-5-1c-2.5-2-2.5-2-3-5.5c2-3 2-3 4-5.5c.5-3.5 .5-3.5-1.5-6.5c-4.3-2.2-8.2-1-12.5 .5zM146 58.5c5.8 1.1 8.3 3.9 12.5 8c3.7 5.9 4.4 7.3 5 14c2.8 6.2 5.4 10 10.5 14.5c5.2 5.2 7.2 10.3 9 17.5c0 3.5 0 3.5-2 11c-.2 1.3-.2 1.3-1 7.5c-3.8 10.7-3.8 10.7-8.5 13.5c-.5 .2-.5 .2-3 1c-1 1.3-2 2.7-3 4c-4.5 3-4.5 3-10.5 5c-2.7-.6-5.3-1.3-8-2c-1.7 1.2-3.3 2.3-5 3.5c-2 1-2 1-4 .5c.5-1.5 .5-1.5 6-5c.3-.3 .3-.3 2-2c2.4 0 4.9 0 7.5 0c.5 .5 1 1 1.5 1.5c4.3-.6 7.1-2.3 10.5-5c3.5-5.5 3.5-5.5 4-7c1.5 0 2.9 0 4.5 0c4.3-8.7 4.6-14 2.5-23.5c-.3-1-.7-2-1-3c.3 .1 .3 .1 2 .5c1.5 2.5 1.5 2.5 1.5 4c.5-.2 1-.3 1.5-.5c-.8-10-4.3-16-11.4-22.8c-3.7-3.8-5.5-6.9-7.6-11.7c-.7-1.5-1.5-2.9-2.3-4.4c-1.7-3.6-1.7-3.6-1.7-5.6c.3-.2 .7-.3 1-.5c-.5-3-.5-3-4.5-7c-2-1-3.9-2-6-3c-.7-.4-1.3-.6-2-1c0-.6 0-1.3 0-2zM33.5 83.5c-1 4-5.1 6.4-8 9c-8.6 8.1-14.6 17.2-15.2 29.2c.3 8.1 .3 8.1 2.2 11.8c.5 0 1 0 1.5 0c.4-2.9 .6-6 1-9c.6 0 1.3 0 2 0c.2 1.3 .4 2.7 .6 4.1c1.8 9.3 5.3 14.8 12.9 20.4c2.3 1.2 4.6 2.3 7 3.5c.7 .6 .7 .6 4.5 3.5c3.5 0 3.5 0 8.5-1.5c1 0 2 0 3 0c-1 2-1 2-2.5 3.5c-6.5 1.7-9.6 .9-16-1.5c-1.1-1-2.3-2-3.5-3c-1.5-.7-2.9-1.3-4.5-2c-3.9-3.4-6.9-6.5-9.5-11c-1.1-.5-2.3-1-3.5-1.5c-5.9-6.7-8-12.7-8-21.5c2.4-12.2 7.2-19.8 16.5-28c4.5-4 4.5-4 6-5.5c3.5-1 3.5-1 5-.5zM50.5 172c2.5 1 2.5 1 7 6.5c6 6.2 12 11.8 18.8 17.1c5.7 4.5 11.3 9.1 16.7 13.9c1.3 1.2 2.7 2.3 4 3.5c.7 .7 1.3 1.3 2 2c-.2 .8-.3 1.7-.5 2.5c-6 2.9-11.7 4-18.5 4c-2.6-2.6-4.3-5.5-5.5-9c-.3 .1-.3 .1-1.5 .5c0 2.3 0 4.6 0 7c-.3 .5-.7 1-1 1.5c-13.3 0-24.6-4.6-34.5-13.5c-4.5-4.5-4.5-4.5-8.5-11c.5-2.5 .5-2.5 4.5-7c5-3 5-3 8-3.5c.5 .3 1 .7 1.5 1c2-.5 2-.5 4-2c.9-4.2 1.7-8.3 2.5-12.5c.4-.3 .6-.7 1-1z"/><path fill="#03B5BD" d="M58.5 149.5c2.5 .5 2.5 .5 7 3.5c9.8 5.2 18.9 7.9 30 8.5c2.2 .5 4.3 1 6.5 1.5c7 0 7 0 9-.5c2.3-.2 4.6-.3 7-.5c3.2-.9 6.3-1.9 9.5-3c1.3-.2 2.7-.3 4-.5c.2 .2 .3 .3 .5 .5c-.8 6.3-4.1 10.2-8 15c-.2 .5-.3 1-.5 1.5c1.7-1 3.3-2 5-3c.7 .2 1.3 .3 2 .5c-3 12.2-9.3 20.3-17.5 29.5c-.7 .7-.7 .7-4 4.5c-1 .8-2 1.7-3 2.5c-3.5-.5-3.5-.5-8-5c-2.3-1.8-4.7-3.7-7-5.5c-2.7-2.2-5.3-4.3-8-6.5c-.8-.6-.8-.6-4.5-3.5c-11-9.3-20.7-18.8-28.5-31c3-4 3-4 8.5-8.5z"/><ellipse cx="94" cy="94" rx="6.5" ry="6.5" fill="#212E34"/><ellipse cx="135" cy="85.6" rx="6.2" ry="5.8" fill="#212E34"/><g fill="#FAF9F8"><circle cx="91.5" cy="91.5" r="2.1"/><circle cx="134.6" cy="84.3" r="2"/></g><ellipse cx="124" cy="93.8" rx="3.4" ry="1.1" fill="#9B9D9E" transform="rotate(-6 124 93.8)"/></g></g><rect x="5" y="5" width="230" height="230" rx="45" fill="none" stroke="#5B6B73" stroke-width="10"/></symbol></defs>
2
+ <rect x="4" y="4" width="952" height="632" rx="18" fill="#151D22" stroke="#34434B" stroke-width="1.5"/>
3
+ <path d="M4 22a18 18 0 0 1 18-18h916a18 18 0 0 1 18 18v24H4z" fill="#212E34"/>
4
+ <circle cx="26" cy="25" r="5" fill="#9B9D9E" opacity="0.55"/>
5
+ <circle cx="44" cy="25" r="5" fill="#9B9D9E" opacity="0.43"/>
6
+ <circle cx="62" cy="25" r="5" fill="#9B9D9E" opacity="0.31"/>
7
+ <text x="82" y="30" class="m" font-size="13" fill="#E6EDF3" font-weight="700">herdr</text>
8
+ <text x="936" y="30" class="m" font-size="12" fill="#9B9D9E" text-anchor="end">/jh-plan writes the plan · its board lists the lanes · /jh-orchestrate starts them</text>
9
+ <rect x="16" y="58" width="190" height="566" rx="12" fill="#1B252B" stroke="#2E3B42" stroke-width="1.2"/>
10
+ <rect x="218" y="58" width="252" height="566" rx="12" fill="#1B252B" stroke="#2E3B42" stroke-width="1.2"/>
11
+ <rect x="482" y="58" width="462" height="566" rx="12" fill="#1B252B" stroke="#2E3B42" stroke-width="1.2"/>
12
+ <g class="k1">
13
+ <text x="32" y="84" class="s" font-size="11" fill="#9B9D9E" font-weight="600" letter-spacing="1.2">WORKSPACES</text>
14
+ <text x="32" y="108" class="m" font-size="13" fill="#E6EDF3" font-weight="700">▾ shop</text>
15
+ <use href="#jack" x="30" y="122" width="34" height="34"/>
16
+ <text x="72" y="144" class="m" font-size="12.5" fill="#9B9D9E">coordinator</text>
17
+ <path d="M44.4 157.1 43.8 158.9 43.4 160.8 43 162.8 42.7 164.8 42.6 166.8 42.6 168.8 42.6 170.8 42.8 172.9 43.1 174.9 43.4 176.9 43.9 178.8 44.4 180.8 45 182.7 45.7 184.5 46.5 186.3 47.4 188 48.4 189.6 49.4 191.2 50.6 192.6 51.8 193.9 53 195.1 54.4 196.2 55.8 197.2 57.4 197.9 58.9 198.6 60.6 199 62.3 199.2 63.9 199.3 A1.3 1.3 0 0 1 64.1 196.7 L64.1 196.7 62.6 196.6 61.2 196.3 59.9 195.8 58.7 195.2 57.5 194.5 56.4 193.7 55.3 192.7 54.3 191.6 53.3 190.4 52.4 189.1 51.6 187.7 50.8 186.2 50.1 184.7 49.5 183 49 181.4 48.5 179.6 48.1 177.9 47.8 176.1 47.6 174.3 47.5 172.5 47.4 170.7 47.4 168.9 47.6 167.1 47.8 165.4 48.1 163.7 48.5 162.1 49 160.5 49.6 158.9 A2.8 2.8 0 0 1 44.4 157.1Z" fill="#21BEC5"/>
18
+ <path d="M44.3 157.7 43.7 162.8 43.3 167.9 43 173.1 42.7 178.2 42.6 183.3 42.6 188.3 42.6 193.3 42.8 198.2 43 203 43.4 207.7 43.8 212.2 44.3 216.7 44.9 221 45.6 225.1 46.4 229 47.2 232.8 48.2 236.3 49.2 239.6 50.3 242.7 51.4 245.5 52.7 248.1 54 250.4 55.4 252.4 56.9 254.1 58.5 255.5 60.3 256.5 62.1 257.1 63.8 257.3 A1.3 1.3 0 0 1 64.2 254.7 L64.2 254.7 62.7 254.5 61.5 254 60.3 253.2 59.1 252 57.9 250.5 56.8 248.7 55.7 246.6 54.6 244.2 53.6 241.5 52.7 238.5 51.8 235.3 51 231.9 50.3 228.2 49.6 224.4 49.1 220.4 48.6 216.2 48.2 211.8 47.8 207.4 47.6 202.7 47.5 198 47.4 193.2 47.4 188.4 47.6 183.4 47.8 178.4 48.1 173.4 48.6 168.4 49.1 163.4 49.7 158.3 A2.8 2.8 0 0 1 44.3 157.7Z" fill="#21BEC5"/>
19
+ <path d="M44.3 157.8 43.7 166.3 43.3 174.8 43 183.2 42.7 191.5 42.6 199.7 42.6 207.8 42.6 215.8 42.8 223.6 43 231.2 43.4 238.7 43.8 245.9 44.3 252.8 44.9 259.5 45.6 265.9 46.4 272 47.2 277.8 48.1 283.3 49.1 288.4 50.2 293.1 51.4 297.4 52.6 301.3 53.9 304.7 55.3 307.8 56.7 310.3 58.3 312.4 60 314 62 315 63.8 315.3 A1.3 1.3 0 0 1 64.2 312.7 L64.2 312.7 62.9 312.4 61.7 311.7 60.5 310.5 59.3 308.7 58.1 306.4 56.9 303.6 55.8 300.2 54.7 296.5 53.7 292.3 52.7 287.6 51.8 282.6 51 277.3 50.3 271.5 49.6 265.5 49.1 259.1 48.6 252.5 48.2 245.6 47.8 238.4 47.6 231.1 47.5 223.5 47.4 215.8 47.4 207.9 47.6 199.8 47.8 191.6 48.1 183.4 48.6 175 49.1 166.6 49.7 158.2 A2.8 2.8 0 0 1 44.3 157.8Z" fill="#21BEC5"/>
20
+ <rect x="66" y="186" width="24" height="24" rx="4.8" fill="#212E34" stroke="#5B6B73" stroke-width="1.2"/><circle cx="78" cy="198" r="4.6" fill="#21BEC5"/>
21
+ <text x="100" y="197" class="m" font-size="12.5" fill="#E6EDF3" font-weight="600">search</text>
22
+ <text x="100" y="213" class="m" font-size="11.5" fill="#9B9D9E">P2 · 2 of 3</text>
23
+ <rect x="66" y="244" width="24" height="24" rx="4.8" fill="#212E34" stroke="#5B6B73" stroke-width="1.2"/><circle cx="78" cy="256" r="4.6" fill="#21BEC5"/>
24
+ <text x="100" y="255" class="m" font-size="12.5" fill="#E6EDF3" font-weight="600">checkout-fee</text>
25
+ <text x="100" y="271" class="m" font-size="11.5" fill="#9B9D9E">P1 · done</text>
26
+ <rect x="66" y="302" width="24" height="24" rx="4.8" fill="#212E34" stroke="#5B6B73" stroke-width="1.2"/><circle cx="78" cy="314" r="4.6" fill="#7E8A90"/>
27
+ <text x="100" y="313" class="m" font-size="12.5" fill="#E6EDF3" font-weight="600">docs-site</text>
28
+ <text x="100" y="329" class="m" font-size="11.5" fill="#9B9D9E">idle</text>
29
+ <rect class="k4" opacity="0" x="70" y="190" width="16" height="16" fill="#212E34"/>
30
+ <path class="k4" opacity="0" d="M78 191.8L84.2 198L78 204.2L71.8 198Z" fill="#F0B455"/>
31
+ <circle class="k5" opacity="0" r="4.4" fill="#F0B455" stroke="#1B252B" stroke-width="1.5"/>
32
+ <circle class="k6" opacity="0" r="4.4" fill="#21BEC5" stroke="#1B252B" stroke-width="1.5"/>
33
+ <text x="32" y="372" class="s" font-size="12" fill="#9B9D9E">a lane is a git worktree</text>
34
+ <text x="32" y="389" class="s" font-size="12" fill="#9B9D9E">with its own Claude Code</text>
35
+ <text x="32" y="406" class="s" font-size="12" fill="#9B9D9E">session; its title comes</text>
36
+ <text x="32" y="423" class="s" font-size="12" fill="#9B9D9E">from the herd</text>
37
+ </g>
38
+ <g class="k2">
39
+ <use href="#jack" x="232" y="68" width="22" height="22"/>
40
+ <text x="262" y="84" class="m" font-size="13" fill="#E6EDF3" font-weight="700">coordinator</text>
41
+ <text x="456" y="84" class="s" font-size="11.5" fill="#9B9D9E" text-anchor="end">Claude Code</text>
42
+ <path d="M218 98h252" stroke="#2E3B42" stroke-width="1.2"/>
43
+ <text x="234" y="124" class="m" font-size="12.5" fill="#E6EDF3" font-weight="600"><tspan fill="#21BEC5" font-weight="700">&gt;</tspan> /jh-orchestrate</text>
44
+ <text x="250" y="142" class="m" font-size="12.5" fill="#9B9D9E">docs/plans/board-01/</text>
45
+ <text x="250" y="160" class="m" font-size="12.5" fill="#9B9D9E">board.md</text>
46
+ <circle cx="238" cy="186" r="3.6" fill="#21BEC5"/>
47
+ <text x="250" y="190" class="m" font-size="12.5" fill="#E6EDF3">3 lanes started,</text>
48
+ <text x="250" y="208" class="m" font-size="12.5" fill="#9B9D9E">watching them</text>
49
+ <g class="k7"><path d="M238 233.4L242.6 238L238 242.6L233.4 238Z" fill="#F0B455"/><text x="250" y="242" class="m" font-size="12.5" fill="#F0B455" font-weight="700">search is blocked</text><text x="250" y="260" class="m" font-size="12.5" fill="#9B9D9E">and asks, as text</text></g>
50
+ <g class="k8">
51
+ <rect x="230" y="276" width="228" height="112" rx="10" fill="#16343A" stroke="#21BEC5" stroke-width="1.5"/>
52
+ <text x="244" y="298" class="s" font-size="12" fill="#21BEC5" font-weight="700">Search box</text>
53
+ <text x="244" y="318" class="s" font-size="13.5" fill="#E6EDF3" font-weight="600">Reuse the P1 index?</text>
54
+ </g>
55
+ <rect class="k9" x="238" y="328" width="212" height="24" rx="6" fill="#21BEC5" fill-opacity="0.22" stroke="#21BEC5" stroke-width="1.4"/>
56
+ <g class="k8"><text x="246" y="345" class="m" font-size="12.5" fill="#E6EDF3" font-weight="600">1. Reuse it (Recommended)</text><text x="246" y="373" class="m" font-size="12.5" fill="#9B9D9E">2. Build its own index</text></g>
57
+ <g class="k10"><path d="M234 412l3 3.2 5.6-6.4" fill="none" stroke="#21BEC5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><text x="250" y="416" class="m" font-size="12.5" fill="#21BEC5" font-weight="700">you chose 1</text></g>
58
+ <g class="k11"><circle cx="238" cy="440" r="3.6" fill="#21BEC5"/><text x="250" y="444" class="m" font-size="12.5" fill="#E6EDF3">answer sent to</text><text x="250" y="462" class="m" font-size="12.5" fill="#E6EDF3" font-weight="700">search</text></g>
59
+ </g>
60
+ <text x="498" y="84" class="s" font-size="14" fill="#E6EDF3" font-weight="700">the herd</text>
61
+ <text x="928" y="84" class="m" font-size="11.5" fill="#9B9D9E" text-anchor="end">jh herd · example data</text>
62
+ <path d="M482 98h462" stroke="#2E3B42" stroke-width="1.2"/>
63
+ <ellipse cx="506" cy="123.5" rx="4" ry="3.2" fill="#21BEC5"/><ellipse cx="501.1" cy="119.1" rx="1.7" ry="2.2" fill="#21BEC5"/><ellipse cx="504.2" cy="116.1" rx="1.7" ry="2.2" fill="#21BEC5"/><ellipse cx="507.8" cy="116.1" rx="1.7" ry="2.2" fill="#21BEC5"/><ellipse cx="510.9" cy="119.1" rx="1.7" ry="2.2" fill="#21BEC5"/>
64
+ <text x="520" y="126" class="m" font-size="13" fill="#E6EDF3" font-weight="700">Board 01</text>
65
+ <text x="928" y="126" class="m" font-size="12.5" fill="#9B9D9E" text-anchor="end">11:38</text>
66
+ <path d="M498 140h430" stroke="#2E3B42" stroke-width="1"/>
67
+ <g class="k1">
68
+ <text x="498" y="170" class="m" font-size="11" fill="#9B9D9E">▾</text><text x="528" y="170" class="m" font-size="13" fill="#E6EDF3" font-weight="700">search</text><path d="M709.5 163.5h13a6.5 5.5 0 0 1-13 0Z" fill="#9B9D9E"/><path d="M712 170h8" stroke="#9B9D9E" stroke-width="1.6" stroke-linecap="round"/><text x="760" y="170" class="m" font-size="12.5" fill="#9B9D9E" text-anchor="end">62 %</text><path d="M772 158v15" stroke="#3A4A52" stroke-width="1.2"/><circle cx="880" cy="165.5" r="5.2" fill="none" stroke="#9B9D9E" stroke-width="1.4"/><path d="M880 160.3A5.2 5.2 0 0 0 880 170.7Z" fill="#9B9D9E"/>
69
+ <circle class="k12" cx="513" cy="165.5" r="4.8" fill="#21BEC5"/>
70
+ <path class="k4" opacity="0" d="M513 159.1L519.4 165.5L513 171.9L506.6 165.5Z" fill="#F0B455"/>
71
+ <text x="640" y="170" class="m k12" font-size="12.5" fill="#21BEC5" font-weight="600">working</text>
72
+ <text x="640" y="170" class="m k4" font-size="12.5" fill="#F0B455" font-weight="800" opacity="0">blocked</text>
73
+ <rect x="786" y="160" width="6.5" height="11" rx="1.2" fill="#21BEC5"/><rect x="794" y="160" width="6.5" height="11" rx="1.2" fill="#21BEC5"/><rect x="802" y="160" width="6.5" height="11" rx="1.2" fill="#21BEC5"/><rect x="810" y="160" width="6.5" height="11" rx="1.2" fill="#3A4A52"/><rect x="818" y="160" width="6.5" height="11" rx="1.2" fill="#3A4A52"/><rect x="826" y="160" width="6.5" height="11" rx="1.2" fill="#3A4A52"/><rect x="834" y="160" width="6.5" height="11" rx="1.2" fill="#3A4A52"/><rect x="842" y="160" width="6.5" height="11" rx="1.2" fill="#3A4A52"/><rect x="850" y="160" width="6.5" height="11" rx="1.2" fill="#3A4A52"/><rect x="858" y="160" width="6.5" height="11" rx="1.2" fill="#3A4A52"/>
74
+ <rect class="k13" x="810" y="160" width="6.5" height="11" rx="1.2" fill="#21BEC5"/>
75
+ <rect class="k14" x="818" y="160" width="6.5" height="11" rx="1.2" fill="#21BEC5"/><rect class="k14" x="826" y="160" width="6.5" height="11" rx="1.2" fill="#21BEC5"/>
76
+ <text x="928" y="170" class="m k15" font-size="12.5" fill="#9B9D9E" text-anchor="end" opacity="0">2/7</text><text x="928" y="170" class="m k16" font-size="12.5" fill="#E6EDF3" font-weight="700" text-anchor="end" opacity="0">3/7</text><text x="928" y="170" class="m k17" font-size="12.5" fill="#21BEC5" font-weight="700" text-anchor="end">4/7</text>
77
+ <text x="528" y="192" class="m" font-size="12" fill="#9B9D9E">⎇ feat/search <tspan fill="#21BEC5">↑1</tspan> ±4</text>
78
+ <text x="498" y="216" class="m" font-size="12.5" fill="#7E8A90">└─</text><text x="524" y="216" class="s" font-size="13" fill="#E6EDF3" font-weight="700">Product search</text>
79
+ <text x="524" y="238" class="m" font-size="12.5" fill="#7E8A90">├─</text><path d="M552 234l3 3.2 5.6-6.4" fill="none" stroke="#56C26A" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/><text x="568" y="238" class="m" font-size="12.5" fill="#E6EDF3">P1 Index</text>
80
+ <text x="928" y="238" class="m" font-size="12.5" fill="#56C26A" font-weight="600" text-anchor="end">2/2</text>
81
+ <text x="524" y="260" class="m" font-size="12.5" fill="#7E8A90">├─</text><text x="552" y="260" class="m" font-size="12.5" fill="#E6EDF3">▸ P2 Search box</text>
82
+ <text x="928" y="260" class="m k18" font-size="12.5" fill="#9B9D9E" text-anchor="end" opacity="0">0/4</text><text x="928" y="260" class="m k19" font-size="12.5" fill="#E6EDF3" font-weight="700" text-anchor="end" opacity="0">1/4</text><text x="928" y="260" class="m k20" font-size="12.5" fill="#21BEC5" font-weight="700" text-anchor="end">2/4</text>
83
+ <text x="524" y="280" class="m" font-size="12.5" fill="#7E8A90">│ └─</text><text x="574" y="280" class="m" font-size="12" fill="#E6EDF3" font-weight="600"><tspan fill="#21BEC5">▶</tspan> wire the box to the index</text>
84
+ <text x="524" y="302" class="m" font-size="12.5" fill="#7E8A90">└─</text><text x="552" y="302" class="m" font-size="12.5" fill="#E6EDF3">▸ P3 Docs</text>
85
+ <text x="928" y="302" class="m" font-size="12.5" fill="#9B9D9E" text-anchor="end">0/1</text>
86
+ </g>
87
+ <path d="M498 320h430" stroke="#2E3B42" stroke-width="1"/>
88
+ <g class="k3">
89
+ <text x="498" y="352" class="m" font-size="11" fill="#9B9D9E">▾</text><text x="528" y="352" class="m" font-size="13" fill="#E6EDF3" font-weight="700">checkout-fee</text><text x="640" y="352" class="m" font-size="12.5" fill="#21BEC5" font-weight="600">done</text><path d="M709.5 345.5h13a6.5 5.5 0 0 1-13 0Z" fill="#9B9D9E"/><path d="M712 352h8" stroke="#9B9D9E" stroke-width="1.6" stroke-linecap="round"/><text x="760" y="352" class="m" font-size="12.5" fill="#9B9D9E" text-anchor="end">48 %</text><path d="M772 340v15" stroke="#3A4A52" stroke-width="1.2"/><circle cx="880" cy="347.5" r="5.2" fill="none" stroke="#9B9D9E" stroke-width="1.4"/><path d="M880 342.3A5.2 5.2 0 0 0 880 352.7Z" fill="#9B9D9E"/>
90
+ <circle cx="513" cy="347.5" r="5.4" fill="none" stroke="#21BEC5" stroke-width="1.6"/><circle cx="513" cy="347.5" r="2.6" fill="#21BEC5"/>
91
+ <rect x="786" y="342" width="6.5" height="11" rx="1.2" fill="#21BEC5"/><rect x="794" y="342" width="6.5" height="11" rx="1.2" fill="#21BEC5"/><rect x="802" y="342" width="6.5" height="11" rx="1.2" fill="#21BEC5"/><rect x="810" y="342" width="6.5" height="11" rx="1.2" fill="#21BEC5"/><rect x="818" y="342" width="6.5" height="11" rx="1.2" fill="#21BEC5"/><rect x="826" y="342" width="6.5" height="11" rx="1.2" fill="#21BEC5"/><rect x="834" y="342" width="6.5" height="11" rx="1.2" fill="#21BEC5"/><rect x="842" y="342" width="6.5" height="11" rx="1.2" fill="#21BEC5"/><rect x="850" y="342" width="6.5" height="11" rx="1.2" fill="#21BEC5"/><rect x="858" y="342" width="6.5" height="11" rx="1.2" fill="#21BEC5"/>
92
+ <text x="928" y="352" class="m" font-size="12.5" fill="#9B9D9E" text-anchor="end">6/6</text>
93
+ <text x="528" y="374" class="m" font-size="12" fill="#E6EDF3">↗#42 <tspan fill="#56C26A">✓ checks</tspan> Delivery fee</text>
94
+ <path d="M529 388a6 6 0 0 0 8 8z" fill="#9B9D9E"/><path d="M533 392l3.5-3.5" stroke="#9B9D9E" stroke-width="1.5" stroke-linecap="round"/><path d="M535 385a5 5 0 0 1 5 5" fill="none" stroke="#9B9D9E" stroke-width="1.5" stroke-linecap="round"/><text x="548" y="396" class="m" font-size="12" fill="#9B9D9E">PROJ-123 · In review</text>
95
+ <text x="498" y="420" class="m" font-size="12.5" fill="#7E8A90">└─</text><text x="524" y="420" class="s" font-size="13" fill="#E6EDF3" font-weight="700">Checkout</text>
96
+ <text x="524" y="442" class="m" font-size="12.5" fill="#7E8A90">└─</text><path d="M552 438l3 3.2 5.6-6.4" fill="none" stroke="#56C26A" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/><text x="568" y="442" class="m" font-size="12.5" fill="#E6EDF3">P1 Fee</text>
97
+ <text x="928" y="442" class="m" font-size="12.5" fill="#56C26A" font-weight="600" text-anchor="end">6/6</text>
98
+ <path d="M498 460h430" stroke="#2E3B42" stroke-width="1"/>
99
+ <text x="498" y="494" class="m" font-size="11" fill="#9B9D9E">▾</text><text x="528" y="494" class="m" font-size="13" fill="#E6EDF3" font-weight="700">docs-site</text><text x="640" y="494" class="m" font-size="12.5" fill="#9B9D9E" font-weight="600">idle</text><circle cx="880" cy="489.5" r="5.2" fill="none" stroke="#9B9D9E" stroke-width="1.4"/><path d="M880 484.3A5.2 5.2 0 0 0 880 494.7Z" fill="#9B9D9E"/>
100
+ <circle cx="513" cy="489.5" r="5" fill="none" stroke="#9B9D9E" stroke-width="1.6"/>
101
+ <rect x="786" y="484" width="6.5" height="11" rx="1.2" fill="#3A4A52"/><rect x="794" y="484" width="6.5" height="11" rx="1.2" fill="#3A4A52"/><rect x="802" y="484" width="6.5" height="11" rx="1.2" fill="#3A4A52"/><rect x="810" y="484" width="6.5" height="11" rx="1.2" fill="#3A4A52"/><rect x="818" y="484" width="6.5" height="11" rx="1.2" fill="#3A4A52"/><rect x="826" y="484" width="6.5" height="11" rx="1.2" fill="#3A4A52"/><rect x="834" y="484" width="6.5" height="11" rx="1.2" fill="#3A4A52"/><rect x="842" y="484" width="6.5" height="11" rx="1.2" fill="#3A4A52"/><rect x="850" y="484" width="6.5" height="11" rx="1.2" fill="#3A4A52"/><rect x="858" y="484" width="6.5" height="11" rx="1.2" fill="#3A4A52"/>
102
+ <text x="928" y="494" class="m" font-size="12.5" fill="#9B9D9E" text-anchor="end">0/3</text>
103
+ <text x="528" y="516" class="m" font-size="12" fill="#9B9D9E">starts after search</text>
104
+ <path d="M498 534h430" stroke="#2E3B42" stroke-width="1"/>
105
+ </g>
106
+ <text x="498" y="604" class="m" font-size="11.5" fill="#9B9D9E">↑↓ select →← open a show ticked s html q quit ? help</text>
107
+ <rect x="4" y="641" width="952" height="60" rx="18" fill="#151D22" stroke="#34434B" stroke-width="1.5"/>
108
+ <rect class="k21" opacity="0" x="26" y="650" width="165" height="42" rx="21" fill="#21BEC5" fill-opacity="0.16" stroke="#21BEC5" stroke-width="1.5"/>
109
+ <g class="k22">
110
+ <circle cx="47" cy="671" r="11" fill="#212E34" stroke="#5B6B73" stroke-width="1.2"/>
111
+ <text x="47" y="675.5" class="s" font-size="12.5" fill="#21BEC5" font-weight="800" text-anchor="middle">1</text>
112
+ <text x="65" y="675.5" class="s" font-size="12.5" fill="#E6EDF3" font-weight="600">Lane search works</text>
113
+ </g>
114
+ <rect class="k23" opacity="0" x="203" y="650" width="214" height="42" rx="21" fill="#21BEC5" fill-opacity="0.16" stroke="#21BEC5" stroke-width="1.5"/>
115
+ <g class="k24">
116
+ <circle cx="224" cy="671" r="11" fill="#212E34" stroke="#5B6B73" stroke-width="1.2"/>
117
+ <text x="224" y="675.5" class="s" font-size="12.5" fill="#21BEC5" font-weight="800" text-anchor="middle">2</text>
118
+ <text x="242" y="675.5" class="s" font-size="12.5" fill="#E6EDF3" font-weight="600">It hits an open question</text>
119
+ </g>
120
+ <rect class="k25" opacity="0" x="429" y="650" width="214" height="42" rx="21" fill="#21BEC5" fill-opacity="0.16" stroke="#21BEC5" stroke-width="1.5"/>
121
+ <g class="k26">
122
+ <circle cx="450" cy="671" r="11" fill="#212E34" stroke="#5B6B73" stroke-width="1.2"/>
123
+ <text x="450" y="675.5" class="s" font-size="12.5" fill="#21BEC5" font-weight="800" text-anchor="middle">3</text>
124
+ <text x="468" y="675.5" class="s" font-size="12.5" fill="#E6EDF3" font-weight="600">The coordinator asks you</text>
125
+ </g>
126
+ <rect class="k27" opacity="0" x="655" y="650" width="102" height="42" rx="21" fill="#21BEC5" fill-opacity="0.16" stroke="#21BEC5" stroke-width="1.5"/>
127
+ <g class="k28">
128
+ <circle cx="676" cy="671" r="11" fill="#212E34" stroke="#5B6B73" stroke-width="1.2"/>
129
+ <text x="676" y="675.5" class="s" font-size="12.5" fill="#21BEC5" font-weight="800" text-anchor="middle">4</text>
130
+ <text x="694" y="675.5" class="s" font-size="12.5" fill="#E6EDF3" font-weight="600">You pick</text>
131
+ </g>
132
+ <rect class="k29" opacity="0" x="769" y="650" width="165" height="42" rx="21" fill="#21BEC5" fill-opacity="0.16" stroke="#21BEC5" stroke-width="1.5"/>
133
+ <g class="k30">
134
+ <circle cx="790" cy="671" r="11" fill="#212E34" stroke="#5B6B73" stroke-width="1.2"/>
135
+ <text x="790" y="675.5" class="s" font-size="12.5" fill="#21BEC5" font-weight="800" text-anchor="middle">5</text>
136
+ <text x="808" y="675.5" class="s" font-size="12.5" fill="#E6EDF3" font-weight="600">The lane works on</text>
137
+ </g>
138
+ </svg>