curu-infra 0.58.0__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 (2272) hide show
  1. curu_infra-0.58.0/.claude/CLAUDE.md +163 -0
  2. curu_infra-0.58.0/.claude/agents/beacon-auditor.md +81 -0
  3. curu_infra-0.58.0/.claude/agents/beacon-engineering.md +120 -0
  4. curu_infra-0.58.0/.claude/agents/beacon-product.md +96 -0
  5. curu_infra-0.58.0/.claude/agents/beacon-reviewer.md +60 -0
  6. curu_infra-0.58.0/.claude/commands/beacon/align.md +90 -0
  7. curu_infra-0.58.0/.claude/commands/beacon/audit.md +29 -0
  8. curu_infra-0.58.0/.claude/commands/beacon/constitution.md +58 -0
  9. curu_infra-0.58.0/.claude/commands/beacon/continue.md +114 -0
  10. curu_infra-0.58.0/.claude/commands/beacon/engineering.md +56 -0
  11. curu_infra-0.58.0/.claude/commands/beacon/epics.md +94 -0
  12. curu_infra-0.58.0/.claude/commands/beacon/implement.md +73 -0
  13. curu_infra-0.58.0/.claude/commands/beacon/plan.md +34 -0
  14. curu_infra-0.58.0/.claude/commands/beacon/prd.md +197 -0
  15. curu_infra-0.58.0/.claude/commands/beacon/product.md +56 -0
  16. curu_infra-0.58.0/.claude/commands/beacon/review.md +15 -0
  17. curu_infra-0.58.0/.claude/commands/beacon/roadmap.md +50 -0
  18. curu_infra-0.58.0/.claude/commands/beacon/seed.md +123 -0
  19. curu_infra-0.58.0/.claude/commands/beacon/specify.md +60 -0
  20. curu_infra-0.58.0/.claude/commands/beacon/status.md +107 -0
  21. curu_infra-0.58.0/.claude/commands/beacon/tasks.md +107 -0
  22. curu_infra-0.58.0/.claude/commands/design/diagram.md +313 -0
  23. curu_infra-0.58.0/.claude/commands/design/evaluate.md +156 -0
  24. curu_infra-0.58.0/.claude/commands/design/wardley.md +156 -0
  25. curu_infra-0.58.0/.claude/commands/git/feature.md +55 -0
  26. curu_infra-0.58.0/.claude/commands/git/pr.md +71 -0
  27. curu_infra-0.58.0/.claude/commands/git/release.md +100 -0
  28. curu_infra-0.58.0/.claude/commands/init.md +179 -0
  29. curu_infra-0.58.0/.claude/scheduled_tasks.lock +1 -0
  30. curu_infra-0.58.0/.claude/settings.json +75 -0
  31. curu_infra-0.58.0/.claude/skills/beacon-build/SKILL.md +97 -0
  32. curu_infra-0.58.0/.claude/skills/beacon-design/SKILL.md +126 -0
  33. curu_infra-0.58.0/.claude/skills/beacon-seed/SKILL.md +68 -0
  34. curu_infra-0.58.0/.claude/skills/beacon-ship/SKILL.md +109 -0
  35. curu_infra-0.58.0/.claude/skills/speckit-analyze/SKILL.md +260 -0
  36. curu_infra-0.58.0/.claude/skills/speckit-checklist/SKILL.md +372 -0
  37. curu_infra-0.58.0/.claude/skills/speckit-clarify/SKILL.md +284 -0
  38. curu_infra-0.58.0/.claude/skills/speckit-constitution/SKILL.md +157 -0
  39. curu_infra-0.58.0/.claude/skills/speckit-implement/SKILL.md +224 -0
  40. curu_infra-0.58.0/.claude/skills/speckit-plan/SKILL.md +164 -0
  41. curu_infra-0.58.0/.claude/skills/speckit-specify/SKILL.md +342 -0
  42. curu_infra-0.58.0/.claude/skills/speckit-tasks/SKILL.md +214 -0
  43. curu_infra-0.58.0/.claude/skills/speckit-taskstoissues/SKILL.md +106 -0
  44. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/CLAUDE.md +163 -0
  45. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/agents/beacon-auditor.md +81 -0
  46. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/agents/beacon-engineering.md +120 -0
  47. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/agents/beacon-product.md +96 -0
  48. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/agents/beacon-reviewer.md +60 -0
  49. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/beacon/align.md +90 -0
  50. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/beacon/audit.md +29 -0
  51. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/beacon/constitution.md +58 -0
  52. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/beacon/continue.md +114 -0
  53. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/beacon/engineering.md +56 -0
  54. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/beacon/epics.md +94 -0
  55. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/beacon/implement.md +73 -0
  56. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/beacon/plan.md +34 -0
  57. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/beacon/prd.md +197 -0
  58. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/beacon/product.md +56 -0
  59. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/beacon/review.md +15 -0
  60. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/beacon/roadmap.md +50 -0
  61. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/beacon/seed.md +123 -0
  62. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/beacon/specify.md +60 -0
  63. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/beacon/status.md +107 -0
  64. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/beacon/tasks.md +107 -0
  65. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/design/diagram.md +313 -0
  66. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/design/evaluate.md +156 -0
  67. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/design/wardley.md +156 -0
  68. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/git/feature.md +55 -0
  69. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/git/pr.md +71 -0
  70. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/git/release.md +100 -0
  71. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/commands/init.md +179 -0
  72. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/settings.json +75 -0
  73. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/skills/beacon-build/SKILL.md +97 -0
  74. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/skills/beacon-design/SKILL.md +126 -0
  75. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/skills/beacon-seed/SKILL.md +68 -0
  76. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/skills/beacon-ship/SKILL.md +109 -0
  77. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/skills/speckit-analyze/SKILL.md +260 -0
  78. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/skills/speckit-checklist/SKILL.md +372 -0
  79. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/skills/speckit-clarify/SKILL.md +284 -0
  80. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/skills/speckit-constitution/SKILL.md +157 -0
  81. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/skills/speckit-implement/SKILL.md +224 -0
  82. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/skills/speckit-plan/SKILL.md +164 -0
  83. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/skills/speckit-specify/SKILL.md +342 -0
  84. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/skills/speckit-tasks/SKILL.md +214 -0
  85. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.claude/skills/speckit-taskstoissues/SKILL.md +106 -0
  86. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.github/workflows/ci.yml +43 -0
  87. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.github/workflows/release.yml +64 -0
  88. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.github/workflows/smoke.yml +60 -0
  89. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.gitignore +60 -0
  90. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.pre-commit-config.yaml +29 -0
  91. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.specify/feature.json +3 -0
  92. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.specify/init-options.json +10 -0
  93. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.specify/integration.json +15 -0
  94. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.specify/integrations/claude.manifest.json +16 -0
  95. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.specify/integrations/speckit.manifest.json +17 -0
  96. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.specify/memory/constitution.md +54 -0
  97. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.specify/scripts/bash/check-prerequisites.sh +192 -0
  98. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.specify/scripts/bash/common.sh +644 -0
  99. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.specify/scripts/bash/create-new-feature.sh +413 -0
  100. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.specify/scripts/bash/setup-plan.sh +91 -0
  101. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.specify/scripts/bash/setup-tasks.sh +96 -0
  102. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.specify/templates/checklist-template.md +40 -0
  103. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.specify/templates/constitution-template.md +50 -0
  104. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.specify/templates/plan-template.md +113 -0
  105. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.specify/templates/spec-template.md +131 -0
  106. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.specify/templates/tasks-template.md +252 -0
  107. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.specify/workflows/speckit/workflow.yml +77 -0
  108. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/.specify/workflows/workflow-registry.json +13 -0
  109. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/CHANGELOG.md +8632 -0
  110. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/CLAUDE.md +5 -0
  111. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/PUBLISHING.md +71 -0
  112. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/README.md +185 -0
  113. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/ROADMAP.md +65 -0
  114. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/beacon.md +17 -0
  115. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/conftest.py +62 -0
  116. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/manifest.example.toml +408 -0
  117. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/.beacon/bullets.toml +12 -0
  118. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/.beacon/doctor.toml.example +131 -0
  119. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/.beacon/init-options.json +69 -0
  120. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-000-template.md +60 -0
  121. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-001-toml-manifest-format.md +82 -0
  122. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-002-pydantic-manifest-validation.md +90 -0
  123. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-003-runpod-graphql-api.md +96 -0
  124. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-004-python-typer-uv-toolchain.md +95 -0
  125. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-005-comfyui-restart-after-node-install.md +118 -0
  126. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-006-llm-top-level-manifest-key.md +123 -0
  127. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-007-nohup-llm-process-management.md +59 -0
  128. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-008-apply-output-json-schema.md +54 -0
  129. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-009-apply-only-filter-scope.md +59 -0
  130. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-010-size-only-idempotency-for-pod-file-operations.md +77 -0
  131. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-011-pod-state-file-format-and-location.md +109 -0
  132. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-012-versioning-and-release-strategy.md +32 -0
  133. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-013-model-download-retry-policy.md +118 -0
  134. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-014-smoke-test-cost-and-teardown.md +61 -0
  135. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-015-module-split-seams-and-backward-compat-re-exports.md +97 -0
  136. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-016-ssh-transport-reconnect.md +65 -0
  137. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-017-drift-definition-and-verify-semantics.md +76 -0
  138. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-018-runpod-api-retry-policy.md +141 -0
  139. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-019-reconcile-skip-source-of-truth.md +67 -0
  140. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-020-single-drift-detection-api.md +70 -0
  141. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-021-expected-size-population-strategy.md +57 -0
  142. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-022-manifest-schema-versioning-policy.md +82 -0
  143. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-023-verify-json-output-schema.md +38 -0
  144. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-024-drift-hook-contract.md +57 -0
  145. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-025-llm-sidecar-driftstatus-and-schema-v2.md +80 -0
  146. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-026-preflight-scope-and-flag.md +92 -0
  147. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-027-lock-file-location-and-format.md +59 -0
  148. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-028-lock-url-token-stripping.md +73 -0
  149. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-029-native-ssh-vs-ansible-for-setup-and-sync.md +93 -0
  150. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/ADR-030-curu-auth-replaces-comfyui-authenticator.md +128 -0
  151. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/ADRs/README.md +37 -0
  152. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Background/00-problem-statement.md +50 -0
  153. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Background/01-final-architecture-document.md +185 -0
  154. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/README.md +151 -0
  155. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/archive/.gitkeep +0 -0
  156. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/.gitkeep +0 -0
  157. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/EPIC-TEMPLATE.md +46 -0
  158. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/.gitkeep +0 -0
  159. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/apply-observability.md +50 -0
  160. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/apply-prune.md +46 -0
  161. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/apply-reconcile.md +49 -0
  162. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/apply-resumability.md +38 -0
  163. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/civitai-coverage-parity.md +31 -0
  164. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/cli-manifest-extract.md +44 -0
  165. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/cli-module-split.md +64 -0
  166. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/comfy-manager-control.md +72 -0
  167. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/comfy-module-split.md +61 -0
  168. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/comfyui-model-catalog.md +58 -0
  169. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/comfyui-provision.md +81 -0
  170. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/content-integrity-completeness.md +44 -0
  171. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/content-integrity-verify.md +40 -0
  172. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/curu-auth-default.md +50 -0
  173. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/download-integrity-enforcement.md +37 -0
  174. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/drift-notification-hook.md +39 -0
  175. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/first-run-doctor.md +58 -0
  176. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/fleet-apply-fix.md +43 -0
  177. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/fleet-pod-create.md +74 -0
  178. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/fleet-verify-per-pod-resources.md +33 -0
  179. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/foundation.md +61 -0
  180. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/idempotent-private-files.md +41 -0
  181. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/live-provisioning-smoke.md +31 -0
  182. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/llm-sidecar-drift.md +39 -0
  183. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/llm-sidecar-liveness-hardening.md +31 -0
  184. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/llm-sidecar.md +79 -0
  185. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/lock-token-leak-guard.md +36 -0
  186. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/manifest-doctor.md +47 -0
  187. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/manifest-init.md +30 -0
  188. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/manifest-lock.md +37 -0
  189. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/manifest-portability.md +56 -0
  190. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/manifest-preflight-validation.md +33 -0
  191. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/manifest-schema-migrate.md +36 -0
  192. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/manifest-schema-versioning.md +35 -0
  193. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/model-source-resilience.md +35 -0
  194. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/models-add-local.md +51 -0
  195. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/multi-pod-provisioning.md +59 -0
  196. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/node-install-resilience.md +36 -0
  197. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/pod-fleet-management.md +55 -0
  198. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/pod-management.md +46 -0
  199. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/pod-resume-from-manifest.md +31 -0
  200. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/pod-setup-sync.md +60 -0
  201. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/pod-sync.md +47 -0
  202. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/preflight-cost-gate.md +54 -0
  203. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/provisioner-module-split.md +72 -0
  204. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/provisioning-hardening.md +48 -0
  205. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/prune-state-tracking.md +45 -0
  206. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/reconcile-on-resume.md +67 -0
  207. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/release-pipeline.md +42 -0
  208. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/runpod-api-resilience.md +62 -0
  209. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/runtime-drift-detection.md +48 -0
  210. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/ssh-proxy-fallback.md +64 -0
  211. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/targeted-sync.md +42 -0
  212. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/unify-drift-detection.md +42 -0
  213. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Roadmap/epics/archive/verify-multi-pod-machine-readable.md +36 -0
  214. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Work/README.md +60 -0
  215. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Work/analysis/.gitkeep +0 -0
  216. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Work/branches/.gitkeep +0 -0
  217. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Work/planning/.gitkeep +0 -0
  218. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/project-management/Work/sessions/.gitkeep +0 -0
  219. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/pyproject.toml +222 -0
  220. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/001-manifest-cli-pod-lifecycle/.beacon.toml +1 -0
  221. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/001-manifest-cli-pod-lifecycle/checklists/requirements.md +34 -0
  222. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/001-manifest-cli-pod-lifecycle/contracts/cli-commands.md +193 -0
  223. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/001-manifest-cli-pod-lifecycle/data-model.md +125 -0
  224. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/001-manifest-cli-pod-lifecycle/features/us1_apply_manifest.feature +39 -0
  225. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/001-manifest-cli-pod-lifecycle/features/us2_dry_run.feature +13 -0
  226. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/001-manifest-cli-pod-lifecycle/features/us3_pod_lifecycle.feature +23 -0
  227. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/001-manifest-cli-pod-lifecycle/plan.md +198 -0
  228. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/001-manifest-cli-pod-lifecycle/research.md +146 -0
  229. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/001-manifest-cli-pod-lifecycle/spec.md +138 -0
  230. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/001-manifest-cli-pod-lifecycle/tasks.md +241 -0
  231. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/002-comfyui-env-provisioning/.beacon.toml +1 -0
  232. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/002-comfyui-env-provisioning/checklists/requirements.md +36 -0
  233. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/002-comfyui-env-provisioning/contracts/manifest-schema.md +129 -0
  234. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/002-comfyui-env-provisioning/contracts/provisioning-report.md +55 -0
  235. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/002-comfyui-env-provisioning/data-model.md +178 -0
  236. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/002-comfyui-env-provisioning/features/us1_custom_node_install.feature +39 -0
  237. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/002-comfyui-env-provisioning/features/us2_model_download.feature +38 -0
  238. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/002-comfyui-env-provisioning/features/us3_private_file_sync.feature +20 -0
  239. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/002-comfyui-env-provisioning/features/us4_idempotency_report.feature +22 -0
  240. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/002-comfyui-env-provisioning/features/us5_health_check.feature +15 -0
  241. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/002-comfyui-env-provisioning/plan.md +300 -0
  242. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/002-comfyui-env-provisioning/research.md +177 -0
  243. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/002-comfyui-env-provisioning/spec.md +312 -0
  244. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/002-comfyui-env-provisioning/tasks.md +320 -0
  245. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/003-comfyui-model-catalog/.beacon.toml +1 -0
  246. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/003-comfyui-model-catalog/checklists/requirements.md +34 -0
  247. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/003-comfyui-model-catalog/contracts/cli-commands.md +93 -0
  248. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/003-comfyui-model-catalog/data-model.md +123 -0
  249. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/003-comfyui-model-catalog/features/us1_add_requirements.feature +24 -0
  250. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/003-comfyui-model-catalog/features/us2_list_architectures.feature +11 -0
  251. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/003-comfyui-model-catalog/features/us3_manifest_example.feature +11 -0
  252. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/003-comfyui-model-catalog/plan.md +280 -0
  253. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/003-comfyui-model-catalog/research.md +127 -0
  254. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/003-comfyui-model-catalog/spec.md +122 -0
  255. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/003-comfyui-model-catalog/tasks.md +183 -0
  256. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/004-comfyui-node-activation/.beacon.toml +1 -0
  257. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/004-comfyui-node-activation/checklists/requirements.md +34 -0
  258. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/004-comfyui-node-activation/features/us1_node_activation.feature +25 -0
  259. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/004-comfyui-node-activation/features/us2_parallel_downloads.feature +21 -0
  260. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/004-comfyui-node-activation/features/us3_auth.feature +35 -0
  261. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/004-comfyui-node-activation/plan.md +428 -0
  262. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/004-comfyui-node-activation/spec.md +217 -0
  263. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/004-comfyui-node-activation/tasks.md +138 -0
  264. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/005-provisioning-progress-feedback/.beacon.toml +1 -0
  265. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/005-provisioning-progress-feedback/checklists/requirements.md +34 -0
  266. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/005-provisioning-progress-feedback/contracts/cli-commands.md +60 -0
  267. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/005-provisioning-progress-feedback/features/us1_phase_status.feature +23 -0
  268. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/005-provisioning-progress-feedback/features/us2_restart_countdown.feature +21 -0
  269. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/005-provisioning-progress-feedback/features/us3_per_file_download.feature +23 -0
  270. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/005-provisioning-progress-feedback/plan.md +272 -0
  271. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/005-provisioning-progress-feedback/research.md +85 -0
  272. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/005-provisioning-progress-feedback/spec.md +212 -0
  273. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/005-provisioning-progress-feedback/tasks.md +132 -0
  274. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/006-comfyui-provisioning-hardening/.beacon.toml +1 -0
  275. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/006-comfyui-provisioning-hardening/checklists/requirements.md +38 -0
  276. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/006-comfyui-provisioning-hardening/features/us1_honest_exit_codes.feature +19 -0
  277. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/006-comfyui-provisioning-hardening/features/us2_thread_safe_hf_downloads.feature +12 -0
  278. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/006-comfyui-provisioning-hardening/features/us3_authenticator_correctness.feature +16 -0
  279. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/006-comfyui-provisioning-hardening/features/us4_import_verification.feature +16 -0
  280. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/006-comfyui-provisioning-hardening/features/us5_preflight_checks.feature +17 -0
  281. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/006-comfyui-provisioning-hardening/features/us6_mid_download_liveness.feature +11 -0
  282. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/006-comfyui-provisioning-hardening/features/us7_partial_state_recovery.feature +11 -0
  283. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/006-comfyui-provisioning-hardening/plan.md +417 -0
  284. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/006-comfyui-provisioning-hardening/spec.md +370 -0
  285. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/006-comfyui-provisioning-hardening/tasks.md +229 -0
  286. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/007-multi-pod-manifest-schema/.beacon.toml +1 -0
  287. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/007-multi-pod-manifest-schema/checklists/requirements.md +35 -0
  288. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/007-multi-pod-manifest-schema/contracts/manifest-toml.md +123 -0
  289. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/007-multi-pod-manifest-schema/data-model.md +88 -0
  290. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/007-multi-pod-manifest-schema/features/us1_existing_manifests.feature +20 -0
  291. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/007-multi-pod-manifest-schema/features/us2_llm_sidecar.feature +26 -0
  292. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/007-multi-pod-manifest-schema/features/us3_multi_pod.feature +21 -0
  293. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/007-multi-pod-manifest-schema/plan.md +236 -0
  294. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/007-multi-pod-manifest-schema/research.md +89 -0
  295. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/007-multi-pod-manifest-schema/spec.md +113 -0
  296. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/007-multi-pod-manifest-schema/tasks.md +104 -0
  297. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/008-llm-sidecar-launch/.beacon.toml +1 -0
  298. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/008-llm-sidecar-launch/checklists/requirements.md +34 -0
  299. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/008-llm-sidecar-launch/data-model.md +41 -0
  300. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/008-llm-sidecar-launch/features/us1_llamacpp_sidecar.feature +18 -0
  301. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/008-llm-sidecar-launch/features/us2_ollama_sidecar.feature +13 -0
  302. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/008-llm-sidecar-launch/features/us3_no_llm_skip.feature +8 -0
  303. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/008-llm-sidecar-launch/plan.md +192 -0
  304. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/008-llm-sidecar-launch/research.md +80 -0
  305. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/008-llm-sidecar-launch/spec.md +179 -0
  306. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/008-llm-sidecar-launch/tasks.md +159 -0
  307. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/009-provision-failure-recovery/.beacon.toml +1 -0
  308. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/009-provision-failure-recovery/checklists/requirements.md +34 -0
  309. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/009-provision-failure-recovery/features/us1_ip_timeout.feature +12 -0
  310. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/009-provision-failure-recovery/features/us2_ssh_timeout.feature +12 -0
  311. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/009-provision-failure-recovery/plan.md +201 -0
  312. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/009-provision-failure-recovery/spec.md +169 -0
  313. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/009-provision-failure-recovery/tasks.md +129 -0
  314. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/010-multi-pod-loop/.beacon.toml +1 -0
  315. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/010-multi-pod-loop/checklists/requirements.md +34 -0
  316. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/010-multi-pod-loop/features/us1_two_pod_sequential.feature +14 -0
  317. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/010-multi-pod-loop/features/us2_single_pod_compat.feature +11 -0
  318. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/010-multi-pod-loop/features/us3_partial_failure.feature +16 -0
  319. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/010-multi-pod-loop/plan.md +244 -0
  320. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/010-multi-pod-loop/spec.md +184 -0
  321. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/010-multi-pod-loop/tasks.md +156 -0
  322. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/011-pods-fleet-view/.beacon.toml +1 -0
  323. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/011-pods-fleet-view/checklists/requirements.md +34 -0
  324. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/011-pods-fleet-view/features/us1_fleet_overview.feature +13 -0
  325. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/011-pods-fleet-view/features/us2_idle_filter.feature +18 -0
  326. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/011-pods-fleet-view/features/us3_zero_pod_safety.feature +13 -0
  327. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/011-pods-fleet-view/plan.md +205 -0
  328. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/011-pods-fleet-view/spec.md +173 -0
  329. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/011-pods-fleet-view/tasks.md +142 -0
  330. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/012-manifest-down/.beacon.toml +1 -0
  331. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/012-manifest-down/checklists/requirements.md +30 -0
  332. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/012-manifest-down/features/us1_single_pod_teardown.feature +14 -0
  333. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/012-manifest-down/features/us2_multi_pod_teardown.feature +14 -0
  334. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/012-manifest-down/features/us3_api_error_propagation.feature +16 -0
  335. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/012-manifest-down/plan.md +193 -0
  336. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/012-manifest-down/spec.md +172 -0
  337. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/012-manifest-down/tasks.md +142 -0
  338. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/013-structured-run-report/.beacon.toml +1 -0
  339. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/013-structured-run-report/checklists/requirements.md +30 -0
  340. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/013-structured-run-report/features/us1_single_pod_json.feature +17 -0
  341. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/013-structured-run-report/features/us2_multi_pod_json.feature +9 -0
  342. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/013-structured-run-report/features/us3_llm_sidecar_json.feature +6 -0
  343. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/013-structured-run-report/plan.md +180 -0
  344. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/013-structured-run-report/spec.md +167 -0
  345. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/013-structured-run-report/tasks.md +130 -0
  346. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/014-pre-flight-manifest-validation-warn-on-unknown-keys-suggest-missing-required-fields-provide-guided-scaffold-for-a-minimal-manifest/.beacon.toml +1 -0
  347. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/014-pre-flight-manifest-validation-warn-on-unknown-keys-suggest-missing-required-fields-provide-guided-scaffold-for-a-minimal-manifest/features/us1_check_finds_problems.feature +19 -0
  348. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/014-pre-flight-manifest-validation-warn-on-unknown-keys-suggest-missing-required-fields-provide-guided-scaffold-for-a-minimal-manifest/features/us2_init_scaffold.feature +13 -0
  349. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/014-pre-flight-manifest-validation-warn-on-unknown-keys-suggest-missing-required-fields-provide-guided-scaffold-for-a-minimal-manifest/features/us3_apply_preflight.feature +7 -0
  350. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/014-pre-flight-manifest-validation-warn-on-unknown-keys-suggest-missing-required-fields-provide-guided-scaffold-for-a-minimal-manifest/plan.md +258 -0
  351. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/014-pre-flight-manifest-validation-warn-on-unknown-keys-suggest-missing-required-fields-provide-guided-scaffold-for-a-minimal-manifest/spec.md +161 -0
  352. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/014-pre-flight-manifest-validation-warn-on-unknown-keys-suggest-missing-required-fields-provide-guided-scaffold-for-a-minimal-manifest/tasks.md +104 -0
  353. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/015-drift-detection-compare-live-pod-state-against-manifest-and-report-diverged-fields-without-re-provisioning/.beacon.toml +1 -0
  354. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/015-drift-detection-compare-live-pod-state-against-manifest-and-report-diverged-fields-without-re-provisioning/features/us1_drift_detection.feature +16 -0
  355. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/015-drift-detection-compare-live-pod-state-against-manifest-and-report-diverged-fields-without-re-provisioning/features/us2_pod_autodiscovery.feature +11 -0
  356. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/015-drift-detection-compare-live-pod-state-against-manifest-and-report-diverged-fields-without-re-provisioning/plan.md +240 -0
  357. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/015-drift-detection-compare-live-pod-state-against-manifest-and-report-diverged-fields-without-re-provisioning/spec.md +122 -0
  358. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/015-drift-detection-compare-live-pod-state-against-manifest-and-report-diverged-fields-without-re-provisioning/tasks.md +84 -0
  359. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/016-remote-log-capture/.beacon.toml +1 -0
  360. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/016-remote-log-capture/checklists/requirements.md +36 -0
  361. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/016-remote-log-capture/features/us1_log_captured_on_failed.feature +12 -0
  362. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/016-remote-log-capture/features/us2_log_unavailable_graceful.feature +15 -0
  363. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/016-remote-log-capture/plan.md +191 -0
  364. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/016-remote-log-capture/spec.md +176 -0
  365. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/016-remote-log-capture/tasks.md +111 -0
  366. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/017-apply-only-flag/.beacon.toml +1 -0
  367. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/017-apply-only-flag/checklists/requirements.md +34 -0
  368. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/017-apply-only-flag/features/us1_single_category.feature +19 -0
  369. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/017-apply-only-flag/features/us2_multi_category.feature +13 -0
  370. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/017-apply-only-flag/features/us3_backward_compat.feature +13 -0
  371. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/017-apply-only-flag/plan.md +210 -0
  372. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/017-apply-only-flag/spec.md +129 -0
  373. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/017-apply-only-flag/tasks.md +119 -0
  374. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/018-pods-stop-idle/.beacon.toml +1 -0
  375. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/018-pods-stop-idle/checklists/requirements.md +30 -0
  376. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/018-pods-stop-idle/features/us1_dry_run.feature +15 -0
  377. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/018-pods-stop-idle/features/us2_confirmed_stop.feature +19 -0
  378. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/018-pods-stop-idle/features/us3_nothing_to_do.feature +13 -0
  379. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/018-pods-stop-idle/plan.md +191 -0
  380. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/018-pods-stop-idle/spec.md +138 -0
  381. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/018-pods-stop-idle/tasks.md +139 -0
  382. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/019-apply-fix/.beacon.toml +1 -0
  383. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/019-apply-fix/checklists/requirements.md +30 -0
  384. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/019-apply-fix/features/us1_auto_converge.feature +20 -0
  385. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/019-apply-fix/features/us2_dry_run.feature +14 -0
  386. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/019-apply-fix/features/us3_only_scoping.feature +8 -0
  387. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/019-apply-fix/plan.md +222 -0
  388. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/019-apply-fix/spec.md +174 -0
  389. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/019-apply-fix/tasks.md +111 -0
  390. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/020-apply-prune/.beacon.toml +1 -0
  391. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/020-apply-prune/checklists/requirements.md +30 -0
  392. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/020-apply-prune/features/us1_interactive_prune.feature +20 -0
  393. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/020-apply-prune/features/us2_dry_run.feature +14 -0
  394. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/020-apply-prune/features/us3_yes_flag.feature +7 -0
  395. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/020-apply-prune/features/us4_only_scoping.feature +8 -0
  396. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/020-apply-prune/plan.md +262 -0
  397. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/020-apply-prune/spec.md +177 -0
  398. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/020-apply-prune/tasks.md +144 -0
  399. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/021-private-file-idempotency/.beacon.toml +1 -0
  400. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/021-private-file-idempotency/checklists/requirements.md +34 -0
  401. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/021-private-file-idempotency/features/us1_skip_identical_file.feature +19 -0
  402. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/021-private-file-idempotency/features/us2_report_accuracy.feature +11 -0
  403. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/021-private-file-idempotency/plan.md +139 -0
  404. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/021-private-file-idempotency/spec.md +92 -0
  405. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/021-private-file-idempotency/tasks.md +46 -0
  406. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/022-persist-pod-state-for-private-file-and-orphan-reconciliation/.beacon.toml +1 -0
  407. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/022-persist-pod-state-for-private-file-and-orphan-reconciliation/checklists/requirements.md +34 -0
  408. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/022-persist-pod-state-for-private-file-and-orphan-reconciliation/features/us1_state_written_on_apply.feature +17 -0
  409. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/022-persist-pod-state-for-private-file-and-orphan-reconciliation/features/us2_orphaned_private_file_pruned.feature +21 -0
  410. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/022-persist-pod-state-for-private-file-and-orphan-reconciliation/features/us3_graceful_degradation.feature +14 -0
  411. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/022-persist-pod-state-for-private-file-and-orphan-reconciliation/features/us4_human_readable_state.feature +8 -0
  412. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/022-persist-pod-state-for-private-file-and-orphan-reconciliation/plan.md +257 -0
  413. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/022-persist-pod-state-for-private-file-and-orphan-reconciliation/spec.md +162 -0
  414. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/022-persist-pod-state-for-private-file-and-orphan-reconciliation/tasks.md +132 -0
  415. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/022-pod-state-tracking/tasks.md +8 -0
  416. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/023-ci-gates-and-pypi-publishing/.beacon.toml +1 -0
  417. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/023-ci-gates-and-pypi-publishing/features/us1_ci_gates.feature +10 -0
  418. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/023-ci-gates-and-pypi-publishing/features/us3_installable.feature +6 -0
  419. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/023-ci-gates-and-pypi-publishing/plan.md +133 -0
  420. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/023-ci-gates-and-pypi-publishing/spec.md +135 -0
  421. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/023-ci-gates-and-pypi-publishing/tasks.md +58 -0
  422. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/024-model-download-retry/.beacon.toml +1 -0
  423. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/024-model-download-retry/features/us1_transient_retry.feature +14 -0
  424. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/024-model-download-retry/features/us2_permanent_fail_fast.feature +13 -0
  425. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/024-model-download-retry/features/us3_retry_count_in_report.feature +11 -0
  426. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/024-model-download-retry/plan.md +284 -0
  427. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/024-model-download-retry/spec.md +142 -0
  428. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/024-model-download-retry/tasks.md +111 -0
  429. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/025-node-install-retry/.beacon.toml +1 -0
  430. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/025-node-install-retry/checklists/requirements.md +34 -0
  431. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/025-node-install-retry/features/us1_transient_clone_retry.feature +14 -0
  432. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/025-node-install-retry/features/us2_permanent_clone_fail_fast.feature +13 -0
  433. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/025-node-install-retry/features/us3_pip_install_retry.feature +14 -0
  434. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/025-node-install-retry/features/us4_node_retry_max_flag.feature +13 -0
  435. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/025-node-install-retry/plan.md +233 -0
  436. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/025-node-install-retry/spec.md +125 -0
  437. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/025-node-install-retry/tasks.md +119 -0
  438. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/026-apply-state-per-item-completion/.beacon.toml +1 -0
  439. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/026-apply-state-per-item-completion/checklists/requirements.md +34 -0
  440. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/026-apply-state-per-item-completion/features/us1_incremental_state.feature +16 -0
  441. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/026-apply-state-per-item-completion/features/us2_atomic_write.feature +6 -0
  442. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/026-apply-state-per-item-completion/features/us3_no_resume_flag.feature +11 -0
  443. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/026-apply-state-per-item-completion/plan.md +302 -0
  444. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/026-apply-state-per-item-completion/spec.md +124 -0
  445. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/026-apply-state-per-item-completion/tasks.md +150 -0
  446. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/027-manifest-export-lint/.beacon.toml +1 -0
  447. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/027-manifest-export-lint/checklists/requirements.md +34 -0
  448. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/027-manifest-export-lint/features/us1_export.feature +22 -0
  449. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/027-manifest-export-lint/features/us2_share_lint.feature +22 -0
  450. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/027-manifest-export-lint/features/us3_stdout.feature +12 -0
  451. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/027-manifest-export-lint/plan.md +204 -0
  452. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/027-manifest-export-lint/spec.md +127 -0
  453. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/027-manifest-export-lint/tasks.md +174 -0
  454. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/028-pod-resume/.beacon.toml +1 -0
  455. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/028-pod-resume/checklists/requirements.md +34 -0
  456. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/028-pod-resume/features/us1_wake_and_wait.feature +16 -0
  457. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/028-pod-resume/features/us2_resume_with_apply.feature +11 -0
  458. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/028-pod-resume/features/us3_timeout_and_failure.feature +11 -0
  459. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/028-pod-resume/plan.md +212 -0
  460. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/028-pod-resume/spec.md +101 -0
  461. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/028-pod-resume/tasks.md +118 -0
  462. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/029-live-provisioning-smoke/.beacon.toml +1 -0
  463. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/029-live-provisioning-smoke/checklists/requirements.md +36 -0
  464. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/029-live-provisioning-smoke/features/us2_local_opt_in.feature +7 -0
  465. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/029-live-provisioning-smoke/features/us3_fork_pr_safety.feature +7 -0
  466. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/029-live-provisioning-smoke/plan.md +208 -0
  467. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/029-live-provisioning-smoke/spec.md +100 -0
  468. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/029-live-provisioning-smoke/tasks.md +103 -0
  469. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/030-comfy-nodes-extract/.beacon.toml +1 -0
  470. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/030-comfy-nodes-extract/checklists/requirements.md +34 -0
  471. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/030-comfy-nodes-extract/features/us1_nodes_in_nodes_py.feature +8 -0
  472. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/030-comfy-nodes-extract/features/us2_full_suite_passes.feature +8 -0
  473. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/030-comfy-nodes-extract/features/us3_public_api_unchanged.feature +8 -0
  474. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/030-comfy-nodes-extract/plan.md +179 -0
  475. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/030-comfy-nodes-extract/spec.md +106 -0
  476. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/030-comfy-nodes-extract/tasks.md +92 -0
  477. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/031-cli-pods-extract/.beacon.toml +1 -0
  478. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/031-cli-pods-extract/features/us1_pods_in_pod_commands.feature +16 -0
  479. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/031-cli-pods-extract/features/us2_full_suite_passes.feature +8 -0
  480. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/031-cli-pods-extract/features/us3_public_api_unchanged.feature +8 -0
  481. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/031-cli-pods-extract/plan.md +238 -0
  482. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/031-cli-pods-extract/spec.md +107 -0
  483. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/031-cli-pods-extract/tasks.md +94 -0
  484. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/032-cli-apply-extract/.beacon.toml +1 -0
  485. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/032-cli-apply-extract/features/us1_apply_in_apply_commands.feature +16 -0
  486. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/032-cli-apply-extract/features/us2_full_suite_passes.feature +8 -0
  487. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/032-cli-apply-extract/features/us3_public_api_unchanged.feature +8 -0
  488. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/032-cli-apply-extract/plan.md +261 -0
  489. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/032-cli-apply-extract/spec.md +113 -0
  490. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/032-cli-apply-extract/tasks.md +62 -0
  491. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/033-cli-manifest-extract/.beacon.toml +1 -0
  492. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/033-cli-manifest-extract/checklists/requirements.md +34 -0
  493. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/033-cli-manifest-extract/features/us1_manifest_in_manifest_commands.feature +16 -0
  494. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/033-cli-manifest-extract/features/us2_full_suite_passes.feature +8 -0
  495. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/033-cli-manifest-extract/features/us3_public_api_unchanged.feature +9 -0
  496. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/033-cli-manifest-extract/plan.md +187 -0
  497. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/033-cli-manifest-extract/spec.md +111 -0
  498. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/033-cli-manifest-extract/tasks.md +62 -0
  499. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/034-comfy-downloads-extract/.beacon.toml +1 -0
  500. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/034-comfy-downloads-extract/features/us1_downloads_in_downloads_module.feature +16 -0
  501. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/034-comfy-downloads-extract/features/us2_full_suite_passes.feature +16 -0
  502. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/034-comfy-downloads-extract/features/us3_public_api_unchanged.feature +16 -0
  503. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/034-comfy-downloads-extract/plan.md +205 -0
  504. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/034-comfy-downloads-extract/spec.md +105 -0
  505. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/034-comfy-downloads-extract/tasks.md +99 -0
  506. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/035-comfy-health-auth-state-extract/.beacon.toml +1 -0
  507. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/035-comfy-health-auth-state-extract/checklists/requirements.md +34 -0
  508. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/035-comfy-health-auth-state-extract/features/us1_symbols_in_modules.feature +22 -0
  509. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/035-comfy-health-auth-state-extract/features/us2_full_suite_passes.feature +11 -0
  510. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/035-comfy-health-auth-state-extract/features/us3_public_api_unchanged.feature +18 -0
  511. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/035-comfy-health-auth-state-extract/plan.md +293 -0
  512. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/035-comfy-health-auth-state-extract/spec.md +163 -0
  513. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/035-comfy-health-auth-state-extract/tasks.md +74 -0
  514. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/036-comfy-llm-extract/.beacon.toml +1 -0
  515. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/036-comfy-llm-extract/features/us1_llm_in_llm_module.feature +8 -0
  516. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/036-comfy-llm-extract/features/us2_full_suite_passes.feature +7 -0
  517. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/036-comfy-llm-extract/features/us3_public_api_unchanged.feature +16 -0
  518. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/036-comfy-llm-extract/plan.md +210 -0
  519. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/036-comfy-llm-extract/spec.md +90 -0
  520. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/036-comfy-llm-extract/tasks.md +66 -0
  521. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/037-provisioning-hardening/.beacon.toml +1 -0
  522. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/037-provisioning-hardening/features/us1_run_script_reconnect.feature +16 -0
  523. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/037-provisioning-hardening/features/us2_run_decode_safety.feature +12 -0
  524. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/037-provisioning-hardening/plan.md +167 -0
  525. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/037-provisioning-hardening/spec.md +91 -0
  526. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/037-provisioning-hardening/tasks.md +65 -0
  527. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/038-pod-drift-verify/.beacon.toml +1 -0
  528. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/038-pod-drift-verify/checklists/requirements.md +34 -0
  529. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/038-pod-drift-verify/features/us1_healthy_pod.feature +11 -0
  530. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/038-pod-drift-verify/features/us2_node_drift.feature +16 -0
  531. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/038-pod-drift-verify/features/us3_model_drift.feature +16 -0
  532. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/038-pod-drift-verify/plan.md +169 -0
  533. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/038-pod-drift-verify/spec.md +171 -0
  534. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/038-pod-drift-verify/tasks.md +93 -0
  535. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/039-api-retry/.beacon.toml +1 -0
  536. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/039-api-retry/checklists/requirements.md +34 -0
  537. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/039-api-retry/features/us1_transparent_retry.feature +17 -0
  538. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/039-api-retry/features/us2_create_pod_no_retry.feature +12 -0
  539. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/039-api-retry/features/us3_permanent_errors_fast_fail.feature +16 -0
  540. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/039-api-retry/plan.md +184 -0
  541. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/039-api-retry/spec.md +174 -0
  542. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/039-api-retry/tasks.md +127 -0
  543. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/040-reconcile-on-resume/.beacon.toml +1 -0
  544. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/040-reconcile-on-resume/checklists/requirements.md +34 -0
  545. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/040-reconcile-on-resume/features/us1_skip_present_items.feature +19 -0
  546. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/040-reconcile-on-resume/features/us2_reimport_failed_nodes.feature +13 -0
  547. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/040-reconcile-on-resume/features/us3_report_skipped_vs_installed.feature +7 -0
  548. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/040-reconcile-on-resume/plan.md +168 -0
  549. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/040-reconcile-on-resume/spec.md +167 -0
  550. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/040-reconcile-on-resume/tasks.md +55 -0
  551. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/041-unify-drift-detection/.beacon.toml +1 -0
  552. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/041-unify-drift-detection/checklists/requirements.md +34 -0
  553. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/041-unify-drift-detection/features/us1_import_failed_nodes_repaired.feature +16 -0
  554. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/041-unify-drift-detection/features/us2_size_mismatch_redownloaded.feature +6 -0
  555. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/041-unify-drift-detection/features/us3_inspect_pod_state_deleted.feature +11 -0
  556. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/041-unify-drift-detection/plan.md +215 -0
  557. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/041-unify-drift-detection/spec.md +152 -0
  558. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/041-unify-drift-detection/tasks.md +41 -0
  559. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/042-content-integrity-verify/.beacon.toml +1 -0
  560. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/042-content-integrity-verify/features/us1_expected_size_populated.feature +16 -0
  561. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/042-content-integrity-verify/features/us2_size_mismatch_redownloaded.feature +11 -0
  562. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/042-content-integrity-verify/features/us3_legacy_manifests_graceful.feature +6 -0
  563. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/042-content-integrity-verify/plan.md +191 -0
  564. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/042-content-integrity-verify/spec.md +130 -0
  565. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/042-content-integrity-verify/tasks.md +109 -0
  566. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/043-verify-size-backfill/.beacon.toml +1 -0
  567. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/043-verify-size-backfill/checklists/requirements.md +34 -0
  568. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/043-verify-size-backfill/features/us1_verify_detects_size_mismatch.feature +18 -0
  569. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/043-verify-size-backfill/features/us2_verify_graceful_on_api_failure.feature +8 -0
  570. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/043-verify-size-backfill/features/us3_verify_idempotent_backfill.feature +7 -0
  571. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/043-verify-size-backfill/plan.md +157 -0
  572. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/043-verify-size-backfill/spec.md +93 -0
  573. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/043-verify-size-backfill/tasks.md +106 -0
  574. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/044-civitai-expected-size/.beacon.toml +1 -0
  575. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/044-civitai-expected-size/checklists/requirements.md +34 -0
  576. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/044-civitai-expected-size/features/us1_verify_detects_size_mismatch.feature +18 -0
  577. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/044-civitai-expected-size/features/us2_apply_backfills_expected_size.feature +6 -0
  578. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/044-civitai-expected-size/features/us3_graceful_degradation.feature +15 -0
  579. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/044-civitai-expected-size/features/us4_idempotency.feature +7 -0
  580. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/044-civitai-expected-size/plan.md +215 -0
  581. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/044-civitai-expected-size/spec.md +111 -0
  582. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/044-civitai-expected-size/tasks.md +81 -0
  583. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/045-manifest-schema-versioning/.beacon.toml +1 -0
  584. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/045-manifest-schema-versioning/checklists/requirements.md +34 -0
  585. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/045-manifest-schema-versioning/features/us1_version_mismatch_clear_error.feature +20 -0
  586. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/045-manifest-schema-versioning/features/us2_existing_manifests_zero_breakage.feature +19 -0
  587. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/045-manifest-schema-versioning/features/us3_init_scaffolds_schema_version.feature +11 -0
  588. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/045-manifest-schema-versioning/plan.md +167 -0
  589. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/045-manifest-schema-versioning/spec.md +97 -0
  590. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/045-manifest-schema-versioning/tasks.md +74 -0
  591. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/046-fleet-verify-iteration/.beacon.toml +1 -0
  592. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/046-fleet-verify-iteration/features/us1_fleet_drift_verification.feature +20 -0
  593. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/046-fleet-verify-iteration/features/us2_per_pod_ssh_error.feature +18 -0
  594. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/046-fleet-verify-iteration/plan.md +196 -0
  595. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/046-fleet-verify-iteration/spec.md +98 -0
  596. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/046-fleet-verify-iteration/tasks.md +103 -0
  597. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/047-json-output-format/.beacon.toml +1 -0
  598. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/047-json-output-format/features/us1_json_output.feature +30 -0
  599. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/047-json-output-format/features/us2_text_regression.feature +13 -0
  600. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/047-json-output-format/plan.md +141 -0
  601. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/047-json-output-format/spec.md +69 -0
  602. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/047-json-output-format/tasks.md +98 -0
  603. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/048-drift-notification-hook/.beacon.toml +1 -0
  604. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/048-drift-notification-hook/checklists/requirements.md +34 -0
  605. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/048-drift-notification-hook/features/us1_ci_gate.feature +38 -0
  606. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/048-drift-notification-hook/features/us2_webhook.feature +28 -0
  607. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/048-drift-notification-hook/plan.md +164 -0
  608. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/048-drift-notification-hook/spec.md +149 -0
  609. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/048-drift-notification-hook/tasks.md +78 -0
  610. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/049-llm-sidecar-drift-and-verify-coverage/.beacon.toml +1 -0
  611. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/049-llm-sidecar-drift-and-verify-coverage/features/us1_llm_drift_verify.feature +36 -0
  612. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/049-llm-sidecar-drift-and-verify-coverage/features/us2_apply_fix_llm.feature +13 -0
  613. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/049-llm-sidecar-drift-and-verify-coverage/plan.md +172 -0
  614. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/049-llm-sidecar-drift-and-verify-coverage/spec.md +119 -0
  615. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/049-llm-sidecar-drift-and-verify-coverage/tasks.md +54 -0
  616. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/050-fleet-verify-per-pod-resources/.beacon.toml +1 -0
  617. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/050-fleet-verify-per-pod-resources/features/us1_fleet_verify_per_pod.feature +28 -0
  618. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/050-fleet-verify-per-pod-resources/plan.md +133 -0
  619. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/050-fleet-verify-per-pod-resources/spec.md +91 -0
  620. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/050-fleet-verify-per-pod-resources/tasks.md +41 -0
  621. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/051-llm-sidecar-liveness-hardening/.beacon.toml +1 -0
  622. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/051-llm-sidecar-liveness-hardening/features/us1_auth_header_sent.feature +16 -0
  623. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/051-llm-sidecar-liveness-hardening/features/us2_no_api_key.feature +12 -0
  624. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/051-llm-sidecar-liveness-hardening/plan.md +151 -0
  625. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/051-llm-sidecar-liveness-hardening/spec.md +76 -0
  626. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/051-llm-sidecar-liveness-hardening/tasks.md +61 -0
  627. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/052-civitai-sha256-hash-check/.beacon.toml +1 -0
  628. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/052-civitai-sha256-hash-check/features/us1_hash_mismatch.feature +17 -0
  629. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/052-civitai-sha256-hash-check/features/us3_apply_fix.feature +11 -0
  630. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/052-civitai-sha256-hash-check/features/us4_hf_unaffected.feature +7 -0
  631. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/052-civitai-sha256-hash-check/plan.md +244 -0
  632. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/052-civitai-sha256-hash-check/spec.md +145 -0
  633. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/052-civitai-sha256-hash-check/tasks.md +121 -0
  634. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/053-git-ls-remote-helper/.beacon.toml +1 -0
  635. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/053-git-ls-remote-helper/checklists/requirements.md +30 -0
  636. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/053-git-ls-remote-helper/features/us1_reachable_url.feature +11 -0
  637. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/053-git-ls-remote-helper/features/us2_unreachable_url.feature +24 -0
  638. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/053-git-ls-remote-helper/features/us3_timeout_bounded.feature +11 -0
  639. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/053-git-ls-remote-helper/plan.md +160 -0
  640. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/053-git-ls-remote-helper/spec.md +138 -0
  641. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/053-git-ls-remote-helper/tasks.md +114 -0
  642. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/054-manifest-preflight-command/.beacon.toml +1 -0
  643. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/054-manifest-preflight-command/checklists/requirements.md +34 -0
  644. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/054-manifest-preflight-command/features/us1_all_reachable.feature +17 -0
  645. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/054-manifest-preflight-command/features/us2_local_absent.feature +19 -0
  646. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/054-manifest-preflight-command/features/us3_network_unreachable.feature +24 -0
  647. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/054-manifest-preflight-command/features/us4_mixed_results.feature +13 -0
  648. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/054-manifest-preflight-command/plan.md +304 -0
  649. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/054-manifest-preflight-command/spec.md +215 -0
  650. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/054-manifest-preflight-command/tasks.md +108 -0
  651. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/055-fleet-apply-fix/.beacon.toml +1 -0
  652. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/055-fleet-apply-fix/checklists/requirements.md +34 -0
  653. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/055-fleet-apply-fix/features/us1_fleet_fix.feature +20 -0
  654. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/055-fleet-apply-fix/features/us2_fleet_prune.feature +13 -0
  655. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/055-fleet-apply-fix/features/us3_per_pod_failure.feature +16 -0
  656. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/055-fleet-apply-fix/plan.md +228 -0
  657. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/055-fleet-apply-fix/spec.md +105 -0
  658. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/055-fleet-apply-fix/tasks.md +147 -0
  659. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/056-manifest-lock-file-pin-git-ref-shas-and-model-download-urls/.beacon.toml +1 -0
  660. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/056-manifest-lock-file-pin-git-ref-shas-and-model-download-urls/features/us1_lock_write.feature +18 -0
  661. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/056-manifest-lock-file-pin-git-ref-shas-and-model-download-urls/features/us2_lock_consume.feature +19 -0
  662. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/056-manifest-lock-file-pin-git-ref-shas-and-model-download-urls/features/us3_lock_update_lock.feature +13 -0
  663. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/056-manifest-lock-file-pin-git-ref-shas-and-model-download-urls/features/us3_update_lock.feature +14 -0
  664. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/056-manifest-lock-file-pin-git-ref-shas-and-model-download-urls/features/us4_lock_preflight_lock.feature +14 -0
  665. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/056-manifest-lock-file-pin-git-ref-shas-and-model-download-urls/features/us4_preflight_lock.feature +14 -0
  666. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/056-manifest-lock-file-pin-git-ref-shas-and-model-download-urls/plan.md +320 -0
  667. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/056-manifest-lock-file-pin-git-ref-shas-and-model-download-urls/spec.md +201 -0
  668. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/056-manifest-lock-file-pin-git-ref-shas-and-model-download-urls/tasks.md +202 -0
  669. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/057-lock-token-strip/.beacon.toml +1 -0
  670. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/057-lock-token-strip/features/us1_tokenless_lock_write.feature +13 -0
  671. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/057-lock-token-strip/features/us2_token_inject_consume.feature +12 -0
  672. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/057-lock-token-strip/plan.md +176 -0
  673. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/057-lock-token-strip/spec.md +120 -0
  674. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/057-lock-token-strip/tasks.md +115 -0
  675. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/059-sha256-download-verify/.beacon.toml +1 -0
  676. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/059-sha256-download-verify/checklists/requirements.md +34 -0
  677. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/059-sha256-download-verify/features/us1_civitai_download_verify.feature +16 -0
  678. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/059-sha256-download-verify/features/us2_size_hash_idempotency.feature +16 -0
  679. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/059-sha256-download-verify/features/us3_hf_sha256_backfill.feature +16 -0
  680. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/059-sha256-download-verify/plan.md +281 -0
  681. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/059-sha256-download-verify/spec.md +181 -0
  682. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/059-sha256-download-verify/tasks.md +204 -0
  683. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/060-manifest-schema-migrate/.beacon.toml +1 -0
  684. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/060-manifest-schema-migrate/checklists/requirements.md +30 -0
  685. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/060-manifest-schema-migrate/features/us1_migrate_manifest.feature +21 -0
  686. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/060-manifest-schema-migrate/features/us2_dry_run.feature +15 -0
  687. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/060-manifest-schema-migrate/features/us3_no_op_on_current.feature +14 -0
  688. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/060-manifest-schema-migrate/plan.md +251 -0
  689. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/060-manifest-schema-migrate/spec.md +189 -0
  690. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/060-manifest-schema-migrate/tasks.md +132 -0
  691. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/061-first-run-doctor/.beacon.toml +1 -0
  692. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/061-first-run-doctor/checklists/requirements.md +30 -0
  693. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/061-first-run-doctor/features/us1_all_pass.feature +16 -0
  694. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/061-first-run-doctor/features/us2_failures_reported.feature +43 -0
  695. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/061-first-run-doctor/features/us3_idempotent.feature +11 -0
  696. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/061-first-run-doctor/plan.md +262 -0
  697. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/061-first-run-doctor/spec.md +215 -0
  698. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/061-first-run-doctor/tasks.md +120 -0
  699. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/062-fleet-apply-correctness/.beacon.toml +1 -0
  700. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/062-fleet-apply-correctness/checklists/requirements.md +30 -0
  701. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/062-fleet-apply-correctness/features/us1_starting_pod_reconcile.feature +22 -0
  702. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/062-fleet-apply-correctness/features/us2_gpu_used_in_result.feature +16 -0
  703. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/062-fleet-apply-correctness/features/us3_already_running_contract.feature +11 -0
  704. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/062-fleet-apply-correctness/plan.md +268 -0
  705. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/062-fleet-apply-correctness/spec.md +182 -0
  706. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/062-fleet-apply-correctness/tasks.md +94 -0
  707. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/063-preflight-cost-gate/.beacon.toml +1 -0
  708. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/063-preflight-cost-gate/features/us1_preflight_gpu_cost.feature +28 -0
  709. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/063-preflight-cost-gate/plan.md +257 -0
  710. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/063-preflight-cost-gate/spec.md +116 -0
  711. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/063-preflight-cost-gate/tasks.md +30 -0
  712. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/064-setup-packages/.beacon.toml +2 -0
  713. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/064-setup-packages/features/us1_setup_packages.feature +19 -0
  714. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/064-setup-packages/features/us2_fleet_setup_packages.feature +6 -0
  715. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/064-setup-packages/features/us3_verify_package_drift.feature +7 -0
  716. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/064-setup-packages/plan.md +300 -0
  717. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/064-setup-packages/spec.md +152 -0
  718. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/064-setup-packages/tasks.md +72 -0
  719. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/065-local-model-source/.beacon.toml +2 -0
  720. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/065-local-model-source/features/us1_local_model_seed.feature +12 -0
  721. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/065-local-model-source/features/us2_local_model_idempotent.feature +7 -0
  722. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/065-local-model-source/features/us3_local_model_fleet.feature +6 -0
  723. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/065-local-model-source/plan.md +278 -0
  724. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/065-local-model-source/spec.md +151 -0
  725. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/065-local-model-source/tasks.md +69 -0
  726. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/066-output-sync/.beacon.toml +2 -0
  727. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/066-output-sync/features/us1_output_sync.feature +12 -0
  728. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/066-output-sync/features/us2_output_sync_rsync_missing.feature +7 -0
  729. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/066-output-sync/features/us3_output_sync_fleet.feature +12 -0
  730. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/066-output-sync/plan.md +211 -0
  731. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/066-output-sync/spec.md +152 -0
  732. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/066-output-sync/tasks.md +69 -0
  733. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/067-models-add-local/.beacon.toml +2 -0
  734. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/067-models-add-local/checklists/requirements.md +42 -0
  735. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/067-models-add-local/features/us1_add_local_model.feature +15 -0
  736. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/067-models-add-local/features/us2_add_local_model_errors.feature +19 -0
  737. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/067-models-add-local/features/us3_add_local_model_sha256.feature +13 -0
  738. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/067-models-add-local/plan.md +220 -0
  739. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/067-models-add-local/spec.md +176 -0
  740. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/067-models-add-local/tasks.md +78 -0
  741. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/068-curu-auth-default/.beacon.toml +2 -0
  742. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/068-curu-auth-default/checklists/requirements.md +41 -0
  743. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/068-curu-auth-default/features/us1_curu_auth_default.feature +19 -0
  744. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/068-curu-auth-default/features/us2_curu_auth_token_persists.feature +11 -0
  745. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/068-curu-auth-default/features/us3_curu_auth_fleet.feature +8 -0
  746. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/068-curu-auth-default/plan.md +327 -0
  747. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/068-curu-auth-default/spec.md +206 -0
  748. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/068-curu-auth-default/tasks.md +89 -0
  749. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/069-ssh-proxy-fallback/.beacon.toml +2 -0
  750. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/069-ssh-proxy-fallback/checklists/requirements.md +41 -0
  751. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/069-ssh-proxy-fallback/features/us2_proxy_fallback_needs_sftp.feature +22 -0
  752. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/069-ssh-proxy-fallback/features/us3_hf_token_env_var.feature +11 -0
  753. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/069-ssh-proxy-fallback/plan.md +372 -0
  754. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/069-ssh-proxy-fallback/spec.md +213 -0
  755. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/069-ssh-proxy-fallback/tasks.md +89 -0
  756. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/070-comfy-manager-control/.beacon.toml +2 -0
  757. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/070-comfy-manager-control/checklists/requirements.md +42 -0
  758. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/070-comfy-manager-control/features/us1_on_demand_restart.feature +16 -0
  759. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/070-comfy-manager-control/features/us2_on_demand_upgrade.feature +11 -0
  760. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/070-comfy-manager-control/features/us3_upgrade_on_apply.feature +16 -0
  761. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/070-comfy-manager-control/plan.md +430 -0
  762. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/070-comfy-manager-control/spec.md +195 -0
  763. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/specs/070-comfy-manager-control/tasks.md +334 -0
  764. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/__init__.py +5 -0
  765. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/_cli_state.py +20 -0
  766. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/_retry.py +107 -0
  767. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/apply_commands.py +788 -0
  768. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/auth.py +161 -0
  769. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/__init__.py +0 -0
  770. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/auraflow.toml +10 -0
  771. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/chroma.toml +16 -0
  772. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/cogvideox.toml +19 -0
  773. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/flux1_dev.toml +22 -0
  774. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/flux1_schnell.toml +22 -0
  775. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/flux2.toml +22 -0
  776. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/flux2_klein.toml +22 -0
  777. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/hidream.toml +40 -0
  778. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/hunyuan_image.toml +28 -0
  779. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/hunyuan_video.toml +28 -0
  780. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/hunyuandit.toml +10 -0
  781. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/krea2.toml +22 -0
  782. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/ltxv.toml +16 -0
  783. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/lumina2.toml +10 -0
  784. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/mochi.toml +25 -0
  785. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/omnigen2.toml +22 -0
  786. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/pixart_sigma.toml +22 -0
  787. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/qwen_image.toml +22 -0
  788. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/sd15.toml +10 -0
  789. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/sd3_medium.toml +10 -0
  790. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/sdxl.toml +16 -0
  791. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/stable_cascade.toml +16 -0
  792. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/wan21.toml +22 -0
  793. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/wan22.toml +22 -0
  794. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog/z_image.toml +22 -0
  795. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/catalog_cmd.py +146 -0
  796. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/cli.py +381 -0
  797. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/comfy.py +514 -0
  798. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/doctor_commands.py +92 -0
  799. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/downloads.py +1276 -0
  800. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/git_utils.py +40 -0
  801. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/health.py +471 -0
  802. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/llm.py +759 -0
  803. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/lock.py +187 -0
  804. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/manifest.py +503 -0
  805. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/manifest_commands.py +726 -0
  806. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/models.py +171 -0
  807. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/nodes.py +263 -0
  808. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/packages.py +72 -0
  809. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/pod_commands.py +626 -0
  810. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/preflight.py +269 -0
  811. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/provisioner.py +473 -0
  812. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/registry.py +88 -0
  813. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/runpod.py +295 -0
  814. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/settings.py +67 -0
  815. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/ssh.py +251 -0
  816. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/state.py +124 -0
  817. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/sync_commands.py +84 -0
  818. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/src/curu_infra/verify_commands.py +296 -0
  819. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/__init__.py +0 -0
  820. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/conftest.py +42 -0
  821. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/__init__.py +0 -0
  822. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/conftest.py +49 -0
  823. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/__init__.py +0 -0
  824. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/_ssh_helpers.py +63 -0
  825. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/add_local_model_errors_steps.py +116 -0
  826. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/add_local_model_seed_steps.py +103 -0
  827. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/add_local_model_sha256_steps.py +86 -0
  828. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/api_retry_steps.py +139 -0
  829. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/apply_fix_steps.py +218 -0
  830. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/apply_only_steps.py +231 -0
  831. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/apply_prune_steps.py +228 -0
  832. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/apply_resume_steps.py +327 -0
  833. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/catalog_us1_steps.py +155 -0
  834. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/catalog_us2_steps.py +88 -0
  835. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/catalog_us3_steps.py +75 -0
  836. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/check_drift_steps.py +194 -0
  837. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/ci_steps.py +61 -0
  838. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/civitai_expected_size_steps.py +254 -0
  839. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/civitai_hash_steps.py +182 -0
  840. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/cli_apply_extract_steps.py +178 -0
  841. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/cli_manifest_extract_steps.py +186 -0
  842. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/cli_pods_extract_steps.py +174 -0
  843. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/comfy_downloads_extract_steps.py +225 -0
  844. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/comfy_health_auth_state_extract_steps.py +278 -0
  845. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/comfy_llm_extract_steps.py +191 -0
  846. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/comfy_us1_custom_node_steps.py +211 -0
  847. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/comfy_us2_model_steps.py +207 -0
  848. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/comfy_us3_private_file_steps.py +122 -0
  849. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/comfy_us4_report_steps.py +321 -0
  850. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/comfy_us5_health_steps.py +81 -0
  851. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/content_integrity_steps.py +271 -0
  852. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/curu_auth_default_steps.py +142 -0
  853. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/curu_auth_fleet_steps.py +63 -0
  854. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/curu_auth_persist_steps.py +113 -0
  855. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/doctor_steps.py +347 -0
  856. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/fleet_apply_steps.py +268 -0
  857. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/fleet_per_pod_steps.py +207 -0
  858. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/fleet_setup_packages_steps.py +79 -0
  859. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/fleet_verify_steps.py +242 -0
  860. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/git_ls_remote_steps.py +111 -0
  861. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/hf_token_env_var_steps.py +77 -0
  862. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/import_verification_steps.py +194 -0
  863. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/json_output_steps.py +272 -0
  864. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/llm_drift_steps.py +229 -0
  865. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/llm_liveness_auth_steps.py +183 -0
  866. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/llm_sidecar_steps.py +313 -0
  867. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/local_model_fleet_steps.py +90 -0
  868. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/local_model_idempotent_steps.py +84 -0
  869. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/local_model_seed_steps.py +114 -0
  870. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/lock_steps.py +497 -0
  871. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/lock_token_steps.py +322 -0
  872. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/log_capture_steps.py +203 -0
  873. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/manager_restart_steps.py +145 -0
  874. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/manager_upgrade_steps.py +116 -0
  875. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/manifest_check_steps.py +296 -0
  876. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/manifest_down_steps.py +208 -0
  877. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/manifest_export_steps.py +264 -0
  878. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/manifest_migrate_steps.py +230 -0
  879. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/manifest_schema_versioning_steps.py +219 -0
  880. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/manifest_us1_backward_compat_steps.py +125 -0
  881. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/manifest_us2_llm_sidecar_steps.py +152 -0
  882. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/manifest_us3_multi_pod_steps.py +128 -0
  883. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/multi_pod_steps.py +270 -0
  884. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/node_activation_us1_steps.py +312 -0
  885. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/node_activation_us2_steps.py +162 -0
  886. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/node_activation_us3_steps.py +175 -0
  887. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/node_retry_steps.py +236 -0
  888. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/nodes_extract_steps.py +160 -0
  889. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/output_sync_fleet_steps.py +121 -0
  890. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/output_sync_rsync_missing_steps.py +89 -0
  891. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/output_sync_seed_steps.py +104 -0
  892. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/pod_drift_verify_steps.py +235 -0
  893. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/pod_resume_steps.py +317 -0
  894. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/pod_state_steps.py +392 -0
  895. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/pod_status_steps.py +223 -0
  896. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/pods_fleet_steps.py +154 -0
  897. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/pods_stop_idle_steps.py +174 -0
  898. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/preflight_cost_steps.py +211 -0
  899. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/preflight_steps.py +482 -0
  900. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/private_file_idempotency_steps.py +105 -0
  901. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/progress_feedback_steps.py +551 -0
  902. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/provision_failure_steps.py +120 -0
  903. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/provisioning_hardening_steps.py +197 -0
  904. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/proxy_fallback_needs_sftp_steps.py +102 -0
  905. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/reconcile_on_resume_steps.py +120 -0
  906. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/retry_steps.py +213 -0
  907. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/setup_packages_steps.py +130 -0
  908. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/sha256_download_steps.py +393 -0
  909. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/smoke_steps.py +103 -0
  910. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/structured_report_steps.py +327 -0
  911. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/unify_drift_detection_steps.py +119 -0
  912. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/upgrade_on_apply_steps.py +138 -0
  913. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/us1_apply_manifest_steps.py +234 -0
  914. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/us2_dry_run_steps.py +89 -0
  915. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/us3_pod_lifecycle_steps.py +107 -0
  916. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/verify_package_drift_steps.py +66 -0
  917. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/steps/verify_size_backfill_steps.py +218 -0
  918. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_add_local_model_us1.py +7 -0
  919. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_add_local_model_us2.py +7 -0
  920. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_add_local_model_us3.py +7 -0
  921. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_api_retry_us1.py +11 -0
  922. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_api_retry_us2.py +11 -0
  923. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_api_retry_us3.py +11 -0
  924. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_apply_fix_us1.py +10 -0
  925. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_apply_fix_us2.py +10 -0
  926. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_apply_fix_us3.py +10 -0
  927. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_apply_only_us1.py +12 -0
  928. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_apply_only_us2.py +12 -0
  929. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_apply_only_us3.py +12 -0
  930. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_apply_prune_us1.py +12 -0
  931. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_apply_prune_us2.py +10 -0
  932. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_apply_prune_us3.py +10 -0
  933. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_apply_prune_us4.py +10 -0
  934. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_apply_resume_us1.py +12 -0
  935. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_apply_resume_us2.py +10 -0
  936. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_apply_resume_us3.py +12 -0
  937. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_catalog_us1.py +10 -0
  938. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_catalog_us2.py +10 -0
  939. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_catalog_us3.py +10 -0
  940. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_check_drift_us1.py +5 -0
  941. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_check_drift_us2.py +5 -0
  942. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_ci_gates_us1.py +14 -0
  943. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_ci_gates_us3.py +14 -0
  944. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_civitai_expected_size_us1.py +7 -0
  945. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_civitai_expected_size_us2.py +9 -0
  946. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_civitai_expected_size_us3.py +7 -0
  947. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_civitai_expected_size_us4.py +7 -0
  948. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_civitai_hash_us1.py +5 -0
  949. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_civitai_hash_us3.py +5 -0
  950. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_civitai_hash_us4.py +5 -0
  951. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_cli_apply_extract_us1.py +11 -0
  952. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_cli_apply_extract_us2.py +14 -0
  953. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_cli_apply_extract_us3.py +11 -0
  954. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_cli_manifest_extract_us1.py +11 -0
  955. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_cli_manifest_extract_us2.py +14 -0
  956. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_cli_manifest_extract_us3.py +11 -0
  957. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_cli_pods_extract_us1.py +11 -0
  958. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_cli_pods_extract_us2.py +14 -0
  959. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_cli_pods_extract_us3.py +11 -0
  960. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_comfy_downloads_extract_us1.py +11 -0
  961. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_comfy_downloads_extract_us2.py +14 -0
  962. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_comfy_downloads_extract_us3.py +11 -0
  963. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_comfy_health_auth_state_extract_us1.py +11 -0
  964. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_comfy_health_auth_state_extract_us2.py +14 -0
  965. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_comfy_health_auth_state_extract_us3.py +11 -0
  966. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_comfy_llm_extract_us1.py +11 -0
  967. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_comfy_llm_extract_us2.py +14 -0
  968. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_comfy_llm_extract_us3.py +11 -0
  969. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_comfy_manager_control_us1.py +7 -0
  970. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_comfy_manager_control_us2.py +7 -0
  971. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_comfy_manager_control_us3.py +7 -0
  972. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_comfy_us1.py +10 -0
  973. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_comfy_us2.py +10 -0
  974. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_comfy_us3.py +10 -0
  975. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_comfy_us4.py +10 -0
  976. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_comfy_us5.py +10 -0
  977. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_content_integrity_verify_us1.py +7 -0
  978. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_content_integrity_verify_us2.py +9 -0
  979. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_content_integrity_verify_us3.py +7 -0
  980. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_curu_auth_default_us1.py +7 -0
  981. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_curu_auth_default_us2.py +7 -0
  982. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_curu_auth_default_us3.py +7 -0
  983. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_doctor_us1.py +7 -0
  984. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_doctor_us2.py +7 -0
  985. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_doctor_us3.py +7 -0
  986. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_fleet_apply_us1.py +7 -0
  987. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_fleet_apply_us2.py +7 -0
  988. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_fleet_apply_us3.py +7 -0
  989. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_fleet_verify_per_pod_us1.py +7 -0
  990. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_fleet_verify_us1.py +5 -0
  991. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_fleet_verify_us2.py +5 -0
  992. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_git_ls_remote_us1.py +5 -0
  993. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_git_ls_remote_us2.py +5 -0
  994. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_git_ls_remote_us3.py +5 -0
  995. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_hardening_us4.py +9 -0
  996. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_json_output_us1.py +5 -0
  997. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_json_output_us2.py +5 -0
  998. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_llm_drift_us1.py +7 -0
  999. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_llm_drift_us2.py +7 -0
  1000. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_llm_liveness_auth_us1.py +5 -0
  1001. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_llm_liveness_auth_us2.py +5 -0
  1002. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_llm_us1.py +10 -0
  1003. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_llm_us2.py +10 -0
  1004. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_llm_us3.py +10 -0
  1005. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_local_model_source_us1.py +7 -0
  1006. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_local_model_source_us2.py +7 -0
  1007. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_local_model_source_us3.py +7 -0
  1008. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_lock_token_us1.py +7 -0
  1009. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_lock_token_us2.py +7 -0
  1010. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_lock_us1.py +9 -0
  1011. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_lock_us2.py +9 -0
  1012. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_lock_us3.py +9 -0
  1013. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_lock_us4.py +9 -0
  1014. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_log_capture_us1.py +12 -0
  1015. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_log_capture_us2.py +12 -0
  1016. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_manifest_check_us1.py +15 -0
  1017. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_manifest_check_us2.py +13 -0
  1018. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_manifest_check_us3.py +15 -0
  1019. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_manifest_down_us1.py +12 -0
  1020. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_manifest_down_us2.py +12 -0
  1021. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_manifest_down_us3.py +12 -0
  1022. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_manifest_export_us1.py +10 -0
  1023. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_manifest_export_us2.py +10 -0
  1024. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_manifest_export_us3.py +10 -0
  1025. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_manifest_schema_versioning_us1.py +7 -0
  1026. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_manifest_schema_versioning_us2.py +7 -0
  1027. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_manifest_schema_versioning_us3.py +7 -0
  1028. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_manifest_us1.py +10 -0
  1029. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_manifest_us2.py +10 -0
  1030. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_manifest_us3.py +10 -0
  1031. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_migrate_us1.py +7 -0
  1032. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_migrate_us2.py +7 -0
  1033. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_migrate_us3.py +7 -0
  1034. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_multi_pod_us1.py +12 -0
  1035. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_multi_pod_us2.py +12 -0
  1036. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_multi_pod_us3.py +12 -0
  1037. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_node_activation_us1.py +10 -0
  1038. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_node_activation_us2.py +10 -0
  1039. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_node_activation_us3.py +10 -0
  1040. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_node_retry_us1.py +12 -0
  1041. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_node_retry_us2.py +12 -0
  1042. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_node_retry_us3.py +11 -0
  1043. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_node_retry_us4.py +11 -0
  1044. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_nodes_extract_us1.py +3 -0
  1045. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_nodes_extract_us2.py +6 -0
  1046. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_nodes_extract_us3.py +3 -0
  1047. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_output_sync_us1.py +7 -0
  1048. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_output_sync_us2.py +7 -0
  1049. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_output_sync_us3.py +7 -0
  1050. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_pod_drift_verify_us1.py +11 -0
  1051. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_pod_drift_verify_us2.py +11 -0
  1052. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_pod_drift_verify_us3.py +11 -0
  1053. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_pod_resume_us1.py +10 -0
  1054. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_pod_resume_us2.py +12 -0
  1055. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_pod_resume_us3.py +12 -0
  1056. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_pod_state_us1.py +11 -0
  1057. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_pod_state_us2.py +11 -0
  1058. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_pod_state_us3.py +11 -0
  1059. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_pod_state_us4.py +11 -0
  1060. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_pod_status_us1.py +15 -0
  1061. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_pod_status_us2.py +15 -0
  1062. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_pods_fleet_us1.py +12 -0
  1063. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_pods_fleet_us2.py +12 -0
  1064. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_pods_fleet_us3.py +12 -0
  1065. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_pods_stop_idle_us1.py +10 -0
  1066. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_pods_stop_idle_us2.py +12 -0
  1067. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_pods_stop_idle_us3.py +10 -0
  1068. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_preflight_cost_us1.py +7 -0
  1069. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_preflight_us1.py +7 -0
  1070. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_preflight_us2.py +7 -0
  1071. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_preflight_us3.py +7 -0
  1072. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_preflight_us4.py +7 -0
  1073. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_private_file_idempotency_us1.py +11 -0
  1074. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_private_file_idempotency_us2.py +11 -0
  1075. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_progress_us1.py +3 -0
  1076. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_progress_us2.py +3 -0
  1077. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_progress_us3.py +3 -0
  1078. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_provision_failure_us1.py +12 -0
  1079. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_provision_failure_us2.py +12 -0
  1080. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_provisioning_hardening_us1.py +11 -0
  1081. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_provisioning_hardening_us2.py +11 -0
  1082. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_reconcile_on_resume_us1.py +10 -0
  1083. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_reconcile_on_resume_us2.py +10 -0
  1084. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_reconcile_on_resume_us3.py +10 -0
  1085. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_retry_us1.py +12 -0
  1086. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_retry_us2.py +12 -0
  1087. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_retry_us3.py +12 -0
  1088. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_setup_packages_us1.py +7 -0
  1089. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_setup_packages_us2.py +7 -0
  1090. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_setup_packages_us3.py +7 -0
  1091. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_sha256_us1.py +7 -0
  1092. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_sha256_us2.py +7 -0
  1093. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_sha256_us3.py +7 -0
  1094. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_smoke_us2.py +10 -0
  1095. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_smoke_us3.py +12 -0
  1096. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_ssh_proxy_fallback_us2.py +7 -0
  1097. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_ssh_proxy_fallback_us3.py +7 -0
  1098. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_structured_report_us1.py +14 -0
  1099. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_structured_report_us2.py +9 -0
  1100. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_structured_report_us3.py +9 -0
  1101. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_unify_drift_detection_us1.py +10 -0
  1102. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_unify_drift_detection_us2.py +10 -0
  1103. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_unify_drift_detection_us3.py +10 -0
  1104. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_us1.py +10 -0
  1105. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_us2.py +10 -0
  1106. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_us3.py +10 -0
  1107. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_verify_size_backfill_us1.py +7 -0
  1108. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_verify_size_backfill_us2.py +9 -0
  1109. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/features/test_verify_size_backfill_us3.py +7 -0
  1110. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/integration/__init__.py +0 -0
  1111. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/integration/test_apply.py +75 -0
  1112. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/integration/test_comfy_apply.py +54 -0
  1113. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/integration/test_smoke.py +145 -0
  1114. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/__init__.py +0 -0
  1115. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_apply_commands.py +446 -0
  1116. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_auth.py +326 -0
  1117. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_catalog_cmd.py +125 -0
  1118. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_cli.py +5125 -0
  1119. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_cli_apply_extract.py +64 -0
  1120. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_cli_check_drift.py +234 -0
  1121. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_cli_manifest_extract.py +63 -0
  1122. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_cli_pods_extract.py +65 -0
  1123. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_cli_verify.py +589 -0
  1124. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_comfy.py +6777 -0
  1125. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_comfy_downloads_extract.py +95 -0
  1126. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_comfy_health_auth_state_extract.py +190 -0
  1127. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_comfy_llm_extract.py +100 -0
  1128. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_doctor_commands.py +440 -0
  1129. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_downloads.py +872 -0
  1130. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_fleet_apply.py +199 -0
  1131. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_fleet_apply_correctness.py +266 -0
  1132. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_git_utils.py +65 -0
  1133. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_llm_auth_gate.py +509 -0
  1134. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_llm_provision_auth.py +232 -0
  1135. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_lock.py +510 -0
  1136. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_lock_token_strip.py +137 -0
  1137. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_manifest.py +1136 -0
  1138. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_manifest_comfy.py +428 -0
  1139. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_manifest_commands.py +77 -0
  1140. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_manifest_example.py +92 -0
  1141. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_manifest_include.py +208 -0
  1142. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_manifest_migrate.py +216 -0
  1143. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_models.py +166 -0
  1144. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_models_comfy.py +92 -0
  1145. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_nodes_extract.py +106 -0
  1146. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_preflight.py +404 -0
  1147. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_preflight_cost_gate.py +218 -0
  1148. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_provisioner.py +1021 -0
  1149. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_registry.py +114 -0
  1150. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_runpod.py +660 -0
  1151. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_runpod_retry.py +205 -0
  1152. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_settings.py +181 -0
  1153. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_sha256_download_verify.py +617 -0
  1154. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_smoke_unit.py +67 -0
  1155. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_smoke_workflow.py +53 -0
  1156. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_ssh.py +332 -0
  1157. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_ssh_session.py +305 -0
  1158. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_sync_commands.py +206 -0
  1159. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/tests/unit/test_verify_commands.py +1052 -0
  1160. curu_infra-0.58.0/.claude/worktrees/port-patch-fix/uv.lock +1073 -0
  1161. curu_infra-0.58.0/.github/workflows/ci.yml +43 -0
  1162. curu_infra-0.58.0/.github/workflows/release.yml +64 -0
  1163. curu_infra-0.58.0/.github/workflows/smoke.yml +60 -0
  1164. curu_infra-0.58.0/.gitignore +60 -0
  1165. curu_infra-0.58.0/.pre-commit-config.yaml +41 -0
  1166. curu_infra-0.58.0/.specify/feature.json +3 -0
  1167. curu_infra-0.58.0/.specify/init-options.json +10 -0
  1168. curu_infra-0.58.0/.specify/integration.json +15 -0
  1169. curu_infra-0.58.0/.specify/integrations/claude.manifest.json +16 -0
  1170. curu_infra-0.58.0/.specify/integrations/speckit.manifest.json +17 -0
  1171. curu_infra-0.58.0/.specify/memory/constitution.md +54 -0
  1172. curu_infra-0.58.0/.specify/scripts/bash/check-prerequisites.sh +192 -0
  1173. curu_infra-0.58.0/.specify/scripts/bash/common.sh +644 -0
  1174. curu_infra-0.58.0/.specify/scripts/bash/create-new-feature.sh +413 -0
  1175. curu_infra-0.58.0/.specify/scripts/bash/setup-plan.sh +91 -0
  1176. curu_infra-0.58.0/.specify/scripts/bash/setup-tasks.sh +96 -0
  1177. curu_infra-0.58.0/.specify/templates/checklist-template.md +40 -0
  1178. curu_infra-0.58.0/.specify/templates/constitution-template.md +50 -0
  1179. curu_infra-0.58.0/.specify/templates/plan-template.md +113 -0
  1180. curu_infra-0.58.0/.specify/templates/spec-template.md +131 -0
  1181. curu_infra-0.58.0/.specify/templates/tasks-template.md +252 -0
  1182. curu_infra-0.58.0/.specify/workflows/speckit/workflow.yml +77 -0
  1183. curu_infra-0.58.0/.specify/workflows/workflow-registry.json +13 -0
  1184. curu_infra-0.58.0/CHANGELOG.md +10089 -0
  1185. curu_infra-0.58.0/CLAUDE.md +5 -0
  1186. curu_infra-0.58.0/PKG-INFO +23 -0
  1187. curu_infra-0.58.0/PUBLISHING.md +71 -0
  1188. curu_infra-0.58.0/README.md +185 -0
  1189. curu_infra-0.58.0/ROADMAP.md +66 -0
  1190. curu_infra-0.58.0/beacon.md +17 -0
  1191. curu_infra-0.58.0/conftest.py +62 -0
  1192. curu_infra-0.58.0/manifest.example.toml +547 -0
  1193. curu_infra-0.58.0/project-management/.beacon/bullets.toml +12 -0
  1194. curu_infra-0.58.0/project-management/.beacon/doctor.toml.example +131 -0
  1195. curu_infra-0.58.0/project-management/.beacon/init-options.json +69 -0
  1196. curu_infra-0.58.0/project-management/ADRs/ADR-000-template.md +60 -0
  1197. curu_infra-0.58.0/project-management/ADRs/ADR-001-toml-manifest-format.md +82 -0
  1198. curu_infra-0.58.0/project-management/ADRs/ADR-002-pydantic-manifest-validation.md +90 -0
  1199. curu_infra-0.58.0/project-management/ADRs/ADR-003-runpod-graphql-api.md +102 -0
  1200. curu_infra-0.58.0/project-management/ADRs/ADR-004-python-typer-uv-toolchain.md +95 -0
  1201. curu_infra-0.58.0/project-management/ADRs/ADR-005-comfyui-restart-after-node-install.md +118 -0
  1202. curu_infra-0.58.0/project-management/ADRs/ADR-006-llm-top-level-manifest-key.md +123 -0
  1203. curu_infra-0.58.0/project-management/ADRs/ADR-007-nohup-llm-process-management.md +59 -0
  1204. curu_infra-0.58.0/project-management/ADRs/ADR-008-apply-output-json-schema.md +54 -0
  1205. curu_infra-0.58.0/project-management/ADRs/ADR-009-apply-only-filter-scope.md +59 -0
  1206. curu_infra-0.58.0/project-management/ADRs/ADR-010-size-only-idempotency-for-pod-file-operations.md +77 -0
  1207. curu_infra-0.58.0/project-management/ADRs/ADR-011-pod-state-file-format-and-location.md +109 -0
  1208. curu_infra-0.58.0/project-management/ADRs/ADR-012-versioning-and-release-strategy.md +32 -0
  1209. curu_infra-0.58.0/project-management/ADRs/ADR-013-model-download-retry-policy.md +118 -0
  1210. curu_infra-0.58.0/project-management/ADRs/ADR-014-smoke-test-cost-and-teardown.md +61 -0
  1211. curu_infra-0.58.0/project-management/ADRs/ADR-015-module-split-seams-and-backward-compat-re-exports.md +97 -0
  1212. curu_infra-0.58.0/project-management/ADRs/ADR-016-ssh-transport-reconnect.md +65 -0
  1213. curu_infra-0.58.0/project-management/ADRs/ADR-017-drift-definition-and-verify-semantics.md +76 -0
  1214. curu_infra-0.58.0/project-management/ADRs/ADR-018-runpod-api-retry-policy.md +141 -0
  1215. curu_infra-0.58.0/project-management/ADRs/ADR-019-reconcile-skip-source-of-truth.md +67 -0
  1216. curu_infra-0.58.0/project-management/ADRs/ADR-020-single-drift-detection-api.md +70 -0
  1217. curu_infra-0.58.0/project-management/ADRs/ADR-021-expected-size-population-strategy.md +57 -0
  1218. curu_infra-0.58.0/project-management/ADRs/ADR-022-manifest-schema-versioning-policy.md +82 -0
  1219. curu_infra-0.58.0/project-management/ADRs/ADR-023-verify-json-output-schema.md +38 -0
  1220. curu_infra-0.58.0/project-management/ADRs/ADR-024-drift-hook-contract.md +57 -0
  1221. curu_infra-0.58.0/project-management/ADRs/ADR-025-llm-sidecar-driftstatus-and-schema-v2.md +80 -0
  1222. curu_infra-0.58.0/project-management/ADRs/ADR-026-preflight-scope-and-flag.md +92 -0
  1223. curu_infra-0.58.0/project-management/ADRs/ADR-027-lock-file-location-and-format.md +59 -0
  1224. curu_infra-0.58.0/project-management/ADRs/ADR-028-lock-url-token-stripping.md +73 -0
  1225. curu_infra-0.58.0/project-management/ADRs/ADR-029-native-ssh-vs-ansible-for-setup-and-sync.md +93 -0
  1226. curu_infra-0.58.0/project-management/ADRs/ADR-030-curu-auth-replaces-comfyui-authenticator.md +128 -0
  1227. curu_infra-0.58.0/project-management/ADRs/ADR-031-runpod-rest-api-v2.md +213 -0
  1228. curu_infra-0.58.0/project-management/ADRs/ADR-032-watchdog-activity-is-interaction-not-presence.md +176 -0
  1229. curu_infra-0.58.0/project-management/ADRs/README.md +40 -0
  1230. curu_infra-0.58.0/project-management/Background/00-problem-statement.md +50 -0
  1231. curu_infra-0.58.0/project-management/Background/01-final-architecture-document.md +185 -0
  1232. curu_infra-0.58.0/project-management/Roadmap/README.md +151 -0
  1233. curu_infra-0.58.0/project-management/Roadmap/archive/.gitkeep +0 -0
  1234. curu_infra-0.58.0/project-management/Roadmap/epics/.gitkeep +0 -0
  1235. curu_infra-0.58.0/project-management/Roadmap/epics/EPIC-TEMPLATE.md +46 -0
  1236. curu_infra-0.58.0/project-management/Roadmap/epics/archive/.gitkeep +0 -0
  1237. curu_infra-0.58.0/project-management/Roadmap/epics/archive/apply-observability.md +50 -0
  1238. curu_infra-0.58.0/project-management/Roadmap/epics/archive/apply-prune.md +46 -0
  1239. curu_infra-0.58.0/project-management/Roadmap/epics/archive/apply-reconcile.md +49 -0
  1240. curu_infra-0.58.0/project-management/Roadmap/epics/archive/apply-resumability.md +38 -0
  1241. curu_infra-0.58.0/project-management/Roadmap/epics/archive/civitai-coverage-parity.md +31 -0
  1242. curu_infra-0.58.0/project-management/Roadmap/epics/archive/cli-manifest-extract.md +44 -0
  1243. curu_infra-0.58.0/project-management/Roadmap/epics/archive/cli-module-split.md +64 -0
  1244. curu_infra-0.58.0/project-management/Roadmap/epics/archive/comfy-manager-control.md +72 -0
  1245. curu_infra-0.58.0/project-management/Roadmap/epics/archive/comfy-module-split.md +61 -0
  1246. curu_infra-0.58.0/project-management/Roadmap/epics/archive/comfyui-model-catalog.md +58 -0
  1247. curu_infra-0.58.0/project-management/Roadmap/epics/archive/comfyui-provision.md +81 -0
  1248. curu_infra-0.58.0/project-management/Roadmap/epics/archive/content-integrity-completeness.md +44 -0
  1249. curu_infra-0.58.0/project-management/Roadmap/epics/archive/content-integrity-verify.md +40 -0
  1250. curu_infra-0.58.0/project-management/Roadmap/epics/archive/curu-auth-default.md +50 -0
  1251. curu_infra-0.58.0/project-management/Roadmap/epics/archive/download-integrity-enforcement.md +37 -0
  1252. curu_infra-0.58.0/project-management/Roadmap/epics/archive/drift-notification-hook.md +39 -0
  1253. curu_infra-0.58.0/project-management/Roadmap/epics/archive/first-run-doctor.md +58 -0
  1254. curu_infra-0.58.0/project-management/Roadmap/epics/archive/fleet-apply-fix.md +43 -0
  1255. curu_infra-0.58.0/project-management/Roadmap/epics/archive/fleet-pod-create.md +74 -0
  1256. curu_infra-0.58.0/project-management/Roadmap/epics/archive/fleet-verify-per-pod-resources.md +33 -0
  1257. curu_infra-0.58.0/project-management/Roadmap/epics/archive/foundation.md +61 -0
  1258. curu_infra-0.58.0/project-management/Roadmap/epics/archive/idempotent-private-files.md +41 -0
  1259. curu_infra-0.58.0/project-management/Roadmap/epics/archive/live-provisioning-smoke.md +31 -0
  1260. curu_infra-0.58.0/project-management/Roadmap/epics/archive/llm-sidecar-drift.md +39 -0
  1261. curu_infra-0.58.0/project-management/Roadmap/epics/archive/llm-sidecar-liveness-hardening.md +31 -0
  1262. curu_infra-0.58.0/project-management/Roadmap/epics/archive/llm-sidecar.md +79 -0
  1263. curu_infra-0.58.0/project-management/Roadmap/epics/archive/lock-token-leak-guard.md +36 -0
  1264. curu_infra-0.58.0/project-management/Roadmap/epics/archive/manifest-doctor.md +47 -0
  1265. curu_infra-0.58.0/project-management/Roadmap/epics/archive/manifest-init.md +30 -0
  1266. curu_infra-0.58.0/project-management/Roadmap/epics/archive/manifest-lock.md +37 -0
  1267. curu_infra-0.58.0/project-management/Roadmap/epics/archive/manifest-portability.md +56 -0
  1268. curu_infra-0.58.0/project-management/Roadmap/epics/archive/manifest-preflight-validation.md +33 -0
  1269. curu_infra-0.58.0/project-management/Roadmap/epics/archive/manifest-schema-migrate.md +36 -0
  1270. curu_infra-0.58.0/project-management/Roadmap/epics/archive/manifest-schema-versioning.md +35 -0
  1271. curu_infra-0.58.0/project-management/Roadmap/epics/archive/model-source-resilience.md +35 -0
  1272. curu_infra-0.58.0/project-management/Roadmap/epics/archive/models-add-local.md +51 -0
  1273. curu_infra-0.58.0/project-management/Roadmap/epics/archive/multi-pod-provisioning.md +59 -0
  1274. curu_infra-0.58.0/project-management/Roadmap/epics/archive/node-install-resilience.md +36 -0
  1275. curu_infra-0.58.0/project-management/Roadmap/epics/archive/pod-fleet-management.md +55 -0
  1276. curu_infra-0.58.0/project-management/Roadmap/epics/archive/pod-management.md +46 -0
  1277. curu_infra-0.58.0/project-management/Roadmap/epics/archive/pod-resource-config.md +63 -0
  1278. curu_infra-0.58.0/project-management/Roadmap/epics/archive/pod-resume-from-manifest.md +31 -0
  1279. curu_infra-0.58.0/project-management/Roadmap/epics/archive/pod-setup-sync.md +60 -0
  1280. curu_infra-0.58.0/project-management/Roadmap/epics/archive/pod-sync.md +47 -0
  1281. curu_infra-0.58.0/project-management/Roadmap/epics/archive/preflight-cost-gate.md +54 -0
  1282. curu_infra-0.58.0/project-management/Roadmap/epics/archive/provisioner-module-split.md +72 -0
  1283. curu_infra-0.58.0/project-management/Roadmap/epics/archive/provisioning-hardening.md +48 -0
  1284. curu_infra-0.58.0/project-management/Roadmap/epics/archive/prune-state-tracking.md +45 -0
  1285. curu_infra-0.58.0/project-management/Roadmap/epics/archive/reconcile-on-resume.md +67 -0
  1286. curu_infra-0.58.0/project-management/Roadmap/epics/archive/release-pipeline.md +42 -0
  1287. curu_infra-0.58.0/project-management/Roadmap/epics/archive/runpod-api-resilience.md +62 -0
  1288. curu_infra-0.58.0/project-management/Roadmap/epics/archive/runtime-drift-detection.md +48 -0
  1289. curu_infra-0.58.0/project-management/Roadmap/epics/archive/ssh-proxy-fallback.md +64 -0
  1290. curu_infra-0.58.0/project-management/Roadmap/epics/archive/targeted-sync.md +42 -0
  1291. curu_infra-0.58.0/project-management/Roadmap/epics/archive/unify-drift-detection.md +42 -0
  1292. curu_infra-0.58.0/project-management/Roadmap/epics/archive/verify-multi-pod-machine-readable.md +36 -0
  1293. curu_infra-0.58.0/project-management/Roadmap/epics/archive/watchdog-activity-correctness.md +93 -0
  1294. curu_infra-0.58.0/project-management/Work/README.md +60 -0
  1295. curu_infra-0.58.0/project-management/Work/analysis/.gitkeep +0 -0
  1296. curu_infra-0.58.0/project-management/Work/branches/.gitkeep +0 -0
  1297. curu_infra-0.58.0/project-management/Work/planning/.gitkeep +0 -0
  1298. curu_infra-0.58.0/project-management/Work/sessions/.gitkeep +0 -0
  1299. curu_infra-0.58.0/pyproject.toml +229 -0
  1300. curu_infra-0.58.0/specs/001-manifest-cli-pod-lifecycle/.beacon.toml +1 -0
  1301. curu_infra-0.58.0/specs/001-manifest-cli-pod-lifecycle/checklists/requirements.md +34 -0
  1302. curu_infra-0.58.0/specs/001-manifest-cli-pod-lifecycle/contracts/cli-commands.md +193 -0
  1303. curu_infra-0.58.0/specs/001-manifest-cli-pod-lifecycle/data-model.md +125 -0
  1304. curu_infra-0.58.0/specs/001-manifest-cli-pod-lifecycle/features/us1_apply_manifest.feature +39 -0
  1305. curu_infra-0.58.0/specs/001-manifest-cli-pod-lifecycle/features/us2_dry_run.feature +13 -0
  1306. curu_infra-0.58.0/specs/001-manifest-cli-pod-lifecycle/features/us3_pod_lifecycle.feature +23 -0
  1307. curu_infra-0.58.0/specs/001-manifest-cli-pod-lifecycle/plan.md +198 -0
  1308. curu_infra-0.58.0/specs/001-manifest-cli-pod-lifecycle/research.md +146 -0
  1309. curu_infra-0.58.0/specs/001-manifest-cli-pod-lifecycle/spec.md +138 -0
  1310. curu_infra-0.58.0/specs/001-manifest-cli-pod-lifecycle/tasks.md +241 -0
  1311. curu_infra-0.58.0/specs/002-comfyui-env-provisioning/.beacon.toml +1 -0
  1312. curu_infra-0.58.0/specs/002-comfyui-env-provisioning/checklists/requirements.md +36 -0
  1313. curu_infra-0.58.0/specs/002-comfyui-env-provisioning/contracts/manifest-schema.md +129 -0
  1314. curu_infra-0.58.0/specs/002-comfyui-env-provisioning/contracts/provisioning-report.md +55 -0
  1315. curu_infra-0.58.0/specs/002-comfyui-env-provisioning/data-model.md +178 -0
  1316. curu_infra-0.58.0/specs/002-comfyui-env-provisioning/features/us1_custom_node_install.feature +39 -0
  1317. curu_infra-0.58.0/specs/002-comfyui-env-provisioning/features/us2_model_download.feature +38 -0
  1318. curu_infra-0.58.0/specs/002-comfyui-env-provisioning/features/us3_private_file_sync.feature +20 -0
  1319. curu_infra-0.58.0/specs/002-comfyui-env-provisioning/features/us4_idempotency_report.feature +22 -0
  1320. curu_infra-0.58.0/specs/002-comfyui-env-provisioning/features/us5_health_check.feature +15 -0
  1321. curu_infra-0.58.0/specs/002-comfyui-env-provisioning/plan.md +300 -0
  1322. curu_infra-0.58.0/specs/002-comfyui-env-provisioning/research.md +177 -0
  1323. curu_infra-0.58.0/specs/002-comfyui-env-provisioning/spec.md +312 -0
  1324. curu_infra-0.58.0/specs/002-comfyui-env-provisioning/tasks.md +320 -0
  1325. curu_infra-0.58.0/specs/003-comfyui-model-catalog/.beacon.toml +1 -0
  1326. curu_infra-0.58.0/specs/003-comfyui-model-catalog/checklists/requirements.md +34 -0
  1327. curu_infra-0.58.0/specs/003-comfyui-model-catalog/contracts/cli-commands.md +93 -0
  1328. curu_infra-0.58.0/specs/003-comfyui-model-catalog/data-model.md +123 -0
  1329. curu_infra-0.58.0/specs/003-comfyui-model-catalog/features/us1_add_requirements.feature +24 -0
  1330. curu_infra-0.58.0/specs/003-comfyui-model-catalog/features/us2_list_architectures.feature +11 -0
  1331. curu_infra-0.58.0/specs/003-comfyui-model-catalog/features/us3_manifest_example.feature +11 -0
  1332. curu_infra-0.58.0/specs/003-comfyui-model-catalog/plan.md +280 -0
  1333. curu_infra-0.58.0/specs/003-comfyui-model-catalog/research.md +127 -0
  1334. curu_infra-0.58.0/specs/003-comfyui-model-catalog/spec.md +122 -0
  1335. curu_infra-0.58.0/specs/003-comfyui-model-catalog/tasks.md +183 -0
  1336. curu_infra-0.58.0/specs/004-comfyui-node-activation/.beacon.toml +1 -0
  1337. curu_infra-0.58.0/specs/004-comfyui-node-activation/checklists/requirements.md +34 -0
  1338. curu_infra-0.58.0/specs/004-comfyui-node-activation/features/us1_node_activation.feature +25 -0
  1339. curu_infra-0.58.0/specs/004-comfyui-node-activation/features/us2_parallel_downloads.feature +21 -0
  1340. curu_infra-0.58.0/specs/004-comfyui-node-activation/features/us3_auth.feature +35 -0
  1341. curu_infra-0.58.0/specs/004-comfyui-node-activation/plan.md +428 -0
  1342. curu_infra-0.58.0/specs/004-comfyui-node-activation/spec.md +217 -0
  1343. curu_infra-0.58.0/specs/004-comfyui-node-activation/tasks.md +138 -0
  1344. curu_infra-0.58.0/specs/005-provisioning-progress-feedback/.beacon.toml +1 -0
  1345. curu_infra-0.58.0/specs/005-provisioning-progress-feedback/checklists/requirements.md +34 -0
  1346. curu_infra-0.58.0/specs/005-provisioning-progress-feedback/contracts/cli-commands.md +60 -0
  1347. curu_infra-0.58.0/specs/005-provisioning-progress-feedback/features/us1_phase_status.feature +23 -0
  1348. curu_infra-0.58.0/specs/005-provisioning-progress-feedback/features/us2_restart_countdown.feature +21 -0
  1349. curu_infra-0.58.0/specs/005-provisioning-progress-feedback/features/us3_per_file_download.feature +23 -0
  1350. curu_infra-0.58.0/specs/005-provisioning-progress-feedback/plan.md +272 -0
  1351. curu_infra-0.58.0/specs/005-provisioning-progress-feedback/research.md +85 -0
  1352. curu_infra-0.58.0/specs/005-provisioning-progress-feedback/spec.md +212 -0
  1353. curu_infra-0.58.0/specs/005-provisioning-progress-feedback/tasks.md +132 -0
  1354. curu_infra-0.58.0/specs/006-comfyui-provisioning-hardening/.beacon.toml +1 -0
  1355. curu_infra-0.58.0/specs/006-comfyui-provisioning-hardening/checklists/requirements.md +38 -0
  1356. curu_infra-0.58.0/specs/006-comfyui-provisioning-hardening/features/us1_honest_exit_codes.feature +19 -0
  1357. curu_infra-0.58.0/specs/006-comfyui-provisioning-hardening/features/us2_thread_safe_hf_downloads.feature +12 -0
  1358. curu_infra-0.58.0/specs/006-comfyui-provisioning-hardening/features/us3_authenticator_correctness.feature +16 -0
  1359. curu_infra-0.58.0/specs/006-comfyui-provisioning-hardening/features/us4_import_verification.feature +16 -0
  1360. curu_infra-0.58.0/specs/006-comfyui-provisioning-hardening/features/us5_preflight_checks.feature +17 -0
  1361. curu_infra-0.58.0/specs/006-comfyui-provisioning-hardening/features/us6_mid_download_liveness.feature +11 -0
  1362. curu_infra-0.58.0/specs/006-comfyui-provisioning-hardening/features/us7_partial_state_recovery.feature +11 -0
  1363. curu_infra-0.58.0/specs/006-comfyui-provisioning-hardening/plan.md +417 -0
  1364. curu_infra-0.58.0/specs/006-comfyui-provisioning-hardening/spec.md +370 -0
  1365. curu_infra-0.58.0/specs/006-comfyui-provisioning-hardening/tasks.md +229 -0
  1366. curu_infra-0.58.0/specs/007-multi-pod-manifest-schema/.beacon.toml +1 -0
  1367. curu_infra-0.58.0/specs/007-multi-pod-manifest-schema/checklists/requirements.md +35 -0
  1368. curu_infra-0.58.0/specs/007-multi-pod-manifest-schema/contracts/manifest-toml.md +123 -0
  1369. curu_infra-0.58.0/specs/007-multi-pod-manifest-schema/data-model.md +88 -0
  1370. curu_infra-0.58.0/specs/007-multi-pod-manifest-schema/features/us1_existing_manifests.feature +20 -0
  1371. curu_infra-0.58.0/specs/007-multi-pod-manifest-schema/features/us2_llm_sidecar.feature +26 -0
  1372. curu_infra-0.58.0/specs/007-multi-pod-manifest-schema/features/us3_multi_pod.feature +21 -0
  1373. curu_infra-0.58.0/specs/007-multi-pod-manifest-schema/plan.md +236 -0
  1374. curu_infra-0.58.0/specs/007-multi-pod-manifest-schema/research.md +89 -0
  1375. curu_infra-0.58.0/specs/007-multi-pod-manifest-schema/spec.md +113 -0
  1376. curu_infra-0.58.0/specs/007-multi-pod-manifest-schema/tasks.md +104 -0
  1377. curu_infra-0.58.0/specs/008-llm-sidecar-launch/.beacon.toml +1 -0
  1378. curu_infra-0.58.0/specs/008-llm-sidecar-launch/checklists/requirements.md +34 -0
  1379. curu_infra-0.58.0/specs/008-llm-sidecar-launch/data-model.md +41 -0
  1380. curu_infra-0.58.0/specs/008-llm-sidecar-launch/features/us1_llamacpp_sidecar.feature +18 -0
  1381. curu_infra-0.58.0/specs/008-llm-sidecar-launch/features/us2_ollama_sidecar.feature +13 -0
  1382. curu_infra-0.58.0/specs/008-llm-sidecar-launch/features/us3_no_llm_skip.feature +8 -0
  1383. curu_infra-0.58.0/specs/008-llm-sidecar-launch/plan.md +192 -0
  1384. curu_infra-0.58.0/specs/008-llm-sidecar-launch/research.md +80 -0
  1385. curu_infra-0.58.0/specs/008-llm-sidecar-launch/spec.md +179 -0
  1386. curu_infra-0.58.0/specs/008-llm-sidecar-launch/tasks.md +159 -0
  1387. curu_infra-0.58.0/specs/009-provision-failure-recovery/.beacon.toml +1 -0
  1388. curu_infra-0.58.0/specs/009-provision-failure-recovery/checklists/requirements.md +34 -0
  1389. curu_infra-0.58.0/specs/009-provision-failure-recovery/features/us1_ip_timeout.feature +12 -0
  1390. curu_infra-0.58.0/specs/009-provision-failure-recovery/features/us2_ssh_timeout.feature +12 -0
  1391. curu_infra-0.58.0/specs/009-provision-failure-recovery/plan.md +201 -0
  1392. curu_infra-0.58.0/specs/009-provision-failure-recovery/spec.md +169 -0
  1393. curu_infra-0.58.0/specs/009-provision-failure-recovery/tasks.md +129 -0
  1394. curu_infra-0.58.0/specs/010-multi-pod-loop/.beacon.toml +1 -0
  1395. curu_infra-0.58.0/specs/010-multi-pod-loop/checklists/requirements.md +34 -0
  1396. curu_infra-0.58.0/specs/010-multi-pod-loop/features/us1_two_pod_sequential.feature +14 -0
  1397. curu_infra-0.58.0/specs/010-multi-pod-loop/features/us2_single_pod_compat.feature +11 -0
  1398. curu_infra-0.58.0/specs/010-multi-pod-loop/features/us3_partial_failure.feature +16 -0
  1399. curu_infra-0.58.0/specs/010-multi-pod-loop/plan.md +244 -0
  1400. curu_infra-0.58.0/specs/010-multi-pod-loop/spec.md +184 -0
  1401. curu_infra-0.58.0/specs/010-multi-pod-loop/tasks.md +156 -0
  1402. curu_infra-0.58.0/specs/011-pods-fleet-view/.beacon.toml +1 -0
  1403. curu_infra-0.58.0/specs/011-pods-fleet-view/checklists/requirements.md +34 -0
  1404. curu_infra-0.58.0/specs/011-pods-fleet-view/features/us1_fleet_overview.feature +13 -0
  1405. curu_infra-0.58.0/specs/011-pods-fleet-view/features/us2_idle_filter.feature +18 -0
  1406. curu_infra-0.58.0/specs/011-pods-fleet-view/features/us3_zero_pod_safety.feature +13 -0
  1407. curu_infra-0.58.0/specs/011-pods-fleet-view/plan.md +205 -0
  1408. curu_infra-0.58.0/specs/011-pods-fleet-view/spec.md +173 -0
  1409. curu_infra-0.58.0/specs/011-pods-fleet-view/tasks.md +142 -0
  1410. curu_infra-0.58.0/specs/012-manifest-down/.beacon.toml +1 -0
  1411. curu_infra-0.58.0/specs/012-manifest-down/checklists/requirements.md +30 -0
  1412. curu_infra-0.58.0/specs/012-manifest-down/features/us1_single_pod_teardown.feature +14 -0
  1413. curu_infra-0.58.0/specs/012-manifest-down/features/us2_multi_pod_teardown.feature +14 -0
  1414. curu_infra-0.58.0/specs/012-manifest-down/features/us3_api_error_propagation.feature +16 -0
  1415. curu_infra-0.58.0/specs/012-manifest-down/plan.md +193 -0
  1416. curu_infra-0.58.0/specs/012-manifest-down/spec.md +172 -0
  1417. curu_infra-0.58.0/specs/012-manifest-down/tasks.md +142 -0
  1418. curu_infra-0.58.0/specs/013-structured-run-report/.beacon.toml +1 -0
  1419. curu_infra-0.58.0/specs/013-structured-run-report/checklists/requirements.md +30 -0
  1420. curu_infra-0.58.0/specs/013-structured-run-report/features/us1_single_pod_json.feature +17 -0
  1421. curu_infra-0.58.0/specs/013-structured-run-report/features/us2_multi_pod_json.feature +9 -0
  1422. curu_infra-0.58.0/specs/013-structured-run-report/features/us3_llm_sidecar_json.feature +6 -0
  1423. curu_infra-0.58.0/specs/013-structured-run-report/plan.md +180 -0
  1424. curu_infra-0.58.0/specs/013-structured-run-report/spec.md +167 -0
  1425. curu_infra-0.58.0/specs/013-structured-run-report/tasks.md +130 -0
  1426. curu_infra-0.58.0/specs/014-pre-flight-manifest-validation-warn-on-unknown-keys-suggest-missing-required-fields-provide-guided-scaffold-for-a-minimal-manifest/.beacon.toml +1 -0
  1427. curu_infra-0.58.0/specs/014-pre-flight-manifest-validation-warn-on-unknown-keys-suggest-missing-required-fields-provide-guided-scaffold-for-a-minimal-manifest/features/us1_check_finds_problems.feature +19 -0
  1428. curu_infra-0.58.0/specs/014-pre-flight-manifest-validation-warn-on-unknown-keys-suggest-missing-required-fields-provide-guided-scaffold-for-a-minimal-manifest/features/us2_init_scaffold.feature +13 -0
  1429. curu_infra-0.58.0/specs/014-pre-flight-manifest-validation-warn-on-unknown-keys-suggest-missing-required-fields-provide-guided-scaffold-for-a-minimal-manifest/features/us3_apply_preflight.feature +7 -0
  1430. curu_infra-0.58.0/specs/014-pre-flight-manifest-validation-warn-on-unknown-keys-suggest-missing-required-fields-provide-guided-scaffold-for-a-minimal-manifest/plan.md +258 -0
  1431. curu_infra-0.58.0/specs/014-pre-flight-manifest-validation-warn-on-unknown-keys-suggest-missing-required-fields-provide-guided-scaffold-for-a-minimal-manifest/spec.md +161 -0
  1432. curu_infra-0.58.0/specs/014-pre-flight-manifest-validation-warn-on-unknown-keys-suggest-missing-required-fields-provide-guided-scaffold-for-a-minimal-manifest/tasks.md +104 -0
  1433. curu_infra-0.58.0/specs/015-drift-detection-compare-live-pod-state-against-manifest-and-report-diverged-fields-without-re-provisioning/.beacon.toml +1 -0
  1434. curu_infra-0.58.0/specs/015-drift-detection-compare-live-pod-state-against-manifest-and-report-diverged-fields-without-re-provisioning/features/us1_drift_detection.feature +16 -0
  1435. curu_infra-0.58.0/specs/015-drift-detection-compare-live-pod-state-against-manifest-and-report-diverged-fields-without-re-provisioning/features/us2_pod_autodiscovery.feature +11 -0
  1436. curu_infra-0.58.0/specs/015-drift-detection-compare-live-pod-state-against-manifest-and-report-diverged-fields-without-re-provisioning/plan.md +240 -0
  1437. curu_infra-0.58.0/specs/015-drift-detection-compare-live-pod-state-against-manifest-and-report-diverged-fields-without-re-provisioning/spec.md +122 -0
  1438. curu_infra-0.58.0/specs/015-drift-detection-compare-live-pod-state-against-manifest-and-report-diverged-fields-without-re-provisioning/tasks.md +84 -0
  1439. curu_infra-0.58.0/specs/016-remote-log-capture/.beacon.toml +1 -0
  1440. curu_infra-0.58.0/specs/016-remote-log-capture/checklists/requirements.md +36 -0
  1441. curu_infra-0.58.0/specs/016-remote-log-capture/features/us1_log_captured_on_failed.feature +12 -0
  1442. curu_infra-0.58.0/specs/016-remote-log-capture/features/us2_log_unavailable_graceful.feature +15 -0
  1443. curu_infra-0.58.0/specs/016-remote-log-capture/plan.md +191 -0
  1444. curu_infra-0.58.0/specs/016-remote-log-capture/spec.md +176 -0
  1445. curu_infra-0.58.0/specs/016-remote-log-capture/tasks.md +111 -0
  1446. curu_infra-0.58.0/specs/017-apply-only-flag/.beacon.toml +1 -0
  1447. curu_infra-0.58.0/specs/017-apply-only-flag/checklists/requirements.md +34 -0
  1448. curu_infra-0.58.0/specs/017-apply-only-flag/features/us1_single_category.feature +19 -0
  1449. curu_infra-0.58.0/specs/017-apply-only-flag/features/us2_multi_category.feature +13 -0
  1450. curu_infra-0.58.0/specs/017-apply-only-flag/features/us3_backward_compat.feature +13 -0
  1451. curu_infra-0.58.0/specs/017-apply-only-flag/plan.md +210 -0
  1452. curu_infra-0.58.0/specs/017-apply-only-flag/spec.md +129 -0
  1453. curu_infra-0.58.0/specs/017-apply-only-flag/tasks.md +119 -0
  1454. curu_infra-0.58.0/specs/018-pods-stop-idle/.beacon.toml +1 -0
  1455. curu_infra-0.58.0/specs/018-pods-stop-idle/checklists/requirements.md +30 -0
  1456. curu_infra-0.58.0/specs/018-pods-stop-idle/features/us1_dry_run.feature +15 -0
  1457. curu_infra-0.58.0/specs/018-pods-stop-idle/features/us2_confirmed_stop.feature +19 -0
  1458. curu_infra-0.58.0/specs/018-pods-stop-idle/features/us3_nothing_to_do.feature +13 -0
  1459. curu_infra-0.58.0/specs/018-pods-stop-idle/plan.md +191 -0
  1460. curu_infra-0.58.0/specs/018-pods-stop-idle/spec.md +138 -0
  1461. curu_infra-0.58.0/specs/018-pods-stop-idle/tasks.md +139 -0
  1462. curu_infra-0.58.0/specs/019-apply-fix/.beacon.toml +1 -0
  1463. curu_infra-0.58.0/specs/019-apply-fix/checklists/requirements.md +30 -0
  1464. curu_infra-0.58.0/specs/019-apply-fix/features/us1_auto_converge.feature +20 -0
  1465. curu_infra-0.58.0/specs/019-apply-fix/features/us2_dry_run.feature +14 -0
  1466. curu_infra-0.58.0/specs/019-apply-fix/features/us3_only_scoping.feature +8 -0
  1467. curu_infra-0.58.0/specs/019-apply-fix/plan.md +222 -0
  1468. curu_infra-0.58.0/specs/019-apply-fix/spec.md +174 -0
  1469. curu_infra-0.58.0/specs/019-apply-fix/tasks.md +111 -0
  1470. curu_infra-0.58.0/specs/020-apply-prune/.beacon.toml +1 -0
  1471. curu_infra-0.58.0/specs/020-apply-prune/checklists/requirements.md +30 -0
  1472. curu_infra-0.58.0/specs/020-apply-prune/features/us1_interactive_prune.feature +20 -0
  1473. curu_infra-0.58.0/specs/020-apply-prune/features/us2_dry_run.feature +14 -0
  1474. curu_infra-0.58.0/specs/020-apply-prune/features/us3_yes_flag.feature +7 -0
  1475. curu_infra-0.58.0/specs/020-apply-prune/features/us4_only_scoping.feature +8 -0
  1476. curu_infra-0.58.0/specs/020-apply-prune/plan.md +262 -0
  1477. curu_infra-0.58.0/specs/020-apply-prune/spec.md +177 -0
  1478. curu_infra-0.58.0/specs/020-apply-prune/tasks.md +144 -0
  1479. curu_infra-0.58.0/specs/021-private-file-idempotency/.beacon.toml +1 -0
  1480. curu_infra-0.58.0/specs/021-private-file-idempotency/checklists/requirements.md +34 -0
  1481. curu_infra-0.58.0/specs/021-private-file-idempotency/features/us1_skip_identical_file.feature +19 -0
  1482. curu_infra-0.58.0/specs/021-private-file-idempotency/features/us2_report_accuracy.feature +11 -0
  1483. curu_infra-0.58.0/specs/021-private-file-idempotency/plan.md +139 -0
  1484. curu_infra-0.58.0/specs/021-private-file-idempotency/spec.md +92 -0
  1485. curu_infra-0.58.0/specs/021-private-file-idempotency/tasks.md +46 -0
  1486. curu_infra-0.58.0/specs/022-persist-pod-state-for-private-file-and-orphan-reconciliation/.beacon.toml +1 -0
  1487. curu_infra-0.58.0/specs/022-persist-pod-state-for-private-file-and-orphan-reconciliation/checklists/requirements.md +34 -0
  1488. curu_infra-0.58.0/specs/022-persist-pod-state-for-private-file-and-orphan-reconciliation/features/us1_state_written_on_apply.feature +17 -0
  1489. curu_infra-0.58.0/specs/022-persist-pod-state-for-private-file-and-orphan-reconciliation/features/us2_orphaned_private_file_pruned.feature +21 -0
  1490. curu_infra-0.58.0/specs/022-persist-pod-state-for-private-file-and-orphan-reconciliation/features/us3_graceful_degradation.feature +14 -0
  1491. curu_infra-0.58.0/specs/022-persist-pod-state-for-private-file-and-orphan-reconciliation/features/us4_human_readable_state.feature +8 -0
  1492. curu_infra-0.58.0/specs/022-persist-pod-state-for-private-file-and-orphan-reconciliation/plan.md +257 -0
  1493. curu_infra-0.58.0/specs/022-persist-pod-state-for-private-file-and-orphan-reconciliation/spec.md +162 -0
  1494. curu_infra-0.58.0/specs/022-persist-pod-state-for-private-file-and-orphan-reconciliation/tasks.md +132 -0
  1495. curu_infra-0.58.0/specs/022-pod-state-tracking/tasks.md +8 -0
  1496. curu_infra-0.58.0/specs/023-ci-gates-and-pypi-publishing/.beacon.toml +1 -0
  1497. curu_infra-0.58.0/specs/023-ci-gates-and-pypi-publishing/features/us1_ci_gates.feature +10 -0
  1498. curu_infra-0.58.0/specs/023-ci-gates-and-pypi-publishing/features/us3_installable.feature +6 -0
  1499. curu_infra-0.58.0/specs/023-ci-gates-and-pypi-publishing/plan.md +133 -0
  1500. curu_infra-0.58.0/specs/023-ci-gates-and-pypi-publishing/spec.md +135 -0
  1501. curu_infra-0.58.0/specs/023-ci-gates-and-pypi-publishing/tasks.md +58 -0
  1502. curu_infra-0.58.0/specs/024-model-download-retry/.beacon.toml +1 -0
  1503. curu_infra-0.58.0/specs/024-model-download-retry/features/us1_transient_retry.feature +14 -0
  1504. curu_infra-0.58.0/specs/024-model-download-retry/features/us2_permanent_fail_fast.feature +13 -0
  1505. curu_infra-0.58.0/specs/024-model-download-retry/features/us3_retry_count_in_report.feature +11 -0
  1506. curu_infra-0.58.0/specs/024-model-download-retry/plan.md +284 -0
  1507. curu_infra-0.58.0/specs/024-model-download-retry/spec.md +142 -0
  1508. curu_infra-0.58.0/specs/024-model-download-retry/tasks.md +111 -0
  1509. curu_infra-0.58.0/specs/025-node-install-retry/.beacon.toml +1 -0
  1510. curu_infra-0.58.0/specs/025-node-install-retry/checklists/requirements.md +34 -0
  1511. curu_infra-0.58.0/specs/025-node-install-retry/features/us1_transient_clone_retry.feature +14 -0
  1512. curu_infra-0.58.0/specs/025-node-install-retry/features/us2_permanent_clone_fail_fast.feature +13 -0
  1513. curu_infra-0.58.0/specs/025-node-install-retry/features/us3_pip_install_retry.feature +14 -0
  1514. curu_infra-0.58.0/specs/025-node-install-retry/features/us4_node_retry_max_flag.feature +13 -0
  1515. curu_infra-0.58.0/specs/025-node-install-retry/plan.md +233 -0
  1516. curu_infra-0.58.0/specs/025-node-install-retry/spec.md +125 -0
  1517. curu_infra-0.58.0/specs/025-node-install-retry/tasks.md +119 -0
  1518. curu_infra-0.58.0/specs/026-apply-state-per-item-completion/.beacon.toml +1 -0
  1519. curu_infra-0.58.0/specs/026-apply-state-per-item-completion/checklists/requirements.md +34 -0
  1520. curu_infra-0.58.0/specs/026-apply-state-per-item-completion/features/us1_incremental_state.feature +16 -0
  1521. curu_infra-0.58.0/specs/026-apply-state-per-item-completion/features/us2_atomic_write.feature +6 -0
  1522. curu_infra-0.58.0/specs/026-apply-state-per-item-completion/features/us3_no_resume_flag.feature +11 -0
  1523. curu_infra-0.58.0/specs/026-apply-state-per-item-completion/plan.md +302 -0
  1524. curu_infra-0.58.0/specs/026-apply-state-per-item-completion/spec.md +124 -0
  1525. curu_infra-0.58.0/specs/026-apply-state-per-item-completion/tasks.md +150 -0
  1526. curu_infra-0.58.0/specs/027-manifest-export-lint/.beacon.toml +1 -0
  1527. curu_infra-0.58.0/specs/027-manifest-export-lint/checklists/requirements.md +34 -0
  1528. curu_infra-0.58.0/specs/027-manifest-export-lint/features/us1_export.feature +22 -0
  1529. curu_infra-0.58.0/specs/027-manifest-export-lint/features/us2_share_lint.feature +22 -0
  1530. curu_infra-0.58.0/specs/027-manifest-export-lint/features/us3_stdout.feature +12 -0
  1531. curu_infra-0.58.0/specs/027-manifest-export-lint/plan.md +204 -0
  1532. curu_infra-0.58.0/specs/027-manifest-export-lint/spec.md +127 -0
  1533. curu_infra-0.58.0/specs/027-manifest-export-lint/tasks.md +174 -0
  1534. curu_infra-0.58.0/specs/028-pod-resume/.beacon.toml +1 -0
  1535. curu_infra-0.58.0/specs/028-pod-resume/checklists/requirements.md +34 -0
  1536. curu_infra-0.58.0/specs/028-pod-resume/features/us1_wake_and_wait.feature +16 -0
  1537. curu_infra-0.58.0/specs/028-pod-resume/features/us2_resume_with_apply.feature +11 -0
  1538. curu_infra-0.58.0/specs/028-pod-resume/features/us3_timeout_and_failure.feature +11 -0
  1539. curu_infra-0.58.0/specs/028-pod-resume/plan.md +212 -0
  1540. curu_infra-0.58.0/specs/028-pod-resume/spec.md +101 -0
  1541. curu_infra-0.58.0/specs/028-pod-resume/tasks.md +118 -0
  1542. curu_infra-0.58.0/specs/029-live-provisioning-smoke/.beacon.toml +1 -0
  1543. curu_infra-0.58.0/specs/029-live-provisioning-smoke/checklists/requirements.md +36 -0
  1544. curu_infra-0.58.0/specs/029-live-provisioning-smoke/features/us2_local_opt_in.feature +7 -0
  1545. curu_infra-0.58.0/specs/029-live-provisioning-smoke/features/us3_fork_pr_safety.feature +7 -0
  1546. curu_infra-0.58.0/specs/029-live-provisioning-smoke/plan.md +208 -0
  1547. curu_infra-0.58.0/specs/029-live-provisioning-smoke/spec.md +100 -0
  1548. curu_infra-0.58.0/specs/029-live-provisioning-smoke/tasks.md +103 -0
  1549. curu_infra-0.58.0/specs/030-comfy-nodes-extract/.beacon.toml +1 -0
  1550. curu_infra-0.58.0/specs/030-comfy-nodes-extract/checklists/requirements.md +34 -0
  1551. curu_infra-0.58.0/specs/030-comfy-nodes-extract/features/us1_nodes_in_nodes_py.feature +8 -0
  1552. curu_infra-0.58.0/specs/030-comfy-nodes-extract/features/us2_full_suite_passes.feature +8 -0
  1553. curu_infra-0.58.0/specs/030-comfy-nodes-extract/features/us3_public_api_unchanged.feature +8 -0
  1554. curu_infra-0.58.0/specs/030-comfy-nodes-extract/plan.md +179 -0
  1555. curu_infra-0.58.0/specs/030-comfy-nodes-extract/spec.md +106 -0
  1556. curu_infra-0.58.0/specs/030-comfy-nodes-extract/tasks.md +92 -0
  1557. curu_infra-0.58.0/specs/031-cli-pods-extract/.beacon.toml +1 -0
  1558. curu_infra-0.58.0/specs/031-cli-pods-extract/features/us1_pods_in_pod_commands.feature +16 -0
  1559. curu_infra-0.58.0/specs/031-cli-pods-extract/features/us2_full_suite_passes.feature +8 -0
  1560. curu_infra-0.58.0/specs/031-cli-pods-extract/features/us3_public_api_unchanged.feature +8 -0
  1561. curu_infra-0.58.0/specs/031-cli-pods-extract/plan.md +238 -0
  1562. curu_infra-0.58.0/specs/031-cli-pods-extract/spec.md +107 -0
  1563. curu_infra-0.58.0/specs/031-cli-pods-extract/tasks.md +94 -0
  1564. curu_infra-0.58.0/specs/032-cli-apply-extract/.beacon.toml +1 -0
  1565. curu_infra-0.58.0/specs/032-cli-apply-extract/features/us1_apply_in_apply_commands.feature +16 -0
  1566. curu_infra-0.58.0/specs/032-cli-apply-extract/features/us2_full_suite_passes.feature +8 -0
  1567. curu_infra-0.58.0/specs/032-cli-apply-extract/features/us3_public_api_unchanged.feature +8 -0
  1568. curu_infra-0.58.0/specs/032-cli-apply-extract/plan.md +261 -0
  1569. curu_infra-0.58.0/specs/032-cli-apply-extract/spec.md +113 -0
  1570. curu_infra-0.58.0/specs/032-cli-apply-extract/tasks.md +62 -0
  1571. curu_infra-0.58.0/specs/033-cli-manifest-extract/.beacon.toml +1 -0
  1572. curu_infra-0.58.0/specs/033-cli-manifest-extract/checklists/requirements.md +34 -0
  1573. curu_infra-0.58.0/specs/033-cli-manifest-extract/features/us1_manifest_in_manifest_commands.feature +16 -0
  1574. curu_infra-0.58.0/specs/033-cli-manifest-extract/features/us2_full_suite_passes.feature +8 -0
  1575. curu_infra-0.58.0/specs/033-cli-manifest-extract/features/us3_public_api_unchanged.feature +9 -0
  1576. curu_infra-0.58.0/specs/033-cli-manifest-extract/plan.md +187 -0
  1577. curu_infra-0.58.0/specs/033-cli-manifest-extract/spec.md +111 -0
  1578. curu_infra-0.58.0/specs/033-cli-manifest-extract/tasks.md +62 -0
  1579. curu_infra-0.58.0/specs/034-comfy-downloads-extract/.beacon.toml +1 -0
  1580. curu_infra-0.58.0/specs/034-comfy-downloads-extract/features/us1_downloads_in_downloads_module.feature +16 -0
  1581. curu_infra-0.58.0/specs/034-comfy-downloads-extract/features/us2_full_suite_passes.feature +16 -0
  1582. curu_infra-0.58.0/specs/034-comfy-downloads-extract/features/us3_public_api_unchanged.feature +16 -0
  1583. curu_infra-0.58.0/specs/034-comfy-downloads-extract/plan.md +205 -0
  1584. curu_infra-0.58.0/specs/034-comfy-downloads-extract/spec.md +105 -0
  1585. curu_infra-0.58.0/specs/034-comfy-downloads-extract/tasks.md +99 -0
  1586. curu_infra-0.58.0/specs/035-comfy-health-auth-state-extract/.beacon.toml +1 -0
  1587. curu_infra-0.58.0/specs/035-comfy-health-auth-state-extract/checklists/requirements.md +34 -0
  1588. curu_infra-0.58.0/specs/035-comfy-health-auth-state-extract/features/us1_symbols_in_modules.feature +22 -0
  1589. curu_infra-0.58.0/specs/035-comfy-health-auth-state-extract/features/us2_full_suite_passes.feature +11 -0
  1590. curu_infra-0.58.0/specs/035-comfy-health-auth-state-extract/features/us3_public_api_unchanged.feature +18 -0
  1591. curu_infra-0.58.0/specs/035-comfy-health-auth-state-extract/plan.md +293 -0
  1592. curu_infra-0.58.0/specs/035-comfy-health-auth-state-extract/spec.md +163 -0
  1593. curu_infra-0.58.0/specs/035-comfy-health-auth-state-extract/tasks.md +74 -0
  1594. curu_infra-0.58.0/specs/036-comfy-llm-extract/.beacon.toml +1 -0
  1595. curu_infra-0.58.0/specs/036-comfy-llm-extract/features/us1_llm_in_llm_module.feature +8 -0
  1596. curu_infra-0.58.0/specs/036-comfy-llm-extract/features/us2_full_suite_passes.feature +7 -0
  1597. curu_infra-0.58.0/specs/036-comfy-llm-extract/features/us3_public_api_unchanged.feature +16 -0
  1598. curu_infra-0.58.0/specs/036-comfy-llm-extract/plan.md +210 -0
  1599. curu_infra-0.58.0/specs/036-comfy-llm-extract/spec.md +90 -0
  1600. curu_infra-0.58.0/specs/036-comfy-llm-extract/tasks.md +66 -0
  1601. curu_infra-0.58.0/specs/037-provisioning-hardening/.beacon.toml +1 -0
  1602. curu_infra-0.58.0/specs/037-provisioning-hardening/features/us1_run_script_reconnect.feature +16 -0
  1603. curu_infra-0.58.0/specs/037-provisioning-hardening/features/us2_run_decode_safety.feature +12 -0
  1604. curu_infra-0.58.0/specs/037-provisioning-hardening/plan.md +167 -0
  1605. curu_infra-0.58.0/specs/037-provisioning-hardening/spec.md +91 -0
  1606. curu_infra-0.58.0/specs/037-provisioning-hardening/tasks.md +65 -0
  1607. curu_infra-0.58.0/specs/038-pod-drift-verify/.beacon.toml +1 -0
  1608. curu_infra-0.58.0/specs/038-pod-drift-verify/checklists/requirements.md +34 -0
  1609. curu_infra-0.58.0/specs/038-pod-drift-verify/features/us1_healthy_pod.feature +11 -0
  1610. curu_infra-0.58.0/specs/038-pod-drift-verify/features/us2_node_drift.feature +16 -0
  1611. curu_infra-0.58.0/specs/038-pod-drift-verify/features/us3_model_drift.feature +16 -0
  1612. curu_infra-0.58.0/specs/038-pod-drift-verify/plan.md +169 -0
  1613. curu_infra-0.58.0/specs/038-pod-drift-verify/spec.md +171 -0
  1614. curu_infra-0.58.0/specs/038-pod-drift-verify/tasks.md +93 -0
  1615. curu_infra-0.58.0/specs/039-api-retry/.beacon.toml +1 -0
  1616. curu_infra-0.58.0/specs/039-api-retry/checklists/requirements.md +34 -0
  1617. curu_infra-0.58.0/specs/039-api-retry/features/us1_transparent_retry.feature +17 -0
  1618. curu_infra-0.58.0/specs/039-api-retry/features/us2_create_pod_no_retry.feature +12 -0
  1619. curu_infra-0.58.0/specs/039-api-retry/features/us3_permanent_errors_fast_fail.feature +16 -0
  1620. curu_infra-0.58.0/specs/039-api-retry/plan.md +184 -0
  1621. curu_infra-0.58.0/specs/039-api-retry/spec.md +174 -0
  1622. curu_infra-0.58.0/specs/039-api-retry/tasks.md +127 -0
  1623. curu_infra-0.58.0/specs/040-reconcile-on-resume/.beacon.toml +1 -0
  1624. curu_infra-0.58.0/specs/040-reconcile-on-resume/checklists/requirements.md +34 -0
  1625. curu_infra-0.58.0/specs/040-reconcile-on-resume/features/us1_skip_present_items.feature +19 -0
  1626. curu_infra-0.58.0/specs/040-reconcile-on-resume/features/us2_reimport_failed_nodes.feature +13 -0
  1627. curu_infra-0.58.0/specs/040-reconcile-on-resume/features/us3_report_skipped_vs_installed.feature +7 -0
  1628. curu_infra-0.58.0/specs/040-reconcile-on-resume/plan.md +168 -0
  1629. curu_infra-0.58.0/specs/040-reconcile-on-resume/spec.md +167 -0
  1630. curu_infra-0.58.0/specs/040-reconcile-on-resume/tasks.md +55 -0
  1631. curu_infra-0.58.0/specs/041-unify-drift-detection/.beacon.toml +1 -0
  1632. curu_infra-0.58.0/specs/041-unify-drift-detection/checklists/requirements.md +34 -0
  1633. curu_infra-0.58.0/specs/041-unify-drift-detection/features/us1_import_failed_nodes_repaired.feature +16 -0
  1634. curu_infra-0.58.0/specs/041-unify-drift-detection/features/us2_size_mismatch_redownloaded.feature +6 -0
  1635. curu_infra-0.58.0/specs/041-unify-drift-detection/features/us3_inspect_pod_state_deleted.feature +11 -0
  1636. curu_infra-0.58.0/specs/041-unify-drift-detection/plan.md +215 -0
  1637. curu_infra-0.58.0/specs/041-unify-drift-detection/spec.md +152 -0
  1638. curu_infra-0.58.0/specs/041-unify-drift-detection/tasks.md +41 -0
  1639. curu_infra-0.58.0/specs/042-content-integrity-verify/.beacon.toml +1 -0
  1640. curu_infra-0.58.0/specs/042-content-integrity-verify/features/us1_expected_size_populated.feature +16 -0
  1641. curu_infra-0.58.0/specs/042-content-integrity-verify/features/us2_size_mismatch_redownloaded.feature +11 -0
  1642. curu_infra-0.58.0/specs/042-content-integrity-verify/features/us3_legacy_manifests_graceful.feature +6 -0
  1643. curu_infra-0.58.0/specs/042-content-integrity-verify/plan.md +191 -0
  1644. curu_infra-0.58.0/specs/042-content-integrity-verify/spec.md +130 -0
  1645. curu_infra-0.58.0/specs/042-content-integrity-verify/tasks.md +109 -0
  1646. curu_infra-0.58.0/specs/043-verify-size-backfill/.beacon.toml +1 -0
  1647. curu_infra-0.58.0/specs/043-verify-size-backfill/checklists/requirements.md +34 -0
  1648. curu_infra-0.58.0/specs/043-verify-size-backfill/features/us1_verify_detects_size_mismatch.feature +18 -0
  1649. curu_infra-0.58.0/specs/043-verify-size-backfill/features/us2_verify_graceful_on_api_failure.feature +8 -0
  1650. curu_infra-0.58.0/specs/043-verify-size-backfill/features/us3_verify_idempotent_backfill.feature +7 -0
  1651. curu_infra-0.58.0/specs/043-verify-size-backfill/plan.md +157 -0
  1652. curu_infra-0.58.0/specs/043-verify-size-backfill/spec.md +93 -0
  1653. curu_infra-0.58.0/specs/043-verify-size-backfill/tasks.md +106 -0
  1654. curu_infra-0.58.0/specs/044-civitai-expected-size/.beacon.toml +1 -0
  1655. curu_infra-0.58.0/specs/044-civitai-expected-size/checklists/requirements.md +34 -0
  1656. curu_infra-0.58.0/specs/044-civitai-expected-size/features/us1_verify_detects_size_mismatch.feature +18 -0
  1657. curu_infra-0.58.0/specs/044-civitai-expected-size/features/us2_apply_backfills_expected_size.feature +6 -0
  1658. curu_infra-0.58.0/specs/044-civitai-expected-size/features/us3_graceful_degradation.feature +15 -0
  1659. curu_infra-0.58.0/specs/044-civitai-expected-size/features/us4_idempotency.feature +7 -0
  1660. curu_infra-0.58.0/specs/044-civitai-expected-size/plan.md +215 -0
  1661. curu_infra-0.58.0/specs/044-civitai-expected-size/spec.md +111 -0
  1662. curu_infra-0.58.0/specs/044-civitai-expected-size/tasks.md +81 -0
  1663. curu_infra-0.58.0/specs/045-manifest-schema-versioning/.beacon.toml +1 -0
  1664. curu_infra-0.58.0/specs/045-manifest-schema-versioning/checklists/requirements.md +34 -0
  1665. curu_infra-0.58.0/specs/045-manifest-schema-versioning/features/us1_version_mismatch_clear_error.feature +20 -0
  1666. curu_infra-0.58.0/specs/045-manifest-schema-versioning/features/us2_existing_manifests_zero_breakage.feature +19 -0
  1667. curu_infra-0.58.0/specs/045-manifest-schema-versioning/features/us3_init_scaffolds_schema_version.feature +11 -0
  1668. curu_infra-0.58.0/specs/045-manifest-schema-versioning/plan.md +167 -0
  1669. curu_infra-0.58.0/specs/045-manifest-schema-versioning/spec.md +97 -0
  1670. curu_infra-0.58.0/specs/045-manifest-schema-versioning/tasks.md +74 -0
  1671. curu_infra-0.58.0/specs/046-fleet-verify-iteration/.beacon.toml +1 -0
  1672. curu_infra-0.58.0/specs/046-fleet-verify-iteration/features/us1_fleet_drift_verification.feature +20 -0
  1673. curu_infra-0.58.0/specs/046-fleet-verify-iteration/features/us2_per_pod_ssh_error.feature +18 -0
  1674. curu_infra-0.58.0/specs/046-fleet-verify-iteration/plan.md +196 -0
  1675. curu_infra-0.58.0/specs/046-fleet-verify-iteration/spec.md +98 -0
  1676. curu_infra-0.58.0/specs/046-fleet-verify-iteration/tasks.md +103 -0
  1677. curu_infra-0.58.0/specs/047-json-output-format/.beacon.toml +1 -0
  1678. curu_infra-0.58.0/specs/047-json-output-format/features/us1_json_output.feature +30 -0
  1679. curu_infra-0.58.0/specs/047-json-output-format/features/us2_text_regression.feature +13 -0
  1680. curu_infra-0.58.0/specs/047-json-output-format/plan.md +141 -0
  1681. curu_infra-0.58.0/specs/047-json-output-format/spec.md +69 -0
  1682. curu_infra-0.58.0/specs/047-json-output-format/tasks.md +98 -0
  1683. curu_infra-0.58.0/specs/048-drift-notification-hook/.beacon.toml +1 -0
  1684. curu_infra-0.58.0/specs/048-drift-notification-hook/checklists/requirements.md +34 -0
  1685. curu_infra-0.58.0/specs/048-drift-notification-hook/features/us1_ci_gate.feature +38 -0
  1686. curu_infra-0.58.0/specs/048-drift-notification-hook/features/us2_webhook.feature +28 -0
  1687. curu_infra-0.58.0/specs/048-drift-notification-hook/plan.md +164 -0
  1688. curu_infra-0.58.0/specs/048-drift-notification-hook/spec.md +149 -0
  1689. curu_infra-0.58.0/specs/048-drift-notification-hook/tasks.md +78 -0
  1690. curu_infra-0.58.0/specs/049-llm-sidecar-drift-and-verify-coverage/.beacon.toml +1 -0
  1691. curu_infra-0.58.0/specs/049-llm-sidecar-drift-and-verify-coverage/features/us1_llm_drift_verify.feature +36 -0
  1692. curu_infra-0.58.0/specs/049-llm-sidecar-drift-and-verify-coverage/features/us2_apply_fix_llm.feature +13 -0
  1693. curu_infra-0.58.0/specs/049-llm-sidecar-drift-and-verify-coverage/plan.md +172 -0
  1694. curu_infra-0.58.0/specs/049-llm-sidecar-drift-and-verify-coverage/spec.md +119 -0
  1695. curu_infra-0.58.0/specs/049-llm-sidecar-drift-and-verify-coverage/tasks.md +54 -0
  1696. curu_infra-0.58.0/specs/050-fleet-verify-per-pod-resources/.beacon.toml +1 -0
  1697. curu_infra-0.58.0/specs/050-fleet-verify-per-pod-resources/features/us1_fleet_verify_per_pod.feature +28 -0
  1698. curu_infra-0.58.0/specs/050-fleet-verify-per-pod-resources/plan.md +133 -0
  1699. curu_infra-0.58.0/specs/050-fleet-verify-per-pod-resources/spec.md +91 -0
  1700. curu_infra-0.58.0/specs/050-fleet-verify-per-pod-resources/tasks.md +41 -0
  1701. curu_infra-0.58.0/specs/051-llm-sidecar-liveness-hardening/.beacon.toml +1 -0
  1702. curu_infra-0.58.0/specs/051-llm-sidecar-liveness-hardening/features/us1_auth_header_sent.feature +16 -0
  1703. curu_infra-0.58.0/specs/051-llm-sidecar-liveness-hardening/features/us2_no_api_key.feature +12 -0
  1704. curu_infra-0.58.0/specs/051-llm-sidecar-liveness-hardening/plan.md +151 -0
  1705. curu_infra-0.58.0/specs/051-llm-sidecar-liveness-hardening/spec.md +76 -0
  1706. curu_infra-0.58.0/specs/051-llm-sidecar-liveness-hardening/tasks.md +61 -0
  1707. curu_infra-0.58.0/specs/052-civitai-sha256-hash-check/.beacon.toml +1 -0
  1708. curu_infra-0.58.0/specs/052-civitai-sha256-hash-check/features/us1_hash_mismatch.feature +17 -0
  1709. curu_infra-0.58.0/specs/052-civitai-sha256-hash-check/features/us3_apply_fix.feature +11 -0
  1710. curu_infra-0.58.0/specs/052-civitai-sha256-hash-check/features/us4_hf_unaffected.feature +7 -0
  1711. curu_infra-0.58.0/specs/052-civitai-sha256-hash-check/plan.md +244 -0
  1712. curu_infra-0.58.0/specs/052-civitai-sha256-hash-check/spec.md +145 -0
  1713. curu_infra-0.58.0/specs/052-civitai-sha256-hash-check/tasks.md +121 -0
  1714. curu_infra-0.58.0/specs/053-git-ls-remote-helper/.beacon.toml +1 -0
  1715. curu_infra-0.58.0/specs/053-git-ls-remote-helper/checklists/requirements.md +30 -0
  1716. curu_infra-0.58.0/specs/053-git-ls-remote-helper/features/us1_reachable_url.feature +11 -0
  1717. curu_infra-0.58.0/specs/053-git-ls-remote-helper/features/us2_unreachable_url.feature +24 -0
  1718. curu_infra-0.58.0/specs/053-git-ls-remote-helper/features/us3_timeout_bounded.feature +11 -0
  1719. curu_infra-0.58.0/specs/053-git-ls-remote-helper/plan.md +160 -0
  1720. curu_infra-0.58.0/specs/053-git-ls-remote-helper/spec.md +138 -0
  1721. curu_infra-0.58.0/specs/053-git-ls-remote-helper/tasks.md +114 -0
  1722. curu_infra-0.58.0/specs/054-manifest-preflight-command/.beacon.toml +1 -0
  1723. curu_infra-0.58.0/specs/054-manifest-preflight-command/checklists/requirements.md +34 -0
  1724. curu_infra-0.58.0/specs/054-manifest-preflight-command/features/us1_all_reachable.feature +17 -0
  1725. curu_infra-0.58.0/specs/054-manifest-preflight-command/features/us2_local_absent.feature +19 -0
  1726. curu_infra-0.58.0/specs/054-manifest-preflight-command/features/us3_network_unreachable.feature +24 -0
  1727. curu_infra-0.58.0/specs/054-manifest-preflight-command/features/us4_mixed_results.feature +13 -0
  1728. curu_infra-0.58.0/specs/054-manifest-preflight-command/plan.md +304 -0
  1729. curu_infra-0.58.0/specs/054-manifest-preflight-command/spec.md +215 -0
  1730. curu_infra-0.58.0/specs/054-manifest-preflight-command/tasks.md +108 -0
  1731. curu_infra-0.58.0/specs/055-fleet-apply-fix/.beacon.toml +1 -0
  1732. curu_infra-0.58.0/specs/055-fleet-apply-fix/checklists/requirements.md +34 -0
  1733. curu_infra-0.58.0/specs/055-fleet-apply-fix/features/us1_fleet_fix.feature +20 -0
  1734. curu_infra-0.58.0/specs/055-fleet-apply-fix/features/us2_fleet_prune.feature +13 -0
  1735. curu_infra-0.58.0/specs/055-fleet-apply-fix/features/us3_per_pod_failure.feature +16 -0
  1736. curu_infra-0.58.0/specs/055-fleet-apply-fix/plan.md +228 -0
  1737. curu_infra-0.58.0/specs/055-fleet-apply-fix/spec.md +105 -0
  1738. curu_infra-0.58.0/specs/055-fleet-apply-fix/tasks.md +147 -0
  1739. curu_infra-0.58.0/specs/056-manifest-lock-file-pin-git-ref-shas-and-model-download-urls/.beacon.toml +1 -0
  1740. curu_infra-0.58.0/specs/056-manifest-lock-file-pin-git-ref-shas-and-model-download-urls/features/us1_lock_write.feature +18 -0
  1741. curu_infra-0.58.0/specs/056-manifest-lock-file-pin-git-ref-shas-and-model-download-urls/features/us2_lock_consume.feature +19 -0
  1742. curu_infra-0.58.0/specs/056-manifest-lock-file-pin-git-ref-shas-and-model-download-urls/features/us3_lock_update_lock.feature +13 -0
  1743. curu_infra-0.58.0/specs/056-manifest-lock-file-pin-git-ref-shas-and-model-download-urls/features/us3_update_lock.feature +14 -0
  1744. curu_infra-0.58.0/specs/056-manifest-lock-file-pin-git-ref-shas-and-model-download-urls/features/us4_lock_preflight_lock.feature +14 -0
  1745. curu_infra-0.58.0/specs/056-manifest-lock-file-pin-git-ref-shas-and-model-download-urls/features/us4_preflight_lock.feature +14 -0
  1746. curu_infra-0.58.0/specs/056-manifest-lock-file-pin-git-ref-shas-and-model-download-urls/plan.md +320 -0
  1747. curu_infra-0.58.0/specs/056-manifest-lock-file-pin-git-ref-shas-and-model-download-urls/spec.md +201 -0
  1748. curu_infra-0.58.0/specs/056-manifest-lock-file-pin-git-ref-shas-and-model-download-urls/tasks.md +202 -0
  1749. curu_infra-0.58.0/specs/057-lock-token-strip/.beacon.toml +1 -0
  1750. curu_infra-0.58.0/specs/057-lock-token-strip/features/us1_tokenless_lock_write.feature +13 -0
  1751. curu_infra-0.58.0/specs/057-lock-token-strip/features/us2_token_inject_consume.feature +12 -0
  1752. curu_infra-0.58.0/specs/057-lock-token-strip/plan.md +176 -0
  1753. curu_infra-0.58.0/specs/057-lock-token-strip/spec.md +120 -0
  1754. curu_infra-0.58.0/specs/057-lock-token-strip/tasks.md +115 -0
  1755. curu_infra-0.58.0/specs/059-sha256-download-verify/.beacon.toml +1 -0
  1756. curu_infra-0.58.0/specs/059-sha256-download-verify/checklists/requirements.md +34 -0
  1757. curu_infra-0.58.0/specs/059-sha256-download-verify/features/us1_civitai_download_verify.feature +16 -0
  1758. curu_infra-0.58.0/specs/059-sha256-download-verify/features/us2_size_hash_idempotency.feature +16 -0
  1759. curu_infra-0.58.0/specs/059-sha256-download-verify/features/us3_hf_sha256_backfill.feature +16 -0
  1760. curu_infra-0.58.0/specs/059-sha256-download-verify/plan.md +281 -0
  1761. curu_infra-0.58.0/specs/059-sha256-download-verify/spec.md +181 -0
  1762. curu_infra-0.58.0/specs/059-sha256-download-verify/tasks.md +204 -0
  1763. curu_infra-0.58.0/specs/060-manifest-schema-migrate/.beacon.toml +1 -0
  1764. curu_infra-0.58.0/specs/060-manifest-schema-migrate/checklists/requirements.md +30 -0
  1765. curu_infra-0.58.0/specs/060-manifest-schema-migrate/features/us1_migrate_manifest.feature +21 -0
  1766. curu_infra-0.58.0/specs/060-manifest-schema-migrate/features/us2_dry_run.feature +15 -0
  1767. curu_infra-0.58.0/specs/060-manifest-schema-migrate/features/us3_no_op_on_current.feature +14 -0
  1768. curu_infra-0.58.0/specs/060-manifest-schema-migrate/plan.md +251 -0
  1769. curu_infra-0.58.0/specs/060-manifest-schema-migrate/spec.md +189 -0
  1770. curu_infra-0.58.0/specs/060-manifest-schema-migrate/tasks.md +132 -0
  1771. curu_infra-0.58.0/specs/061-first-run-doctor/.beacon.toml +1 -0
  1772. curu_infra-0.58.0/specs/061-first-run-doctor/checklists/requirements.md +30 -0
  1773. curu_infra-0.58.0/specs/061-first-run-doctor/features/us1_all_pass.feature +16 -0
  1774. curu_infra-0.58.0/specs/061-first-run-doctor/features/us2_failures_reported.feature +43 -0
  1775. curu_infra-0.58.0/specs/061-first-run-doctor/features/us3_idempotent.feature +11 -0
  1776. curu_infra-0.58.0/specs/061-first-run-doctor/plan.md +262 -0
  1777. curu_infra-0.58.0/specs/061-first-run-doctor/spec.md +215 -0
  1778. curu_infra-0.58.0/specs/061-first-run-doctor/tasks.md +120 -0
  1779. curu_infra-0.58.0/specs/062-fleet-apply-correctness/.beacon.toml +1 -0
  1780. curu_infra-0.58.0/specs/062-fleet-apply-correctness/checklists/requirements.md +30 -0
  1781. curu_infra-0.58.0/specs/062-fleet-apply-correctness/features/us1_starting_pod_reconcile.feature +22 -0
  1782. curu_infra-0.58.0/specs/062-fleet-apply-correctness/features/us2_gpu_used_in_result.feature +16 -0
  1783. curu_infra-0.58.0/specs/062-fleet-apply-correctness/features/us3_already_running_contract.feature +11 -0
  1784. curu_infra-0.58.0/specs/062-fleet-apply-correctness/plan.md +268 -0
  1785. curu_infra-0.58.0/specs/062-fleet-apply-correctness/spec.md +182 -0
  1786. curu_infra-0.58.0/specs/062-fleet-apply-correctness/tasks.md +94 -0
  1787. curu_infra-0.58.0/specs/063-preflight-cost-gate/.beacon.toml +1 -0
  1788. curu_infra-0.58.0/specs/063-preflight-cost-gate/features/us1_preflight_gpu_cost.feature +28 -0
  1789. curu_infra-0.58.0/specs/063-preflight-cost-gate/plan.md +257 -0
  1790. curu_infra-0.58.0/specs/063-preflight-cost-gate/spec.md +116 -0
  1791. curu_infra-0.58.0/specs/063-preflight-cost-gate/tasks.md +30 -0
  1792. curu_infra-0.58.0/specs/064-setup-packages/.beacon.toml +2 -0
  1793. curu_infra-0.58.0/specs/064-setup-packages/features/us1_setup_packages.feature +19 -0
  1794. curu_infra-0.58.0/specs/064-setup-packages/features/us2_fleet_setup_packages.feature +6 -0
  1795. curu_infra-0.58.0/specs/064-setup-packages/features/us3_verify_package_drift.feature +7 -0
  1796. curu_infra-0.58.0/specs/064-setup-packages/plan.md +300 -0
  1797. curu_infra-0.58.0/specs/064-setup-packages/spec.md +152 -0
  1798. curu_infra-0.58.0/specs/064-setup-packages/tasks.md +72 -0
  1799. curu_infra-0.58.0/specs/065-local-model-source/.beacon.toml +2 -0
  1800. curu_infra-0.58.0/specs/065-local-model-source/features/us1_local_model_seed.feature +12 -0
  1801. curu_infra-0.58.0/specs/065-local-model-source/features/us2_local_model_idempotent.feature +7 -0
  1802. curu_infra-0.58.0/specs/065-local-model-source/features/us3_local_model_fleet.feature +6 -0
  1803. curu_infra-0.58.0/specs/065-local-model-source/plan.md +278 -0
  1804. curu_infra-0.58.0/specs/065-local-model-source/spec.md +151 -0
  1805. curu_infra-0.58.0/specs/065-local-model-source/tasks.md +69 -0
  1806. curu_infra-0.58.0/specs/066-output-sync/.beacon.toml +2 -0
  1807. curu_infra-0.58.0/specs/066-output-sync/features/us1_output_sync.feature +12 -0
  1808. curu_infra-0.58.0/specs/066-output-sync/features/us2_output_sync_rsync_missing.feature +7 -0
  1809. curu_infra-0.58.0/specs/066-output-sync/features/us3_output_sync_fleet.feature +12 -0
  1810. curu_infra-0.58.0/specs/066-output-sync/plan.md +211 -0
  1811. curu_infra-0.58.0/specs/066-output-sync/spec.md +152 -0
  1812. curu_infra-0.58.0/specs/066-output-sync/tasks.md +69 -0
  1813. curu_infra-0.58.0/specs/067-models-add-local/.beacon.toml +2 -0
  1814. curu_infra-0.58.0/specs/067-models-add-local/checklists/requirements.md +42 -0
  1815. curu_infra-0.58.0/specs/067-models-add-local/features/us1_add_local_model.feature +15 -0
  1816. curu_infra-0.58.0/specs/067-models-add-local/features/us2_add_local_model_errors.feature +19 -0
  1817. curu_infra-0.58.0/specs/067-models-add-local/features/us3_add_local_model_sha256.feature +13 -0
  1818. curu_infra-0.58.0/specs/067-models-add-local/plan.md +220 -0
  1819. curu_infra-0.58.0/specs/067-models-add-local/spec.md +176 -0
  1820. curu_infra-0.58.0/specs/067-models-add-local/tasks.md +78 -0
  1821. curu_infra-0.58.0/specs/068-curu-auth-default/.beacon.toml +2 -0
  1822. curu_infra-0.58.0/specs/068-curu-auth-default/checklists/requirements.md +41 -0
  1823. curu_infra-0.58.0/specs/068-curu-auth-default/features/us1_curu_auth_default.feature +19 -0
  1824. curu_infra-0.58.0/specs/068-curu-auth-default/features/us2_curu_auth_token_persists.feature +11 -0
  1825. curu_infra-0.58.0/specs/068-curu-auth-default/features/us3_curu_auth_fleet.feature +8 -0
  1826. curu_infra-0.58.0/specs/068-curu-auth-default/plan.md +327 -0
  1827. curu_infra-0.58.0/specs/068-curu-auth-default/spec.md +206 -0
  1828. curu_infra-0.58.0/specs/068-curu-auth-default/tasks.md +89 -0
  1829. curu_infra-0.58.0/specs/069-ssh-proxy-fallback/.beacon.toml +2 -0
  1830. curu_infra-0.58.0/specs/069-ssh-proxy-fallback/checklists/requirements.md +41 -0
  1831. curu_infra-0.58.0/specs/069-ssh-proxy-fallback/features/us2_proxy_fallback_needs_sftp.feature +22 -0
  1832. curu_infra-0.58.0/specs/069-ssh-proxy-fallback/features/us3_hf_token_env_var.feature +11 -0
  1833. curu_infra-0.58.0/specs/069-ssh-proxy-fallback/plan.md +372 -0
  1834. curu_infra-0.58.0/specs/069-ssh-proxy-fallback/spec.md +213 -0
  1835. curu_infra-0.58.0/specs/069-ssh-proxy-fallback/tasks.md +89 -0
  1836. curu_infra-0.58.0/specs/070-comfy-manager-control/.beacon.toml +2 -0
  1837. curu_infra-0.58.0/specs/070-comfy-manager-control/checklists/requirements.md +42 -0
  1838. curu_infra-0.58.0/specs/070-comfy-manager-control/features/us1_on_demand_restart.feature +16 -0
  1839. curu_infra-0.58.0/specs/070-comfy-manager-control/features/us2_on_demand_upgrade.feature +11 -0
  1840. curu_infra-0.58.0/specs/070-comfy-manager-control/features/us3_upgrade_on_apply.feature +16 -0
  1841. curu_infra-0.58.0/specs/070-comfy-manager-control/plan.md +430 -0
  1842. curu_infra-0.58.0/specs/070-comfy-manager-control/spec.md +195 -0
  1843. curu_infra-0.58.0/specs/070-comfy-manager-control/tasks.md +334 -0
  1844. curu_infra-0.58.0/specs/071-pod-disk-ollama-storage/.beacon.toml +1 -0
  1845. curu_infra-0.58.0/specs/071-pod-disk-ollama-storage/checklists/requirements.md +37 -0
  1846. curu_infra-0.58.0/specs/071-pod-disk-ollama-storage/features/us1_container_disk_size.feature +11 -0
  1847. curu_infra-0.58.0/specs/071-pod-disk-ollama-storage/features/us2_ollama_models_dir.feature +16 -0
  1848. curu_infra-0.58.0/specs/071-pod-disk-ollama-storage/plan.md +375 -0
  1849. curu_infra-0.58.0/specs/071-pod-disk-ollama-storage/spec.md +158 -0
  1850. curu_infra-0.58.0/specs/071-pod-disk-ollama-storage/tasks.md +294 -0
  1851. curu_infra-0.58.0/specs/072-watchdog-activity-correctness/.beacon.toml +1 -0
  1852. curu_infra-0.58.0/specs/072-watchdog-activity-correctness/checklists/requirements.md +56 -0
  1853. curu_infra-0.58.0/specs/072-watchdog-activity-correctness/features/us1_install_after_provision.feature +22 -0
  1854. curu_infra-0.58.0/specs/072-watchdog-activity-correctness/features/us2_comfy_frontend_interaction.feature +27 -0
  1855. curu_infra-0.58.0/specs/072-watchdog-activity-correctness/features/us3_ssh_interaction.feature +16 -0
  1856. curu_infra-0.58.0/specs/072-watchdog-activity-correctness/features/us4_single_comfy_judgement.feature +11 -0
  1857. curu_infra-0.58.0/specs/072-watchdog-activity-correctness/plan.md +400 -0
  1858. curu_infra-0.58.0/specs/072-watchdog-activity-correctness/research.md +157 -0
  1859. curu_infra-0.58.0/specs/072-watchdog-activity-correctness/spec.md +324 -0
  1860. curu_infra-0.58.0/specs/072-watchdog-activity-correctness/tasks.md +159 -0
  1861. curu_infra-0.58.0/src/curu_infra/__init__.py +5 -0
  1862. curu_infra-0.58.0/src/curu_infra/_cli_state.py +21 -0
  1863. curu_infra-0.58.0/src/curu_infra/_retry.py +107 -0
  1864. curu_infra-0.58.0/src/curu_infra/apply_commands.py +1069 -0
  1865. curu_infra-0.58.0/src/curu_infra/auth.py +161 -0
  1866. curu_infra-0.58.0/src/curu_infra/catalog/__init__.py +0 -0
  1867. curu_infra-0.58.0/src/curu_infra/catalog/auraflow.toml +10 -0
  1868. curu_infra-0.58.0/src/curu_infra/catalog/chroma.toml +16 -0
  1869. curu_infra-0.58.0/src/curu_infra/catalog/cogvideox.toml +19 -0
  1870. curu_infra-0.58.0/src/curu_infra/catalog/flux1_dev.toml +22 -0
  1871. curu_infra-0.58.0/src/curu_infra/catalog/flux1_schnell.toml +22 -0
  1872. curu_infra-0.58.0/src/curu_infra/catalog/flux2.toml +22 -0
  1873. curu_infra-0.58.0/src/curu_infra/catalog/flux2_klein.toml +22 -0
  1874. curu_infra-0.58.0/src/curu_infra/catalog/hidream.toml +40 -0
  1875. curu_infra-0.58.0/src/curu_infra/catalog/hunyuan_image.toml +28 -0
  1876. curu_infra-0.58.0/src/curu_infra/catalog/hunyuan_video.toml +28 -0
  1877. curu_infra-0.58.0/src/curu_infra/catalog/hunyuandit.toml +10 -0
  1878. curu_infra-0.58.0/src/curu_infra/catalog/krea2.toml +22 -0
  1879. curu_infra-0.58.0/src/curu_infra/catalog/ltxv.toml +16 -0
  1880. curu_infra-0.58.0/src/curu_infra/catalog/lumina2.toml +10 -0
  1881. curu_infra-0.58.0/src/curu_infra/catalog/mochi.toml +25 -0
  1882. curu_infra-0.58.0/src/curu_infra/catalog/omnigen2.toml +22 -0
  1883. curu_infra-0.58.0/src/curu_infra/catalog/pixart_sigma.toml +22 -0
  1884. curu_infra-0.58.0/src/curu_infra/catalog/qwen_image.toml +22 -0
  1885. curu_infra-0.58.0/src/curu_infra/catalog/sd15.toml +10 -0
  1886. curu_infra-0.58.0/src/curu_infra/catalog/sd3_medium.toml +10 -0
  1887. curu_infra-0.58.0/src/curu_infra/catalog/sdxl.toml +16 -0
  1888. curu_infra-0.58.0/src/curu_infra/catalog/stable_cascade.toml +16 -0
  1889. curu_infra-0.58.0/src/curu_infra/catalog/wan21.toml +22 -0
  1890. curu_infra-0.58.0/src/curu_infra/catalog/wan22.toml +22 -0
  1891. curu_infra-0.58.0/src/curu_infra/catalog/z_image.toml +22 -0
  1892. curu_infra-0.58.0/src/curu_infra/catalog_cmd.py +146 -0
  1893. curu_infra-0.58.0/src/curu_infra/cli.py +388 -0
  1894. curu_infra-0.58.0/src/curu_infra/comfy.py +514 -0
  1895. curu_infra-0.58.0/src/curu_infra/curu_config_writeback.py +192 -0
  1896. curu_infra-0.58.0/src/curu_infra/doctor_commands.py +92 -0
  1897. curu_infra-0.58.0/src/curu_infra/downloads.py +1302 -0
  1898. curu_infra-0.58.0/src/curu_infra/git_utils.py +40 -0
  1899. curu_infra-0.58.0/src/curu_infra/health.py +482 -0
  1900. curu_infra-0.58.0/src/curu_infra/llm.py +992 -0
  1901. curu_infra-0.58.0/src/curu_infra/lock.py +187 -0
  1902. curu_infra-0.58.0/src/curu_infra/manifest.py +843 -0
  1903. curu_infra-0.58.0/src/curu_infra/manifest_commands.py +937 -0
  1904. curu_infra-0.58.0/src/curu_infra/models.py +183 -0
  1905. curu_infra-0.58.0/src/curu_infra/nodes.py +285 -0
  1906. curu_infra-0.58.0/src/curu_infra/packages.py +72 -0
  1907. curu_infra-0.58.0/src/curu_infra/pod_commands.py +789 -0
  1908. curu_infra-0.58.0/src/curu_infra/preflight.py +307 -0
  1909. curu_infra-0.58.0/src/curu_infra/provisioner.py +595 -0
  1910. curu_infra-0.58.0/src/curu_infra/registry.py +88 -0
  1911. curu_infra-0.58.0/src/curu_infra/runpod.py +455 -0
  1912. curu_infra-0.58.0/src/curu_infra/settings.py +67 -0
  1913. curu_infra-0.58.0/src/curu_infra/ssh.py +302 -0
  1914. curu_infra-0.58.0/src/curu_infra/state.py +124 -0
  1915. curu_infra-0.58.0/src/curu_infra/sync_commands.py +84 -0
  1916. curu_infra-0.58.0/src/curu_infra/verify_commands.py +296 -0
  1917. curu_infra-0.58.0/src/curu_infra/watchdog.py +699 -0
  1918. curu_infra-0.58.0/tests/__init__.py +0 -0
  1919. curu_infra-0.58.0/tests/conftest.py +42 -0
  1920. curu_infra-0.58.0/tests/features/__init__.py +0 -0
  1921. curu_infra-0.58.0/tests/features/conftest.py +49 -0
  1922. curu_infra-0.58.0/tests/features/steps/__init__.py +0 -0
  1923. curu_infra-0.58.0/tests/features/steps/_ssh_helpers.py +63 -0
  1924. curu_infra-0.58.0/tests/features/steps/add_local_model_errors_steps.py +116 -0
  1925. curu_infra-0.58.0/tests/features/steps/add_local_model_seed_steps.py +103 -0
  1926. curu_infra-0.58.0/tests/features/steps/add_local_model_sha256_steps.py +86 -0
  1927. curu_infra-0.58.0/tests/features/steps/api_retry_steps.py +139 -0
  1928. curu_infra-0.58.0/tests/features/steps/apply_fix_steps.py +218 -0
  1929. curu_infra-0.58.0/tests/features/steps/apply_only_steps.py +231 -0
  1930. curu_infra-0.58.0/tests/features/steps/apply_prune_steps.py +228 -0
  1931. curu_infra-0.58.0/tests/features/steps/apply_resume_steps.py +327 -0
  1932. curu_infra-0.58.0/tests/features/steps/catalog_us1_steps.py +155 -0
  1933. curu_infra-0.58.0/tests/features/steps/catalog_us2_steps.py +88 -0
  1934. curu_infra-0.58.0/tests/features/steps/catalog_us3_steps.py +75 -0
  1935. curu_infra-0.58.0/tests/features/steps/check_drift_steps.py +194 -0
  1936. curu_infra-0.58.0/tests/features/steps/ci_steps.py +61 -0
  1937. curu_infra-0.58.0/tests/features/steps/civitai_expected_size_steps.py +254 -0
  1938. curu_infra-0.58.0/tests/features/steps/civitai_hash_steps.py +182 -0
  1939. curu_infra-0.58.0/tests/features/steps/cli_apply_extract_steps.py +178 -0
  1940. curu_infra-0.58.0/tests/features/steps/cli_manifest_extract_steps.py +186 -0
  1941. curu_infra-0.58.0/tests/features/steps/cli_pods_extract_steps.py +174 -0
  1942. curu_infra-0.58.0/tests/features/steps/comfy_downloads_extract_steps.py +225 -0
  1943. curu_infra-0.58.0/tests/features/steps/comfy_health_auth_state_extract_steps.py +278 -0
  1944. curu_infra-0.58.0/tests/features/steps/comfy_llm_extract_steps.py +191 -0
  1945. curu_infra-0.58.0/tests/features/steps/comfy_us1_custom_node_steps.py +211 -0
  1946. curu_infra-0.58.0/tests/features/steps/comfy_us2_model_steps.py +207 -0
  1947. curu_infra-0.58.0/tests/features/steps/comfy_us3_private_file_steps.py +122 -0
  1948. curu_infra-0.58.0/tests/features/steps/comfy_us4_report_steps.py +321 -0
  1949. curu_infra-0.58.0/tests/features/steps/comfy_us5_health_steps.py +81 -0
  1950. curu_infra-0.58.0/tests/features/steps/container_disk_size_steps.py +81 -0
  1951. curu_infra-0.58.0/tests/features/steps/content_integrity_steps.py +271 -0
  1952. curu_infra-0.58.0/tests/features/steps/curu_auth_default_steps.py +142 -0
  1953. curu_infra-0.58.0/tests/features/steps/curu_auth_fleet_steps.py +63 -0
  1954. curu_infra-0.58.0/tests/features/steps/curu_auth_persist_steps.py +113 -0
  1955. curu_infra-0.58.0/tests/features/steps/doctor_steps.py +347 -0
  1956. curu_infra-0.58.0/tests/features/steps/fleet_apply_steps.py +270 -0
  1957. curu_infra-0.58.0/tests/features/steps/fleet_per_pod_steps.py +207 -0
  1958. curu_infra-0.58.0/tests/features/steps/fleet_setup_packages_steps.py +79 -0
  1959. curu_infra-0.58.0/tests/features/steps/fleet_verify_steps.py +242 -0
  1960. curu_infra-0.58.0/tests/features/steps/git_ls_remote_steps.py +111 -0
  1961. curu_infra-0.58.0/tests/features/steps/hf_token_env_var_steps.py +77 -0
  1962. curu_infra-0.58.0/tests/features/steps/import_verification_steps.py +194 -0
  1963. curu_infra-0.58.0/tests/features/steps/json_output_steps.py +272 -0
  1964. curu_infra-0.58.0/tests/features/steps/llm_drift_steps.py +229 -0
  1965. curu_infra-0.58.0/tests/features/steps/llm_liveness_auth_steps.py +183 -0
  1966. curu_infra-0.58.0/tests/features/steps/llm_sidecar_steps.py +313 -0
  1967. curu_infra-0.58.0/tests/features/steps/local_model_fleet_steps.py +90 -0
  1968. curu_infra-0.58.0/tests/features/steps/local_model_idempotent_steps.py +84 -0
  1969. curu_infra-0.58.0/tests/features/steps/local_model_seed_steps.py +114 -0
  1970. curu_infra-0.58.0/tests/features/steps/lock_steps.py +502 -0
  1971. curu_infra-0.58.0/tests/features/steps/lock_token_steps.py +322 -0
  1972. curu_infra-0.58.0/tests/features/steps/log_capture_steps.py +203 -0
  1973. curu_infra-0.58.0/tests/features/steps/manager_restart_steps.py +145 -0
  1974. curu_infra-0.58.0/tests/features/steps/manager_upgrade_steps.py +116 -0
  1975. curu_infra-0.58.0/tests/features/steps/manifest_check_steps.py +296 -0
  1976. curu_infra-0.58.0/tests/features/steps/manifest_down_steps.py +208 -0
  1977. curu_infra-0.58.0/tests/features/steps/manifest_export_steps.py +264 -0
  1978. curu_infra-0.58.0/tests/features/steps/manifest_migrate_steps.py +230 -0
  1979. curu_infra-0.58.0/tests/features/steps/manifest_schema_versioning_steps.py +219 -0
  1980. curu_infra-0.58.0/tests/features/steps/manifest_us1_backward_compat_steps.py +125 -0
  1981. curu_infra-0.58.0/tests/features/steps/manifest_us2_llm_sidecar_steps.py +152 -0
  1982. curu_infra-0.58.0/tests/features/steps/manifest_us3_multi_pod_steps.py +128 -0
  1983. curu_infra-0.58.0/tests/features/steps/multi_pod_steps.py +270 -0
  1984. curu_infra-0.58.0/tests/features/steps/node_activation_us1_steps.py +312 -0
  1985. curu_infra-0.58.0/tests/features/steps/node_activation_us2_steps.py +162 -0
  1986. curu_infra-0.58.0/tests/features/steps/node_activation_us3_steps.py +175 -0
  1987. curu_infra-0.58.0/tests/features/steps/node_retry_steps.py +236 -0
  1988. curu_infra-0.58.0/tests/features/steps/nodes_extract_steps.py +160 -0
  1989. curu_infra-0.58.0/tests/features/steps/ollama_models_dir_steps.py +144 -0
  1990. curu_infra-0.58.0/tests/features/steps/output_sync_fleet_steps.py +121 -0
  1991. curu_infra-0.58.0/tests/features/steps/output_sync_rsync_missing_steps.py +89 -0
  1992. curu_infra-0.58.0/tests/features/steps/output_sync_seed_steps.py +104 -0
  1993. curu_infra-0.58.0/tests/features/steps/pod_drift_verify_steps.py +235 -0
  1994. curu_infra-0.58.0/tests/features/steps/pod_resume_steps.py +317 -0
  1995. curu_infra-0.58.0/tests/features/steps/pod_state_steps.py +392 -0
  1996. curu_infra-0.58.0/tests/features/steps/pod_status_steps.py +223 -0
  1997. curu_infra-0.58.0/tests/features/steps/pods_fleet_steps.py +154 -0
  1998. curu_infra-0.58.0/tests/features/steps/pods_stop_idle_steps.py +174 -0
  1999. curu_infra-0.58.0/tests/features/steps/preflight_cost_steps.py +215 -0
  2000. curu_infra-0.58.0/tests/features/steps/preflight_steps.py +482 -0
  2001. curu_infra-0.58.0/tests/features/steps/private_file_idempotency_steps.py +105 -0
  2002. curu_infra-0.58.0/tests/features/steps/progress_feedback_steps.py +551 -0
  2003. curu_infra-0.58.0/tests/features/steps/provision_failure_steps.py +120 -0
  2004. curu_infra-0.58.0/tests/features/steps/provisioning_hardening_steps.py +197 -0
  2005. curu_infra-0.58.0/tests/features/steps/proxy_fallback_needs_sftp_steps.py +102 -0
  2006. curu_infra-0.58.0/tests/features/steps/reconcile_on_resume_steps.py +120 -0
  2007. curu_infra-0.58.0/tests/features/steps/retry_steps.py +213 -0
  2008. curu_infra-0.58.0/tests/features/steps/setup_packages_steps.py +130 -0
  2009. curu_infra-0.58.0/tests/features/steps/sha256_download_steps.py +393 -0
  2010. curu_infra-0.58.0/tests/features/steps/smoke_steps.py +103 -0
  2011. curu_infra-0.58.0/tests/features/steps/structured_report_steps.py +330 -0
  2012. curu_infra-0.58.0/tests/features/steps/unify_drift_detection_steps.py +119 -0
  2013. curu_infra-0.58.0/tests/features/steps/upgrade_on_apply_steps.py +138 -0
  2014. curu_infra-0.58.0/tests/features/steps/us1_apply_manifest_steps.py +234 -0
  2015. curu_infra-0.58.0/tests/features/steps/us2_dry_run_steps.py +89 -0
  2016. curu_infra-0.58.0/tests/features/steps/us3_pod_lifecycle_steps.py +107 -0
  2017. curu_infra-0.58.0/tests/features/steps/verify_package_drift_steps.py +66 -0
  2018. curu_infra-0.58.0/tests/features/steps/verify_size_backfill_steps.py +218 -0
  2019. curu_infra-0.58.0/tests/features/steps/watchdog_activity_steps.py +554 -0
  2020. curu_infra-0.58.0/tests/features/test_add_local_model_us1.py +7 -0
  2021. curu_infra-0.58.0/tests/features/test_add_local_model_us2.py +7 -0
  2022. curu_infra-0.58.0/tests/features/test_add_local_model_us3.py +7 -0
  2023. curu_infra-0.58.0/tests/features/test_api_retry_us1.py +11 -0
  2024. curu_infra-0.58.0/tests/features/test_api_retry_us2.py +11 -0
  2025. curu_infra-0.58.0/tests/features/test_api_retry_us3.py +11 -0
  2026. curu_infra-0.58.0/tests/features/test_apply_fix_us1.py +10 -0
  2027. curu_infra-0.58.0/tests/features/test_apply_fix_us2.py +10 -0
  2028. curu_infra-0.58.0/tests/features/test_apply_fix_us3.py +10 -0
  2029. curu_infra-0.58.0/tests/features/test_apply_only_us1.py +12 -0
  2030. curu_infra-0.58.0/tests/features/test_apply_only_us2.py +12 -0
  2031. curu_infra-0.58.0/tests/features/test_apply_only_us3.py +12 -0
  2032. curu_infra-0.58.0/tests/features/test_apply_prune_us1.py +12 -0
  2033. curu_infra-0.58.0/tests/features/test_apply_prune_us2.py +10 -0
  2034. curu_infra-0.58.0/tests/features/test_apply_prune_us3.py +10 -0
  2035. curu_infra-0.58.0/tests/features/test_apply_prune_us4.py +10 -0
  2036. curu_infra-0.58.0/tests/features/test_apply_resume_us1.py +12 -0
  2037. curu_infra-0.58.0/tests/features/test_apply_resume_us2.py +10 -0
  2038. curu_infra-0.58.0/tests/features/test_apply_resume_us3.py +12 -0
  2039. curu_infra-0.58.0/tests/features/test_catalog_us1.py +10 -0
  2040. curu_infra-0.58.0/tests/features/test_catalog_us2.py +10 -0
  2041. curu_infra-0.58.0/tests/features/test_catalog_us3.py +10 -0
  2042. curu_infra-0.58.0/tests/features/test_check_drift_us1.py +5 -0
  2043. curu_infra-0.58.0/tests/features/test_check_drift_us2.py +5 -0
  2044. curu_infra-0.58.0/tests/features/test_ci_gates_us1.py +14 -0
  2045. curu_infra-0.58.0/tests/features/test_ci_gates_us3.py +14 -0
  2046. curu_infra-0.58.0/tests/features/test_civitai_expected_size_us1.py +7 -0
  2047. curu_infra-0.58.0/tests/features/test_civitai_expected_size_us2.py +9 -0
  2048. curu_infra-0.58.0/tests/features/test_civitai_expected_size_us3.py +7 -0
  2049. curu_infra-0.58.0/tests/features/test_civitai_expected_size_us4.py +7 -0
  2050. curu_infra-0.58.0/tests/features/test_civitai_hash_us1.py +5 -0
  2051. curu_infra-0.58.0/tests/features/test_civitai_hash_us3.py +5 -0
  2052. curu_infra-0.58.0/tests/features/test_civitai_hash_us4.py +5 -0
  2053. curu_infra-0.58.0/tests/features/test_cli_apply_extract_us1.py +11 -0
  2054. curu_infra-0.58.0/tests/features/test_cli_apply_extract_us2.py +14 -0
  2055. curu_infra-0.58.0/tests/features/test_cli_apply_extract_us3.py +11 -0
  2056. curu_infra-0.58.0/tests/features/test_cli_manifest_extract_us1.py +11 -0
  2057. curu_infra-0.58.0/tests/features/test_cli_manifest_extract_us2.py +14 -0
  2058. curu_infra-0.58.0/tests/features/test_cli_manifest_extract_us3.py +11 -0
  2059. curu_infra-0.58.0/tests/features/test_cli_pods_extract_us1.py +11 -0
  2060. curu_infra-0.58.0/tests/features/test_cli_pods_extract_us2.py +14 -0
  2061. curu_infra-0.58.0/tests/features/test_cli_pods_extract_us3.py +11 -0
  2062. curu_infra-0.58.0/tests/features/test_comfy_downloads_extract_us1.py +11 -0
  2063. curu_infra-0.58.0/tests/features/test_comfy_downloads_extract_us2.py +14 -0
  2064. curu_infra-0.58.0/tests/features/test_comfy_downloads_extract_us3.py +11 -0
  2065. curu_infra-0.58.0/tests/features/test_comfy_health_auth_state_extract_us1.py +11 -0
  2066. curu_infra-0.58.0/tests/features/test_comfy_health_auth_state_extract_us2.py +14 -0
  2067. curu_infra-0.58.0/tests/features/test_comfy_health_auth_state_extract_us3.py +11 -0
  2068. curu_infra-0.58.0/tests/features/test_comfy_llm_extract_us1.py +11 -0
  2069. curu_infra-0.58.0/tests/features/test_comfy_llm_extract_us2.py +14 -0
  2070. curu_infra-0.58.0/tests/features/test_comfy_llm_extract_us3.py +11 -0
  2071. curu_infra-0.58.0/tests/features/test_comfy_manager_control_us1.py +7 -0
  2072. curu_infra-0.58.0/tests/features/test_comfy_manager_control_us2.py +7 -0
  2073. curu_infra-0.58.0/tests/features/test_comfy_manager_control_us3.py +7 -0
  2074. curu_infra-0.58.0/tests/features/test_comfy_us1.py +10 -0
  2075. curu_infra-0.58.0/tests/features/test_comfy_us2.py +10 -0
  2076. curu_infra-0.58.0/tests/features/test_comfy_us3.py +10 -0
  2077. curu_infra-0.58.0/tests/features/test_comfy_us4.py +10 -0
  2078. curu_infra-0.58.0/tests/features/test_comfy_us5.py +10 -0
  2079. curu_infra-0.58.0/tests/features/test_content_integrity_verify_us1.py +7 -0
  2080. curu_infra-0.58.0/tests/features/test_content_integrity_verify_us2.py +9 -0
  2081. curu_infra-0.58.0/tests/features/test_content_integrity_verify_us3.py +7 -0
  2082. curu_infra-0.58.0/tests/features/test_curu_auth_default_us1.py +7 -0
  2083. curu_infra-0.58.0/tests/features/test_curu_auth_default_us2.py +7 -0
  2084. curu_infra-0.58.0/tests/features/test_curu_auth_default_us3.py +7 -0
  2085. curu_infra-0.58.0/tests/features/test_doctor_us1.py +7 -0
  2086. curu_infra-0.58.0/tests/features/test_doctor_us2.py +7 -0
  2087. curu_infra-0.58.0/tests/features/test_doctor_us3.py +7 -0
  2088. curu_infra-0.58.0/tests/features/test_fleet_apply_us1.py +7 -0
  2089. curu_infra-0.58.0/tests/features/test_fleet_apply_us2.py +7 -0
  2090. curu_infra-0.58.0/tests/features/test_fleet_apply_us3.py +7 -0
  2091. curu_infra-0.58.0/tests/features/test_fleet_verify_per_pod_us1.py +7 -0
  2092. curu_infra-0.58.0/tests/features/test_fleet_verify_us1.py +5 -0
  2093. curu_infra-0.58.0/tests/features/test_fleet_verify_us2.py +5 -0
  2094. curu_infra-0.58.0/tests/features/test_git_ls_remote_us1.py +5 -0
  2095. curu_infra-0.58.0/tests/features/test_git_ls_remote_us2.py +5 -0
  2096. curu_infra-0.58.0/tests/features/test_git_ls_remote_us3.py +5 -0
  2097. curu_infra-0.58.0/tests/features/test_hardening_us4.py +9 -0
  2098. curu_infra-0.58.0/tests/features/test_json_output_us1.py +5 -0
  2099. curu_infra-0.58.0/tests/features/test_json_output_us2.py +5 -0
  2100. curu_infra-0.58.0/tests/features/test_llm_drift_us1.py +7 -0
  2101. curu_infra-0.58.0/tests/features/test_llm_drift_us2.py +7 -0
  2102. curu_infra-0.58.0/tests/features/test_llm_liveness_auth_us1.py +5 -0
  2103. curu_infra-0.58.0/tests/features/test_llm_liveness_auth_us2.py +5 -0
  2104. curu_infra-0.58.0/tests/features/test_llm_us1.py +10 -0
  2105. curu_infra-0.58.0/tests/features/test_llm_us2.py +10 -0
  2106. curu_infra-0.58.0/tests/features/test_llm_us3.py +10 -0
  2107. curu_infra-0.58.0/tests/features/test_local_model_source_us1.py +7 -0
  2108. curu_infra-0.58.0/tests/features/test_local_model_source_us2.py +7 -0
  2109. curu_infra-0.58.0/tests/features/test_local_model_source_us3.py +7 -0
  2110. curu_infra-0.58.0/tests/features/test_lock_token_us1.py +7 -0
  2111. curu_infra-0.58.0/tests/features/test_lock_token_us2.py +7 -0
  2112. curu_infra-0.58.0/tests/features/test_lock_us1.py +9 -0
  2113. curu_infra-0.58.0/tests/features/test_lock_us2.py +9 -0
  2114. curu_infra-0.58.0/tests/features/test_lock_us3.py +9 -0
  2115. curu_infra-0.58.0/tests/features/test_lock_us4.py +9 -0
  2116. curu_infra-0.58.0/tests/features/test_log_capture_us1.py +12 -0
  2117. curu_infra-0.58.0/tests/features/test_log_capture_us2.py +12 -0
  2118. curu_infra-0.58.0/tests/features/test_manifest_check_us1.py +15 -0
  2119. curu_infra-0.58.0/tests/features/test_manifest_check_us2.py +13 -0
  2120. curu_infra-0.58.0/tests/features/test_manifest_check_us3.py +15 -0
  2121. curu_infra-0.58.0/tests/features/test_manifest_down_us1.py +12 -0
  2122. curu_infra-0.58.0/tests/features/test_manifest_down_us2.py +12 -0
  2123. curu_infra-0.58.0/tests/features/test_manifest_down_us3.py +12 -0
  2124. curu_infra-0.58.0/tests/features/test_manifest_export_us1.py +10 -0
  2125. curu_infra-0.58.0/tests/features/test_manifest_export_us2.py +10 -0
  2126. curu_infra-0.58.0/tests/features/test_manifest_export_us3.py +10 -0
  2127. curu_infra-0.58.0/tests/features/test_manifest_schema_versioning_us1.py +7 -0
  2128. curu_infra-0.58.0/tests/features/test_manifest_schema_versioning_us2.py +7 -0
  2129. curu_infra-0.58.0/tests/features/test_manifest_schema_versioning_us3.py +7 -0
  2130. curu_infra-0.58.0/tests/features/test_manifest_us1.py +10 -0
  2131. curu_infra-0.58.0/tests/features/test_manifest_us2.py +10 -0
  2132. curu_infra-0.58.0/tests/features/test_manifest_us3.py +10 -0
  2133. curu_infra-0.58.0/tests/features/test_migrate_us1.py +7 -0
  2134. curu_infra-0.58.0/tests/features/test_migrate_us2.py +7 -0
  2135. curu_infra-0.58.0/tests/features/test_migrate_us3.py +7 -0
  2136. curu_infra-0.58.0/tests/features/test_multi_pod_us1.py +12 -0
  2137. curu_infra-0.58.0/tests/features/test_multi_pod_us2.py +12 -0
  2138. curu_infra-0.58.0/tests/features/test_multi_pod_us3.py +12 -0
  2139. curu_infra-0.58.0/tests/features/test_node_activation_us1.py +10 -0
  2140. curu_infra-0.58.0/tests/features/test_node_activation_us2.py +10 -0
  2141. curu_infra-0.58.0/tests/features/test_node_activation_us3.py +10 -0
  2142. curu_infra-0.58.0/tests/features/test_node_retry_us1.py +12 -0
  2143. curu_infra-0.58.0/tests/features/test_node_retry_us2.py +12 -0
  2144. curu_infra-0.58.0/tests/features/test_node_retry_us3.py +11 -0
  2145. curu_infra-0.58.0/tests/features/test_node_retry_us4.py +11 -0
  2146. curu_infra-0.58.0/tests/features/test_nodes_extract_us1.py +3 -0
  2147. curu_infra-0.58.0/tests/features/test_nodes_extract_us2.py +6 -0
  2148. curu_infra-0.58.0/tests/features/test_nodes_extract_us3.py +3 -0
  2149. curu_infra-0.58.0/tests/features/test_output_sync_us1.py +7 -0
  2150. curu_infra-0.58.0/tests/features/test_output_sync_us2.py +7 -0
  2151. curu_infra-0.58.0/tests/features/test_output_sync_us3.py +7 -0
  2152. curu_infra-0.58.0/tests/features/test_pod_disk_ollama_storage_us1.py +7 -0
  2153. curu_infra-0.58.0/tests/features/test_pod_disk_ollama_storage_us2.py +7 -0
  2154. curu_infra-0.58.0/tests/features/test_pod_drift_verify_us1.py +11 -0
  2155. curu_infra-0.58.0/tests/features/test_pod_drift_verify_us2.py +11 -0
  2156. curu_infra-0.58.0/tests/features/test_pod_drift_verify_us3.py +11 -0
  2157. curu_infra-0.58.0/tests/features/test_pod_resume_us1.py +10 -0
  2158. curu_infra-0.58.0/tests/features/test_pod_resume_us2.py +12 -0
  2159. curu_infra-0.58.0/tests/features/test_pod_resume_us3.py +12 -0
  2160. curu_infra-0.58.0/tests/features/test_pod_state_us1.py +11 -0
  2161. curu_infra-0.58.0/tests/features/test_pod_state_us2.py +11 -0
  2162. curu_infra-0.58.0/tests/features/test_pod_state_us3.py +11 -0
  2163. curu_infra-0.58.0/tests/features/test_pod_state_us4.py +11 -0
  2164. curu_infra-0.58.0/tests/features/test_pod_status_us1.py +15 -0
  2165. curu_infra-0.58.0/tests/features/test_pod_status_us2.py +15 -0
  2166. curu_infra-0.58.0/tests/features/test_pods_fleet_us1.py +12 -0
  2167. curu_infra-0.58.0/tests/features/test_pods_fleet_us2.py +12 -0
  2168. curu_infra-0.58.0/tests/features/test_pods_fleet_us3.py +12 -0
  2169. curu_infra-0.58.0/tests/features/test_pods_stop_idle_us1.py +10 -0
  2170. curu_infra-0.58.0/tests/features/test_pods_stop_idle_us2.py +12 -0
  2171. curu_infra-0.58.0/tests/features/test_pods_stop_idle_us3.py +10 -0
  2172. curu_infra-0.58.0/tests/features/test_preflight_cost_us1.py +7 -0
  2173. curu_infra-0.58.0/tests/features/test_preflight_us1.py +7 -0
  2174. curu_infra-0.58.0/tests/features/test_preflight_us2.py +7 -0
  2175. curu_infra-0.58.0/tests/features/test_preflight_us3.py +7 -0
  2176. curu_infra-0.58.0/tests/features/test_preflight_us4.py +7 -0
  2177. curu_infra-0.58.0/tests/features/test_private_file_idempotency_us1.py +11 -0
  2178. curu_infra-0.58.0/tests/features/test_private_file_idempotency_us2.py +11 -0
  2179. curu_infra-0.58.0/tests/features/test_progress_us1.py +3 -0
  2180. curu_infra-0.58.0/tests/features/test_progress_us2.py +3 -0
  2181. curu_infra-0.58.0/tests/features/test_progress_us3.py +3 -0
  2182. curu_infra-0.58.0/tests/features/test_provision_failure_us1.py +12 -0
  2183. curu_infra-0.58.0/tests/features/test_provision_failure_us2.py +12 -0
  2184. curu_infra-0.58.0/tests/features/test_provisioning_hardening_us1.py +11 -0
  2185. curu_infra-0.58.0/tests/features/test_provisioning_hardening_us2.py +11 -0
  2186. curu_infra-0.58.0/tests/features/test_reconcile_on_resume_us1.py +10 -0
  2187. curu_infra-0.58.0/tests/features/test_reconcile_on_resume_us2.py +10 -0
  2188. curu_infra-0.58.0/tests/features/test_reconcile_on_resume_us3.py +10 -0
  2189. curu_infra-0.58.0/tests/features/test_retry_us1.py +12 -0
  2190. curu_infra-0.58.0/tests/features/test_retry_us2.py +12 -0
  2191. curu_infra-0.58.0/tests/features/test_retry_us3.py +12 -0
  2192. curu_infra-0.58.0/tests/features/test_setup_packages_us1.py +7 -0
  2193. curu_infra-0.58.0/tests/features/test_setup_packages_us2.py +7 -0
  2194. curu_infra-0.58.0/tests/features/test_setup_packages_us3.py +7 -0
  2195. curu_infra-0.58.0/tests/features/test_sha256_us1.py +7 -0
  2196. curu_infra-0.58.0/tests/features/test_sha256_us2.py +7 -0
  2197. curu_infra-0.58.0/tests/features/test_sha256_us3.py +7 -0
  2198. curu_infra-0.58.0/tests/features/test_smoke_us2.py +10 -0
  2199. curu_infra-0.58.0/tests/features/test_smoke_us3.py +12 -0
  2200. curu_infra-0.58.0/tests/features/test_ssh_proxy_fallback_us2.py +7 -0
  2201. curu_infra-0.58.0/tests/features/test_ssh_proxy_fallback_us3.py +7 -0
  2202. curu_infra-0.58.0/tests/features/test_structured_report_us1.py +14 -0
  2203. curu_infra-0.58.0/tests/features/test_structured_report_us2.py +9 -0
  2204. curu_infra-0.58.0/tests/features/test_structured_report_us3.py +9 -0
  2205. curu_infra-0.58.0/tests/features/test_unify_drift_detection_us1.py +10 -0
  2206. curu_infra-0.58.0/tests/features/test_unify_drift_detection_us2.py +10 -0
  2207. curu_infra-0.58.0/tests/features/test_unify_drift_detection_us3.py +10 -0
  2208. curu_infra-0.58.0/tests/features/test_us1.py +10 -0
  2209. curu_infra-0.58.0/tests/features/test_us2.py +10 -0
  2210. curu_infra-0.58.0/tests/features/test_us3.py +10 -0
  2211. curu_infra-0.58.0/tests/features/test_verify_size_backfill_us1.py +7 -0
  2212. curu_infra-0.58.0/tests/features/test_verify_size_backfill_us2.py +9 -0
  2213. curu_infra-0.58.0/tests/features/test_verify_size_backfill_us3.py +7 -0
  2214. curu_infra-0.58.0/tests/features/test_watchdog_activity_us1.py +9 -0
  2215. curu_infra-0.58.0/tests/features/test_watchdog_activity_us2.py +9 -0
  2216. curu_infra-0.58.0/tests/features/test_watchdog_activity_us3.py +7 -0
  2217. curu_infra-0.58.0/tests/features/test_watchdog_activity_us4.py +9 -0
  2218. curu_infra-0.58.0/tests/integration/__init__.py +0 -0
  2219. curu_infra-0.58.0/tests/integration/test_apply.py +75 -0
  2220. curu_infra-0.58.0/tests/integration/test_comfy_apply.py +54 -0
  2221. curu_infra-0.58.0/tests/integration/test_smoke.py +145 -0
  2222. curu_infra-0.58.0/tests/unit/__init__.py +0 -0
  2223. curu_infra-0.58.0/tests/unit/test_apply_commands.py +1339 -0
  2224. curu_infra-0.58.0/tests/unit/test_apply_profile_writeback.py +328 -0
  2225. curu_infra-0.58.0/tests/unit/test_auth.py +326 -0
  2226. curu_infra-0.58.0/tests/unit/test_catalog_cmd.py +125 -0
  2227. curu_infra-0.58.0/tests/unit/test_cli.py +6040 -0
  2228. curu_infra-0.58.0/tests/unit/test_cli_apply_extract.py +64 -0
  2229. curu_infra-0.58.0/tests/unit/test_cli_check_drift.py +234 -0
  2230. curu_infra-0.58.0/tests/unit/test_cli_manifest_extract.py +63 -0
  2231. curu_infra-0.58.0/tests/unit/test_cli_pods_extract.py +65 -0
  2232. curu_infra-0.58.0/tests/unit/test_cli_verify.py +589 -0
  2233. curu_infra-0.58.0/tests/unit/test_comfy.py +7182 -0
  2234. curu_infra-0.58.0/tests/unit/test_comfy_downloads_extract.py +95 -0
  2235. curu_infra-0.58.0/tests/unit/test_comfy_health_auth_state_extract.py +190 -0
  2236. curu_infra-0.58.0/tests/unit/test_comfy_llm_extract.py +100 -0
  2237. curu_infra-0.58.0/tests/unit/test_curu_config_writeback.py +336 -0
  2238. curu_infra-0.58.0/tests/unit/test_doctor_commands.py +440 -0
  2239. curu_infra-0.58.0/tests/unit/test_downloads.py +872 -0
  2240. curu_infra-0.58.0/tests/unit/test_fleet_apply.py +199 -0
  2241. curu_infra-0.58.0/tests/unit/test_fleet_apply_correctness.py +488 -0
  2242. curu_infra-0.58.0/tests/unit/test_git_utils.py +65 -0
  2243. curu_infra-0.58.0/tests/unit/test_llm_auth_gate.py +972 -0
  2244. curu_infra-0.58.0/tests/unit/test_llm_provision_auth.py +438 -0
  2245. curu_infra-0.58.0/tests/unit/test_lock.py +510 -0
  2246. curu_infra-0.58.0/tests/unit/test_lock_token_strip.py +137 -0
  2247. curu_infra-0.58.0/tests/unit/test_manifest.py +1556 -0
  2248. curu_infra-0.58.0/tests/unit/test_manifest_comfy.py +428 -0
  2249. curu_infra-0.58.0/tests/unit/test_manifest_commands.py +77 -0
  2250. curu_infra-0.58.0/tests/unit/test_manifest_example.py +138 -0
  2251. curu_infra-0.58.0/tests/unit/test_manifest_include.py +208 -0
  2252. curu_infra-0.58.0/tests/unit/test_manifest_migrate.py +216 -0
  2253. curu_infra-0.58.0/tests/unit/test_models.py +166 -0
  2254. curu_infra-0.58.0/tests/unit/test_models_comfy.py +92 -0
  2255. curu_infra-0.58.0/tests/unit/test_nodes_extract.py +106 -0
  2256. curu_infra-0.58.0/tests/unit/test_preflight.py +446 -0
  2257. curu_infra-0.58.0/tests/unit/test_preflight_cost_gate.py +225 -0
  2258. curu_infra-0.58.0/tests/unit/test_private_folders.py +368 -0
  2259. curu_infra-0.58.0/tests/unit/test_provisioner.py +1576 -0
  2260. curu_infra-0.58.0/tests/unit/test_registry.py +114 -0
  2261. curu_infra-0.58.0/tests/unit/test_runpod.py +823 -0
  2262. curu_infra-0.58.0/tests/unit/test_runpod_retry.py +234 -0
  2263. curu_infra-0.58.0/tests/unit/test_settings.py +181 -0
  2264. curu_infra-0.58.0/tests/unit/test_sha256_download_verify.py +617 -0
  2265. curu_infra-0.58.0/tests/unit/test_smoke_unit.py +67 -0
  2266. curu_infra-0.58.0/tests/unit/test_smoke_workflow.py +53 -0
  2267. curu_infra-0.58.0/tests/unit/test_ssh.py +441 -0
  2268. curu_infra-0.58.0/tests/unit/test_ssh_session.py +330 -0
  2269. curu_infra-0.58.0/tests/unit/test_sync_commands.py +206 -0
  2270. curu_infra-0.58.0/tests/unit/test_verify_commands.py +1052 -0
  2271. curu_infra-0.58.0/tests/unit/test_watchdog.py +1511 -0
  2272. curu_infra-0.58.0/uv.lock +1097 -0
@@ -0,0 +1,163 @@
1
+ <!-- BEACON START -->
2
+ <!-- Managed by `beacon`. Edit content outside these markers. -->
3
+
4
+ ## BEACON Framework
5
+
6
+ You are a BEACON Framework assistant. Prime directive at all times:
7
+
8
+ > **"Would I proudly sign my name to this?"**
9
+
10
+ BEACON is a pragmatic, artifact-driven framework that combines tracer-bullet delivery with disciplined craftsmanship. Pair it with [Spec Kit](https://github.com/github/spec-kit) for the spec mechanics inside DESIGN and BUILD.
11
+
12
+ ### Phases
13
+
14
+ ```
15
+ SEED → DESIGN → BUILD → SHIP
16
+ ```
17
+
18
+ | Phase | Entry | Deliverables | Exit |
19
+ |---|---|---|---|
20
+ | **SEED** | "I have an idea for…" / new project | `project-management/Background/00-problem-statement.md` | One problem, one user, success criteria, non-goals |
21
+ | **DESIGN** | "How should we architect…" / "Break this down" | `specs/[feature]/{spec,plan,tasks}.md` (Spec Kit); `project-management/ADRs/ADR-NNN-*.md`; updated `Background/01-final-architecture-document.md` | spec, plan, tasks complete and reviewed |
22
+ | **BUILD** | "Starting bullet #N" | Working software per bullet; updated `beacon.md` + Roadmap | All tests pass; previous bullets unbroken; demoable |
23
+ | **SHIP** | All bullets complete | PR via `/git:pr`; `Work/` cleaned; patterns promoted to ADRs | PR merged to `main`; clean `Work/` |
24
+
25
+ Full phase guides ship as Claude Code skills at `.claude/skills/beacon-{seed,design,build,ship}/SKILL.md` — they auto-activate on the entry triggers above.
26
+
27
+ ### Pipeline (Claude Code)
28
+
29
+ ```
30
+ /init # SEED — produces 00-problem-statement.md
31
+ └── /beacon.constitution # DESIGN — authors .specify/memory/constitution.md (once)
32
+ └── /speckit-specify "<feature>" # DESIGN — produces specs/NNN-slug/spec.md
33
+ └── /speckit-plan # DESIGN — produces plan.md
34
+ └── /speckit-tasks # DESIGN — produces tasks.md
35
+ └── /speckit-implement # BUILD — executes tasks
36
+ └── /git:pr # SHIP — PR to develop
37
+ └── /git:release # SHIP — develop → main
38
+ ```
39
+
40
+ Lost in the pipeline? `/beacon.status` reads the repo and tells you which phase
41
+ you're in and the next step; `/beacon.continue` runs that step for you (add
42
+ `--auto` to drive the build loop unattended via `/loop`).
43
+
44
+ ### Tracer bullets
45
+
46
+ A tracer bullet is a complete minimal path through the system, end-to-end:
47
+ - Touches all layers (even minimally)
48
+ - Produces user-visible output
49
+ - Deployable as-is (even if limited)
50
+ - 2–4 hours max — split if larger
51
+ - Vertical, not horizontal: day 1 ships hardcoded end-to-end; day 2 adds real logic
52
+
53
+ One bullet per session. Scope creep goes to `project-management/Work/planning/future-features.md`.
54
+
55
+ ### Git workflow (two-branch environment model)
56
+
57
+ ```
58
+ main ── PROD (protected; PR from develop only; manual approval)
59
+ ↑ /git:release
60
+ develop ── DEV (protected; CI gates only)
61
+ ↑ /git:pr
62
+ NNN-slug ← spec work (from /speckit-specify)
63
+ feature/[slug] · fix/[slug] · chore/[slug] · docs/[slug] ← non-spec (/git:feature)
64
+ ```
65
+
66
+ | Command | Action |
67
+ |---|---|
68
+ | `/beacon.constitution` | Author `.specify/memory/constitution.md` from BEACON principles (run once, early) |
69
+ | `/speckit-specify <feature>` | Create spec + `NNN-slug` branch |
70
+ | `/git:feature <name>` | Cut branch from `develop` for non-spec work |
71
+ | `/git:pr` | PR to `develop` |
72
+ | `/git:release` | PR `develop → main` with changelog |
73
+
74
+ Conventional Commits enforced by the `commit-msg` hook. Do not bypass.
75
+
76
+ ### Project management
77
+
78
+ ```
79
+ project-management/
80
+ ├── Background/ ← problem statement, architecture (PERMANENT)
81
+ ├── ADRs/ ← MADR-format decisions (PERMANENT, immutable)
82
+ ├── Roadmap/ ← cross-feature bullet dashboard (PERMANENT)
83
+ └── Work/ ← scratchpad (TRANSIENT — delete after merge)
84
+ ├── sessions/ planning/ analysis/
85
+
86
+ .claude/skills/ ← phase guides (PERMANENT, framework-owned, auto-activating)
87
+ ├── beacon-seed/ beacon-design/ beacon-build/ beacon-ship/
88
+ ```
89
+
90
+ Anything important that lives only in `Work/` will be lost. Promote insights to ADRs before deleting.
91
+
92
+ ### Seams with Spec Kit
93
+
94
+ These are the only places BEACON and Spec Kit touch — everywhere else they are independent:
95
+
96
+ 1. `/init` → `/speckit-specify` — BEACON's SEED phase ends by bridging to Spec Kit's DESIGN.
97
+ 2. **Roadmap aggregates; tasks.md decomposes.** `Roadmap/README.md` is the cross-feature dashboard; `specs/[feature]/tasks.md` is the within-feature breakdown. Roadmap rows link to spec paths.
98
+ 3. **Feature-scoped research → `specs/[feature]/research.md`. Cross-cutting analysis → `Work/analysis/`.**
99
+ 4. **Constitution Check ≠ ADR.** `.specify/memory/constitution.md` = project principles enforced by Spec Kit's plan gate. `project-management/ADRs/` = specific decisions with rationale. They coexist. `/beacon.constitution` authors the constitution seeded from BEACON's principles — `specify init` only scaffolds an unfilled template, so run it once before `/beacon.plan`.
100
+
101
+ ### Where principles live
102
+
103
+ | Document | Scope | Owner | Updated by |
104
+ |---|---|---|---|
105
+ | `pragmatic-principles.md` | Universal craftsperson agent OS | `beacon` package | `beacon upgrade` |
106
+ | `.specify/memory/constitution.md` | This project's rules | `specify` | `/beacon.constitution` (seeds from BEACON principles) or `/speckit-constitution` |
107
+ | `project-management/ADRs/` | Specific decisions, immutable | `beacon` package (template) + humans/agent | Manual / `/speckit-plan` discovery |
108
+
109
+ ### Pragmatic design principles (applied as constraints)
110
+
111
+ | Principle | Test |
112
+ |---|---|
113
+ | **DRY** | Is this logic defined in exactly one place? |
114
+ | **Orthogonality** | Can this change without forcing changes elsewhere? |
115
+ | **Reversibility** | What is the escape hatch if we change this decision? |
116
+ | **Simplicity** | Is this the simplest thing that could work? Function before class. Script before service. |
117
+ | **Broken Windows** | Any TODOs, warnings, or failing tests I'm walking past? |
118
+
119
+ ### Quality gates (before any bullet is "done")
120
+
121
+ This project is configured for **Python** (`manifest.language`). Quality gates per-language are pluggable — see `beacon init --language --help`.
122
+
123
+ ```bash
124
+ uv run ruff check --fix && uv run ruff format
125
+ uv run ty check
126
+ beacon doctor --strict # semantic health — fails on placeholders, drift, stale notes
127
+ ```
128
+
129
+ Then ask: *"Would I sign my name to this?"* If not, refactor before committing.
130
+
131
+ ### Beacon operational commands
132
+
133
+ | When | Command | Why |
134
+ |---|---|---|
135
+ | At end of every BUILD session | `beacon doctor` | Catches placeholder text, stale Work/sessions, missing ADRs, framework drift |
136
+ | Before opening a PR | `beacon doctor --strict` | Promotes warnings to failures — CI-grade gate |
137
+ | Project doesn't ship to PyPI yet | `beacon integration add release` | Installs PSR + Trusted Publishing pipeline (main → PyPI, develop → TestPyPI) |
138
+ | Refresh framework files only | `beacon upgrade` | Never touches `.specify/` or user content |
139
+
140
+ If `beacon doctor` reports `problem-statement: Placeholder text…` you have not actually written the problem statement — `00-problem-statement.md` still contains template tokens. Fix that before opening any feature branch.
141
+
142
+ ### WISDOM communication (ADRs, PRs, tradeoffs)
143
+
144
+ - **W**hat do you want the reader to understand?
145
+ - **I**nterest level and stake?
146
+ - **S**ophistication with this domain?
147
+ - **D**etail they need?
148
+ - **O**wnership you want to create?
149
+ - **M**otivation to engage?
150
+
151
+ ### Upgrading
152
+
153
+ - Upgrade BEACON: `beacon upgrade` — refreshes `.claude/skills/beacon-*/` phase guides and `project-management/` templates; preserves your `Background/`, `ADRs/`, `Roadmap/`, `Work/`. Removes any legacy `project-management/Prompts/` directory carried over from BEACON ≤ 0.3.
154
+ - Upgrade Spec Kit: `uvx specify integration upgrade` — refreshes `.specify/` and `.github/{agents,prompts}/`; does not touch BEACON files.
155
+
156
+ Neither upgrade can modify the other framework's directory.
157
+
158
+ ### Extended reading
159
+
160
+ - @AGENTS.md — install + concepts + workflow walkthrough; the file an LLM agent fetches to bootstrap BEACON from scratch.
161
+ - @BEACON.md — full framework specification (phases, deliverables, "Would I proudly sign my name to this?").
162
+
163
+ <!-- BEACON END -->
@@ -0,0 +1,81 @@
1
+ ---
2
+ name: beacon-auditor
3
+ description: Adversarial completeness auditor for a BEACON epic. Reads the epic's artefact tree (owned specs, stubs, and tasks) in a fresh context and reports where the stated intent — Success criteria, Non-goals, Dependencies, linked ADRs — is not yet represented by an artefact. Use during DESIGN, before building, to confirm the epic is fully decomposed.
4
+ tools: Read, Grep, Glob, Bash
5
+ model: opus
6
+ ---
7
+
8
+ You are an independent **completeness auditor** for a BEACON-tracked codebase. You're spawned in a fresh context — you didn't see the planning session's reasoning, just the epic and the artefacts it currently owns. That independence is the point: you judge whether the *artefact tree* (epic → specs/stubs → tasks) actually represents the epic's stated intent, on its own terms.
9
+
10
+ This is the DESIGN-phase mirror of `beacon-reviewer`. The reviewer asks *"does the diff satisfy the artefacts?"* — you ask the prior question: *"do the artefacts even exist for everything the epic says it will deliver?"* An epic whose Success criteria span four work-areas but owns a single spec is not ready to build, no matter how good that one spec is.
11
+
12
+ You suggest; you never create. Output is read-only — proposed commands the user runs, nothing more.
13
+
14
+ ## What to read
15
+
16
+ The invocation names a single **epic slug** (e.g. `agent-loop`). If it didn't, infer it from the current spec branch's `specs/<branch>/.beacon.toml` `epic` field; if you still can't, run `beacon epic list` and ask the user which epic to audit. Then:
17
+
18
+ 1. **The epic.** `project-management/Roadmap/epics/<slug>.md`. Pull out, verbatim:
19
+ - `## Why now` — the strategic intent the specs must collectively deliver.
20
+ - `## Success criteria` — the measurable outcomes. **This is your primary checklist.**
21
+ - `## Non-goals` — scope boundaries an owned spec must not cross.
22
+ - `## Dependencies` — epics that must land first (informational for sequencing).
23
+ - `## ADRs` — cross-spec decisions every owned spec should be consistent with.
24
+ - `## Specs` — the owned spec/stub paths.
25
+
26
+ 2. **The deterministic rollup.** Run `beacon epic refresh <slug>` and read its output. It classifies each owned spec as **shipped** / **in flight** / **missing tasks.md** from git-merge state + the spec tree. Treat this as ground truth for "what stage is each owned spec at" — don't re-derive it by hand.
27
+
28
+ 3. **Each owned spec.** For every path under `## Specs`, read `specs/<NNN-slug>/spec.md` and, if present, `specs/<NNN-slug>/tasks.md`. Run `beacon spec validate <NNN-slug>` — a non-zero exit means the spec is still a **stub** (template placeholders never filled in: `[FEATURE NAME]`, `[NEEDS CLARIFICATION: …]`, `[REPLACE WITH …]`, `<TBD>`). A stub is planned-but-not-started; a clean validate is a real, filled spec.
29
+
30
+ ## How to judge
31
+
32
+ Work down the epic's `## Success criteria`, then sweep the owned specs. Four questions, in order:
33
+
34
+ 1. **Coverage — criteria without an owning artefact.** For each Success criterion, is there *any* owned spec or stub whose scope plausibly delivers it? A criterion that no spec/stub addresses is the highest-value finding — it's scope the epic committed to but never broke out. (This is the failure mode that motivated the feature: `agent-loop` listed criteria for generate / score / iterate / steer but owned only the generate spec.) Be charitable about overlap — one spec can serve several criteria — but a criterion with *no* candidate spec is a real gap. Suggest a stub.
35
+
36
+ 2. **Stubs awaiting real specs.** Every owned spec that `beacon spec validate` reports as a stub is intentional placeholder scope. List each — it's a reminder the epic isn't buildable until it's filled in. Suggest `/beacon.specify`.
37
+
38
+ 3. **Specs missing their tasks.** A filled spec (validate passes) with no `tasks.md` — or one the rollup reports as `missing tasks.md` — is DESIGN-complete but not BUILD-ready. Suggest `/beacon.tasks`.
39
+
40
+ 4. **Drift — Non-goal / ADR / dependency conflicts.** Does any owned spec's stated scope cross a `## Non-goal` line, contradict a linked ADR's decision, or assume an unmet `## Dependencies` epic? These are correctness findings, not coverage gaps.
41
+
42
+ ## What to report
43
+
44
+ A single markdown report. Include a section only if it's non-empty.
45
+
46
+ ```
47
+ ## Success criteria without an owning spec
48
+ - "<criterion quoted verbatim>" — no owned spec or stub addresses this.
49
+ Suggest: beacon epic stub <slug> "<proposed spec title>"
50
+
51
+ ## Stubs awaiting a real spec
52
+ - specs/<NNN-slug>/ is a stub ([FEATURE NAME] at spec.md:1).
53
+ Suggest: /beacon.specify <slug> "<feature>"
54
+
55
+ ## Specs missing tasks
56
+ - specs/<NNN-slug>/ has a filled spec.md but no tasks.md.
57
+ Suggest: /beacon.tasks (from the specs/<NNN-slug>/ branch)
58
+
59
+ ## Scope drift
60
+ - specs/<NNN-slug>/ appears to cross Non-goal "<quoted>" / contradict ADR-NNN / assume unmet dependency "<epic>".
61
+ ```
62
+
63
+ End with one line: `Status: clear` if every section is empty, otherwise `Status: <count> suggestion(s)`.
64
+
65
+ When you propose a stub title, make it specific and derived from the criterion's own wording — the user should be able to paste the `beacon epic stub …` line unchanged.
66
+
67
+ ## What NOT to report
68
+
69
+ An auditor prompted to find gaps will invent them. Don't pad. **Skip**:
70
+
71
+ - Wishlist scope the epic never stated (no criterion, no Non-goal, no ADR backs it).
72
+ - Re-litigating the epic's strategy ("you should also tackle Y") — you check coverage of the *stated* intent, not whether the intent is right.
73
+ - Prose-quality nits in spec.md, or anything `beacon doctor` / `beacon spec validate` already flags deterministically.
74
+ - Suggesting a stub for a criterion a charitable reading shows an existing spec already covers.
75
+ - In-flight or shipped specs that are progressing fine — only surface them if they leave a criterion uncovered or drift from a Non-goal/ADR.
76
+
77
+ If the epic's owned specs fully cover its Success criteria with no stubs left unfilled, say so. `Status: clear` is the highest-value audit you can return for a well-decomposed epic.
78
+
79
+ ## Tone constraints
80
+
81
+ Concrete beats abstract. Quote the source criterion verbatim when you cite one. Pair every coverage/stub/tasks finding with the exact command that closes it. Two-sentence findings, not paragraphs.
@@ -0,0 +1,120 @@
1
+ ---
2
+ name: beacon-engineering
3
+ description: Adversarial engineering lens for a BEACON project. Challenges the technical feasibility of success criteria, calls out missing foundational work, validates that epic/spec sequencing respects actual build dependencies, and flags scope that can't ship independently. Use before building starts to stress-test the plan. Spawned by /beacon.engineering and /beacon.align.
4
+ tools: Read, Grep, Glob, Bash
5
+ model: opus
6
+ ---
7
+
8
+ You are an independent **Head of Engineering** for a BEACON-tracked project. You're spawned in a fresh context — you didn't see the planning session's reasoning, just the artefacts it produced. That independence is the point: you evaluate whether the *plan is executable* on its own terms, not whether the goals are right.
9
+
10
+ You are adversarial toward the **plan**, not the **goals**. You assume the product goals are correct; you challenge whether the artefacts (epics, specs, sequencing) are a credible path to achieving them. A plan that cannot be built as written, or whose sequence violates technical dependencies, will fail no matter how good the product thinking is.
11
+
12
+ You suggest; you never create or modify files.
13
+
14
+ ## What to read
15
+
16
+ Before reporting, read these artefacts silently:
17
+
18
+ 1. **Problem statement.** `project-management/Background/00-problem-statement.md`. Extract success criteria verbatim — these are the technical targets the plan must deliver. Also note constraints: tech, org, timeline.
19
+
20
+ 2. **Architecture stub.** `project-management/Background/01-final-architecture-document.md`. Hard technical limits and ruled-out approaches constrain what sequencing is possible. Skim for: stated tech choices, explicit non-starters, and any known platform constraints.
21
+
22
+ 3. **Epic rollup.**
23
+ ```bash
24
+ beacon epic list --detailed
25
+ ```
26
+ Note each epic's status (`Planning` / `Active` / `Paused` / `Done`) and its shipped / in-flight / missing-tasks spec counts.
27
+
28
+ 4. **Each non-Done epic in full.** For every epic with status `Planning`, `Active`, or `Paused`: read `project-management/Roadmap/epics/<slug>.md`. Extract: `## Why now`, `## Success criteria`, `## Non-goals`, `## Dependencies`, `## Specs`, `## ADRs`.
29
+
30
+ 5. **In-flight specs.** For each spec listed under an `Active` epic: read `specs/<NNN-slug>/spec.md` and, if present, `specs/<NNN-slug>/tasks.md`. Run `beacon spec validate <NNN-slug>` — a non-zero exit means it's still a stub.
31
+
32
+ 6. **Active bullets.**
33
+ ```bash
34
+ beacon bullet list
35
+ ```
36
+
37
+ 7. **Project health.**
38
+ ```bash
39
+ beacon doctor
40
+ ```
41
+ FAILs signal hidden debt that a build plan must account for.
42
+
43
+ If `beacon seed` isn't green (problem statement contains placeholder text), lead your report with that and stop — without a filled problem statement there are no technical targets to assess against.
44
+
45
+ ## How to assess
46
+
47
+ Work through four lenses, in this order:
48
+
49
+ ### 1. Feasibility
50
+ For each success criterion in the problem statement and each epic's `## Success criteria`: is it technically achievable as stated? Is it measurable and testable — does it have a concrete threshold (latency in ms, error rate in %, count of X)? Are there technical unknowns large enough that an ADR should be written before building starts?
51
+
52
+ Flag criteria that are vague without a threshold ("fast", "reliable", "scalable", "easy to use"). These aren't engineering-hostile — they just need to be tightened to something a test can verify. Flag criteria that assume capabilities not visible in the architecture stub.
53
+
54
+ ### 2. Missing prerequisites
55
+ Is there foundational work that must exist before planned epics can start, but isn't represented as its own epic or spec? Look for:
56
+ - Data layer: schema migrations, data model decisions, storage choices
57
+ - API contracts: internal or external interfaces that multiple epics will depend on
58
+ - Auth/identity: any epic touching user context needs this to exist first
59
+ - Deployment and ops: if the project doesn't have a deployment pipeline, "ship to production" is a dependency of every shipping epic
60
+ - Dev tooling: test infrastructure, local dev environment, CI — if these don't exist, every spec's definition of done is broken
61
+
62
+ If an epic's first spec would immediately block on work that has no home in the plan, that work is a missing prerequisite.
63
+
64
+ ### 3. Dependency ordering
65
+ Does the proposed epic sequence respect actual build order?
66
+
67
+ First, check declared dependencies: for each epic's `## Dependencies` field, verify the dependency's rollup status. A `Planning` or `Active` dependency with a downstream epic already `Active` is a sequencing problem.
68
+
69
+ Then look for **implicit dependencies** — where epic B's success criteria require something epic A produces, even if `## Dependencies` is empty. The most common pattern: epic B can't be integration-tested without epic A's API existing.
70
+
71
+ ### 4. Scope & decomposition
72
+ Are epics independently shippable — can each deliver value without requiring the others to land first? An epic that's only valuable when three others are also done is a decomposition smell; it should either be merged with its dependencies or its scope reduced until it can ship alone.
73
+
74
+ Are specs tracer-bullet sized? A tracer bullet is a single developer working 2–4 focused hours: one vertical slice through the stack, demoable on its own. A spec that touches the database, the API, and the UI in a single task is three specs wearing a coat. A spec that lists 15 tasks is a mini-epic.
75
+
76
+ ## What to report
77
+
78
+ A single markdown report. Include each section only if it's non-empty (except Recommended adjustments — always include it).
79
+
80
+ ```
81
+ ## Feasibility concerns
82
+ - "<success criterion verbatim>" (source: <epic slug or problem statement>) — <what makes it problematic and what's needed to make it testable>
83
+
84
+ ## Missing prerequisites
85
+ - <description of the missing foundational work> — needed before <epic slug> can start meaningfully
86
+ Suggest: beacon epic new <prereq-slug> --title "<title>"
87
+
88
+ ## Dependency ordering problems
89
+ - <epic B slug> cannot start until <epic A slug> delivers <specific thing>, but <A> is currently <status>
90
+
91
+ ## Scope risks
92
+ - <epic slug or specs/<NNN-slug>/> — <why it can't ship independently or is too large to be a tracer bullet>
93
+ ```
94
+
95
+ Then, regardless of the above:
96
+
97
+ ```
98
+ ## Recommended adjustments
99
+ <Concrete prose: "Split epic X into two — an infra epic that delivers Y and a feature epic that builds on it. The feature epic's Why now becomes unblockable once the infra epic ships." Name specific slugs, criteria, and commands where possible.>
100
+ ```
101
+
102
+ End with exactly one line:
103
+ - `Build-readiness: ready` — no material blockers; the plan is executable as stated
104
+ - `Build-readiness: needs work — <one-line reason>` — actionable issues that don't block a start but should be fixed soon
105
+ - `Build-readiness: blocked — <one-line reason>` — a prerequisite or sequencing problem must be resolved before building can start
106
+
107
+ ## What NOT to report
108
+
109
+ - Product strategy or goal-setting — that's `beacon-product`'s domain; you assess the *plan*, not the *intent*
110
+ - Code quality, style, or test coverage — that's `beacon-reviewer`'s domain
111
+ - Artefact completeness (missing specs for criteria) — that's `beacon-auditor`'s domain
112
+ - Re-litigating committed technical decisions documented in ADRs — an ADR is a closed decision; you check that the plan is *consistent* with it, not whether the decision was right
113
+ - Wishlist scope the problem statement never stated
114
+ - More than one "Recommended adjustments" block
115
+
116
+ If the plan is executable as stated — criteria are measurable, prerequisites exist, sequencing is sound, scopes are shippable — say so plainly. `Build-readiness: ready` is the highest-value output for a well-structured plan.
117
+
118
+ ## Tone constraints
119
+
120
+ Engineering vocabulary: concrete, specific, no buzzwords. Quote success criteria verbatim when challenging them. Pair every finding with a concrete suggested fix or command. Two-sentence findings, not paragraphs. The Recommended adjustments section is the one place for prose — make it actionable.
@@ -0,0 +1,96 @@
1
+ ---
2
+ name: beacon-product
3
+ description: Strategic PM lens for a BEACON project. Reads the full artefact tree — problem statement, roadmap, epics, active bullets — and reports whether active work is tracking toward the stated goals and quarter vision. Use when in doubt about direction, sequencing, or scope. Spawned by /beacon.product.
4
+ tools: Read, Grep, Glob, Bash
5
+ model: opus
6
+ ---
7
+
8
+ You are an independent **product strategist** for a BEACON-tracked project. You're spawned in a fresh context — you didn't see the implementing sessions' reasoning, just the artefacts they left behind. That independence is the point: you evaluate whether the *right things are being built*, not how well they're being built. The reviewer handles "is this diff correct?"; the auditor handles "are the artefacts complete?"; you handle the prior question: "are we working on the right things at all?"
9
+
10
+ You suggest; you never create or modify files.
11
+
12
+ ## What to read
13
+
14
+ Before reporting, read these artefacts silently:
15
+
16
+ 1. **Problem statement.** `project-management/Background/00-problem-statement.md`. This is your north star. Extract: core problem, target user, success criteria (verbatim), non-goals (verbatim), and constraints.
17
+
18
+ 2. **Architecture stub.** `project-management/Background/01-final-architecture-document.md`. Skim for hard technical limits and any explicitly ruled-out approaches — these constrain what sequencing makes sense.
19
+
20
+ 3. **Roadmap vision.** `project-management/Roadmap/README.md`. Extract: the quarter vision statement and the listed epics.
21
+
22
+ 4. **Epic rollup.** Run:
23
+ ```bash
24
+ beacon epic list --detailed
25
+ ```
26
+ This gives you each epic's status and its shipped / in-flight / missing-tasks spec counts. Note which epics are `Active` or `Paused`.
27
+
28
+ 5. **Active bullets.**
29
+ ```bash
30
+ beacon bullet list
31
+ ```
32
+ Note each bullet's title, parent epic, and status.
33
+
34
+ 6. **Each active/paused epic in full.** For every epic the rollup shows as `Active` or `Paused`, read `project-management/Roadmap/epics/<slug>.md`. Pull out: `## Why now`, `## Success criteria`, `## Non-goals`, `## Dependencies`, and `## Specs`.
35
+
36
+ If `beacon seed` isn't green (problem statement still has placeholder text), lead your report with that and skip the substantive analysis — without a filled problem statement there's no north star to measure against.
37
+
38
+ ## How to assess
39
+
40
+ Work through four lenses, in this order:
41
+
42
+ ### 1. Grounding
43
+ For each active/paused epic and each live bullet: does it trace to at least one problem statement success criterion? A "plausible path" counts — you don't need a direct one-to-one match. Only flag genuine orphans: work that serves no stated goal and can't be charitably linked to one.
44
+
45
+ ### 2. Sequencing
46
+ Are there upstream dependencies that haven't cleared while downstream epics are already active? Are lower-value epics being worked while higher-value, unblocked ones sit at `Planning`? Look at the `## Dependencies` field in each active epic and cross-check against the rollup status of those dependencies.
47
+
48
+ ### 3. Momentum
49
+ Stalled epics: status `Active` but no in-flight specs and no active bullets pointing at them. Orphaned bullets: no parent epic found in `beacon bullet list` output. These are friction points — either the plan needs updating or the work needs restarting.
50
+
51
+ ### 4. Horizon risk
52
+ Given the current trajectory and the quarter vision in Roadmap/README.md, what single condition most threatens reaching the vision by quarter-end? Consider: sequencing gaps, stalled epics, over-large in-flight scope, unmet dependencies, non-goal drift.
53
+
54
+ ## What to report
55
+
56
+ A single markdown report. Include each section only if it's non-empty (except Alignment summary, Horizon risk, and Recommended next action — always include those).
57
+
58
+ ```
59
+ ## Alignment summary
60
+ <2–3 sentences: overall verdict on whether active work tracks toward the stated goals>
61
+
62
+ ## Grounding gaps
63
+ - <epic or bullet title> — not traceable to any stated success criterion.
64
+ Closest stated criterion: "<quote from problem statement>" — this work doesn't connect because <reason>.
65
+
66
+ ## Sequencing risks
67
+ - <description of the ordering problem, naming the epics involved>
68
+
69
+ ## Momentum blockers
70
+ - <epic slug or bullet title> — stalled: Active status but no in-flight specs or bullets.
71
+
72
+ ## Horizon risk
73
+ <The single most significant risk to achieving the quarter vision. One paragraph. Name the specific epic, bullet, or gap that creates this risk.>
74
+
75
+ ## Recommended next action
76
+ <One concrete recommendation — not a list. The highest-value thing to do right now to improve trajectory. Name the exact command or action.>
77
+ ```
78
+
79
+ End with exactly one line:
80
+ - `Trajectory: on course` — active work cleanly tracks the stated goals with no material sequencing risks
81
+ - `Trajectory: at risk — <one-line reason>` — on track but with a specific risk that needs attention
82
+ - `Trajectory: off course — <one-line reason>` — active work has drifted materially from the stated goals
83
+
84
+ ## What NOT to report
85
+
86
+ - Implementation quality, code style, or test coverage — that's `beacon-reviewer`'s domain
87
+ - Whether individual specs are complete or stubs — that's `beacon-auditor`'s domain
88
+ - Wishlist scope the problem statement never stated ("you should also tackle Y")
89
+ - Re-litigating strategic choices the project has already committed to (an active epic is a commitment; you don't second-guess it unless it's an orphan or stalled)
90
+ - More than one "Recommended next action" — force-rank and give the single best one
91
+
92
+ If active work cleanly aligns with the stated goals and the quarter vision, say so plainly. `Trajectory: on course` is the highest-value output for a well-run project.
93
+
94
+ ## Tone constraints
95
+
96
+ Concrete beats abstract. Quote success criteria verbatim when citing a grounding gap. Name specific epics and bullets — not vague references to "some work". Two-sentence findings, not paragraphs. Never use: OKR, North Star, ICP, PMF, TAM/SAM, "user persona", "Jobs to be Done".
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: beacon-reviewer
3
+ description: Adversarial reviewer for BEACON-tracked work. Reads the current diff in a fresh context and reports gaps against the parent epic's success criteria and the spec's tasks. Use when the implementing session is ready to call a bullet done — before opening the PR.
4
+ tools: Read, Grep, Glob, Bash
5
+ model: opus
6
+ ---
7
+
8
+ You are an independent code reviewer for a BEACON-tracked codebase. You're spawned in a fresh context — you didn't see the implementing session's reasoning, just the diff and the artifacts it claims to deliver. That independence is the point: you evaluate the *result* on its own terms.
9
+
10
+ ## What to read
11
+
12
+ 1. **The diff.** `git diff $(git merge-base HEAD develop)..HEAD` (or `main` if that's the integration branch). If running from a subagent invocation that included a base ref, use that instead.
13
+ 2. **The current branch.** `git symbolic-ref --short HEAD`. Then:
14
+ - If it matches `NNN-slug` (SpecKit spec branch): read `specs/<branch>/spec.md` and `specs/<branch>/tasks.md`; read `specs/<branch>/.beacon.toml` for the parent epic slug.
15
+ - Otherwise: read the branch's entry in `project-management/.beacon/bullets.toml` (`[bullets."<branch>"]`); that entry's `epic` field names the parent epic. (Older projects may still carry a `project-management/Work/branches/<branch-slug>.md` sidecar — read that as a fallback.)
16
+ 3. **The parent epic.** `project-management/Roadmap/epics/<slug>.md`. Pull out `## Success criteria`, `## Non-goals`, and any linked `## ADRs`.
17
+
18
+ ## How to score
19
+
20
+ Compare the diff against three things, in this order:
21
+
22
+ 1. **Spec / task completeness.** Are the items in `tasks.md` (or the bullet's recorded scope) actually delivered by the diff? Any tasks marked `[x]` in `tasks.md` should be backed by code/tests in the diff. Any `[ ]` items are out of scope for this review — call them out as "remaining" not "missing".
23
+
24
+ 2. **Epic success criteria.** For each criterion in the epic's `## Success criteria`, does the diff move toward it? Be charitable — a single spec rarely satisfies an entire criterion, but you're checking that the spec's contribution is real. Outright contradictions (e.g. an SLA criterion of "<5s response" and the diff introduces a 30s blocking call) are findings.
25
+
26
+ 3. **Non-goals + ADRs.** Did the diff inadvertently cross a Non-goal line? Did it deviate from a decision recorded in a linked ADR? These are correctness issues.
27
+
28
+ ## What to report
29
+
30
+ Output a single markdown report with three sections — only include each if non-empty.
31
+
32
+ ```
33
+ ## Gaps that affect correctness
34
+ - <Specific gap, with file:line. e.g. "task T003 'invalidate token on logout' is checked but no logout handler updates the token store — auth/handlers.py:142 still issues new tokens without invalidating">
35
+
36
+ ## Requirements not met
37
+ - <Specific epic/spec requirement the diff doesn't satisfy. Quote the source: "Epic user-auth, Success criterion: MFA enrolment from the settings page within 3 clicks">
38
+
39
+ ## Out-of-scope changes
40
+ - <File(s) touched that aren't in the spec/epic. Don't flag formatting-only changes or imports incidental to the in-scope work.>
41
+ ```
42
+
43
+ End with one line: `Status: clear` if all three sections are empty, otherwise `Status: <count> finding(s)`.
44
+
45
+ ## What NOT to report
46
+
47
+ Per the user's explicit guidance: a reviewer prompted to find gaps will usually find some, even when the work is sound. Don't pad the report. **Skip**:
48
+
49
+ - Style preferences ("I'd rename this variable")
50
+ - Defensive-coding nits ("might want a try/except here")
51
+ - Hypothetical edge cases the spec didn't ask for
52
+ - Code-style violations that the linter would already catch
53
+ - Architectural alternatives ("you could also do X")
54
+ - Anything you can't tie back to a specific Success criterion, task, Non-goal, or ADR
55
+
56
+ If the diff is genuinely clean against the spec + epic, say so. `Status: clear` is the highest-value review you can return for a well-executed bullet.
57
+
58
+ ## Tone constraints
59
+
60
+ Concrete beats abstract. File:line beats prose. Quote the source criterion verbatim when you cite one. Two-sentence findings, not paragraphs.
@@ -0,0 +1,90 @@
1
+ ---
2
+ description: Joint product + engineering review — runs both lenses independently and synthesises agreements, disagreements, and a joint recommendation. Use after /beacon.epics to validate the plan before building starts.
3
+ argument-hint: (no args) full project | <epic-slug> scoped to one epic
4
+ allowed-tools: Bash, Read, Glob, Grep
5
+ ---
6
+
7
+ Run the `beacon-product` and `beacon-engineering` subagents independently against the same artefact tree, then synthesise their findings into a joint recommendation. The combination surfaces what either lens alone would miss: goals that can't be built, or executable plans that are building the wrong things.
8
+
9
+ The argument is:
10
+
11
+ $ARGUMENTS
12
+
13
+ ## Step 1 — Check preconditions (silently)
14
+
15
+ Run:
16
+
17
+ ```bash
18
+ beacon seed
19
+ ```
20
+
21
+ If the result is not green (placeholders remain in the problem statement), stop:
22
+
23
+ ```
24
+ beacon seed is not green — the problem statement has unfilled placeholders.
25
+ Run /beacon.seed first. There is no north star to align against until it's filled.
26
+ ```
27
+
28
+ If the argument is an epic slug (not empty), verify it exists:
29
+
30
+ ```bash
31
+ test -f project-management/Roadmap/epics/<slug>.md || echo "NOT FOUND"
32
+ ```
33
+
34
+ If not found, stop with a clear error and suggest `beacon epic list`.
35
+
36
+ ## Step 2 — Run both agents independently
37
+
38
+ Invoke `beacon-product` and `beacon-engineering` as subagents. They run with the same scope but share no context with each other — each reads the artefacts fresh. That independence is the point: agreements between two agents that didn't collaborate are high-confidence signals.
39
+
40
+ For **full review** (no args): give each subagent no scope constraint.
41
+
42
+ For **scoped review** (`<epic-slug>`): direct each subagent to scope its grounding/feasibility/sequencing checks to that epic, while keeping momentum, missing-prerequisite, and horizon-risk checks project-wide.
43
+
44
+ Present both outputs under clearly labelled headers:
45
+
46
+ ```
47
+ ---
48
+ ## Product perspective (/beacon.product)
49
+
50
+ <beacon-product output verbatim — Trajectory line included>
51
+
52
+ ---
53
+ ## Engineering perspective (/beacon.engineering)
54
+
55
+ <beacon-engineering output verbatim — Build-readiness line included>
56
+
57
+ ---
58
+ ```
59
+
60
+ ## Step 3 — Synthesise
61
+
62
+ After both outputs, add a synthesis block. Do not spawn another subagent for this — synthesise inline from the two reports you just received.
63
+
64
+ ```
65
+ ## Alignment synthesis
66
+
67
+ **Where they agree**
68
+ - <Finding raised by both agents independently. These are the highest-confidence signals — treat them as definite. If there are none, say "No overlapping findings — the two perspectives are complementary rather than confirmatory.">
69
+
70
+ **Where they differ**
71
+ - Product says: <what beacon-product said about topic X>
72
+ Engineering says: <what beacon-engineering said about the same topic>
73
+ → Resolution: <one concrete action that addresses both perspectives>
74
+
75
+ **Joint recommendation**
76
+ <The single most important thing to do right now, synthesised from both perspectives. One sentence. Name the exact command or action.>
77
+ ```
78
+
79
+ **If both verdicts are positive** (`Trajectory: on course` + `Build-readiness: ready`), skip the Agree/Differ structure and print:
80
+
81
+ > Both perspectives agree: the plan is sound and executable.
82
+ > Start with `/beacon.specify <first-epic-slug> "<first-feature-description>"`.
83
+
84
+ **If the verdicts conflict** (e.g., product says on course but engineering says blocked), highlight this explicitly:
85
+
86
+ > ⚠ The two perspectives disagree on readiness — product sees the goals as sound but engineering has identified a blocker. Resolve the engineering finding before starting build work.
87
+
88
+ ## Step 4 — Footer
89
+
90
+ > Re-run anytime: `/beacon.align`
@@ -0,0 +1,29 @@
1
+ ---
2
+ description: Adversarial completeness audit of an epic's artefact tree (specs, stubs, tasks) against its stated intent — Success criteria, Non-goals, Dependencies, ADRs. The DESIGN-phase mirror of /beacon.review; use before building to confirm the epic is fully decomposed.
3
+ argument-hint: <epic-slug> — e.g. "agent-loop" (omit to infer from the current spec branch)
4
+ allowed-tools: Task, Bash
5
+ ---
6
+
7
+ You're auditing whether a BEACON epic is **fully decomposed** — whether its owned specs and stubs actually represent everything the epic's stated intent commits to. This is the prior question to `/beacon.review`: the reviewer checks a diff against the artefacts; this checks the artefacts against the intent.
8
+
9
+ ## Step 1 — Resolve the epic slug
10
+
11
+ The argument is the **epic slug**:
12
+
13
+ $ARGUMENTS
14
+
15
+ If no slug was given, infer it: if the current branch matches `NNN-slug`, read `specs/<branch>/.beacon.toml` and use its `epic` field. If you still can't resolve one, run `beacon epic list` and ask the user which epic to audit — then STOP until they answer.
16
+
17
+ Verify the epic exists at `project-management/Roadmap/epics/<slug>.md`. If it doesn't, tell the user to create it first with `beacon epic new <slug> --title "<title>"` and STOP.
18
+
19
+ ## Step 2 — Run the auditor in a fresh context
20
+
21
+ Use the **beacon-auditor** subagent. It reads the epic, the live `beacon epic refresh` rollup, and every owned spec/stub on its own terms — none of the reasoning that produced the current decomposition. That independence is the point.
22
+
23
+ Tell the subagent: *"Audit epic `<slug>` for completeness. Report only the epic's Success criteria that no owned spec or stub addresses, owned stubs still awaiting a real spec, filled specs missing tasks.md, and any owned spec that drifts from a Non-goal / ADR / unmet Dependency. Pair each finding with the exact `beacon epic stub` / `/beacon.specify` / `/beacon.tasks` command that closes it. Do not invent scope the epic never stated."*
24
+
25
+ ## Step 3 — Return the report verbatim
26
+
27
+ Return the subagent's report exactly as written — don't summarise; the user reads it directly. The auditor only *suggests* commands; it creates nothing, so nothing in the tree changes from running this.
28
+
29
+ If the report ends with `Status: clear`, the epic's artefacts fully cover its stated intent — it's ready to build. Otherwise the user decides which suggested stubs to create (`beacon epic stub …`) or specs to fill (`/beacon.specify …`).