compounding-loop 0.2.0 → 0.5.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.
Files changed (149) hide show
  1. package/README.md +19 -3
  2. package/dist/cli/claim.js +84 -0
  3. package/dist/cli/claim.js.map +1 -0
  4. package/dist/cli/draft.js +69 -0
  5. package/dist/cli/draft.js.map +1 -0
  6. package/dist/cli/index.js +284 -1
  7. package/dist/cli/index.js.map +1 -1
  8. package/dist/cli/laneRound.js +96 -0
  9. package/dist/cli/laneRound.js.map +1 -0
  10. package/dist/cli/laneStatus.js +3 -1
  11. package/dist/cli/laneStatus.js.map +1 -1
  12. package/dist/cli/lanesInit.js +8 -2
  13. package/dist/cli/lanesInit.js.map +1 -1
  14. package/dist/cli/lock.js +22 -2
  15. package/dist/cli/lock.js.map +1 -1
  16. package/dist/cli/loops.js +7 -0
  17. package/dist/cli/loops.js.map +1 -1
  18. package/dist/cli/next.js +18 -0
  19. package/dist/cli/next.js.map +1 -0
  20. package/dist/cli/pace.js +41 -0
  21. package/dist/cli/pace.js.map +1 -0
  22. package/dist/cli/pause.js +81 -0
  23. package/dist/cli/pause.js.map +1 -0
  24. package/dist/cli/run.js +18 -6
  25. package/dist/cli/run.js.map +1 -1
  26. package/dist/cli/runs.js +118 -0
  27. package/dist/cli/runs.js.map +1 -0
  28. package/dist/cli/schedule.js +177 -0
  29. package/dist/cli/schedule.js.map +1 -0
  30. package/dist/cli/shipCheck.js +59 -0
  31. package/dist/cli/shipCheck.js.map +1 -0
  32. package/dist/core/brief.js +35 -12
  33. package/dist/core/brief.js.map +1 -1
  34. package/dist/core/draftBrief.js +68 -0
  35. package/dist/core/draftBrief.js.map +1 -0
  36. package/dist/core/laneRound.js +63 -0
  37. package/dist/core/laneRound.js.map +1 -0
  38. package/dist/core/lanes.js +15 -2
  39. package/dist/core/lanes.js.map +1 -1
  40. package/dist/core/lanesInit.js +19 -0
  41. package/dist/core/lanesInit.js.map +1 -1
  42. package/dist/core/next.js +34 -0
  43. package/dist/core/next.js.map +1 -0
  44. package/dist/core/parse/changelog.js +41 -0
  45. package/dist/core/parse/changelog.js.map +1 -0
  46. package/dist/core/parse/claim.js +24 -0
  47. package/dist/core/parse/claim.js.map +1 -0
  48. package/dist/core/parse/controlRoom.js +38 -0
  49. package/dist/core/parse/controlRoom.js.map +1 -0
  50. package/dist/core/parse/index.js +17 -0
  51. package/dist/core/parse/index.js.map +1 -0
  52. package/dist/core/parse/markers.js +20 -0
  53. package/dist/core/parse/markers.js.map +1 -0
  54. package/dist/core/parse/outcomes.js +51 -0
  55. package/dist/core/parse/outcomes.js.map +1 -0
  56. package/dist/core/parse/paused.js +26 -0
  57. package/dist/core/parse/paused.js.map +1 -0
  58. package/dist/core/parse/policy.js +56 -0
  59. package/dist/core/parse/policy.js.map +1 -0
  60. package/dist/core/parse/runs.js +132 -0
  61. package/dist/core/parse/runs.js.map +1 -0
  62. package/dist/core/parse/schedule.js +101 -0
  63. package/dist/core/parse/schedule.js.map +1 -0
  64. package/dist/core/parse/steer.js +68 -0
  65. package/dist/core/parse/steer.js.map +1 -0
  66. package/dist/core/parse/task.js +96 -0
  67. package/dist/core/parse/task.js.map +1 -0
  68. package/dist/core/repo.js +18 -8
  69. package/dist/core/repo.js.map +1 -1
  70. package/dist/core/runPrompt.js +8 -2
  71. package/dist/core/runPrompt.js.map +1 -1
  72. package/dist/core/shipCheck.js +45 -0
  73. package/dist/core/shipCheck.js.map +1 -0
  74. package/dist/core/table.js +3 -1
  75. package/dist/core/table.js.map +1 -1
  76. package/dist/server/actionBody.js +54 -0
  77. package/dist/server/actionBody.js.map +1 -0
  78. package/dist/server/checkLabels.js +32 -0
  79. package/dist/server/checkLabels.js.map +1 -0
  80. package/dist/server/claude.js +18 -0
  81. package/dist/server/claude.js.map +1 -0
  82. package/dist/server/controls.js +99 -0
  83. package/dist/server/controls.js.map +1 -0
  84. package/dist/server/data.js +9 -3
  85. package/dist/server/data.js.map +1 -1
  86. package/dist/server/draftInputs.js +33 -0
  87. package/dist/server/draftInputs.js.map +1 -0
  88. package/dist/server/health.js +9 -30
  89. package/dist/server/health.js.map +1 -1
  90. package/dist/server/index.js +77 -0
  91. package/dist/server/index.js.map +1 -1
  92. package/dist/server/laneChecks.js +25 -0
  93. package/dist/server/laneChecks.js.map +1 -0
  94. package/dist/server/laneSchedule.js +15 -0
  95. package/dist/server/laneSchedule.js.map +1 -0
  96. package/dist/server/live/build.js +178 -0
  97. package/dist/server/live/build.js.map +1 -0
  98. package/dist/server/live/github.js +54 -0
  99. package/dist/server/live/github.js.map +1 -0
  100. package/dist/server/live/index.js +11 -0
  101. package/dist/server/live/index.js.map +1 -0
  102. package/dist/server/live/merge.js +16 -0
  103. package/dist/server/live/merge.js.map +1 -0
  104. package/dist/server/live/urls.js +61 -0
  105. package/dist/server/live/urls.js.map +1 -0
  106. package/dist/server/loops.js +263 -41
  107. package/dist/server/loops.js.map +1 -1
  108. package/dist/server/paceNote.js +13 -0
  109. package/dist/server/paceNote.js.map +1 -0
  110. package/dist/server/roundState.js +51 -0
  111. package/dist/server/roundState.js.map +1 -0
  112. package/dist/server/runs.js +144 -0
  113. package/dist/server/runs.js.map +1 -0
  114. package/dist/server/shipped.js +35 -0
  115. package/dist/server/shipped.js.map +1 -0
  116. package/dist/server/static-export.js +22 -1
  117. package/dist/server/static-export.js.map +1 -1
  118. package/dist/server/taskBullets.js +33 -0
  119. package/dist/server/taskBullets.js.map +1 -0
  120. package/dist/server/this-repo.json +2818 -106
  121. package/dist/web/assets/index-BozIcdeb.js +88 -0
  122. package/dist/web/assets/index-Te_olhNA.css +2 -0
  123. package/dist/web/index.html +2 -2
  124. package/method/COMPOUNDING_LOOP.md +26 -0
  125. package/method/retro.md +7 -0
  126. package/package.json +1 -1
  127. package/plugin/.claude-plugin/plugin.json +1 -1
  128. package/plugin/commands/loop-lanes.md +11 -0
  129. package/plugin/commands/loop-next.md +11 -0
  130. package/plugin/commands/loop-pause.md +10 -0
  131. package/runners/github-actions/lanes.yml +55 -2
  132. package/runners/local/README.md +3 -1
  133. package/runners/local/compounding-loop.service +20 -0
  134. package/runners/local/compounding-loop.timer +11 -0
  135. package/runners/routine/README.md +5 -1
  136. package/runners/routine/control-room-prompt.md +4 -14
  137. package/runners/routine/lane-prompt.md +4 -10
  138. package/runners/routine/prompt.md +2 -2
  139. package/templates/lanes/README.md +5 -1
  140. package/templates/lanes/claude-section.md +5 -1
  141. package/templates/lanes/control-run.md +37 -0
  142. package/templates/lanes/lane-run.md +33 -0
  143. package/templates/lanes/schedule.json +4 -0
  144. package/templates/lanes/steer.md +3 -0
  145. package/templates/lanes/task.md +1 -1
  146. package/templates/static-site/.ai/loop-prompt.md +1 -1
  147. package/templates/static-site/CLAUDE.md +2 -0
  148. package/dist/web/assets/index-B16QCSnY.css +0 -2
  149. package/dist/web/assets/index-CS82DKbF.js +0 -49
@@ -1 +1 @@
1
- {"version":3,"file":"brief.js","sourceRoot":"","sources":["../../src/core/brief.ts"],"names":[],"mappings":"AAAA,iGAAiG;AAiBjG,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAQlC,MAAM,WAAW,GAAG,4FAA4F,CAAC;AACjH,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,yEAAyE;AACzE,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,IAAI,GAAsD,EAAE,CAAC;IACnE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClG,IAAI,OAAO;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;aAC7F,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aACnJ,CAAC;YACJ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACnC,IAAI,IAAI;gBAAE,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC;QACpC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;QAC7B,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK;gBAAE,MAAM;YACxC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC;QACpB,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,QAAmB,EAAE,OAAe,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAE5G,+EAA+E;AAC/E,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI;SACR,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gDAAgD,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;SACvF,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,qHAAqH;AACrH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9D,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAChD,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,CAAC,GAAa,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE/C,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,oEAAoE,CAAC,CAAC;IAC5G,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAChD,IAAI,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,mDAAmD,EAAE,CAAC,CAAC;IACnG,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE,oDAAoD,CAAC,CAAC;IAC7F,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAClD,IAAI,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE,sEAAsE,CAAC,CAAC;IAClH,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,gDAAgD,EAAE,CAAC,CAAC;IAClG,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,EAAE,EAAE,kBAAkB;gBACtB,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE,qBAAqB,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,wDAAwD;aACtH,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE,oEAAoE,CAAC,CAAC;IAC7G,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,wEAAwE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAClI,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,gEAAgE,EAAE,CAAC,CAAC;IACjH,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,EAAE,iEAAiE,CAAC,CAAC;IAC5G,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACtD,IAAI,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,4DAA4D,EAAE,CAAC,CAAC;IAChH,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;QACzD,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,SAAS,2CAA2C,EAAE,CAAC,CAAC;IAC3G,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAe,EAAW,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,eAAe,CAAC"}
1
+ {"version":3,"file":"brief.js","sourceRoot":"","sources":["../../src/core/brief.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ // The prompt that asks Claude to draft the next round's brief. Pure and free of Node imports: the server streams the
2
+ // same prompt and the demo offers it as "Copy prompt for Claude Code".
3
+ import { listItems } from './brief.js';
4
+ const cell = (c) => c.replace(/\*\*|`/g, '').trim();
5
+ /** Audit table rows whose last cell says the finding is still open. */
6
+ export function extractOpenFindings(source, auditText) {
7
+ const out = [];
8
+ for (const line of auditText.split(/\r?\n/)) {
9
+ if (!line.startsWith('|') || /^\|[\s:|-]+\|?$/.test(line))
10
+ continue;
11
+ const cells = line.split('|').slice(1, -1).map(cell);
12
+ const last = cells.at(-1) ?? '';
13
+ if (cells.length >= 2 && /\bopen\b/i.test(last) && !/^fixed/i.test(last))
14
+ out.push({ source, text: cells.slice(0, -1).filter(Boolean).join(' · ').slice(0, 300) });
15
+ }
16
+ return out;
17
+ }
18
+ /** The list under the first "Out of scope" line of a brief (heading or bold label). */
19
+ export function extractOutOfScope(ideaText) {
20
+ const lines = ideaText.split(/\r?\n/);
21
+ const start = lines.findIndex((l) => /out of scope/i.test(l) && /^(#{1,6}\s|\s*\*\*)/.test(l));
22
+ if (start < 0)
23
+ return [];
24
+ const rest = lines.slice(start + 1);
25
+ const end = rest.findIndex((l) => /^#{1,6}\s|^---/.test(l));
26
+ return listItems((end < 0 ? rest : rest.slice(0, end)).join('\n'));
27
+ }
28
+ const bullets = (items) => (items.length ? items.map((i) => `- ${i}`).join('\n') : '(none)');
29
+ /** The prompt text. It states the brief format the linter scores, so the draft passes `loop next-round --brief`. */
30
+ export function buildDraftPrompt(input) {
31
+ const next = input.next.map((n) => `From ${n.source}:\n${bullets(n.items)}`).join('\n\n') || '(no DONE.md lists yet)';
32
+ const findings = bullets(input.findings.map((f) => `${f.source}: ${f.text}`));
33
+ const steer = input.steer.flatMap((s) => s.entries.map((e) => `- ${s.lane} (${e.scope}, ${e.author}): ${e.text.replace(/\s+/g, ' ')}`));
34
+ return `You are drafting the brief for round ${input.round} of ${input.name}, a repo built by unattended Claude Code lanes. Use only the inputs below; do not edit files or run commands. Answer with the brief as Markdown and nothing else.
35
+
36
+ ## Inputs
37
+
38
+ ### Next-improvement lists from the finished round
39
+ ${next}
40
+
41
+ ### Open audit findings
42
+ ${findings}
43
+
44
+ ### Steering notes not yet acted on
45
+ ${steer.length ? steer.join('\n') : '(none)'}
46
+
47
+ ### Out of scope in the previous brief (keep unless an input above says otherwise)
48
+ ${bullets(input.outOfScope)}
49
+
50
+ ## Format (an automated check scores it; below 60 it is refused)
51
+ - A heading "## Round ${input.round}: <version and a short name>".
52
+ - "**What we are building:**" and "**Audience:**" lead-ins, one or two sentences each.
53
+ - Must-haves as lettered sections ("### A. ...", "### B. ...") with numbered items. Each item names a path, a command or a number that a test can check. Put the highest-value work first and bugs before features.
54
+ - A "### Round ${input.round} done when" section whose bullets are commands or tests (for example \`npm test\` passes).
55
+ - "**Out of scope:**" with a bullet list.
56
+ - Fit what unattended lanes can finish in about three days. Drop inputs that do not fit and say nothing about them.
57
+ `;
58
+ }
59
+ /** Arguments for a read-only `claude -p` draft: no edits, no shell. The prompt is one argv entry. */
60
+ export function draftClaudeArgs(prompt, model) {
61
+ return ['-p', prompt, ...(model ? ['--model', model] : []), '--permission-mode', 'default', '--allowedTools', 'Read,Glob,Grep'];
62
+ }
63
+ /** The number of the round to draft: one above the highest `Round N` heading (2 when the brief has none, so it is round 1). */
64
+ export function nextRoundNumber(ideaText) {
65
+ const numbers = [...ideaText.matchAll(/^#{1,2}\s+Round\s+(\d+)\b/gim)].map((m) => Number(m[1]));
66
+ return Math.max(1, ...numbers) + 1;
67
+ }
68
+ //# sourceMappingURL=draftBrief.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draftBrief.js","sourceRoot":"","sources":["../../src/core/draftBrief.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ // Starting the next round of a laned repo (IDEA.md Round 4 B3). Pure: takes file texts, returns the changes to make.
2
+ import { lintBrief } from './brief.js';
3
+ import { nextDoneFileName } from './rounds.js';
4
+ import { parseRunCounter } from './parse/task.js';
5
+ import { fillPlaceholders } from './template.js';
6
+ const ROUND_HEADING = /^##\s+Round\s+(\d+)\b/;
7
+ const DEFAULT_RUN_LIMIT = 20;
8
+ /** The number of the round being started: one above the highest `## Round N` heading in IDEA.md. */
9
+ export function nextRoundNumber(ideaText) {
10
+ const numbers = ideaText.split(/\r?\n/).flatMap((line) => {
11
+ const match = ROUND_HEADING.exec(line);
12
+ return match ? [Number(match[1])] : [];
13
+ });
14
+ return Math.max(0, ...numbers) + 1;
15
+ }
16
+ const utcDay = (d) => d.toISOString().slice(0, 10);
17
+ /** Puts `brief` first in IDEA.md and turns the previous "(current)" heading into "(finished <date>)". */
18
+ export function insertBrief(ideaText, brief, round, now) {
19
+ const body = brief.trim();
20
+ const section = /^##\s/.test(body) ? body : `## Round ${round} (current) — started ${utcDay(now)} ${now.toISOString().slice(11, 16)} UTC\n\n${body}`;
21
+ const lines = ideaText.split(/\r?\n/).map((line) => (ROUND_HEADING.test(line) ? line.replace(/\(current\)/i, `(finished ${utcDay(now)})`) : line));
22
+ const firstRound = lines.findIndex((line) => ROUND_HEADING.test(line));
23
+ const at = firstRound !== -1 ? firstRound : Math.min(lines.length, lines.findIndex((l) => /^#\s/.test(l)) + 1);
24
+ const before = lines.slice(0, at).join('\n').trimEnd();
25
+ const after = lines.slice(at).join('\n').trimStart();
26
+ return `${before ? `${before}\n\n` : ''}${section}\n\n---\n\n${after}`.trimEnd() + '\n';
27
+ }
28
+ /** A control-room note, newest first, right under the file's header paragraph. */
29
+ export function addControlNote(controlText, note) {
30
+ const lines = controlText.split(/\r?\n/);
31
+ const firstNote = lines.findIndex((l) => /^\d{4}-\d\d-\d\d \d\d:\d\d UTC · /.test(l));
32
+ if (firstNote !== -1)
33
+ return [...lines.slice(0, firstNote), note, ...lines.slice(firstNote)].join('\n');
34
+ return `${controlText.trimEnd()}\n\n${note}\n`;
35
+ }
36
+ const filesIn = (files, dir) => files.flatMap((f) => (f.startsWith(`${dir}/`) && !f.slice(dir.length + 1).includes('/') ? [f.slice(dir.length + 1)] : []));
37
+ /** Everything `loop next-round --brief` does, as a list of changes. Nothing here touches the disk. */
38
+ export function planLaneRound(input) {
39
+ const { now, lanes, files } = input;
40
+ const round = nextRoundNumber(input.ideaText);
41
+ const changes = [{ kind: 'write', path: 'IDEA.md', content: insertBrief(input.ideaText, input.brief, round, now) }];
42
+ if (files.includes('DONE.md'))
43
+ changes.push({ kind: 'move', from: 'DONE.md', to: `.ai/${nextDoneFileName(filesIn(files, '.ai'))}` });
44
+ const blockedLanes = [];
45
+ for (const lane of lanes) {
46
+ const dir = `.ai/lanes/${lane.name}`;
47
+ const own = filesIn(files, dir);
48
+ if (own.includes('DONE.md'))
49
+ changes.push({ kind: 'move', from: `${dir}/DONE.md`, to: `${dir}/${nextDoneFileName(own)}` });
50
+ if (own.includes('BLOCKED.md'))
51
+ blockedLanes.push(lane.name);
52
+ const limit = parseRunCounter(input.laneTasks[lane.name] ?? '')?.limit ?? DEFAULT_RUN_LIMIT;
53
+ const task = fillPlaceholders(input.taskTemplate, { lane: lane.name, owns: lane.owns.join(', ') }).replace(/^Run:\s*\d+\s*\/\s*\d+/m, `Run: 0 / ${limit}`);
54
+ changes.push({ kind: 'write', path: `${dir}/task.md`, content: task });
55
+ }
56
+ const stamp = `${utcDay(now)} ${now.toISOString().slice(11, 16)} UTC`;
57
+ const note = `${stamp} · to all · Round ${round} has started; the brief is the first section of IDEA.md. Previous DONE files are archived as done-vN.md. First unit for every lane: a Round ${round} section in your audit. Run budgets are reset. (loop next-round)`;
58
+ changes.push({ kind: 'write', path: '.ai/control-room.md', content: addControlNote(input.controlRoomText ?? '# Control room notes\n', note) });
59
+ if (input.briefPath)
60
+ changes.push({ kind: 'delete', path: input.briefPath });
61
+ return { round, brief: lintBrief(input.brief), changes, blockedLanes };
62
+ }
63
+ //# sourceMappingURL=laneRound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"laneRound.js","sourceRoot":"","sources":["../../src/core/laneRound.ts"],"names":[],"mappings":"AAAA,qHAAqH;AACrH,OAAO,EAAE,SAAS,EAAkB,MAAM,YAAY,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,aAAa,GAAG,uBAAuB,CAAC;AAC9C,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,oGAAoG;AACpG,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACvD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAEzD,yGAAyG;AACzG,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,KAAa,EAAE,KAAa,EAAE,GAAS;IACnF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,KAAK,wBAAwB,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC;IACrJ,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,aAAa,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnJ,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvE,MAAM,EAAE,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/G,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IACvD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;IACrD,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,cAAc,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;AAC1F,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,IAAY;IAC9D,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mCAAmC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,IAAI,SAAS,KAAK,CAAC,CAAC;QAAE,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxG,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC;AACjD,CAAC;AA2BD,MAAM,OAAO,GAAG,CAAC,KAAwB,EAAE,GAAW,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEtL,sGAAsG;AACtG,MAAM,UAAU,aAAa,CAAC,KAAiB;IAC7C,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IACpC,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAkB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAEnI,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrI,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,aAAa,IAAI,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAChC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,UAAU,EAAE,EAAE,EAAE,GAAG,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3H,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;YAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,iBAAiB,CAAC;QAC5F,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,yBAAyB,EAAE,YAAY,KAAK,EAAE,CAAC,CAAC;QAC3J,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,GAAG,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC;IACtE,MAAM,IAAI,GAAG,GAAG,KAAK,qBAAqB,KAAK,+IAA+I,KAAK,kEAAkE,CAAC;IACtQ,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,eAAe,IAAI,wBAAwB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/I,IAAI,KAAK,CAAC,SAAS;QAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7E,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AACzE,CAAC"}
@@ -114,10 +114,20 @@ export function parseLaneTrailer(message) {
114
114
  }
115
115
  return undefined;
116
116
  }
117
+ /** Release commits (version bump, CHANGELOG) and control commits (pause, next round) are not lanes; each may touch only these paths. */
118
+ export const RELEASE_LANE = 'release';
119
+ const RELEASE_PATHS = ['package.json', 'package-lock.json', 'plugin/**/plugin.json', 'CHANGELOG.md'];
120
+ const CONTROL_PATHS = ['.ai/**', 'IDEA.md', 'DONE.md'];
121
+ function restrictedLaneViolations(lane, files) {
122
+ const allowed = lane === RELEASE_LANE ? RELEASE_PATHS : CONTROL_PATHS;
123
+ return files
124
+ .filter((file) => !matchesAny(allowed, file))
125
+ .map((file) => ({ file: normalizePath(file), message: `lane "${lane}" touched ${normalizePath(file)}, but it may touch only ${allowed.join(', ')}.` }));
126
+ }
117
127
  /** Files a commit with the given `Lane:` trailer may not touch, each with a fix-it message. */
118
128
  export function checkCommitFiles(config, lane, files) {
119
- if (lane === CONTROL_LANE)
120
- return [];
129
+ if (lane === CONTROL_LANE || lane === RELEASE_LANE)
130
+ return restrictedLaneViolations(lane, files);
121
131
  const self = config.lanes.find((l) => l.name === lane);
122
132
  if (!self) {
123
133
  const known = config.lanes.map((l) => l.name).join(', ');
@@ -125,6 +135,9 @@ export function checkCommitFiles(config, lane, files) {
125
135
  }
126
136
  const violations = [];
127
137
  for (const file of files) {
138
+ // Step 8 of a lane run applies the idle backoff to the lane's own entry in the shared schedule.
139
+ if (normalizePath(file) === '.ai/schedule.json')
140
+ continue;
128
141
  const owner = laneForPath(config, file);
129
142
  // A path listed in "shared" is open to every lane even when an "owns" glob also covers it (e.g. src/core/types.ts).
130
143
  if (owner === self.name || owner === 'shared' || matchesAny(config.shared, file))
@@ -1 +1 @@
1
- {"version":3,"file":"lanes.js","sourceRoot":"","sources":["../../src/core/lanes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lanes.js","sourceRoot":"","sources":["../../src/core/lanes.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,20 @@ Newest first. Format: \`YYYY-MM-DD HH:MM UTC · to <lane|all> · message\`.
38
38
  controlRoom: `# Control room notes
39
39
 
40
40
  Written only by the control room routine. Every lane reads it at the start of a run. Newest first. Format: \`YYYY-MM-DD HH:MM UTC · to <lane|all> · message\`.
41
+ `,
42
+ laneRun: `# Lane run procedure
43
+
44
+ Stop at once, without committing, when \`.ai/PAUSED\` exists, root or lane \`DONE.md\`/\`BLOCKED.md\` exists, or your lane is paused, sleeping or before its \`notBefore\` in \`.ai/schedule.json\`. Otherwise read the other lanes' outboxes and your \`steer.md\`, take the next unit from your task file, run the checks, commit with a \`Lane: <lane>\` trailer, push, and append a line to \`.ai/lanes/<lane>/runs.jsonl\`.
45
+ `,
46
+ controlRun: `# Control room run procedure
47
+
48
+ Stop when \`.ai/PAUSED\` or root \`DONE.md\` exists. Otherwise read every lane's task file, outbox and run log, write what you find to \`.ai/control-room.md\`, and commit with a \`Lane: control\` trailer.
49
+ `,
50
+ schedule: '{\n "version": 1,\n "lanes": {}\n}\n',
51
+ policy: '{\n "version": 1,\n "pace": "balanced",\n "lanes": {}\n}\n',
52
+ steer: `# Steering for the {{lane}} lane
53
+
54
+ Notes from the owner or a teammate, newest first. Entry format: \`## YYYY-MM-DD HH:MM UTC · <author> · next-run|standing\`, then the text. The lane adds one line under each entry it has read: \`→ done in run N\` or \`→ not done: <why>\`.
41
55
  `,
42
56
  claudeSection: `## Lanes
43
57
 
@@ -125,8 +139,13 @@ export function planLanes({ config, newLanes, templates, existing, force }) {
125
139
  const vars = { lane: name, owns: lane ? lane.owns.join(', ') : '', lanes: config.lanes.map((l) => l.name).join(', ') };
126
140
  state(`.ai/lanes/${name}/task.md`, fillPlaceholders(templates.task, vars));
127
141
  state(`.ai/lanes/${name}/outbox.md`, fillPlaceholders(templates.outbox, vars));
142
+ state(`.ai/lanes/${name}/steer.md`, fillPlaceholders(templates.steer, vars));
128
143
  }
129
144
  state('.ai/control-room.md', templates.controlRoom);
145
+ state('.ai/lane-run.md', templates.laneRun);
146
+ state('.ai/control-run.md', templates.controlRun);
147
+ state('.ai/schedule.json', templates.schedule);
148
+ state('.ai/policy.json', templates.policy);
130
149
  const section = fillPlaceholders(templates.claudeSection, { lanes: config.lanes.map((l) => l.name).join(', ') });
131
150
  // AGENTS.md is merged only when the repo already has one; CLAUDE.md is always installed.
132
151
  const instructionFiles = existing.has('AGENTS.md') ? ['CLAUDE.md', 'AGENTS.md'] : ['CLAUDE.md'];
@@ -1 +1 @@
1
- {"version":3,"file":"lanesInit.js","sourceRoot":"","sources":["../../src/core/lanesInit.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAC3G,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,mBAAmB,EAA+B,MAAM,YAAY,CAAC;AAE9G,MAAM,CAAC,MAAM,WAAW,GAAG,uCAAuC,CAAC;AACnE,MAAM,CAAC,MAAM,SAAS,GAAG,qCAAqC,CAAC;AAE/D,+FAA+F;AAC/F,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,cAAc,EAAE,mBAAmB,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;AAUlG,oGAAoG;AACpG,MAAM,CAAC,MAAM,uBAAuB,GAAkB;IACpD,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;CAuBP;IACC,MAAM,EAAE;;;CAGT;IACC,WAAW,EAAE;;;CAGd;IACC,aAAa,EAAE;;;;;CAKhB;CACA,CAAC;AAEF,4FAA4F;AAC5F,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC;AAC5C,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,qDAAqD,EAAE,CAAC;IACvG,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,IAAI,uHAAuH,EAAE,CAAC;IACvL,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,IAAI,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;AAChF,CAAC;AAED,iHAAiH;AACjH,SAAS,WAAW,CAAC,IAAY,EAAE,IAAY;IAC7C,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACvG,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,IAAI,8DAA8D,CAAC,CAAC;IAC1G,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,oHAAoH;AACpH,MAAM,UAAU,QAAQ,CAAC,QAAiC,EAAE,SAA0B;IACpF,MAAM,IAAI,GAAgB,QAAQ,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,cAAc,CAAC,EAAE,CAAC;IACjF,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChH,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,yEAAyE,CAAC,CAAC;IACjK,CAAC;IACD,MAAM,IAAI,GAAgB,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACxF,MAAM,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8GAA8G;AAC9G,MAAM,UAAU,iBAAiB,CAAC,QAA4B,EAAE,OAAe,EAAE,QAAQ,GAAG,WAAW;IACrG,MAAM,KAAK,GAAG,GAAG,WAAW,KAAK,OAAO,CAAC,IAAI,EAAE,KAAK,SAAS,IAAI,CAAC;IAClE,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IACnE,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,iBAAiB,WAAW,MAAM,SAAS,gDAAgD,CAAC,CAAC;IAC1H,CAAC;IACD,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzH,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC;AACvD,CAAC;AAWD;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAkB;IACxF,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IACpD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC/C,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;SAC9F,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;SAC3G,IAAI,KAAK,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;;QAC1G,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,2EAA2E,EAAE,CAAC,CAAC;IAEjJ,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,EAAE;QAC9C,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC,CAAC;;YACjG,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvH,KAAK,CAAC,aAAa,IAAI,UAAU,EAAE,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3E,KAAK,CAAC,aAAa,IAAI,YAAY,EAAE,gBAAgB,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IACjF,CAAC;IACD,KAAK,CAAC,qBAAqB,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAEpD,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjH,yFAAyF;IACzF,MAAM,gBAAgB,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAChG,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACzD,IAAI,MAAM,KAAK,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAC,CAAC;;YAClG,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"lanesInit.js","sourceRoot":"","sources":["../../src/core/lanesInit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ // `loop next`: what is open across lanes and what to pick. Pure.
2
+ import { activeClaim } from './parse/claim.js';
3
+ import { doneUnits, parseUnits } from './parse/task.js';
4
+ export function planNext(lanes, now = new Date()) {
5
+ const rows = lanes.map((lane) => {
6
+ const claim = activeClaim(lane.claimText, now);
7
+ const text = lane.taskText ?? '';
8
+ const done = doneUnits(text);
9
+ const open = lane.state === 'done' ? [] : parseUnits(text).filter((u) => !done.has(u.number));
10
+ return { name: lane.name, state: lane.state, ...(claim && { claim: { name: claim.name, expiresAt: claim.expiresAt.toISOString() } }), openUnits: open };
11
+ });
12
+ const pick = rows.find((r) => !r.claim && r.state !== 'done' && r.state !== 'blocked' && r.openUnits.length > 0);
13
+ const first = pick?.openUnits[0];
14
+ return { lanes: rows, ...(pick && first && { recommended: { lane: pick.name, unit: first } }) };
15
+ }
16
+ export function formatNext(report) {
17
+ const lines = [];
18
+ for (const lane of report.lanes) {
19
+ const tags = [lane.state, ...(lane.claim ? [`claimed by ${lane.claim.name} until ${lane.claim.expiresAt.slice(0, 16).replace('T', ' ')} UTC`] : [])];
20
+ lines.push(`${lane.name} (${tags.join(', ')})`);
21
+ if (lane.openUnits.length === 0)
22
+ lines.push(lane.state === 'done' ? ' done' : ' no open units listed');
23
+ for (const unit of lane.openUnits.slice(0, 3))
24
+ lines.push(` ${unit.number}. ${unit.text}`);
25
+ if (lane.openUnits.length > 3)
26
+ lines.push(` ... and ${lane.openUnits.length - 3} more`);
27
+ }
28
+ lines.push('');
29
+ lines.push(report.recommended
30
+ ? `Recommended: ${report.recommended.lane}, unit ${report.recommended.unit.number}. Take it with \`loop claim ${report.recommended.lane}\`, then \`loop run --lane ${report.recommended.lane}\`.`
31
+ : 'Nothing to recommend: every lane is done, blocked, claimed or has no open unit.');
32
+ return lines.join('\n');
33
+ }
34
+ //# sourceMappingURL=next.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next.js","sourceRoot":"","sources":["../../src/core/next.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ // CHANGELOG.md (Keep a Changelog) into releases. Pure and browser-safe.
2
+ const VERSION_HEADING = /^##\s+\[?([^\]\s]+)\]?(?:\s+[-–—]\s+(\d{4}-\d\d-\d\d))?\s*$/;
3
+ /** Releases newest first, as written in the file. Link reference lines (`[0.3.0]: https://...`) are ignored. */
4
+ export function parseChangelog(text) {
5
+ const releases = [];
6
+ let current;
7
+ let section;
8
+ for (const line of text.split(/\r?\n/)) {
9
+ const heading = VERSION_HEADING.exec(line);
10
+ if (heading) {
11
+ current = { version: heading[1], ...(heading[2] && { date: heading[2] }), sections: [], items: [] };
12
+ section = undefined;
13
+ releases.push(current);
14
+ continue;
15
+ }
16
+ if (!current)
17
+ continue;
18
+ const sub = /^###\s+(.+?)\s*$/.exec(line);
19
+ if (sub) {
20
+ section = { title: sub[1], items: [] };
21
+ current.sections.push(section);
22
+ continue;
23
+ }
24
+ const bullet = /^\s*[-*+]\s+(.+?)\s*$/.exec(line);
25
+ if (bullet) {
26
+ if (!section) {
27
+ section = { title: '', items: [] };
28
+ current.sections.push(section);
29
+ }
30
+ section.items.push(bullet[1]);
31
+ current.items.push(bullet[1]);
32
+ }
33
+ }
34
+ return releases;
35
+ }
36
+ /** The release for `version` (a leading `v` is ignored), or undefined. */
37
+ export function releaseFor(releases, version) {
38
+ const wanted = version.replace(/^v/, '');
39
+ return releases.find((r) => r.version.toLowerCase() === wanted.toLowerCase());
40
+ }
41
+ //# sourceMappingURL=changelog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changelog.js","sourceRoot":"","sources":["../../../src/core/parse/changelog.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAkBxE,MAAM,eAAe,GAAG,6DAA6D,CAAC;AAEtF,gHAAgH;AAChH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,IAAI,OAA4B,CAAC;IACjC,IAAI,OAAqC,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAW,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YAC9G,OAAO,GAAG,SAAS,CAAC;YACpB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAW,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YACjD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;gBACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAW,CAAC,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAW,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,UAAU,CAAC,QAA4B,EAAE,OAAe;IACtE,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;AAChF,CAAC"}
@@ -0,0 +1,24 @@
1
+ // Lane claims: `.ai/lanes/<lane>/claim` holds one line, `name · expires <UTC ISO>`. Pure.
2
+ const SEPARATOR = ' · ';
3
+ export function formatClaim(name, expiresAt) {
4
+ return `${name}${SEPARATOR}expires ${expiresAt.toISOString()}\n`;
5
+ }
6
+ /** Parses a claim file; undefined when it is empty or malformed (a malformed claim counts as none). */
7
+ export function parseClaim(text) {
8
+ const line = text.split(/\r?\n/).find((l) => l.trim() !== '')?.trim();
9
+ if (!line)
10
+ return undefined;
11
+ const match = /^(.+?)\s+·\s+expires\s+(\S+)$/.exec(line);
12
+ if (!match)
13
+ return undefined;
14
+ const expiresAt = new Date(match[2]);
15
+ if (Number.isNaN(expiresAt.getTime()))
16
+ return undefined;
17
+ return { name: match[1].trim(), expiresAt };
18
+ }
19
+ /** The claim if it is still in force at `now`; an expired or missing claim is no claim. */
20
+ export function activeClaim(text, now = new Date()) {
21
+ const claim = text === undefined ? undefined : parseClaim(text);
22
+ return claim && claim.expiresAt.getTime() > now.getTime() ? claim : undefined;
23
+ }
24
+ //# sourceMappingURL=claim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim.js","sourceRoot":"","sources":["../../../src/core/parse/claim.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAO1F,MAAM,SAAS,GAAG,KAAK,CAAC;AAExB,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,SAAe;IACvD,OAAO,GAAG,IAAI,GAAG,SAAS,WAAW,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC;AACnE,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;IACtE,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,MAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAW,CAAC,CAAC;IAC/C,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO,SAAS,CAAC;IACxD,OAAO,EAAE,IAAI,EAAG,KAAK,CAAC,CAAC,CAAY,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC;AAC1D,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,WAAW,CAAC,IAAwB,EAAE,GAAG,GAAS,IAAI,IAAI,EAAE;IAC1E,MAAM,KAAK,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAChE,OAAO,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAChF,CAAC"}
@@ -0,0 +1,38 @@
1
+ // The control room's notes (`.ai/control-room.md`) per lane, and which lane a commit belongs to. Pure and browser-safe.
2
+ import { parseLaneTrailer } from '../lanes.js';
3
+ import { parseOutbox } from '../laneStatus.js';
4
+ /**
5
+ * For each lane, the newest note addressed to it by name or to `all`. Lanes with no note are absent.
6
+ * Ties on the minute go to the line written first, because the file is newest first.
7
+ */
8
+ export function latestControlNotes(controlRoomMd, lanes) {
9
+ const notes = parseOutbox('control', controlRoomMd);
10
+ const result = {};
11
+ for (const lane of lanes) {
12
+ let best;
13
+ for (const note of notes) {
14
+ if (!note.to.includes(lane.toLowerCase()) && !note.to.includes('all'))
15
+ continue;
16
+ if (!best || note.at > best.at)
17
+ best = note;
18
+ }
19
+ if (best)
20
+ result[lane] = best;
21
+ }
22
+ return result;
23
+ }
24
+ /**
25
+ * The lane a commit belongs to: its `Lane:` trailer, else a `<lane>:` subject prefix, else `release` for a
26
+ * `Release x.y.z` subject, else `other`. Pass the lane names from `.ai/lanes.json`; `control` and `release` are always known.
27
+ */
28
+ export function commitLane(message, lanes) {
29
+ const trailer = parseLaneTrailer(message);
30
+ if (trailer)
31
+ return trailer;
32
+ const subject = message.split(/\r?\n/, 1)[0] ?? '';
33
+ if (/^release\s+v?\d/i.test(subject))
34
+ return 'release';
35
+ const prefix = /^([a-z][a-z0-9-]*)(?:\s+room)?:/i.exec(subject)?.[1]?.toLowerCase();
36
+ return prefix && [...lanes.map((l) => l.toLowerCase()), 'control', 'release'].includes(prefix) ? prefix : 'other';
37
+ }
38
+ //# sourceMappingURL=controlRoom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controlRoom.js","sourceRoot":"","sources":["../../../src/core/parse/controlRoom.ts"],"names":[],"mappings":"AAAA,wHAAwH;AACxH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AAEnE;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,aAAqB,EAAE,KAAwB;IAChF,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACpD,MAAM,MAAM,GAAkC,EAAE,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAA+B,CAAC;QACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS;YAChF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;gBAAE,IAAI,GAAG,IAAI,CAAC;QAC9C,CAAC;QACD,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAChC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,KAAwB;IAClE,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnD,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IACvD,MAAM,MAAM,GAAG,kCAAkC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;IACpF,OAAO,MAAM,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AACpH,CAAC"}
@@ -0,0 +1,17 @@
1
+ // Browser-safe parsers: nothing here (or in anything it imports) may use `node:` modules.
2
+ // Server and web import from this one entry point.
3
+ export { CONTROL_LANE, laneForPath, matchGlob, parseLaneTrailer, parseLanesConfig, validateLanesConfig } from '../lanes.js';
4
+ export { parseOutbox } from '../laneStatus.js';
5
+ export { doneUnits, openUnits, parseRunCounter, parseTaskFile, parseUnits, sectionOf } from './task.js';
6
+ export { parseStopMarkers } from './markers.js';
7
+ export { activeClaim, formatClaim, parseClaim } from './claim.js';
8
+ export { describePaused, formatPaused, isPaused, parsePaused, PAUSED_FILE } from './paused.js';
9
+ export { expectedSlots, formatRunEntry, matchSlots, missedInARow, parseRunLog, runLogPath } from './runs.js';
10
+ export { parseChangelog, releaseFor } from './changelog.js';
11
+ export { commitLane, latestControlNotes } from './controlRoom.js';
12
+ export { SCHEDULE_FILE, applyBackoff, dueEntry, emptySchedule, formatSchedule, isBackedOff, isDue, notDueReason, parseSchedule, parseUntil, trailingIdleRuns, wakeEntry, wakeReasons } from './schedule.js';
13
+ export { addSteerEntry, formatSteerEntry, parseSteer, standingEntries, steerHeading, steerOrder, steerPath, unacknowledged } from './steer.js';
14
+ export { RUN_WINDOW_MS, SILENCE_MS, classifyRunSlots, missedRun } from './outcomes.js';
15
+ export { buildDraftPrompt, draftClaudeArgs, extractOpenFindings, extractOutOfScope, nextRoundNumber } from '../draftBrief.js';
16
+ export { DEFAULT_PACE, PACES, PACE_SUMMARY, POLICY_FILE, emptyPolicy, formatPolicy, isPace, paceFor, parsePolicy, policyProblem, withPace } from './policy.js';
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/parse/index.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,mDAAmD;AAEnD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE5H,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAExG,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAElE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/F,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE7G,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5M,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/I,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEvF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE9H,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,20 @@
1
+ // DONE.md / BLOCKED.md detection from a plain list of repo-relative file paths. Pure.
2
+ import { normalizePath } from '../lanes.js';
3
+ export function parseStopMarkers(files) {
4
+ const markers = { rootDone: false, rootBlocked: false, paused: false, doneLanes: [], blockedLanes: [] };
5
+ for (const file of files.map(normalizePath)) {
6
+ if (file === 'DONE.md')
7
+ markers.rootDone = true;
8
+ else if (file === 'BLOCKED.md')
9
+ markers.rootBlocked = true;
10
+ else if (file === '.ai/PAUSED')
11
+ markers.paused = true;
12
+ else {
13
+ const match = /^\.ai\/lanes\/([^/]+)\/(DONE|BLOCKED)\.md$/.exec(file);
14
+ if (match)
15
+ (match[2] === 'DONE' ? markers.doneLanes : markers.blockedLanes).push(match[1]);
16
+ }
17
+ }
18
+ return markers;
19
+ }
20
+ //# sourceMappingURL=markers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markers.js","sourceRoot":"","sources":["../../../src/core/parse/markers.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAa5C,MAAM,UAAU,gBAAgB,CAAC,KAAwB;IACvD,MAAM,OAAO,GAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IACrH,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5C,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;aAC3C,IAAI,IAAI,KAAK,YAAY;YAAE,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;aACtD,IAAI,IAAI,KAAK,YAAY;YAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;aACjD,CAAC;YACJ,MAAM,KAAK,GAAG,4CAA4C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtE,IAAI,KAAK;gBAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAW,CAAC,CAAC;QACvG,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { expectedSlots, matchSlots } from './runs.js';
2
+ import { dueEntry, notDueReason } from './schedule.js';
3
+ export const RUN_WINDOW_MS = 50 * 60_000;
4
+ export const SILENCE_MS = 6 * 3_600_000;
5
+ function kindOf(slot, input, lane, entries) {
6
+ if (slot.entry)
7
+ return slot.outcome === 'tests-failed' ? 'tests-failed' : slot.outcome === 'pushed' || slot.entry.units.length > 0 ? 'worked' : 'idle';
8
+ if (slot.outcome === 'pushed')
9
+ return 'worked';
10
+ if (input.rootDone || input.laneDone.has(lane))
11
+ return 'done';
12
+ if (input.paused)
13
+ return 'paused';
14
+ const at = new Date(slot.slot);
15
+ const lastRun = entries.reduce((max, e) => Math.max(max, new Date(e.at).getTime()), 0);
16
+ // A later run proves the lane was due at this slot, whatever the schedule says today.
17
+ if (at.getTime() > lastRun) {
18
+ const entry = input.schedule.lanes[lane] ?? dueEntry();
19
+ const reason = notDueReason(entry, at);
20
+ if (reason)
21
+ return 'not-due';
22
+ }
23
+ return input.now.getTime() - at.getTime() < RUN_WINDOW_MS ? 'running' : 'missed';
24
+ }
25
+ /** Classifies every cron slot of every lane in the window. A lane without a cron has no expected slots. */
26
+ export function classifyRunSlots(input) {
27
+ const from = input.from ?? new Date(input.now.getTime() - 24 * 3_600_000);
28
+ const lanes = input.lanes.map(({ name, cron }) => {
29
+ const entries = input.runs.get(name) ?? [];
30
+ const matched = cron ? matchSlots(expectedSlots(cron, from, input.now), entries, input.commits?.get(name) ?? []) : [];
31
+ return { lane: name, slots: matched.map((s) => ({ ...s, kind: kindOf(s, input, name, entries) })) };
32
+ });
33
+ const newest = [...input.runs.values()].flat().reduce((max, e) => Math.max(max, new Date(e.at).getTime()), 0);
34
+ const silent = input.now.getTime() - newest >= SILENCE_MS;
35
+ const missed = lanes.some((l) => l.slots.some((s) => s.kind === 'missed'));
36
+ const routinesLookOff = !input.paused && !input.rootDone && silent && missed;
37
+ return { lanes, routinesLookOff };
38
+ }
39
+ /** Scheduled runs in a row, newest first, that were due and left no trace. Slots nobody expected a run for are skipped. */
40
+ export function missedRun(slots) {
41
+ let count = 0;
42
+ for (let i = slots.length - 1; i >= 0; i--) {
43
+ const kind = slots[i]?.kind;
44
+ if (kind === 'missed')
45
+ count++;
46
+ else if (kind !== 'not-due' && kind !== 'running')
47
+ break;
48
+ }
49
+ return count;
50
+ }
51
+ //# sourceMappingURL=outcomes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outcomes.js","sourceRoot":"","sources":["../../../src/core/parse/outcomes.ts"],"names":[],"mappings":"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"}