@attalabs/vinaya 0.4.3 → 0.4.5

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 (262) hide show
  1. package/aeg-root/enforcement.md +1 -1
  2. package/aeg-root/state-machine.md +1 -1
  3. package/dist/checks/bin/check-branch-topology.js +55 -33
  4. package/dist/checks/bin/check-brief-shape.js +61 -34
  5. package/dist/checks/bin/check-closes-n.js +55 -33
  6. package/dist/checks/bin/check-coherence.js +55 -33
  7. package/dist/checks/bin/check-dead-branch-push.js +55 -33
  8. package/dist/checks/bin/check-dispatch-readiness.js +55 -33
  9. package/dist/checks/bin/check-doc-coverage-push.js +232 -36
  10. package/dist/checks/bin/check-doc-coverage.js +232 -36
  11. package/dist/checks/bin/check-first-push-dispatch.js +55 -33
  12. package/dist/checks/bin/check-issue-assignment.js +55 -33
  13. package/dist/checks/bin/check-no-disk-state.js +55 -33
  14. package/dist/checks/bin/check-reader-resolvable-prose.js +55 -33
  15. package/dist/checks/bin/check-registry-gates.js +55 -33
  16. package/dist/checks/bin/check-review-gate.js +233 -38
  17. package/dist/checks/bin/check-single-plan-pr.js +55 -33
  18. package/dist/checks/bin/check-test-plan.js +55 -33
  19. package/dist/index.js +138 -42
  20. package/package.json +1 -1
  21. package/studio-standalone/.worktrees/fix/bump-0.4.4/.vinaya/projects.md +63 -0
  22. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/aeg-manual-flow.md +216 -0
  23. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/contracts/archivist-tranche-archivist.md +92 -0
  24. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/contracts/brief-developer.md +140 -0
  25. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/contracts/developer-reviewer.md +106 -0
  26. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/contracts/planner-brief.md +130 -0
  27. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/contracts/reviewer-archivist.md +96 -0
  28. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/contracts/tranche-archivist-planner.md +116 -0
  29. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/coordination.md +293 -0
  30. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/documentation-coherence.md +65 -0
  31. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/enforcement.md +161 -0
  32. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/glossary.md +36 -0
  33. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/process.md +371 -0
  34. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/reviewer-prompt.md +68 -0
  35. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/roles/archivist.md +167 -0
  36. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/roles/brief-author.md +108 -0
  37. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/roles/developer.md +429 -0
  38. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/roles/planner.md +285 -0
  39. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/roles/principal.md +107 -0
  40. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/roles/reviewer.md +130 -0
  41. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/roles/security.md +121 -0
  42. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/roles/tranche-archivist.md +257 -0
  43. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/skills/aeg/SKILL.md +90 -0
  44. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/skills/aeg-roles/SKILL.md +58 -0
  45. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/skills/brief-authoring/SKILL.md +497 -0
  46. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/state-machine.md +656 -0
  47. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/templates/brief-template.md +103 -0
  48. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/templates/issue-rationale-template.md +35 -0
  49. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/templates/pr-report-template.md +68 -0
  50. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranche-model.md +306 -0
  51. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/aeg-coherence-v1.md +55 -0
  52. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/aeg-coherence-v1.tokens.md +13 -0
  53. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/aeg-consolidation.md +28 -0
  54. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/aeg-governance-hardening.md +80 -0
  55. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/aeg-governance-ui-v2.md +168 -0
  56. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/aeg-governance-ui-v2.tokens.md +18 -0
  57. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/aeg-studio-cleanup.md +37 -0
  58. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/aeg-ui-v1.md +176 -0
  59. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/aeg-ui-v1.tokens.md +17 -0
  60. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/herald-agents-v2.md +35 -0
  61. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/herald-agents-v2.tokens.md +11 -0
  62. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/herald-onto-engine.md +99 -0
  63. package/studio-standalone/.worktrees/fix/bump-0.4.4/aeg-root/tranches/completed/vada-agents-v2.md +220 -0
  64. package/studio-standalone/.worktrees/fix/bump-0.4.4/apps/vinaya/cli/tests/fixtures/checks/vinaya.config.json +9 -0
  65. package/studio-standalone/.worktrees/fix/bump-0.4.4/node_modules/@attalabs/vinaya/tests/fixtures/checks/vinaya.config.json +9 -0
  66. package/studio-standalone/.worktrees/fix/bump-0.4.4/vinaya.config.json +36 -0
  67. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/.vinaya/projects.md +63 -0
  68. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/aeg-manual-flow.md +216 -0
  69. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/contracts/archivist-tranche-archivist.md +92 -0
  70. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/contracts/brief-developer.md +140 -0
  71. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/contracts/developer-reviewer.md +106 -0
  72. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/contracts/planner-brief.md +130 -0
  73. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/contracts/reviewer-archivist.md +96 -0
  74. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/contracts/tranche-archivist-planner.md +116 -0
  75. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/coordination.md +293 -0
  76. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/documentation-coherence.md +65 -0
  77. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/enforcement.md +161 -0
  78. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/glossary.md +36 -0
  79. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/process.md +371 -0
  80. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/reviewer-prompt.md +68 -0
  81. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/roles/archivist.md +167 -0
  82. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/roles/brief-author.md +108 -0
  83. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/roles/developer.md +429 -0
  84. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/roles/planner.md +285 -0
  85. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/roles/principal.md +107 -0
  86. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/roles/reviewer.md +130 -0
  87. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/roles/security.md +121 -0
  88. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/roles/tranche-archivist.md +257 -0
  89. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/skills/aeg/SKILL.md +90 -0
  90. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/skills/aeg-roles/SKILL.md +58 -0
  91. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/skills/brief-authoring/SKILL.md +497 -0
  92. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/state-machine.md +656 -0
  93. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/templates/brief-template.md +103 -0
  94. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/templates/issue-rationale-template.md +35 -0
  95. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/templates/pr-report-template.md +68 -0
  96. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranche-model.md +306 -0
  97. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/aeg-coherence-v1.md +55 -0
  98. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/aeg-coherence-v1.tokens.md +13 -0
  99. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/aeg-consolidation.md +28 -0
  100. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/aeg-governance-hardening.md +80 -0
  101. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/aeg-governance-ui-v2.md +168 -0
  102. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/aeg-governance-ui-v2.tokens.md +18 -0
  103. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/aeg-studio-cleanup.md +37 -0
  104. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/aeg-ui-v1.md +176 -0
  105. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/aeg-ui-v1.tokens.md +17 -0
  106. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/herald-agents-v2.md +35 -0
  107. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/herald-agents-v2.tokens.md +11 -0
  108. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/herald-onto-engine.md +99 -0
  109. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/aeg-root/tranches/completed/vada-agents-v2.md +220 -0
  110. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/apps/vinaya/cli/tests/fixtures/checks/vinaya.config.json +9 -0
  111. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/node_modules/@attalabs/vinaya/tests/fixtures/checks/vinaya.config.json +9 -0
  112. package/studio-standalone/.worktrees/fix/check-lifecycle-phase/vinaya.config.json +36 -0
  113. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/.vinaya/projects.md +63 -0
  114. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/aeg-manual-flow.md +216 -0
  115. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/contracts/archivist-tranche-archivist.md +92 -0
  116. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/contracts/brief-developer.md +140 -0
  117. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/contracts/developer-reviewer.md +106 -0
  118. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/contracts/planner-brief.md +130 -0
  119. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/contracts/reviewer-archivist.md +96 -0
  120. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/contracts/tranche-archivist-planner.md +116 -0
  121. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/coordination.md +293 -0
  122. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/documentation-coherence.md +65 -0
  123. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/enforcement.md +161 -0
  124. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/glossary.md +36 -0
  125. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/process.md +371 -0
  126. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/reviewer-prompt.md +68 -0
  127. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/roles/archivist.md +167 -0
  128. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/roles/brief-author.md +108 -0
  129. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/roles/developer.md +429 -0
  130. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/roles/planner.md +285 -0
  131. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/roles/principal.md +107 -0
  132. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/roles/reviewer.md +130 -0
  133. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/roles/security.md +121 -0
  134. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/roles/tranche-archivist.md +257 -0
  135. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/skills/aeg/SKILL.md +90 -0
  136. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/skills/aeg-roles/SKILL.md +58 -0
  137. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/skills/brief-authoring/SKILL.md +497 -0
  138. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/state-machine.md +656 -0
  139. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/templates/brief-template.md +103 -0
  140. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/templates/issue-rationale-template.md +35 -0
  141. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/templates/pr-report-template.md +68 -0
  142. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranche-model.md +306 -0
  143. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/aeg-coherence-v1.md +55 -0
  144. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/aeg-coherence-v1.tokens.md +13 -0
  145. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/aeg-consolidation.md +28 -0
  146. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/aeg-governance-hardening.md +80 -0
  147. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/aeg-governance-ui-v2.md +168 -0
  148. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/aeg-governance-ui-v2.tokens.md +18 -0
  149. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/aeg-studio-cleanup.md +37 -0
  150. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/aeg-ui-v1.md +176 -0
  151. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/aeg-ui-v1.tokens.md +17 -0
  152. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/herald-agents-v2.md +35 -0
  153. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/herald-agents-v2.tokens.md +11 -0
  154. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/herald-onto-engine.md +99 -0
  155. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/aeg-root/tranches/completed/vada-agents-v2.md +220 -0
  156. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/apps/vinaya/cli/tests/fixtures/checks/vinaya.config.json +9 -0
  157. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/node_modules/@attalabs/vinaya/tests/fixtures/checks/vinaya.config.json +9 -0
  158. package/studio-standalone/.worktrees/fix/vinaya-cli-noconsole/vinaya.config.json +36 -0
  159. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/.vinaya/projects.md +63 -0
  160. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/aeg-manual-flow.md +216 -0
  161. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/contracts/archivist-tranche-archivist.md +92 -0
  162. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/contracts/brief-developer.md +140 -0
  163. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/contracts/developer-reviewer.md +106 -0
  164. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/contracts/planner-brief.md +130 -0
  165. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/contracts/reviewer-archivist.md +96 -0
  166. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/contracts/tranche-archivist-planner.md +116 -0
  167. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/coordination.md +293 -0
  168. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/documentation-coherence.md +65 -0
  169. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/enforcement.md +161 -0
  170. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/glossary.md +36 -0
  171. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/process.md +371 -0
  172. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/reviewer-prompt.md +68 -0
  173. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/roles/archivist.md +167 -0
  174. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/roles/brief-author.md +108 -0
  175. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/roles/developer.md +429 -0
  176. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/roles/planner.md +285 -0
  177. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/roles/principal.md +107 -0
  178. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/roles/reviewer.md +130 -0
  179. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/roles/security.md +121 -0
  180. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/roles/tranche-archivist.md +257 -0
  181. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/skills/aeg/SKILL.md +90 -0
  182. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/skills/aeg-roles/SKILL.md +58 -0
  183. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/skills/brief-authoring/SKILL.md +497 -0
  184. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/state-machine.md +656 -0
  185. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/templates/brief-template.md +103 -0
  186. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/templates/issue-rationale-template.md +35 -0
  187. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/templates/pr-report-template.md +68 -0
  188. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranche-model.md +306 -0
  189. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/aeg-coherence-v1.md +55 -0
  190. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/aeg-coherence-v1.tokens.md +13 -0
  191. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/aeg-consolidation.md +28 -0
  192. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/aeg-governance-hardening.md +80 -0
  193. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/aeg-governance-ui-v2.md +168 -0
  194. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/aeg-governance-ui-v2.tokens.md +18 -0
  195. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/aeg-studio-cleanup.md +37 -0
  196. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/aeg-ui-v1.md +176 -0
  197. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/aeg-ui-v1.tokens.md +17 -0
  198. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/herald-agents-v2.md +35 -0
  199. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/herald-agents-v2.tokens.md +11 -0
  200. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/herald-onto-engine.md +99 -0
  201. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/aeg-root/tranches/completed/vada-agents-v2.md +220 -0
  202. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/apps/vinaya/cli/tests/fixtures/checks/vinaya.config.json +9 -0
  203. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/node_modules/@attalabs/vinaya/tests/fixtures/checks/vinaya.config.json +9 -0
  204. package/studio-standalone/.worktrees/task/vinaya-adopter-ci-hotfix-v1/1/vinaya.config.json +36 -0
  205. package/studio-standalone/_node_modules/@atta/vinaya-cli/aeg-root/enforcement.md +1 -1
  206. package/studio-standalone/_node_modules/@atta/vinaya-cli/aeg-root/state-machine.md +1 -1
  207. package/studio-standalone/_node_modules/@attalabs/vinaya/aeg-root/enforcement.md +1 -1
  208. package/studio-standalone/_node_modules/@attalabs/vinaya/aeg-root/state-machine.md +1 -1
  209. package/studio-standalone/apps/vinaya/cli/aeg-root/enforcement.md +1 -1
  210. package/studio-standalone/apps/vinaya/cli/aeg-root/state-machine.md +1 -1
  211. package/studio-standalone/apps/vinaya/web/.next/BUILD_ID +1 -1
  212. package/studio-standalone/apps/vinaya/web/.next/build-manifest.json +3 -3
  213. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/cli/page.js.nft.json +1 -1
  214. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/config/page.js.nft.json +1 -1
  215. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/docs/(standalone)/cli/page.js.nft.json +1 -1
  216. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/docs/(standalone)/harness/page.js.nft.json +1 -1
  217. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/docs/(standalone)/state-machine/page.js.nft.json +1 -1
  218. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/docs/(with-sidebar)/[...slug]/page.js.nft.json +1 -1
  219. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/docs/(with-sidebar)/reference/page.js.nft.json +1 -1
  220. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/docs/page.js.nft.json +1 -1
  221. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/install/page.js.nft.json +1 -1
  222. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/page.js.nft.json +1 -1
  223. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/roadmap/page.js.nft.json +1 -1
  224. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/start/archive/page.js.nft.json +1 -1
  225. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/start/brief/page.js.nft.json +1 -1
  226. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/start/develop/page.js.nft.json +1 -1
  227. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/start/overview/page.js.nft.json +1 -1
  228. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/start/page.js.nft.json +1 -1
  229. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/start/plan/page.js.nft.json +1 -1
  230. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/start/quick/page.js.nft.json +1 -1
  231. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/start/review/page.js.nft.json +1 -1
  232. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/start/security/page.js.nft.json +1 -1
  233. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/start/wrap-up/page.js.nft.json +1 -1
  234. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/state-machine/page.js.nft.json +1 -1
  235. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/the-harness/page.js.nft.json +1 -1
  236. package/studio-standalone/apps/vinaya/web/.next/server/app/(site)/the-studio/page.js.nft.json +1 -1
  237. package/studio-standalone/apps/vinaya/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  238. package/studio-standalone/apps/vinaya/web/.next/server/app/_global-error.html +1 -1
  239. package/studio-standalone/apps/vinaya/web/.next/server/app/_global-error.rsc +1 -1
  240. package/studio-standalone/apps/vinaya/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  241. package/studio-standalone/apps/vinaya/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  242. package/studio-standalone/apps/vinaya/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  243. package/studio-standalone/apps/vinaya/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  244. package/studio-standalone/apps/vinaya/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  245. package/studio-standalone/apps/vinaya/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  246. package/studio-standalone/apps/vinaya/web/.next/server/app/api/coherence/route.js.nft.json +1 -1
  247. package/studio-standalone/apps/vinaya/web/.next/server/app/studio/backlog/page.js.nft.json +1 -1
  248. package/studio-standalone/apps/vinaya/web/.next/server/app/studio/docs/[...slug]/page.js.nft.json +1 -1
  249. package/studio-standalone/apps/vinaya/web/.next/server/app/studio/docs/page.js.nft.json +1 -1
  250. package/studio-standalone/apps/vinaya/web/.next/server/app/studio/page.js.nft.json +1 -1
  251. package/studio-standalone/apps/vinaya/web/.next/server/app/studio/projects/[name]/page.js.nft.json +1 -1
  252. package/studio-standalone/apps/vinaya/web/.next/server/app/studio/projects/[name]/tranches/[slug]/page.js.nft.json +1 -1
  253. package/studio-standalone/apps/vinaya/web/.next/server/app/studio/projects/[name]/tranches/[slug]/tasks/[taskId]/page.js.nft.json +1 -1
  254. package/studio-standalone/apps/vinaya/web/.next/server/app/studio/projects/page.js.nft.json +1 -1
  255. package/studio-standalone/apps/vinaya/web/.next/server/app/studio/tranches/page.js.nft.json +1 -1
  256. package/studio-standalone/apps/vinaya/web/.next/server/chunks/ssr/[root-of-the-server]__0kqmrho._.js +1 -1
  257. package/studio-standalone/apps/vinaya/web/.next/server/chunks/ssr/[root-of-the-server]__1dxaovd._.js +2 -2
  258. package/studio-standalone/apps/vinaya/web/.next/server/middleware-build-manifest.js +3 -3
  259. package/studio-standalone/apps/vinaya/web/.next/server/pages/500.html +1 -1
  260. /package/studio-standalone/apps/vinaya/web/.next/static/{Afs41Lu9uNQ-T6uC-tm4_ → LixrFgIixvAYndTclqOnR}/_buildManifest.js +0 -0
  261. /package/studio-standalone/apps/vinaya/web/.next/static/{Afs41Lu9uNQ-T6uC-tm4_ → LixrFgIixvAYndTclqOnR}/_clientMiddlewareManifest.js +0 -0
  262. /package/studio-standalone/apps/vinaya/web/.next/static/{Afs41Lu9uNQ-T6uC-tm4_ → LixrFgIixvAYndTclqOnR}/_ssgManifest.js +0 -0
@@ -1452,12 +1452,16 @@ function isCodeFile(p) {
1452
1452
  var WAIVER_LABEL = label("waiver-docs");
1453
1453
  var WAIVER_LABEL_REVIEW = label("waiver-review");
1454
1454
  var PRINCIPAL_ALLOWLIST = ["daniboomerang"];
1455
+ function isPrincipal(login, principalAllowlist) {
1456
+ if (login === null)
1457
+ return false;
1458
+ const normalized = login.toLowerCase();
1459
+ return principalAllowlist.some((p) => p.toLowerCase() === normalized);
1460
+ }
1455
1461
  function isWaiverLabelActorVerified(opts) {
1456
1462
  if (!opts.labels.includes(opts.label))
1457
1463
  return false;
1458
- if (opts.labelActor === null)
1459
- return false;
1460
- return opts.principalAllowlist.includes(opts.labelActor);
1464
+ return isPrincipal(opts.labelActor, opts.principalAllowlist);
1461
1465
  }
1462
1466
 
1463
1467
  // ../../../packages/aeg-core/src/doc-owners.ts
@@ -1645,6 +1649,27 @@ function overrideActive(opts) {
1645
1649
  // ../../../packages/aeg-core/src/premise-check.ts
1646
1650
  var ASSERTION_KINDS = new Set(["contains", "absent", "sha256"]);
1647
1651
 
1652
+ // ../../../packages/aeg-core/src/test-plan-section.ts
1653
+ var HEADING_FORM_RE = /^#{1,4}[ \t]*(?:\d+[a-z]?\.[ \t]*)?\*{0,2}Test Plan\*{0,2}[ \t]*$/im;
1654
+ var INLINE_FORM_RE = /^[ \t]*\*{0,2}Test Plan:?\*{0,2}/im;
1655
+ var NEXT_SECTION_RE = /\n(?:#{1,3}[ \t]|\*\*[A-Z][^*\n]*:\*\*)/;
1656
+ function locateTestPlanSection(body) {
1657
+ const region = anchoredRegion(body, "TEST-PLAN");
1658
+ if (region !== null)
1659
+ return { found: true, section: region };
1660
+ const headingMatch = HEADING_FORM_RE.exec(body);
1661
+ const match = headingMatch ?? INLINE_FORM_RE.exec(body);
1662
+ if (!match || match.index === undefined)
1663
+ return { found: false };
1664
+ const sectionBody = body.slice(match.index);
1665
+ const firstLineEnd = sectionBody.indexOf(`
1666
+ `);
1667
+ const searchFrom = firstLineEnd === -1 ? sectionBody.length : firstLineEnd + 1;
1668
+ const nextMatch = sectionBody.slice(searchFrom).match(NEXT_SECTION_RE);
1669
+ const sectionEnd = nextMatch ? searchFrom + (nextMatch.index ?? 0) : sectionBody.length;
1670
+ return { found: true, section: sectionBody.slice(0, sectionEnd) };
1671
+ }
1672
+
1648
1673
  // ../../../packages/aeg-core/src/brief-validation.ts
1649
1674
  function headerRegion(prBody) {
1650
1675
  const m = prBody.match(/^##\s/m);
@@ -1683,10 +1708,15 @@ function checkTierField(prBody, readTier) {
1683
1708
  };
1684
1709
  }
1685
1710
  var TEST_PLAN_UNIT_TESTS_ONLY_RE = /(?:\*\*)?Test Plan(?:\*\*)?\s*:\s*(?:\*\*)?\s*unit-tests-only/i;
1711
+ function testPlanRegion(prBody) {
1712
+ const located = locateTestPlanSection(prBody);
1713
+ return located.found ? located.section : prBody;
1714
+ }
1686
1715
  function checkTestPlan(prBody) {
1687
- if (TEST_PLAN_UNIT_TESTS_ONLY_RE.test(prBody))
1716
+ const region = testPlanRegion(prBody);
1717
+ if (TEST_PLAN_UNIT_TESTS_ONLY_RE.test(region))
1688
1718
  return { status: "pass", errors: [] };
1689
- if (/\*\*\[(?:agent|principal)\]\*\*/.test(prBody))
1719
+ if (/\*\*\[(?:agent|principal)\]\*\*/.test(region))
1690
1720
  return { status: "pass", errors: [] };
1691
1721
  return {
1692
1722
  status: "fail",
@@ -1696,9 +1726,10 @@ function checkTestPlan(prBody) {
1696
1726
  };
1697
1727
  }
1698
1728
  function checkTestPlanExclusivity(prBody) {
1699
- if (!TEST_PLAN_UNIT_TESTS_ONLY_RE.test(prBody))
1729
+ const region = testPlanRegion(prBody);
1730
+ if (!TEST_PLAN_UNIT_TESTS_ONLY_RE.test(region))
1700
1731
  return { status: "pass", errors: [] };
1701
- if (/^-\s*\[[ xX]\]\s*\*{2}\[(?:agent|principal)\]\*{2}/im.test(prBody)) {
1732
+ if (/^-\s*\[[ xX]\]\s*\*{2}\[(?:agent|principal)\]\*{2}/im.test(region)) {
1702
1733
  return {
1703
1734
  status: "fail",
1704
1735
  errors: [
@@ -1709,8 +1740,9 @@ function checkTestPlanExclusivity(prBody) {
1709
1740
  return { status: "pass", errors: [] };
1710
1741
  }
1711
1742
  function checkPrincipalPlaceholder(prBody) {
1743
+ const region = testPlanRegion(prBody);
1712
1744
  const lineRe = /^-\s*\[[ xX]\]\s*\*{2}\[principal\]\*{2}(.*)$/gim;
1713
- for (const m of prBody.matchAll(lineRe)) {
1745
+ for (const m of region.matchAll(lineRe)) {
1714
1746
  const content = m[1] ?? "";
1715
1747
  if (/^\s*None\b/i.test(content)) {
1716
1748
  return {
@@ -1789,6 +1821,15 @@ function checkClosesN(prBody) {
1789
1821
  errors: ["brief-validation Closes #N: no `Closes #<N>` (or Fixes/Resolves) reference found in the PR body."]
1790
1822
  };
1791
1823
  }
1824
+ var BRIEF_SHAPE_MARKERS = [checkSurfaceMap, checkDocUpdateList, checkStopConditions, checkAutonomyClause];
1825
+ var TASK_BRANCH_PATTERN = /^task\/[^/]+\/[^/]+$/;
1826
+ function isTaskBranch(branch) {
1827
+ return TASK_BRANCH_PATTERN.test(branch);
1828
+ }
1829
+ function isBriefShaped(prBody) {
1830
+ const stripped = stripCode(prBody);
1831
+ return BRIEF_SHAPE_MARKERS.filter((check) => check(stripped).status === "pass").length >= 2;
1832
+ }
1792
1833
  function checkBriefSections(prBody, readTier, options = {}) {
1793
1834
  const { requireClosesN = true } = options;
1794
1835
  const results = [
@@ -2158,11 +2199,12 @@ function isReviewGateExemptBranch(branch) {
2158
2199
  return branch.startsWith("plan/");
2159
2200
  }
2160
2201
  function checkReviewGate(input) {
2202
+ const principalAllowlist = input.principalAllowlist ?? PRINCIPAL_ALLOWLIST;
2161
2203
  const waived = isWaiverLabelActorVerified({
2162
2204
  label: WAIVER_LABEL_REVIEW,
2163
2205
  labels: input.labels,
2164
2206
  labelActor: input.waiverLabelActor,
2165
- principalAllowlist: PRINCIPAL_ALLOWLIST
2207
+ principalAllowlist
2166
2208
  });
2167
2209
  if (waived) {
2168
2210
  return {
@@ -2171,8 +2213,8 @@ function checkReviewGate(input) {
2171
2213
  waived: true
2172
2214
  };
2173
2215
  }
2174
- const verified = input.comments.filter((c) => c.author !== null && PRINCIPAL_ALLOWLIST.includes(c.author));
2175
- const ignoredCount = input.comments.filter((c) => (c.author === null || !PRINCIPAL_ALLOWLIST.includes(c.author)) && c.body.includes("VERDICT")).length;
2216
+ const verified = input.comments.filter((c) => isPrincipal(c.author, principalAllowlist));
2217
+ const ignoredCount = input.comments.filter((c) => !isPrincipal(c.author, principalAllowlist) && c.body.includes("VERDICT")).length;
2176
2218
  const verifiedBodies = verified.map((c) => c.body);
2177
2219
  const codeReview = extractCodeReviewVerdict(verifiedBodies);
2178
2220
  const security = extractSecurityReviewVerdict(verifiedBodies);
@@ -2725,28 +2767,8 @@ function decideIssueAssignment(input) {
2725
2767
  reason: `First push of \`${branch}\` — assigning Issue #${issue} to @${login} (the authenticated pusher).`
2726
2768
  };
2727
2769
  }
2728
- // ../../../packages/aeg-core/src/test-plan-section.ts
2729
- var HEADING_FORM_RE = /^#{1,4}[ \t]*(?:\d+[a-z]?\.[ \t]*)?\*{0,2}Test Plan\*{0,2}[ \t]*$/im;
2730
- var INLINE_FORM_RE = /^[ \t]*\*{0,2}Test Plan:?\*{0,2}/im;
2731
- var NEXT_SECTION_RE = /\n(?:#{1,3}[ \t]|\*\*[A-Z][^*\n]*:\*\*)/;
2732
- function locateTestPlanSection(body) {
2733
- const region = anchoredRegion(body, "TEST-PLAN");
2734
- if (region !== null)
2735
- return { found: true, section: region };
2736
- const headingMatch = HEADING_FORM_RE.exec(body);
2737
- const match = headingMatch ?? INLINE_FORM_RE.exec(body);
2738
- if (!match || match.index === undefined)
2739
- return { found: false };
2740
- const sectionBody = body.slice(match.index);
2741
- const firstLineEnd = sectionBody.indexOf(`
2742
- `);
2743
- const searchFrom = firstLineEnd === -1 ? sectionBody.length : firstLineEnd + 1;
2744
- const nextMatch = sectionBody.slice(searchFrom).match(NEXT_SECTION_RE);
2745
- const sectionEnd = nextMatch ? searchFrom + (nextMatch.index ?? 0) : sectionBody.length;
2746
- return { found: true, section: sectionBody.slice(0, sectionEnd) };
2747
- }
2748
2770
  // ../../../packages/aeg-core/src/test-plan-gate.ts
2749
- var TASK_BRANCH_PATTERN = /^task\/[^/]+\/[^/]+$/;
2771
+ var TASK_BRANCH_PATTERN2 = /^task\/[^/]+\/[^/]+$/;
2750
2772
  function evaluateTestPlanGate(body, branch) {
2751
2773
  if (!body) {
2752
2774
  return {
@@ -2759,7 +2781,7 @@ function evaluateTestPlanGate(body, branch) {
2759
2781
  }
2760
2782
  const located = locateTestPlanSection(body);
2761
2783
  if (!located.found) {
2762
- if (TASK_BRANCH_PATTERN.test(branch)) {
2784
+ if (TASK_BRANCH_PATTERN2.test(branch)) {
2763
2785
  return {
2764
2786
  verdict: "fail",
2765
2787
  messages: [
@@ -1451,12 +1451,16 @@ function isCodeFile(p) {
1451
1451
  var WAIVER_LABEL = label("waiver-docs");
1452
1452
  var WAIVER_LABEL_REVIEW = label("waiver-review");
1453
1453
  var PRINCIPAL_ALLOWLIST = ["daniboomerang"];
1454
+ function isPrincipal(login, principalAllowlist) {
1455
+ if (login === null)
1456
+ return false;
1457
+ const normalized = login.toLowerCase();
1458
+ return principalAllowlist.some((p) => p.toLowerCase() === normalized);
1459
+ }
1454
1460
  function isWaiverLabelActorVerified(opts) {
1455
1461
  if (!opts.labels.includes(opts.label))
1456
1462
  return false;
1457
- if (opts.labelActor === null)
1458
- return false;
1459
- return opts.principalAllowlist.includes(opts.labelActor);
1463
+ return isPrincipal(opts.labelActor, opts.principalAllowlist);
1460
1464
  }
1461
1465
 
1462
1466
  // ../../../packages/aeg-core/src/doc-owners.ts
@@ -1644,6 +1648,27 @@ function overrideActive(opts) {
1644
1648
  // ../../../packages/aeg-core/src/premise-check.ts
1645
1649
  var ASSERTION_KINDS = new Set(["contains", "absent", "sha256"]);
1646
1650
 
1651
+ // ../../../packages/aeg-core/src/test-plan-section.ts
1652
+ var HEADING_FORM_RE = /^#{1,4}[ \t]*(?:\d+[a-z]?\.[ \t]*)?\*{0,2}Test Plan\*{0,2}[ \t]*$/im;
1653
+ var INLINE_FORM_RE = /^[ \t]*\*{0,2}Test Plan:?\*{0,2}/im;
1654
+ var NEXT_SECTION_RE = /\n(?:#{1,3}[ \t]|\*\*[A-Z][^*\n]*:\*\*)/;
1655
+ function locateTestPlanSection(body) {
1656
+ const region = anchoredRegion(body, "TEST-PLAN");
1657
+ if (region !== null)
1658
+ return { found: true, section: region };
1659
+ const headingMatch = HEADING_FORM_RE.exec(body);
1660
+ const match = headingMatch ?? INLINE_FORM_RE.exec(body);
1661
+ if (!match || match.index === undefined)
1662
+ return { found: false };
1663
+ const sectionBody = body.slice(match.index);
1664
+ const firstLineEnd = sectionBody.indexOf(`
1665
+ `);
1666
+ const searchFrom = firstLineEnd === -1 ? sectionBody.length : firstLineEnd + 1;
1667
+ const nextMatch = sectionBody.slice(searchFrom).match(NEXT_SECTION_RE);
1668
+ const sectionEnd = nextMatch ? searchFrom + (nextMatch.index ?? 0) : sectionBody.length;
1669
+ return { found: true, section: sectionBody.slice(0, sectionEnd) };
1670
+ }
1671
+
1647
1672
  // ../../../packages/aeg-core/src/brief-validation.ts
1648
1673
  function headerRegion(prBody) {
1649
1674
  const m = prBody.match(/^##\s/m);
@@ -1682,10 +1707,15 @@ function checkTierField(prBody, readTier) {
1682
1707
  };
1683
1708
  }
1684
1709
  var TEST_PLAN_UNIT_TESTS_ONLY_RE = /(?:\*\*)?Test Plan(?:\*\*)?\s*:\s*(?:\*\*)?\s*unit-tests-only/i;
1710
+ function testPlanRegion(prBody) {
1711
+ const located = locateTestPlanSection(prBody);
1712
+ return located.found ? located.section : prBody;
1713
+ }
1685
1714
  function checkTestPlan(prBody) {
1686
- if (TEST_PLAN_UNIT_TESTS_ONLY_RE.test(prBody))
1715
+ const region = testPlanRegion(prBody);
1716
+ if (TEST_PLAN_UNIT_TESTS_ONLY_RE.test(region))
1687
1717
  return { status: "pass", errors: [] };
1688
- if (/\*\*\[(?:agent|principal)\]\*\*/.test(prBody))
1718
+ if (/\*\*\[(?:agent|principal)\]\*\*/.test(region))
1689
1719
  return { status: "pass", errors: [] };
1690
1720
  return {
1691
1721
  status: "fail",
@@ -1695,9 +1725,10 @@ function checkTestPlan(prBody) {
1695
1725
  };
1696
1726
  }
1697
1727
  function checkTestPlanExclusivity(prBody) {
1698
- if (!TEST_PLAN_UNIT_TESTS_ONLY_RE.test(prBody))
1728
+ const region = testPlanRegion(prBody);
1729
+ if (!TEST_PLAN_UNIT_TESTS_ONLY_RE.test(region))
1699
1730
  return { status: "pass", errors: [] };
1700
- if (/^-\s*\[[ xX]\]\s*\*{2}\[(?:agent|principal)\]\*{2}/im.test(prBody)) {
1731
+ if (/^-\s*\[[ xX]\]\s*\*{2}\[(?:agent|principal)\]\*{2}/im.test(region)) {
1701
1732
  return {
1702
1733
  status: "fail",
1703
1734
  errors: [
@@ -1708,8 +1739,9 @@ function checkTestPlanExclusivity(prBody) {
1708
1739
  return { status: "pass", errors: [] };
1709
1740
  }
1710
1741
  function checkPrincipalPlaceholder(prBody) {
1742
+ const region = testPlanRegion(prBody);
1711
1743
  const lineRe = /^-\s*\[[ xX]\]\s*\*{2}\[principal\]\*{2}(.*)$/gim;
1712
- for (const m of prBody.matchAll(lineRe)) {
1744
+ for (const m of region.matchAll(lineRe)) {
1713
1745
  const content = m[1] ?? "";
1714
1746
  if (/^\s*None\b/i.test(content)) {
1715
1747
  return {
@@ -1788,6 +1820,15 @@ function checkClosesN(prBody) {
1788
1820
  errors: ["brief-validation Closes #N: no `Closes #<N>` (or Fixes/Resolves) reference found in the PR body."]
1789
1821
  };
1790
1822
  }
1823
+ var BRIEF_SHAPE_MARKERS = [checkSurfaceMap, checkDocUpdateList, checkStopConditions, checkAutonomyClause];
1824
+ var TASK_BRANCH_PATTERN = /^task\/[^/]+\/[^/]+$/;
1825
+ function isTaskBranch(branch) {
1826
+ return TASK_BRANCH_PATTERN.test(branch);
1827
+ }
1828
+ function isBriefShaped(prBody) {
1829
+ const stripped = stripCode(prBody);
1830
+ return BRIEF_SHAPE_MARKERS.filter((check) => check(stripped).status === "pass").length >= 2;
1831
+ }
1791
1832
  function checkBriefSections(prBody, readTier, options = {}) {
1792
1833
  const { requireClosesN = true } = options;
1793
1834
  const results = [
@@ -2157,11 +2198,12 @@ function isReviewGateExemptBranch(branch) {
2157
2198
  return branch.startsWith("plan/");
2158
2199
  }
2159
2200
  function checkReviewGate(input) {
2201
+ const principalAllowlist = input.principalAllowlist ?? PRINCIPAL_ALLOWLIST;
2160
2202
  const waived = isWaiverLabelActorVerified({
2161
2203
  label: WAIVER_LABEL_REVIEW,
2162
2204
  labels: input.labels,
2163
2205
  labelActor: input.waiverLabelActor,
2164
- principalAllowlist: PRINCIPAL_ALLOWLIST
2206
+ principalAllowlist
2165
2207
  });
2166
2208
  if (waived) {
2167
2209
  return {
@@ -2170,8 +2212,8 @@ function checkReviewGate(input) {
2170
2212
  waived: true
2171
2213
  };
2172
2214
  }
2173
- const verified = input.comments.filter((c) => c.author !== null && PRINCIPAL_ALLOWLIST.includes(c.author));
2174
- const ignoredCount = input.comments.filter((c) => (c.author === null || !PRINCIPAL_ALLOWLIST.includes(c.author)) && c.body.includes("VERDICT")).length;
2215
+ const verified = input.comments.filter((c) => isPrincipal(c.author, principalAllowlist));
2216
+ const ignoredCount = input.comments.filter((c) => !isPrincipal(c.author, principalAllowlist) && c.body.includes("VERDICT")).length;
2175
2217
  const verifiedBodies = verified.map((c) => c.body);
2176
2218
  const codeReview = extractCodeReviewVerdict(verifiedBodies);
2177
2219
  const security = extractSecurityReviewVerdict(verifiedBodies);
@@ -2724,28 +2766,8 @@ function decideIssueAssignment(input) {
2724
2766
  reason: `First push of \`${branch}\` — assigning Issue #${issue} to @${login} (the authenticated pusher).`
2725
2767
  };
2726
2768
  }
2727
- // ../../../packages/aeg-core/src/test-plan-section.ts
2728
- var HEADING_FORM_RE = /^#{1,4}[ \t]*(?:\d+[a-z]?\.[ \t]*)?\*{0,2}Test Plan\*{0,2}[ \t]*$/im;
2729
- var INLINE_FORM_RE = /^[ \t]*\*{0,2}Test Plan:?\*{0,2}/im;
2730
- var NEXT_SECTION_RE = /\n(?:#{1,3}[ \t]|\*\*[A-Z][^*\n]*:\*\*)/;
2731
- function locateTestPlanSection(body) {
2732
- const region = anchoredRegion(body, "TEST-PLAN");
2733
- if (region !== null)
2734
- return { found: true, section: region };
2735
- const headingMatch = HEADING_FORM_RE.exec(body);
2736
- const match = headingMatch ?? INLINE_FORM_RE.exec(body);
2737
- if (!match || match.index === undefined)
2738
- return { found: false };
2739
- const sectionBody = body.slice(match.index);
2740
- const firstLineEnd = sectionBody.indexOf(`
2741
- `);
2742
- const searchFrom = firstLineEnd === -1 ? sectionBody.length : firstLineEnd + 1;
2743
- const nextMatch = sectionBody.slice(searchFrom).match(NEXT_SECTION_RE);
2744
- const sectionEnd = nextMatch ? searchFrom + (nextMatch.index ?? 0) : sectionBody.length;
2745
- return { found: true, section: sectionBody.slice(0, sectionEnd) };
2746
- }
2747
2769
  // ../../../packages/aeg-core/src/test-plan-gate.ts
2748
- var TASK_BRANCH_PATTERN = /^task\/[^/]+\/[^/]+$/;
2770
+ var TASK_BRANCH_PATTERN2 = /^task\/[^/]+\/[^/]+$/;
2749
2771
  function evaluateTestPlanGate(body, branch) {
2750
2772
  if (!body) {
2751
2773
  return {
@@ -2758,7 +2780,7 @@ function evaluateTestPlanGate(body, branch) {
2758
2780
  }
2759
2781
  const located = locateTestPlanSection(body);
2760
2782
  if (!located.found) {
2761
- if (TASK_BRANCH_PATTERN.test(branch)) {
2783
+ if (TASK_BRANCH_PATTERN2.test(branch)) {
2762
2784
  return {
2763
2785
  verdict: "fail",
2764
2786
  messages: [
@@ -1452,12 +1452,16 @@ function isCodeFile(p) {
1452
1452
  var WAIVER_LABEL = label("waiver-docs");
1453
1453
  var WAIVER_LABEL_REVIEW = label("waiver-review");
1454
1454
  var PRINCIPAL_ALLOWLIST = ["daniboomerang"];
1455
+ function isPrincipal(login, principalAllowlist) {
1456
+ if (login === null)
1457
+ return false;
1458
+ const normalized = login.toLowerCase();
1459
+ return principalAllowlist.some((p) => p.toLowerCase() === normalized);
1460
+ }
1455
1461
  function isWaiverLabelActorVerified(opts) {
1456
1462
  if (!opts.labels.includes(opts.label))
1457
1463
  return false;
1458
- if (opts.labelActor === null)
1459
- return false;
1460
- return opts.principalAllowlist.includes(opts.labelActor);
1464
+ return isPrincipal(opts.labelActor, opts.principalAllowlist);
1461
1465
  }
1462
1466
 
1463
1467
  // ../../../packages/aeg-core/src/doc-owners.ts
@@ -1645,6 +1649,27 @@ function overrideActive(opts) {
1645
1649
  // ../../../packages/aeg-core/src/premise-check.ts
1646
1650
  var ASSERTION_KINDS = new Set(["contains", "absent", "sha256"]);
1647
1651
 
1652
+ // ../../../packages/aeg-core/src/test-plan-section.ts
1653
+ var HEADING_FORM_RE = /^#{1,4}[ \t]*(?:\d+[a-z]?\.[ \t]*)?\*{0,2}Test Plan\*{0,2}[ \t]*$/im;
1654
+ var INLINE_FORM_RE = /^[ \t]*\*{0,2}Test Plan:?\*{0,2}/im;
1655
+ var NEXT_SECTION_RE = /\n(?:#{1,3}[ \t]|\*\*[A-Z][^*\n]*:\*\*)/;
1656
+ function locateTestPlanSection(body) {
1657
+ const region = anchoredRegion(body, "TEST-PLAN");
1658
+ if (region !== null)
1659
+ return { found: true, section: region };
1660
+ const headingMatch = HEADING_FORM_RE.exec(body);
1661
+ const match = headingMatch ?? INLINE_FORM_RE.exec(body);
1662
+ if (!match || match.index === undefined)
1663
+ return { found: false };
1664
+ const sectionBody = body.slice(match.index);
1665
+ const firstLineEnd = sectionBody.indexOf(`
1666
+ `);
1667
+ const searchFrom = firstLineEnd === -1 ? sectionBody.length : firstLineEnd + 1;
1668
+ const nextMatch = sectionBody.slice(searchFrom).match(NEXT_SECTION_RE);
1669
+ const sectionEnd = nextMatch ? searchFrom + (nextMatch.index ?? 0) : sectionBody.length;
1670
+ return { found: true, section: sectionBody.slice(0, sectionEnd) };
1671
+ }
1672
+
1648
1673
  // ../../../packages/aeg-core/src/brief-validation.ts
1649
1674
  function headerRegion(prBody) {
1650
1675
  const m = prBody.match(/^##\s/m);
@@ -1683,10 +1708,15 @@ function checkTierField(prBody, readTier) {
1683
1708
  };
1684
1709
  }
1685
1710
  var TEST_PLAN_UNIT_TESTS_ONLY_RE = /(?:\*\*)?Test Plan(?:\*\*)?\s*:\s*(?:\*\*)?\s*unit-tests-only/i;
1711
+ function testPlanRegion(prBody) {
1712
+ const located = locateTestPlanSection(prBody);
1713
+ return located.found ? located.section : prBody;
1714
+ }
1686
1715
  function checkTestPlan(prBody) {
1687
- if (TEST_PLAN_UNIT_TESTS_ONLY_RE.test(prBody))
1716
+ const region = testPlanRegion(prBody);
1717
+ if (TEST_PLAN_UNIT_TESTS_ONLY_RE.test(region))
1688
1718
  return { status: "pass", errors: [] };
1689
- if (/\*\*\[(?:agent|principal)\]\*\*/.test(prBody))
1719
+ if (/\*\*\[(?:agent|principal)\]\*\*/.test(region))
1690
1720
  return { status: "pass", errors: [] };
1691
1721
  return {
1692
1722
  status: "fail",
@@ -1696,9 +1726,10 @@ function checkTestPlan(prBody) {
1696
1726
  };
1697
1727
  }
1698
1728
  function checkTestPlanExclusivity(prBody) {
1699
- if (!TEST_PLAN_UNIT_TESTS_ONLY_RE.test(prBody))
1729
+ const region = testPlanRegion(prBody);
1730
+ if (!TEST_PLAN_UNIT_TESTS_ONLY_RE.test(region))
1700
1731
  return { status: "pass", errors: [] };
1701
- if (/^-\s*\[[ xX]\]\s*\*{2}\[(?:agent|principal)\]\*{2}/im.test(prBody)) {
1732
+ if (/^-\s*\[[ xX]\]\s*\*{2}\[(?:agent|principal)\]\*{2}/im.test(region)) {
1702
1733
  return {
1703
1734
  status: "fail",
1704
1735
  errors: [
@@ -1709,8 +1740,9 @@ function checkTestPlanExclusivity(prBody) {
1709
1740
  return { status: "pass", errors: [] };
1710
1741
  }
1711
1742
  function checkPrincipalPlaceholder(prBody) {
1743
+ const region = testPlanRegion(prBody);
1712
1744
  const lineRe = /^-\s*\[[ xX]\]\s*\*{2}\[principal\]\*{2}(.*)$/gim;
1713
- for (const m of prBody.matchAll(lineRe)) {
1745
+ for (const m of region.matchAll(lineRe)) {
1714
1746
  const content = m[1] ?? "";
1715
1747
  if (/^\s*None\b/i.test(content)) {
1716
1748
  return {
@@ -1789,6 +1821,15 @@ function checkClosesN(prBody) {
1789
1821
  errors: ["brief-validation Closes #N: no `Closes #<N>` (or Fixes/Resolves) reference found in the PR body."]
1790
1822
  };
1791
1823
  }
1824
+ var BRIEF_SHAPE_MARKERS = [checkSurfaceMap, checkDocUpdateList, checkStopConditions, checkAutonomyClause];
1825
+ var TASK_BRANCH_PATTERN = /^task\/[^/]+\/[^/]+$/;
1826
+ function isTaskBranch(branch) {
1827
+ return TASK_BRANCH_PATTERN.test(branch);
1828
+ }
1829
+ function isBriefShaped(prBody) {
1830
+ const stripped = stripCode(prBody);
1831
+ return BRIEF_SHAPE_MARKERS.filter((check) => check(stripped).status === "pass").length >= 2;
1832
+ }
1792
1833
  function checkBriefSections(prBody, readTier, options = {}) {
1793
1834
  const { requireClosesN = true } = options;
1794
1835
  const results = [
@@ -2158,11 +2199,12 @@ function isReviewGateExemptBranch(branch) {
2158
2199
  return branch.startsWith("plan/");
2159
2200
  }
2160
2201
  function checkReviewGate(input) {
2202
+ const principalAllowlist = input.principalAllowlist ?? PRINCIPAL_ALLOWLIST;
2161
2203
  const waived = isWaiverLabelActorVerified({
2162
2204
  label: WAIVER_LABEL_REVIEW,
2163
2205
  labels: input.labels,
2164
2206
  labelActor: input.waiverLabelActor,
2165
- principalAllowlist: PRINCIPAL_ALLOWLIST
2207
+ principalAllowlist
2166
2208
  });
2167
2209
  if (waived) {
2168
2210
  return {
@@ -2171,8 +2213,8 @@ function checkReviewGate(input) {
2171
2213
  waived: true
2172
2214
  };
2173
2215
  }
2174
- const verified = input.comments.filter((c) => c.author !== null && PRINCIPAL_ALLOWLIST.includes(c.author));
2175
- const ignoredCount = input.comments.filter((c) => (c.author === null || !PRINCIPAL_ALLOWLIST.includes(c.author)) && c.body.includes("VERDICT")).length;
2216
+ const verified = input.comments.filter((c) => isPrincipal(c.author, principalAllowlist));
2217
+ const ignoredCount = input.comments.filter((c) => !isPrincipal(c.author, principalAllowlist) && c.body.includes("VERDICT")).length;
2176
2218
  const verifiedBodies = verified.map((c) => c.body);
2177
2219
  const codeReview = extractCodeReviewVerdict(verifiedBodies);
2178
2220
  const security = extractSecurityReviewVerdict(verifiedBodies);
@@ -2725,28 +2767,8 @@ function decideIssueAssignment(input) {
2725
2767
  reason: `First push of \`${branch}\` — assigning Issue #${issue} to @${login} (the authenticated pusher).`
2726
2768
  };
2727
2769
  }
2728
- // ../../../packages/aeg-core/src/test-plan-section.ts
2729
- var HEADING_FORM_RE = /^#{1,4}[ \t]*(?:\d+[a-z]?\.[ \t]*)?\*{0,2}Test Plan\*{0,2}[ \t]*$/im;
2730
- var INLINE_FORM_RE = /^[ \t]*\*{0,2}Test Plan:?\*{0,2}/im;
2731
- var NEXT_SECTION_RE = /\n(?:#{1,3}[ \t]|\*\*[A-Z][^*\n]*:\*\*)/;
2732
- function locateTestPlanSection(body) {
2733
- const region = anchoredRegion(body, "TEST-PLAN");
2734
- if (region !== null)
2735
- return { found: true, section: region };
2736
- const headingMatch = HEADING_FORM_RE.exec(body);
2737
- const match = headingMatch ?? INLINE_FORM_RE.exec(body);
2738
- if (!match || match.index === undefined)
2739
- return { found: false };
2740
- const sectionBody = body.slice(match.index);
2741
- const firstLineEnd = sectionBody.indexOf(`
2742
- `);
2743
- const searchFrom = firstLineEnd === -1 ? sectionBody.length : firstLineEnd + 1;
2744
- const nextMatch = sectionBody.slice(searchFrom).match(NEXT_SECTION_RE);
2745
- const sectionEnd = nextMatch ? searchFrom + (nextMatch.index ?? 0) : sectionBody.length;
2746
- return { found: true, section: sectionBody.slice(0, sectionEnd) };
2747
- }
2748
2770
  // ../../../packages/aeg-core/src/test-plan-gate.ts
2749
- var TASK_BRANCH_PATTERN = /^task\/[^/]+\/[^/]+$/;
2771
+ var TASK_BRANCH_PATTERN2 = /^task\/[^/]+\/[^/]+$/;
2750
2772
  function evaluateTestPlanGate(body, branch) {
2751
2773
  if (!body) {
2752
2774
  return {
@@ -2759,7 +2781,7 @@ function evaluateTestPlanGate(body, branch) {
2759
2781
  }
2760
2782
  const located = locateTestPlanSection(body);
2761
2783
  if (!located.found) {
2762
- if (TASK_BRANCH_PATTERN.test(branch)) {
2784
+ if (TASK_BRANCH_PATTERN2.test(branch)) {
2763
2785
  return {
2764
2786
  verdict: "fail",
2765
2787
  messages: [