atm-bd 0.17.3__tar.gz

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 (358) hide show
  1. atm_bd-0.17.3/.gitignore +2 -0
  2. atm_bd-0.17.3/CONTRACT.md +46 -0
  3. atm_bd-0.17.3/PKG-INFO +172 -0
  4. atm_bd-0.17.3/README.md +155 -0
  5. atm_bd-0.17.3/hatch_build.py +67 -0
  6. atm_bd-0.17.3/pyproject.toml +36 -0
  7. atm_bd-0.17.3/src/atm_bd_console/__init__.py +3 -0
  8. atm_bd-0.17.3/src/atm_bd_console/_build_identity.py +2 -0
  9. atm_bd-0.17.3/src/atm_bd_console/_skills/.claude-plugin/plugin.json +17 -0
  10. atm_bd-0.17.3/src/atm_bd_console/_skills/CHANGELOG.md +651 -0
  11. atm_bd-0.17.3/src/atm_bd_console/_skills/LICENSE +21 -0
  12. atm_bd-0.17.3/src/atm_bd_console/_skills/README.md +265 -0
  13. atm_bd-0.17.3/src/atm_bd_console/_skills/agents/ceremony-qa.md +109 -0
  14. atm_bd-0.17.3/src/atm_bd_console/_skills/agents/dev-sanity.md +387 -0
  15. atm_bd-0.17.3/src/atm_bd_console/_skills/agents/parallax.md +29 -0
  16. atm_bd-0.17.3/src/atm_bd_console/_skills/agents/sc-sanity-jev.md +129 -0
  17. atm_bd-0.17.3/src/atm_bd_console/_skills/agents/sc-sanity-llm.md +110 -0
  18. atm_bd-0.17.3/src/atm_bd_console/_skills/config/atm-bd-orchestration.yaml.j2 +33 -0
  19. atm_bd-0.17.3/src/atm_bd_console/_skills/config/legacy-owned.json +734 -0
  20. atm_bd-0.17.3/src/atm_bd_console/_skills/conftest.py +12 -0
  21. atm_bd-0.17.3/src/atm_bd_console/_skills/install.py +885 -0
  22. atm_bd-0.17.3/src/atm_bd_console/_skills/manifest.yaml +221 -0
  23. atm_bd-0.17.3/src/atm_bd_console/_skills/registry.yaml +60 -0
  24. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/SKILL.md +558 -0
  25. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/blocking-findings-guidelines.md +97 -0
  26. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/arch-qa-assignment-vars.json +15 -0
  27. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/dev-complete-vars.json +15 -0
  28. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/dev-fix-vars.json +13 -0
  29. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/dev-sanity-assignment-context-vars.json +20 -0
  30. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/dev-sanity-assignment-vars.json +15 -0
  31. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/dev-sanity-complete-vars.json +13 -0
  32. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/dev-sanity-template-vars.json +13 -0
  33. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/dev-template-vars.json +13 -0
  34. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/finding-bead-vars.json +28 -0
  35. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/fix-assignment-vars.json +21 -0
  36. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/fix-complete-vars.json +14 -0
  37. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/flaky-test-qa-assignment-vars.json +10 -0
  38. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/plan-review-complete-vars.json +14 -0
  39. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/plan-review-template-fix-round-vars.json +18 -0
  40. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/plan-review-template-vars.json +17 -0
  41. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/plan-scope-reviewer-assignment-vars.json +13 -0
  42. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/qa-bead-vars.json +12 -0
  43. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/qa-complete-vars.json +19 -0
  44. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/qa-template-fix-round-vars.json +25 -0
  45. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/qa-template-vars.json +24 -0
  46. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/req-qa-assignment-vars.json +14 -0
  47. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/review-complete-vars.json +30 -0
  48. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/review-template-vars.json +11 -0
  49. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/ruthless-boundary-qa-assignment-vars.json +11 -0
  50. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/sanity-run-record-vars.json +21 -0
  51. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/sanity-run-table-vars.json +42 -0
  52. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/schema-reviewer-assignment-vars.json +10 -0
  53. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/task-refused-vars.json +10 -0
  54. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/examples/workflow-issue-bead-vars.json +7 -0
  55. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/formulas/README.md +35 -0
  56. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/formulas/finding-group.formula.toml.j2 +127 -0
  57. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/formulas/finding-group.relations.json +46 -0
  58. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/formulas/sprint-group.formula.toml.j2 +104 -0
  59. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/formulas/sprint-group.relations.json +61 -0
  60. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/references/bv.md +88 -0
  61. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/references/post-mortem-context-preparation.md +121 -0
  62. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/references/post-mortem-jev.md +141 -0
  63. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/references/post-mortem.md +111 -0
  64. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/roles/quality-mgr.md +239 -0
  65. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/assignment-gates.py +276 -0
  66. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/bd_commands.py +37 -0
  67. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/bead-groups +404 -0
  68. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/bead-queues +68 -0
  69. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/bead_formulas.py +88 -0
  70. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/bv-analyze +236 -0
  71. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/check-review-completion.py +61 -0
  72. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/fix-round-scope +137 -0
  73. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/jev_client.py +480 -0
  74. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/post_mortem_context.py +109 -0
  75. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/post_mortem_jev.py +274 -0
  76. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/sanity-create-findings +247 -0
  77. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/sanity-merge +644 -0
  78. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/sanity-run-history +282 -0
  79. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/sanity-split +446 -0
  80. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/fixtures/dev-ready.json +1 -0
  81. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/fixtures/dirty-tree.json +1 -0
  82. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/fixtures/not-ready.json +1 -0
  83. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/fixtures/not-rebased.json +1 -0
  84. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/fixtures/not-stacked.json +1 -0
  85. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/fixtures/plan-invalid.json +1 -0
  86. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/fixtures/pr-required.json +1 -0
  87. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/fixtures/pr-target-mismatch.json +1 -0
  88. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/fixtures/qa-head-mismatch.json +1 -0
  89. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/fixtures/qa-ready.json +1 -0
  90. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/fixtures/sanity-frozen.json +1 -0
  91. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/fixtures/sanity-ready.json +1 -0
  92. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/fixtures/stale-sanity.json +1 -0
  93. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/fixtures/transition-first-fail.json +1 -0
  94. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/fixtures/transition-minor-pass.json +1 -0
  95. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/fixtures/transition-round-cap.json +1 -0
  96. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/fixtures/transition-sanity-pass.json +1 -0
  97. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/fixtures/unclaimable.json +1 -0
  98. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/fixtures/wrong-base.json +1 -0
  99. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/fixtures/zero-delta.json +1 -0
  100. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/jev_receipts.py +48 -0
  101. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/rendering.py +19 -0
  102. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/test_assignment_gates.py +342 -0
  103. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/test_atomic.py +73 -0
  104. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/test_bead_pour_mock.py +686 -0
  105. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/test_bead_queues.py +127 -0
  106. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/test_bv_analyze.py +282 -0
  107. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/test_fix_round_scope.py +154 -0
  108. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/test_handoff_contracts.py +675 -0
  109. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/test_jev_client.py +563 -0
  110. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/test_post_mortem_context.py +104 -0
  111. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/test_post_mortem_jev.py +72 -0
  112. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/test_qa_report_contract.py +143 -0
  113. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/test_sanity_create_findings.py +106 -0
  114. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/test_sanity_merge.py +422 -0
  115. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/test_sanity_run_history.py +359 -0
  116. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/test_sanity_selected.py +485 -0
  117. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/test_sanity_split.py +642 -0
  118. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/test_templates.py +705 -0
  119. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/tests/test_transitions.py +24 -0
  120. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/scripts/transitions.py +25 -0
  121. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/arch-qa-assignment.json.j2 +41 -0
  122. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/dev-complete.md.j2 +82 -0
  123. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/dev-fix.xml.j2 +51 -0
  124. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/dev-sanity-assignment.json.j2 +38 -0
  125. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/dev-sanity-complete.md.j2 +83 -0
  126. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/dev-sanity-template.xml.j2 +67 -0
  127. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/dev-template.xml.j2 +53 -0
  128. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/finding-bead.json.j2 +66 -0
  129. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/fix-assignment.xml.j2 +54 -0
  130. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/fix-complete.md.j2 +82 -0
  131. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/flaky-test-qa-assignment.json.j2 +35 -0
  132. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/plan-review-complete.md.j2 +69 -0
  133. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/plan-review-template.xml.j2 +56 -0
  134. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/plan-scope-reviewer-assignment.json.j2 +41 -0
  135. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/qa-bead.json.j2 +52 -0
  136. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/qa-complete.md.j2 +77 -0
  137. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/qa-template.xml.j2 +133 -0
  138. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/req-qa-assignment.json.j2 +40 -0
  139. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/review-complete.md.j2 +77 -0
  140. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/review-template.xml.j2 +65 -0
  141. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/ruthless-boundary-qa-assignment.json.j2 +39 -0
  142. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/sanity-run-record.json.j2 +47 -0
  143. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/sanity-run-table.md.j2 +12 -0
  144. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/schema-reviewer-assignment.json.j2 +26 -0
  145. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/task-refused.md.j2 +55 -0
  146. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-bd-orchestration/templates/workflow-issue-bead.json.j2 +12 -0
  147. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/SKILL.md +91 -0
  148. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/examples/dev-sanity-bead-vars-d-4.json +8 -0
  149. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/examples/plan-root-vars.json +10 -0
  150. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/examples/sprint-bead-vars-d-4.json +32 -0
  151. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/examples/sprint-bead-vars-d-5.json +32 -0
  152. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/references/installation-and-troubleshooting.md +53 -0
  153. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/resources/atm-beads-plan-guidelines.md +347 -0
  154. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/resources/dev-sanity.md +39 -0
  155. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/resources/importing-md-plan.md +195 -0
  156. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/resources/orchestrating.md +178 -0
  157. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/resources/planning.md +231 -0
  158. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/resources/troubleshooting.md +21 -0
  159. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/schemas/sanity-bead.schema.json +64 -0
  160. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/schemas/sprint-bead.schema.json +116 -0
  161. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/scripts/bead_schema.py +126 -0
  162. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/scripts/check-phase-artifact +54 -0
  163. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/scripts/phase-config +48 -0
  164. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/scripts/phase-index-path +27 -0
  165. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/scripts/plan_contract.py +68 -0
  166. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/scripts/repo_config.py +101 -0
  167. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/scripts/resolve-role +31 -0
  168. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/scripts/sc_render.py +45 -0
  169. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/scripts/sprint_index_common.py +313 -0
  170. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/scripts/validate-plan +288 -0
  171. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/templates/dev-sanity-bead.json.j2 +35 -0
  172. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/templates/plan-root.json.j2 +38 -0
  173. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/templates/sprint-bead.json.j2 +63 -0
  174. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/tests/phase_fixtures.py +49 -0
  175. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/tests/test_importing_docs.py +19 -0
  176. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/tests/test_phase_config.py +162 -0
  177. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/tests/test_plan_root.py +39 -0
  178. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/tests/test_repo_config.py +113 -0
  179. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/tests/test_sc_render.py +51 -0
  180. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/atm-beads/tests/test_validate_plan.py +377 -0
  181. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/prompt-rewrite-judge/SKILL.md +17 -0
  182. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/prompt-rewrite-judge/scripts/judge.py +101 -0
  183. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/prompt-rewrite-judge/scripts/tests/test_judge.py +132 -0
  184. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/qa-report/SKILL.md +50 -0
  185. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/sprint-report/SKILL.md +179 -0
  186. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/sprint-report/dag-view.html +68 -0
  187. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/sprint-report/renderer/.gitignore +1 -0
  188. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/sprint-report/renderer/package-lock.json +249 -0
  189. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/sprint-report/renderer/package.json +9 -0
  190. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/sprint-report/renderer/render.cjs +19 -0
  191. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/sprint-report/report.md.j2 +20 -0
  192. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/sprint-report/scripts/sprint-report +468 -0
  193. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/sprint-report/scripts/sprint_dag.py +391 -0
  194. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/sprint-report/scripts/sprint_qa.py +61 -0
  195. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/sprint-report/tests/test_sprint_dag.py +156 -0
  196. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/sprint-report/tests/test_sprint_report.py +357 -0
  197. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/sprint-report/tests/test_sprint_review.py +205 -0
  198. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/sprint-review/SKILL.md +38 -0
  199. atm_bd-0.17.3/src/atm_bd_console/_skills/skills/sprint-review/scripts/sprint-review +24 -0
  200. atm_bd-0.17.3/src/atm_bd_console/_skills/tests/gen_legacy_owned.py +57 -0
  201. atm_bd-0.17.3/src/atm_bd_console/_skills/tests/gen_manifest.py +90 -0
  202. atm_bd-0.17.3/src/atm_bd_console/_skills/tests/subprocess_helpers.py +27 -0
  203. atm_bd-0.17.3/src/atm_bd_console/_skills/tests/test_frontmatter.py +98 -0
  204. atm_bd-0.17.3/src/atm_bd_console/_skills/tests/test_install.py +862 -0
  205. atm_bd-0.17.3/src/atm_bd_console/_skills/tests/test_render_parity.py +54 -0
  206. atm_bd-0.17.3/src/atm_bd_console/_skills/tests/test_sc_compose_version.py +21 -0
  207. atm_bd-0.17.3/src/atm_bd_console/_skills/tests/test_skill_suites.py +123 -0
  208. atm_bd-0.17.3/src/atm_bd_console/_skills/tests/test_subprocess_helpers.py +35 -0
  209. atm_bd-0.17.3/src/atm_bd_console/app.py +447 -0
  210. atm_bd-0.17.3/src/atm_bd_console/atm_bd.py +413 -0
  211. atm_bd-0.17.3/src/atm_bd_console/atm_source.py +135 -0
  212. atm_bd-0.17.3/src/atm_bd_console/beads_source.py +62 -0
  213. atm_bd-0.17.3/src/atm_bd_console/build.py +49 -0
  214. atm_bd-0.17.3/src/atm_bd_console/ci.py +18 -0
  215. atm_bd-0.17.3/src/atm_bd_console/cli.py +128 -0
  216. atm_bd-0.17.3/src/atm_bd_console/codec.py +220 -0
  217. atm_bd-0.17.3/src/atm_bd_console/collision.py +41 -0
  218. atm_bd-0.17.3/src/atm_bd_console/command.py +43 -0
  219. atm_bd-0.17.3/src/atm_bd_console/config.py +103 -0
  220. atm_bd-0.17.3/src/atm_bd_console/dispatch.py +155 -0
  221. atm_bd-0.17.3/src/atm_bd_console/enums.py +71 -0
  222. atm_bd-0.17.3/src/atm_bd_console/facts.py +194 -0
  223. atm_bd-0.17.3/src/atm_bd_console/git_source.py +89 -0
  224. atm_bd-0.17.3/src/atm_bd_console/github_source.py +156 -0
  225. atm_bd-0.17.3/src/atm_bd_console/icons.py +110 -0
  226. atm_bd-0.17.3/src/atm_bd_console/ids.py +6 -0
  227. atm_bd-0.17.3/src/atm_bd_console/log.py +93 -0
  228. atm_bd-0.17.3/src/atm_bd_console/migrations.py +24 -0
  229. atm_bd-0.17.3/src/atm_bd_console/model.py +556 -0
  230. atm_bd-0.17.3/src/atm_bd_console/paths.py +25 -0
  231. atm_bd-0.17.3/src/atm_bd_console/pr_selection.py +11 -0
  232. atm_bd-0.17.3/src/atm_bd_console/prs.py +50 -0
  233. atm_bd-0.17.3/src/atm_bd_console/render.py +262 -0
  234. atm_bd-0.17.3/src/atm_bd_console/result.py +94 -0
  235. atm_bd-0.17.3/src/atm_bd_console/runner.py +308 -0
  236. atm_bd-0.17.3/src/atm_bd_console/skill.py +97 -0
  237. atm_bd-0.17.3/src/atm_bd_console/skill_source.py +123 -0
  238. atm_bd-0.17.3/src/atm_bd_console/state.py +202 -0
  239. atm_bd-0.17.3/src/atm_bd_console/status.py +69 -0
  240. atm_bd-0.17.3/src/atm_bd_console/status_table.py +120 -0
  241. atm_bd-0.17.3/src/atm_bd_console/terminal.py +77 -0
  242. atm_bd-0.17.3/src/atm_bd_console/types.py +407 -0
  243. atm_bd-0.17.3/tests/conftest.py +98 -0
  244. atm_bd-0.17.3/tests/contract_fixtures.py +66 -0
  245. atm_bd-0.17.3/tests/contract_samples.py +153 -0
  246. atm_bd-0.17.3/tests/fixtures/atm/members.json +9 -0
  247. atm_bd-0.17.3/tests/fixtures/atm/tasks.json +30 -0
  248. atm_bd-0.17.3/tests/fixtures/beads/list-open.json +2062 -0
  249. atm_bd-0.17.3/tests/fixtures/beads/planted.json +126 -0
  250. atm_bd-0.17.3/tests/fixtures/beads/ready.json +1100 -0
  251. atm_bd-0.17.3/tests/fixtures/beads/repo/.atm-bd/phase-bh.toml +13 -0
  252. atm_bd-0.17.3/tests/fixtures/beads/repo/.claude/project/atm-bd-orchestration.yaml +16 -0
  253. atm_bd-0.17.3/tests/fixtures/beads/repo/.claude/skills/atm-bd-orchestration/templates/dev-fix.xml.j2 +1 -0
  254. atm_bd-0.17.3/tests/fixtures/beads/repo/.claude/skills/atm-bd-orchestration/templates/dev-sanity-template.xml.j2 +1 -0
  255. atm_bd-0.17.3/tests/fixtures/beads/repo/.claude/skills/atm-bd-orchestration/templates/dev-template.xml.j2 +1 -0
  256. atm_bd-0.17.3/tests/fixtures/beads/repo/.claude/skills/atm-bd-orchestration/templates/fix-assignment.xml.j2 +1 -0
  257. atm_bd-0.17.3/tests/fixtures/beads/repo/.claude/skills/atm-bd-orchestration/templates/plan-review-template.xml.j2 +1 -0
  258. atm_bd-0.17.3/tests/fixtures/beads/repo/.claude/skills/atm-bd-orchestration/templates/qa-template.xml.j2 +1 -0
  259. atm_bd-0.17.3/tests/fixtures/beads/repo/.claude/skills/atm-bd-orchestration/templates/review-template.xml.j2 +1 -0
  260. atm_bd-0.17.3/tests/fixtures/beads/repo/docs/plans/phase-bh.jsonl +10 -0
  261. atm_bd-0.17.3/tests/fixtures/beads/show-closed.json +1641 -0
  262. atm_bd-0.17.3/tests/fixtures/beads/show-findings.json +738 -0
  263. atm_bd-0.17.3/tests/fixtures/bh-wide-dag.json +7 -0
  264. atm_bd-0.17.3/tests/fixtures/contract/actions.jsonl +5 -0
  265. atm_bd-0.17.3/tests/fixtures/contract/inputs.json +1 -0
  266. atm_bd-0.17.3/tests/fixtures/contract/merge.json +1 -0
  267. atm_bd-0.17.3/tests/fixtures/contract/prs.json +1 -0
  268. atm_bd-0.17.3/tests/fixtures/contract/snapshot-gh-err.json +1 -0
  269. atm_bd-0.17.3/tests/fixtures/contract/snapshot-gh-off.json +1 -0
  270. atm_bd-0.17.3/tests/fixtures/contract/snapshot-running.json +1 -0
  271. atm_bd-0.17.3/tests/fixtures/contract/snapshot-stopped-closed.json +1 -0
  272. atm_bd-0.17.3/tests/fixtures/contract/snapshot-stopped-idle.json +1 -0
  273. atm_bd-0.17.3/tests/fixtures/github/graphql-open-prs.json +87 -0
  274. atm_bd-0.17.3/tests/fixtures/github/rest-open-prs.json +53 -0
  275. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-20261016-233500-7192e36d/PROVENANCE.md +28 -0
  276. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-20261016-233500-7192e36d/REPORT.md +261 -0
  277. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-20261016-233500-7192e36d/config-snapshot/atm-bd-orchestration.yaml +8 -0
  278. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-20261016-233500-7192e36d/config-snapshot/basename-fallback-control.xml.j2 +37 -0
  279. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-20261016-233500-7192e36d/config-snapshot/completion-vars.json +5 -0
  280. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-20261016-233500-7192e36d/config-snapshot/custom-complete-template.md.j2 +20 -0
  281. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-20261016-233500-7192e36d/config-snapshot/custom-sanity-template.xml.j2 +37 -0
  282. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-20261016-233500-7192e36d/config-snapshot/phase-cfgproof.toml +13 -0
  283. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-20261016-233500-7192e36d/console-state/atm-phase-cfgproof/actions.jsonl +1 -0
  284. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-20261016-233500-7192e36d/console-state/atm-phase-cfgproof/lock +0 -0
  285. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-20261016-233500-7192e36d/console-state/atm-phase-cfgproof/merge.json +1 -0
  286. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-20261016-233500-7192e36d/console-state/atm-phase-cfgproof/prs.json +1 -0
  287. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-20261016-233500-7192e36d/console-state/atm-phase-cfgproof/snapshot.json +1 -0
  288. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-20261016-233500-7192e36d/console-state/atm-phase-cfgproof/state.json +1 -0
  289. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-20261016-233500-7192e36d/loki-cover-report.md +16 -0
  290. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-20261016-233500-7192e36d/observations/atm-bd-console.log.jsonl +20 -0
  291. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-20261016-233500-7192e36d/prompt-sha256-before-submit.txt +1 -0
  292. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-20261016-233500-7192e36d/submit-times.txt +3 -0
  293. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-r20261016T171216Z/REPORT.md +72 -0
  294. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-r20261016T171216Z/config-snapshot/configured-sanity.xml.j2 +37 -0
  295. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-r20261016T171216Z/config-snapshot/phase-cfgproof.toml +13 -0
  296. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-r20261016T171216Z/console-state/atm-phase-cfgproof/actions.jsonl +1 -0
  297. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-r20261016T171216Z/console-state/atm-phase-cfgproof/snapshot.json +1 -0
  298. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-r20261016T171216Z/json/canonical-sha.out +5 -0
  299. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-r20261016T171216Z/json/delivered-marker-check.out +12 -0
  300. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-r20261016T171216Z/json/search-template-sha-48d980f7af74d1ebfd0c59d2a9f3bfc1acef7adea3f3be0a4366b3f987d77bbd.out +56 -0
  301. atm_bd-0.17.3/tests/fixtures/live_gate/cfgproof-r20261016T171216Z/json/templates-list-cfgproof.out +9 -0
  302. atm_bd-0.17.3/tests/fixtures/live_gate/phase-bh.md +447 -0
  303. atm_bd-0.17.3/tests/fixtures/live_gate/raw/bh-rdy-f11-dispatch.txt +83 -0
  304. atm_bd-0.17.3/tests/fixtures/live_gate/raw/bh-rdy-f11-prs.txt +83 -0
  305. atm_bd-0.17.3/tests/fixtures/live_gate/raw/bh-rdy-f11-status.txt +83 -0
  306. atm_bd-0.17.3/tests/fixtures/live_gate/raw/bh-refresh3-dispatch.txt +87 -0
  307. atm_bd-0.17.3/tests/fixtures/live_gate/raw/bh-refresh3-prs.txt +87 -0
  308. atm_bd-0.17.3/tests/fixtures/live_gate/raw/bh-refresh3-status.txt +87 -0
  309. atm_bd-0.17.3/tests/fixtures/live_gate/raw/bh10-0810-dispatch.txt +29 -0
  310. atm_bd-0.17.3/tests/fixtures/live_gate/raw/bh10-0810-prs.txt +6 -0
  311. atm_bd-0.17.3/tests/fixtures/live_gate/raw/bh10-0810-status.txt +19 -0
  312. atm_bd-0.17.3/tests/fixtures/render/status-bar-ok.txt +1 -0
  313. atm_bd-0.17.3/tests/fixtures/render/status-fallback.txt +3 -0
  314. atm_bd-0.17.3/tests/fixtures/snapshot/pre-enums.json +1 -0
  315. atm_bd-0.17.3/tests/fixtures/tick/mermaid.txt +7 -0
  316. atm_bd-0.17.3/tests/process_helpers.py +28 -0
  317. atm_bd-0.17.3/tests/test_app.py +508 -0
  318. atm_bd-0.17.3/tests/test_atm_bd.py +741 -0
  319. atm_bd-0.17.3/tests/test_atm_source.py +270 -0
  320. atm_bd-0.17.3/tests/test_beads_source.py +116 -0
  321. atm_bd-0.17.3/tests/test_boundaries.py +130 -0
  322. atm_bd-0.17.3/tests/test_build.py +205 -0
  323. atm_bd-0.17.3/tests/test_bundle.py +214 -0
  324. atm_bd-0.17.3/tests/test_ci_boundary.py +20 -0
  325. atm_bd-0.17.3/tests/test_cli.py +862 -0
  326. atm_bd-0.17.3/tests/test_codec.py +334 -0
  327. atm_bd-0.17.3/tests/test_codec_errors.py +101 -0
  328. atm_bd-0.17.3/tests/test_collision.py +9 -0
  329. atm_bd-0.17.3/tests/test_command.py +63 -0
  330. atm_bd-0.17.3/tests/test_config.py +128 -0
  331. atm_bd-0.17.3/tests/test_dispatch.py +169 -0
  332. atm_bd-0.17.3/tests/test_enum_exhaustiveness.py +24 -0
  333. atm_bd-0.17.3/tests/test_enums.py +86 -0
  334. atm_bd-0.17.3/tests/test_fixtures.py +106 -0
  335. atm_bd-0.17.3/tests/test_git_source.py +111 -0
  336. atm_bd-0.17.3/tests/test_github_source.py +298 -0
  337. atm_bd-0.17.3/tests/test_icons.py +171 -0
  338. atm_bd-0.17.3/tests/test_ids.py +10 -0
  339. atm_bd-0.17.3/tests/test_live_gate_fixture.py +163 -0
  340. atm_bd-0.17.3/tests/test_log.py +73 -0
  341. atm_bd-0.17.3/tests/test_model.py +692 -0
  342. atm_bd-0.17.3/tests/test_paths.py +28 -0
  343. atm_bd-0.17.3/tests/test_phase_settings.py +175 -0
  344. atm_bd-0.17.3/tests/test_pr_selection.py +74 -0
  345. atm_bd-0.17.3/tests/test_prs.py +150 -0
  346. atm_bd-0.17.3/tests/test_render.py +326 -0
  347. atm_bd-0.17.3/tests/test_runner.py +1049 -0
  348. atm_bd-0.17.3/tests/test_skill.py +394 -0
  349. atm_bd-0.17.3/tests/test_skill_source.py +227 -0
  350. atm_bd-0.17.3/tests/test_state.py +279 -0
  351. atm_bd-0.17.3/tests/test_status.py +131 -0
  352. atm_bd-0.17.3/tests/test_status_anchor.py +126 -0
  353. atm_bd-0.17.3/tests/test_status_table.py +342 -0
  354. atm_bd-0.17.3/tests/test_tabs.py +276 -0
  355. atm_bd-0.17.3/tests/test_terminal.py +74 -0
  356. atm_bd-0.17.3/tests/test_types.py +175 -0
  357. atm_bd-0.17.3/tests/test_verification.py +138 -0
  358. atm_bd-0.17.3/uv.lock +528 -0
@@ -0,0 +1,2 @@
1
+ /src/atm_bd_console/_build_identity.py
2
+ /src/atm_bd_console/_skills/
@@ -0,0 +1,46 @@
1
+ # bh-1 Type Contract
2
+
3
+ The canonical frozen contract is the `atm-bh-1` bead design. Its declarations
4
+ are synchronized with the field orders below.
5
+
6
+ The positional field order in `types.py` is part of the current contract:
7
+
8
+ - `Sprint`: `id`, `title`, `layer`, `branch`, `target`, `stack`, `depends_on`, `closed`, `findings`.
9
+ - `Inputs`: `now`, `lead`, `repo`, `interval_s`, `phase`, `members`, `tasks`, `worktrees`, `remotes`, `merges`, `prs`, `gh`, `task_beads`.
10
+ - `PhaseFile`: `phase`, `root_id`, `label`, `sprints`, `depends_on`, `lead`, `templates`.
11
+
12
+ `Inputs.interval_s` is always `Config.interval_s`; the bh-9 runner builds
13
+ `Inputs` from `Config`. Do not add other `Config` mirrors to `Inputs`.
14
+
15
+ `Config.notification_sender` is the validated `member@team` sender for plain
16
+ notifications, defaulting to `atm-bd@tool` and overridden only by `tool_identity`
17
+ in the repository YAML. It is appended with a default so
18
+ existing callers remain compatible; assignment identity remains `Config.lead`.
19
+
20
+ `RepoConfig.reviewers_round1` is part of the `RepoConfig` declaration in that
21
+ design and remains in its listed position before `plans_dir`.
22
+
23
+ The parallel sprint branches (bh-3 through bh-10) were rebased above the bh-1
24
+ contract layer and carry this field order. New fields must be supplied by
25
+ keyword in constructors from here on; existing fields and signatures are not
26
+ being changed except for the phase-settings update below.
27
+
28
+ ## Phase settings (ANC023)
29
+
30
+ `PhaseFile.lead` is the validated nonempty phase TOML identity;
31
+ `Config.lead` is its resolved runtime value, refreshed each tick. Console
32
+ launches accept `--phase` and no longer accept `--as`. Neither environment
33
+ identity nor repository YAML supplies a fallback lead.
34
+
35
+ `PhaseFile.templates` maps exactly `dev`, `dev_fix`, `fix`, `sanity`, `qa`,
36
+ `plan_review`, and `review` to existing repository-relative files within
37
+ `.claude/skills/atm-bd-orchestration/templates/`. Missing or invalid lead and
38
+ template values return `Err(ConfigInvalid)` naming `lead` or
39
+ `templates.<purpose>` before launch effects.
40
+
41
+ `dispatch_spec(context, templates)` takes this validated mapping explicitly.
42
+ The runner binds it to the existing one-argument `SpecFn`; the pure model's
43
+ signature is unchanged. Only sanity and QA dispatch are supported, using the
44
+ matching purpose key and the existing repository-configured recipient.
45
+ `DispatchSpec.template` carries the exact configured relative path to ATM's
46
+ `--template` argument. New `PhaseFile` fields are supplied by keyword.
atm_bd-0.17.3/PKG-INFO ADDED
@@ -0,0 +1,172 @@
1
+ Metadata-Version: 2.4
2
+ Name: atm-bd
3
+ Version: 0.17.3
4
+ Summary: ATM and Beads orchestration console, cron runner, and bundled skills
5
+ Project-URL: Repository, https://github.com/randlee/atm-bd-orchestration
6
+ Project-URL: Issues, https://github.com/randlee/atm-bd-orchestration/issues
7
+ Author: Rand Lee
8
+ License-Expression: MIT
9
+ Requires-Python: >=3.11
10
+ Requires-Dist: pydantic
11
+ Requires-Dist: pyyaml
12
+ Requires-Dist: rich<16,>=15.0.0
13
+ Requires-Dist: sc-compose<2,>=1.7.0
14
+ Requires-Dist: sc-observability<2,>=1.5.0
15
+ Requires-Dist: textual<9,>=8.2.8
16
+ Description-Content-Type: text/markdown
17
+
18
+ # atm-bd
19
+
20
+ `atm-bd` provides a terminal dashboard and single-tick cron runner for ATM and
21
+ Beads orchestration. It also bundles the orchestration skills for installation
22
+ into a repository.
23
+
24
+ ## Development validation
25
+
26
+ From the repository root, `just lint` runs the console's lint and type gates.
27
+ Pyright checks only `apps/atm-bd-console/src`, including the enum matches whose
28
+ `assert_never` fallbacks make missing cases type errors. `tests/` is not included in the static type-check gate;
29
+ the test suite is validated by pytest at runtime. Ruff checks both `src` and `tests`.
30
+ The GitHub Actions console source type-check step uses the same scope.
31
+
32
+ Run the checks directly from `apps/atm-bd-console`:
33
+
34
+ ```bash
35
+ uv run --frozen pytest -q
36
+ uv run --frozen --group dev ruff check src tests
37
+ uv run --frozen pyright src
38
+ ```
39
+
40
+ ## Installation and prerequisites
41
+
42
+ Install the package with `uv tool install atm-bd` (Python 3.11 or newer).
43
+ The console and cron commands operate on a configured repository and require
44
+ the `atm`, `bd`, and `git` executables on `PATH`. The Status graph also uses
45
+ `mmdflux` when available.
46
+
47
+ Before running `atm-bd skill`, install the `sc-compose` CLI and ensure the
48
+ host `python3` on `PATH` can import `pydantic`, `yaml` (PyYAML), and the
49
+ `sc-compose` Python wheel. The CLI, host wheel, and the wheel in the atm-bd
50
+ environment must have matching versions within the bundled manifest's range;
51
+ the installer checks these requirements before writing files. The host Python
52
+ dependencies can be installed with `python3 -m pip install pydantic pyyaml
53
+ 'sc-compose>=1.7.0,<2'`; install the matching `sc-compose` CLI separately.
54
+
55
+ From the repository root, run `atm-bd skill` to install the bundled skills
56
+ without fetching a release. It reports the bundled source ref, commit SHA,
57
+ and app version. Use `atm-bd skill --help` for release and destination options.
58
+
59
+ ## Console operational logs
60
+
61
+ ## Launch settings
62
+
63
+ Run `atm-bd console --phase bh` from the repository root. For one cron tick,
64
+ use `atm-bd cron --phase bh`; add `--dry-run` to preview actions.
65
+ The phase file `.atm-bd/phase-bh.toml` supplies the assignment identity and
66
+ template paths:
67
+
68
+ ```toml
69
+ plan = "docs/plans/phase-bh.jsonl"
70
+ root = "atm-phase-bh"
71
+ integration_branch = "integrate/phase-bh"
72
+ lead = "solar"
73
+
74
+ [templates]
75
+ dev = ".claude/skills/atm-bd-orchestration/templates/dev-template.xml.j2"
76
+ dev_fix = ".claude/skills/atm-bd-orchestration/templates/dev-fix.xml.j2"
77
+ fix = ".claude/skills/atm-bd-orchestration/templates/fix-assignment.xml.j2"
78
+ sanity = ".claude/skills/atm-bd-orchestration/templates/dev-sanity-template.xml.j2"
79
+ qa = ".claude/skills/atm-bd-orchestration/templates/qa-template.xml.j2"
80
+ plan_review = ".claude/skills/atm-bd-orchestration/templates/plan-review-template.xml.j2"
81
+ review = ".claude/skills/atm-bd-orchestration/templates/review-template.xml.j2"
82
+ ```
83
+
84
+ All seven purposes are required. Each value must name an existing file under
85
+ the installed template directory, relative to the repository root. Missing,
86
+ empty, unknown, or invalid settings produce `config_invalid` naming the key
87
+ before the console starts. Console `--as` is removed; `lead` is read only from
88
+ the phase file, with no environment or repository YAML fallback. Each tick
89
+ reloads these phase settings. Team and sanity/QA recipients still come from
90
+ `.atm.toml` and `.claude/project/atm-bd-orchestration.yaml`, respectively.
91
+
92
+ The console automatically assigns ready sanity and QA work using
93
+ `templates.sanity` and `templates.qa`. It passes the configured path to
94
+ `atm task assign --template` and the phase lead to ATM's `--as`. The other
95
+ purposes support orchestration workflows and do not enable additional console
96
+ dispatch kinds.
97
+
98
+ Plain notifications use `atm-bd@tool` by default, independently of the lead
99
+ used for assignments. The skill installer provisions the default tool identity.
100
+ To use another sender, set `tool_identity: "member@team"` in
101
+ `.claude/project/atm-bd-orchestration.yaml` and provision that identity in ATM.
102
+ Environment variables and command-line flags do not select the sender; ATM
103
+ subprocess identity and team are set from the selected sender. Failed sends
104
+ remain visible in snapshot errors and cron error lines. Task assignments remain
105
+ local to the lead's team (cross-team assignments are tracked by atm-core #1870).
106
+
107
+ ## Dispatch verification
108
+
109
+ Ready sanity and QA assignments require a successful merge check for their
110
+ branch and target. Missing results, missing targets, timeouts, and unsupported
111
+ git commands hold assignment with an actionable problem until verification
112
+ succeeds. The persisted merge states remain `clean` (verified), `conflict`, and
113
+ `error` (verification unavailable); a failed probe replaces any cached clean
114
+ result. PR and CI status never hold assignment.
115
+
116
+ Each tick with a ready assignment candidate refreshes origin before pinning a
117
+ commit. A fetch or remote-ref read failure appears in the snapshot and logs,
118
+ holds assignment, and clears eligible cached refs so recovery retries safely.
119
+ `--no-fetch` explicitly skips refresh and permits the saved remote refs, while
120
+ still requiring a successful current merge check.
121
+
122
+ ## Operational events
123
+
124
+ The console owns one `sc-observability` logger for its repository for the life
125
+ of the process. All ticks reuse it, including stopped and failed ticks. Logs
126
+ live under `.atm-bd/atm-bd/logs/`; the console sink is disabled. Each
127
+ tick flushes admitted events before saving its snapshot. Logger construction,
128
+ event admission and flush failures appear in the snapshot's Errors section
129
+ and in headless error output. They do not change whether a dispatch succeeded.
130
+ After repairing a logger construction failure, restart the process to retry
131
+ initialization.
132
+
133
+ Each proposed assignment, send or batch has an `action` event containing
134
+ `effect`, `recipient`, all `task_ids`, `outcome`, and the complete typed delivery
135
+ `error` (or null). Outcomes are `sent`, `failed <error kind>`, and `dry_run`.
136
+ Dry runs never deliver an ATM effect. Events cover every action even when the
137
+ dashboard's recent-action list retains only five. A logging error means the
138
+ operational log may be incomplete; use the snapshot's delivery outcomes and
139
+ Errors section to investigate. Source reads and git fetch/merge probes record
140
+ their operation, outcome and typed error, with team, task IDs or branch context
141
+ where available. `hold` events record the task, recipient and hold reason;
142
+ they do not introduce additional dispatch rules.
143
+
144
+ The phase's `.atm-bd/atm-bd/<root>/actions.jsonl` is an append-only
145
+ journal. Assignment/send entries record attempts, followed by a `hold` entry
146
+ on failure; `dry_run` entries record previews. An attempt entry alone is not
147
+ proof of delivery. Operational `action` events carry the explicit outcome.
148
+
149
+ ## Retention and rotation
150
+
151
+ The console does not enforce an age or size retention limit on either the
152
+ operational log directory or `actions.jsonl`. Both require operator-managed
153
+ rotation. Check their disk usage daily; archive at least weekly or when either
154
+ reaches 100 MiB. Keep compressed archives for 30 days unless the project's
155
+ audit policy requires longer. These are maintenance recommendations, not
156
+ automatic limits.
157
+
158
+ To rotate safely:
159
+
160
+ 1. Pause cron launches and stop every console using the repository. Logs are
161
+ shared across its phases, so stopping just one phase is insufficient.
162
+ 2. Move the entire `logs/` directory and each phase's `actions.jsonl` to a
163
+ timestamped archive outside the runtime directory. Compress the archive and
164
+ expire archives older than the chosen retention window.
165
+ 3. Leave `state.json`, `snapshot.json`, `merge.json`, `prs.json`, and lock files
166
+ in place. They are current runtime data, not log archives.
167
+ 4. Restart the consoles and resume cron. The logger recreates its directory;
168
+ the next action recreates `actions.jsonl`. Check the next snapshot for
169
+ logging or journal write errors.
170
+
171
+ Do not truncate or rename active logs while writers are running. A scheduled
172
+ rotation job must coordinate the same stop/archive/restart sequence.
@@ -0,0 +1,155 @@
1
+ # atm-bd
2
+
3
+ `atm-bd` provides a terminal dashboard and single-tick cron runner for ATM and
4
+ Beads orchestration. It also bundles the orchestration skills for installation
5
+ into a repository.
6
+
7
+ ## Development validation
8
+
9
+ From the repository root, `just lint` runs the console's lint and type gates.
10
+ Pyright checks only `apps/atm-bd-console/src`, including the enum matches whose
11
+ `assert_never` fallbacks make missing cases type errors. `tests/` is not included in the static type-check gate;
12
+ the test suite is validated by pytest at runtime. Ruff checks both `src` and `tests`.
13
+ The GitHub Actions console source type-check step uses the same scope.
14
+
15
+ Run the checks directly from `apps/atm-bd-console`:
16
+
17
+ ```bash
18
+ uv run --frozen pytest -q
19
+ uv run --frozen --group dev ruff check src tests
20
+ uv run --frozen pyright src
21
+ ```
22
+
23
+ ## Installation and prerequisites
24
+
25
+ Install the package with `uv tool install atm-bd` (Python 3.11 or newer).
26
+ The console and cron commands operate on a configured repository and require
27
+ the `atm`, `bd`, and `git` executables on `PATH`. The Status graph also uses
28
+ `mmdflux` when available.
29
+
30
+ Before running `atm-bd skill`, install the `sc-compose` CLI and ensure the
31
+ host `python3` on `PATH` can import `pydantic`, `yaml` (PyYAML), and the
32
+ `sc-compose` Python wheel. The CLI, host wheel, and the wheel in the atm-bd
33
+ environment must have matching versions within the bundled manifest's range;
34
+ the installer checks these requirements before writing files. The host Python
35
+ dependencies can be installed with `python3 -m pip install pydantic pyyaml
36
+ 'sc-compose>=1.7.0,<2'`; install the matching `sc-compose` CLI separately.
37
+
38
+ From the repository root, run `atm-bd skill` to install the bundled skills
39
+ without fetching a release. It reports the bundled source ref, commit SHA,
40
+ and app version. Use `atm-bd skill --help` for release and destination options.
41
+
42
+ ## Console operational logs
43
+
44
+ ## Launch settings
45
+
46
+ Run `atm-bd console --phase bh` from the repository root. For one cron tick,
47
+ use `atm-bd cron --phase bh`; add `--dry-run` to preview actions.
48
+ The phase file `.atm-bd/phase-bh.toml` supplies the assignment identity and
49
+ template paths:
50
+
51
+ ```toml
52
+ plan = "docs/plans/phase-bh.jsonl"
53
+ root = "atm-phase-bh"
54
+ integration_branch = "integrate/phase-bh"
55
+ lead = "solar"
56
+
57
+ [templates]
58
+ dev = ".claude/skills/atm-bd-orchestration/templates/dev-template.xml.j2"
59
+ dev_fix = ".claude/skills/atm-bd-orchestration/templates/dev-fix.xml.j2"
60
+ fix = ".claude/skills/atm-bd-orchestration/templates/fix-assignment.xml.j2"
61
+ sanity = ".claude/skills/atm-bd-orchestration/templates/dev-sanity-template.xml.j2"
62
+ qa = ".claude/skills/atm-bd-orchestration/templates/qa-template.xml.j2"
63
+ plan_review = ".claude/skills/atm-bd-orchestration/templates/plan-review-template.xml.j2"
64
+ review = ".claude/skills/atm-bd-orchestration/templates/review-template.xml.j2"
65
+ ```
66
+
67
+ All seven purposes are required. Each value must name an existing file under
68
+ the installed template directory, relative to the repository root. Missing,
69
+ empty, unknown, or invalid settings produce `config_invalid` naming the key
70
+ before the console starts. Console `--as` is removed; `lead` is read only from
71
+ the phase file, with no environment or repository YAML fallback. Each tick
72
+ reloads these phase settings. Team and sanity/QA recipients still come from
73
+ `.atm.toml` and `.claude/project/atm-bd-orchestration.yaml`, respectively.
74
+
75
+ The console automatically assigns ready sanity and QA work using
76
+ `templates.sanity` and `templates.qa`. It passes the configured path to
77
+ `atm task assign --template` and the phase lead to ATM's `--as`. The other
78
+ purposes support orchestration workflows and do not enable additional console
79
+ dispatch kinds.
80
+
81
+ Plain notifications use `atm-bd@tool` by default, independently of the lead
82
+ used for assignments. The skill installer provisions the default tool identity.
83
+ To use another sender, set `tool_identity: "member@team"` in
84
+ `.claude/project/atm-bd-orchestration.yaml` and provision that identity in ATM.
85
+ Environment variables and command-line flags do not select the sender; ATM
86
+ subprocess identity and team are set from the selected sender. Failed sends
87
+ remain visible in snapshot errors and cron error lines. Task assignments remain
88
+ local to the lead's team (cross-team assignments are tracked by atm-core #1870).
89
+
90
+ ## Dispatch verification
91
+
92
+ Ready sanity and QA assignments require a successful merge check for their
93
+ branch and target. Missing results, missing targets, timeouts, and unsupported
94
+ git commands hold assignment with an actionable problem until verification
95
+ succeeds. The persisted merge states remain `clean` (verified), `conflict`, and
96
+ `error` (verification unavailable); a failed probe replaces any cached clean
97
+ result. PR and CI status never hold assignment.
98
+
99
+ Each tick with a ready assignment candidate refreshes origin before pinning a
100
+ commit. A fetch or remote-ref read failure appears in the snapshot and logs,
101
+ holds assignment, and clears eligible cached refs so recovery retries safely.
102
+ `--no-fetch` explicitly skips refresh and permits the saved remote refs, while
103
+ still requiring a successful current merge check.
104
+
105
+ ## Operational events
106
+
107
+ The console owns one `sc-observability` logger for its repository for the life
108
+ of the process. All ticks reuse it, including stopped and failed ticks. Logs
109
+ live under `.atm-bd/atm-bd/logs/`; the console sink is disabled. Each
110
+ tick flushes admitted events before saving its snapshot. Logger construction,
111
+ event admission and flush failures appear in the snapshot's Errors section
112
+ and in headless error output. They do not change whether a dispatch succeeded.
113
+ After repairing a logger construction failure, restart the process to retry
114
+ initialization.
115
+
116
+ Each proposed assignment, send or batch has an `action` event containing
117
+ `effect`, `recipient`, all `task_ids`, `outcome`, and the complete typed delivery
118
+ `error` (or null). Outcomes are `sent`, `failed <error kind>`, and `dry_run`.
119
+ Dry runs never deliver an ATM effect. Events cover every action even when the
120
+ dashboard's recent-action list retains only five. A logging error means the
121
+ operational log may be incomplete; use the snapshot's delivery outcomes and
122
+ Errors section to investigate. Source reads and git fetch/merge probes record
123
+ their operation, outcome and typed error, with team, task IDs or branch context
124
+ where available. `hold` events record the task, recipient and hold reason;
125
+ they do not introduce additional dispatch rules.
126
+
127
+ The phase's `.atm-bd/atm-bd/<root>/actions.jsonl` is an append-only
128
+ journal. Assignment/send entries record attempts, followed by a `hold` entry
129
+ on failure; `dry_run` entries record previews. An attempt entry alone is not
130
+ proof of delivery. Operational `action` events carry the explicit outcome.
131
+
132
+ ## Retention and rotation
133
+
134
+ The console does not enforce an age or size retention limit on either the
135
+ operational log directory or `actions.jsonl`. Both require operator-managed
136
+ rotation. Check their disk usage daily; archive at least weekly or when either
137
+ reaches 100 MiB. Keep compressed archives for 30 days unless the project's
138
+ audit policy requires longer. These are maintenance recommendations, not
139
+ automatic limits.
140
+
141
+ To rotate safely:
142
+
143
+ 1. Pause cron launches and stop every console using the repository. Logs are
144
+ shared across its phases, so stopping just one phase is insufficient.
145
+ 2. Move the entire `logs/` directory and each phase's `actions.jsonl` to a
146
+ timestamped archive outside the runtime directory. Compress the archive and
147
+ expire archives older than the chosen retention window.
148
+ 3. Leave `state.json`, `snapshot.json`, `merge.json`, `prs.json`, and lock files
149
+ in place. They are current runtime data, not log archives.
150
+ 4. Restart the consoles and resume cron. The logger recreates its directory;
151
+ the next action recreates `actions.jsonl`. Check the next snapshot for
152
+ logging or journal write errors.
153
+
154
+ Do not truncate or rename active logs while writers are running. A scheduled
155
+ rotation job must coordinate the same stop/archive/restart sequence.
@@ -0,0 +1,67 @@
1
+ from __future__ import annotations
2
+
3
+ import re
4
+ import subprocess
5
+ import tomllib
6
+ from pathlib import Path
7
+
8
+ from hatchling.builders.hooks.plugin.interface import BuildHookInterface
9
+
10
+
11
+ class CustomBuildHook(BuildHookInterface):
12
+ def initialize(self, version: str, build_data: dict[str, object]) -> None:
13
+ package = Path(self.root).resolve()
14
+ root = package.parents[1]
15
+ output = package / "src" / "atm_bd_console" / "_build_identity.py"
16
+ self._generated_identity = False
17
+ package_version = tomllib.loads((package / "pyproject.toml").read_text())["project"]["version"]
18
+ if (package / "PKG-INFO").is_file() and output.is_file():
19
+ if not re.search(r"^COMMIT = (['\"])[0-9a-f]{40}\1$", output.read_text(), re.MULTILINE):
20
+ raise RuntimeError(f"cannot reuse console identity: {output} has no valid 40-hex COMMIT")
21
+ self._include_identity(output, build_data)
22
+ self._include_skills(package, root, build_data)
23
+ return
24
+ try:
25
+ toplevel = subprocess.check_output(
26
+ ["git", "-C", root, "rev-parse", "--show-toplevel"], text=True, stderr=subprocess.PIPE
27
+ ).strip()
28
+ except FileNotFoundError as error:
29
+ raise RuntimeError("cannot build console identity: git executable is missing") from error
30
+ except (OSError, subprocess.CalledProcessError) as error:
31
+ raise RuntimeError("cannot build console identity: source is not a console checkout") from error
32
+ if Path(toplevel).resolve() != root or not (root / "apps/atm-bd-console" / "pyproject.toml").is_file():
33
+ raise RuntimeError("cannot build console identity: source is not a console checkout")
34
+ try:
35
+ shallow = subprocess.check_output(["git", "-C", root, "rev-parse", "--is-shallow-repository"], text=True).strip()
36
+ if shallow != "false":
37
+ raise RuntimeError("cannot build console identity: checkout is shallow")
38
+ revision = subprocess.check_output(["git", "-C", root, "rev-parse", "--short", "HEAD"], text=True).strip()
39
+ commit = subprocess.check_output(["git", "-C", root, "rev-parse", "HEAD"], text=True).strip()
40
+ count = subprocess.check_output(["git", "-C", root, "rev-list", "--count", "HEAD"], text=True).strip()
41
+ dirty = subprocess.check_output(["git", "-C", root, "status", "--porcelain", "--", ".", ":!.ok"], text=True).strip()
42
+ except (OSError, subprocess.CalledProcessError) as error:
43
+ raise RuntimeError("cannot build console identity: git command failed") from error
44
+ major, minor, _patch = package_version.split(".", 2)
45
+ identity = f"{major}.{minor}.{count}+g{revision}{'-dirty' if dirty else ''}"
46
+ self._include_skills(package, root, build_data)
47
+ output.write_text(f'IDENTITY = {identity!r}\nCOMMIT = {commit!r}\n')
48
+ self._generated_identity = True
49
+ self._include_identity(output, build_data)
50
+
51
+ def _include_identity(self, output: Path, build_data: dict[str, object]) -> None:
52
+ destination = "atm_bd_console/_build_identity.py" if self.target_name == "wheel" else "src/atm_bd_console/_build_identity.py"
53
+ build_data["force_include"][str(output)] = destination
54
+
55
+ def _include_skills(self, package: Path, root: Path, build_data: dict[str, object]) -> None:
56
+ plugin = root / "plugins" / "atm-bd-orchestration"
57
+ bundled = package / "src" / "atm_bd_console" / "_skills"
58
+ # An sdist must use its own contents, never a coincidental adjacent checkout.
59
+ source = bundled if (package / "PKG-INFO").is_file() else (plugin if plugin.is_dir() else bundled)
60
+ if not source.is_dir():
61
+ raise RuntimeError(f"cannot bundle skills: neither {plugin} nor {bundled} exists")
62
+ destination = "atm_bd_console/_skills" if self.target_name == "wheel" else "src/atm_bd_console/_skills"
63
+ build_data["force_include"][str(source)] = destination
64
+
65
+ def finalize(self, version: str, build_data: dict[str, object], artifact_path: str) -> None:
66
+ if self._generated_identity:
67
+ (Path(self.root) / "src" / "atm_bd_console" / "_build_identity.py").unlink(missing_ok=True)
@@ -0,0 +1,36 @@
1
+ [project]
2
+ name = "atm-bd"
3
+ version = "0.17.3"
4
+ description = "ATM and Beads orchestration console, cron runner, and bundled skills"
5
+ readme = "README.md"
6
+ license = "MIT"
7
+ authors = [{ name = "Rand Lee" }]
8
+ requires-python = ">=3.11"
9
+ dependencies = ["rich>=15.0.0,<16", "textual>=8.2.8,<9", "sc-observability>=1.5.0,<2", "pyyaml", "pydantic", "sc-compose>=1.7.0,<2"]
10
+
11
+ [project.urls]
12
+ Repository = "https://github.com/randlee/atm-bd-orchestration"
13
+ Issues = "https://github.com/randlee/atm-bd-orchestration/issues"
14
+
15
+ [project.scripts]
16
+ atm-bd = "atm_bd_console.cli:main"
17
+
18
+ [dependency-groups]
19
+ dev = ["pytest", "ruff", "pyright", "hatchling==1.31.0"]
20
+
21
+ [build-system]
22
+ requires = ["hatchling==1.31.0"]
23
+ build-backend = "hatchling.build"
24
+
25
+ [tool.hatch.build.targets.wheel]
26
+ packages = ["src/atm_bd_console"]
27
+
28
+ [tool.hatch.build.targets.wheel.hooks.custom]
29
+
30
+ [tool.hatch.build.targets.sdist.hooks.custom]
31
+
32
+ [tool.pytest.ini_options]
33
+ testpaths = ["tests"]
34
+
35
+ [tool.ruff]
36
+ line-length = 120
@@ -0,0 +1,3 @@
1
+ """Shared contract for the ATM bead dashboard."""
2
+
3
+ __version__ = "0.17.3"
@@ -0,0 +1,2 @@
1
+ IDENTITY = '0.17.599+g5ff0a67'
2
+ COMMIT = '5ff0a67fe6e046393e833faf72cd5eabb40fb520'
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "atm-bd-orchestration",
3
+ "description": "Bead-driven phase orchestration for ATM agent teams: atm-beads (the plan as a beads graph), atm-bd-orchestration (dispatch, dev-sanity, QA and stack landing from bd ready) and sprint-report (status tables and DAGs from live beads), plus the dev-sanity agents they name.",
4
+ "version": "0.16.0",
5
+ "author": {
6
+ "name": "randlee"
7
+ },
8
+ "license": "MIT",
9
+ "keywords": [
10
+ "atm",
11
+ "beads",
12
+ "orchestration",
13
+ "sprint",
14
+ "qa",
15
+ "gh-stack"
16
+ ]
17
+ }