project-init 0.5.1__tar.gz → 0.5.2__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 (488) hide show
  1. {project_init-0.5.1/plugins/project-init-lifecycle → project_init-0.5.2/.claude}/hooks/dag_workflow.py +35 -3
  2. {project_init-0.5.1 → project_init-0.5.2}/.claude-plugin/marketplace.json +1 -0
  3. {project_init-0.5.1 → project_init-0.5.2}/CITATION.cff +1 -1
  4. {project_init-0.5.1 → project_init-0.5.2}/PKG-INFO +71 -55
  5. {project_init-0.5.1 → project_init-0.5.2}/README.md +70 -54
  6. {project_init-0.5.1/.claude → project_init-0.5.2/plugins/project-init-lifecycle}/hooks/dag_workflow.py +35 -3
  7. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-workflow/.claude-plugin/plugin.json +1 -1
  8. {project_init-0.5.1 → project_init-0.5.2}/pyproject.toml +1 -1
  9. {project_init-0.5.1 → project_init-0.5.2}/src/project_init/__init__.py +1 -1
  10. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_claude/hooks/dag_workflow.py +35 -3
  11. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_lifecycle_byte_identity.py +6 -0
  12. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_memory_byte_identity.py +6 -0
  13. {project_init-0.5.1/tests/fixtures/memory_baseline → project_init-0.5.2/tests/fixtures/lifecycle_baseline}/obsidian-graphify__no_plugin.json +1 -1
  14. {project_init-0.5.1/tests/fixtures/memory_baseline → project_init-0.5.2/tests/fixtures/lifecycle_baseline}/obsidian-graphify__plugin.json +1 -1
  15. {project_init-0.5.1 → project_init-0.5.2}/tests/fixtures/lifecycle_baseline/obsidian-only__no_plugin.json +1 -1
  16. {project_init-0.5.1/tests/fixtures/memory_baseline → project_init-0.5.2/tests/fixtures/lifecycle_baseline}/obsidian-only__plugin.json +1 -1
  17. {project_init-0.5.1/tests/fixtures/lifecycle_baseline → project_init-0.5.2/tests/fixtures/memory_baseline}/obsidian-graphify__no_plugin.json +1 -1
  18. {project_init-0.5.1/tests/fixtures/lifecycle_baseline → project_init-0.5.2/tests/fixtures/memory_baseline}/obsidian-graphify__plugin.json +1 -1
  19. {project_init-0.5.1 → project_init-0.5.2}/tests/fixtures/memory_baseline/obsidian-only__no_plugin.json +1 -1
  20. {project_init-0.5.1/tests/fixtures/lifecycle_baseline → project_init-0.5.2/tests/fixtures/memory_baseline}/obsidian-only__plugin.json +1 -1
  21. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_dag_workflow.py +41 -0
  22. {project_init-0.5.1 → project_init-0.5.2}/uv.lock +1 -1
  23. {project_init-0.5.1 → project_init-0.5.2}/.claude/hooks/github_command_guard.sh +0 -0
  24. {project_init-0.5.1 → project_init-0.5.2}/.claude/hooks/workflow_state_reminder.sh +0 -0
  25. {project_init-0.5.1 → project_init-0.5.2}/.claude/scripts/create_nojira_pr.sh +0 -0
  26. {project_init-0.5.1 → project_init-0.5.2}/.claude/scripts/finish_pr.sh +0 -0
  27. {project_init-0.5.1 → project_init-0.5.2}/.claude/scripts/monitor_pr.sh +0 -0
  28. {project_init-0.5.1 → project_init-0.5.2}/.claude/scripts/promote_review.sh +0 -0
  29. {project_init-0.5.1 → project_init-0.5.2}/.claude/scripts/push_branch.sh +0 -0
  30. {project_init-0.5.1 → project_init-0.5.2}/.claude/scripts/push_wiki.sh +0 -0
  31. {project_init-0.5.1 → project_init-0.5.2}/.claude/settings.json +0 -0
  32. {project_init-0.5.1 → project_init-0.5.2}/.claude/skills/INDEX.md +0 -0
  33. {project_init-0.5.1 → project_init-0.5.2}/.claude/skills/README.md +0 -0
  34. {project_init-0.5.1 → project_init-0.5.2}/.claude/skills/add_command/SKILL.md +0 -0
  35. {project_init-0.5.1 → project_init-0.5.2}/.claude/skills/add_hook/SKILL.md +0 -0
  36. {project_init-0.5.1 → project_init-0.5.2}/.claude/skills/github_workflow/SKILL.md +0 -0
  37. {project_init-0.5.1 → project_init-0.5.2}/.claude/skills/live_test/SKILL.md +0 -0
  38. {project_init-0.5.1 → project_init-0.5.2}/.claude/skills/session_summary/SKILL.md +0 -0
  39. {project_init-0.5.1 → project_init-0.5.2}/.claude/skills/start_task/SKILL.md +0 -0
  40. {project_init-0.5.1 → project_init-0.5.2}/.claude/skills/wiki/SKILL.md +0 -0
  41. {project_init-0.5.1 → project_init-0.5.2}/.claude/skills/wiki/templates/architecture.md +0 -0
  42. {project_init-0.5.1 → project_init-0.5.2}/.claude/skills/wiki/templates/implementation-guide.md +0 -0
  43. {project_init-0.5.1 → project_init-0.5.2}/.claude/skills/wiki/templates/preset-guide.md +0 -0
  44. {project_init-0.5.1 → project_init-0.5.2}/.claude/skills/wiki/templates/scaffolder-logic.md +0 -0
  45. {project_init-0.5.1 → project_init-0.5.2}/.gitattributes +0 -0
  46. {project_init-0.5.1 → project_init-0.5.2}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  47. {project_init-0.5.1 → project_init-0.5.2}/.github/ISSUE_TEMPLATE/chore.yml +0 -0
  48. {project_init-0.5.1 → project_init-0.5.2}/.github/ISSUE_TEMPLATE/docs.yml +0 -0
  49. {project_init-0.5.1 → project_init-0.5.2}/.github/ISSUE_TEMPLATE/feature.yml +0 -0
  50. {project_init-0.5.1 → project_init-0.5.2}/.github/ISSUE_TEMPLATE/test.yml +0 -0
  51. {project_init-0.5.1 → project_init-0.5.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  52. {project_init-0.5.1 → project_init-0.5.2}/.github/copilot-instructions.md +0 -0
  53. {project_init-0.5.1 → project_init-0.5.2}/.github/workflows/board-automation.yml +0 -0
  54. {project_init-0.5.1 → project_init-0.5.2}/.github/workflows/ci.yml +0 -0
  55. {project_init-0.5.1 → project_init-0.5.2}/.github/workflows/docs.yml +0 -0
  56. {project_init-0.5.1 → project_init-0.5.2}/.github/workflows/release.yml +0 -0
  57. {project_init-0.5.1 → project_init-0.5.2}/.github/workflows/review-status.yml +0 -0
  58. {project_init-0.5.1 → project_init-0.5.2}/.github/workflows/third-party-updates.yml +0 -0
  59. {project_init-0.5.1 → project_init-0.5.2}/.github/workflows/validate-pr.yml +0 -0
  60. {project_init-0.5.1 → project_init-0.5.2}/.gitignore +0 -0
  61. {project_init-0.5.1 → project_init-0.5.2}/.gitleaks.toml +0 -0
  62. {project_init-0.5.1 → project_init-0.5.2}/AGENTS.md +0 -0
  63. {project_init-0.5.1 → project_init-0.5.2}/CLAUDE.md +0 -0
  64. {project_init-0.5.1 → project_init-0.5.2}/CONTRIBUTING.md +0 -0
  65. {project_init-0.5.1 → project_init-0.5.2}/LICENSE +0 -0
  66. {project_init-0.5.1 → project_init-0.5.2}/cliff.toml +0 -0
  67. {project_init-0.5.1 → project_init-0.5.2}/docs/README.md +0 -0
  68. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-001-scaffolder-design.md +0 -0
  69. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-002-dotglob-template-convention.md +0 -0
  70. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-003-github-native-workflow.md +0 -0
  71. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-004-obsidian-docs-integration.md +0 -0
  72. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-005-github-pr-board-workflow.md +0 -0
  73. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-006-conventional-commit-titles.md +0 -0
  74. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-007-security-enforcement-layers.md +0 -0
  75. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-008-distribution-channel.md +0 -0
  76. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-009-graphify-memory-preset.md +0 -0
  77. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-010-plugin-marketplace-dual-ship.md +0 -0
  78. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-011-pypi-trusted-publishing.md +0 -0
  79. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-012-prod-safety-guard.md +0 -0
  80. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-013-distribution-governance-model.md +0 -0
  81. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-014-environment-promotion-chains.md +0 -0
  82. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-015-env-deploy-model.md +0 -0
  83. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-016-model-agnostic-switching.md +0 -0
  84. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-017-per-surface-config-generator.md +0 -0
  85. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-018-ai-governance-overlay.md +0 -0
  86. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-019-local-observability-overlay.md +0 -0
  87. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-020-memory-backend-decomposition.md +0 -0
  88. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-021-quality-vs-lifecycle-tier-boundary.md +0 -0
  89. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-022-toolchain-gate-map.md +0 -0
  90. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-023-wizard-explanation-standard.md +0 -0
  91. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-024-memory-tier-model.md +0 -0
  92. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-025-agentic-os-root-layer.md +0 -0
  93. {project_init-0.5.1 → project_init-0.5.2}/docs/adr/adr-026-tier3-rag-engine-cocoindex.md +0 -0
  94. {project_init-0.5.1 → project_init-0.5.2}/docs/development/agentic-os-root-layer.md +0 -0
  95. {project_init-0.5.1 → project_init-0.5.2}/docs/development/build-reproducibility.md +0 -0
  96. {project_init-0.5.1 → project_init-0.5.2}/docs/development/contributing.md +0 -0
  97. {project_init-0.5.1 → project_init-0.5.2}/docs/development/enforcement-classification.md +0 -0
  98. {project_init-0.5.1 → project_init-0.5.2}/docs/development/enterprise-github-support-matrix.md +0 -0
  99. {project_init-0.5.1 → project_init-0.5.2}/docs/development/measurement-methodology.md +0 -0
  100. {project_init-0.5.1 → project_init-0.5.2}/docs/development/memory-descriptor.md +0 -0
  101. {project_init-0.5.1 → project_init-0.5.2}/docs/development/mobile-remote-access.md +0 -0
  102. {project_init-0.5.1 → project_init-0.5.2}/docs/development/non-cli-surface-matrix.md +0 -0
  103. {project_init-0.5.1 → project_init-0.5.2}/docs/development/template-system.md +0 -0
  104. {project_init-0.5.1 → project_init-0.5.2}/docs/development/testing.md +0 -0
  105. {project_init-0.5.1 → project_init-0.5.2}/docs/guides/org-fork-lifecycle.md +0 -0
  106. {project_init-0.5.1 → project_init-0.5.2}/docs/guides/using-project-init.md +0 -0
  107. {project_init-0.5.1 → project_init-0.5.2}/docs/positioning.md +0 -0
  108. {project_init-0.5.1 → project_init-0.5.2}/docs/research/model-agnostic-switching.md +0 -0
  109. {project_init-0.5.1 → project_init-0.5.2}/install.sh +0 -0
  110. {project_init-0.5.1 → project_init-0.5.2}/justfile +0 -0
  111. {project_init-0.5.1 → project_init-0.5.2}/mkdocs.yml +0 -0
  112. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-lifecycle/.claude-plugin/plugin.json +0 -0
  113. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-lifecycle/hooks/_py.sh +0 -0
  114. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-lifecycle/hooks/_usage_log.sh +0 -0
  115. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-lifecycle/hooks/github_command_guard.sh +0 -0
  116. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-lifecycle/hooks/hooks.json +0 -0
  117. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-lifecycle/hooks/workflow_state_reminder.sh +0 -0
  118. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-lifecycle/skills/audit/SKILL.md +0 -0
  119. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-lifecycle/skills/create_issue/SKILL.md +0 -0
  120. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-lifecycle/skills/github_workflow/SKILL.md +0 -0
  121. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-lifecycle/skills/request_review/SKILL.md +0 -0
  122. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-lifecycle/skills/start_task/SKILL.md +0 -0
  123. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-workflow/hooks/_py.sh +0 -0
  124. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-workflow/hooks/_usage_log.sh +0 -0
  125. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-workflow/hooks/hooks.json +0 -0
  126. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-workflow/hooks/post_edit_lint.sh +0 -0
  127. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-workflow/hooks/pre_commit_gate.sh +0 -0
  128. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-workflow/hooks/prod_guard.py +0 -0
  129. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-workflow/hooks/session_setup.sh +0 -0
  130. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-workflow/skills/add_adr/SKILL.md +0 -0
  131. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-workflow/skills/add_command/SKILL.md +0 -0
  132. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-workflow/skills/add_hook/SKILL.md +0 -0
  133. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-workflow/skills/review/SKILL.md +0 -0
  134. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-workflow/skills/save_memory/SKILL.md +0 -0
  135. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-workflow/skills/session_summary/SKILL.md +0 -0
  136. {project_init-0.5.1 → project_init-0.5.2}/plugins/project-init-workflow/skills/status/SKILL.md +0 -0
  137. {project_init-0.5.1 → project_init-0.5.2}/renovate.json +0 -0
  138. {project_init-0.5.1 → project_init-0.5.2}/src/project_init/__main__.py +0 -0
  139. {project_init-0.5.1 → project_init-0.5.2}/src/project_init/capabilities.py +0 -0
  140. {project_init-0.5.1 → project_init-0.5.2}/src/project_init/concerns.py +0 -0
  141. {project_init-0.5.1 → project_init-0.5.2}/src/project_init/governance.py +0 -0
  142. {project_init-0.5.1 → project_init-0.5.2}/src/project_init/mcps.py +0 -0
  143. {project_init-0.5.1 → project_init-0.5.2}/src/project_init/migration_notes.py +0 -0
  144. {project_init-0.5.1 → project_init-0.5.2}/src/project_init/scaffold.py +0 -0
  145. {project_init-0.5.1 → project_init-0.5.2}/src/project_init/surfaces.py +0 -0
  146. {project_init-0.5.1 → project_init-0.5.2}/src/project_init/upgrade.py +0 -0
  147. {project_init-0.5.1 → project_init-0.5.2}/templates/amp/dot_agents/skills/add_adr/SKILL.md +0 -0
  148. {project_init-0.5.1 → project_init-0.5.2}/templates/amp/dot_agents/skills/add_command/SKILL.md +0 -0
  149. {project_init-0.5.1 → project_init-0.5.2}/templates/amp/dot_agents/skills/add_hook/SKILL.md +0 -0
  150. {project_init-0.5.1 → project_init-0.5.2}/templates/amp/dot_agents/skills/audit/SKILL.md.tmpl +0 -0
  151. {project_init-0.5.1 → project_init-0.5.2}/templates/amp/dot_agents/skills/create_issue/SKILL.md.tmpl +0 -0
  152. {project_init-0.5.1 → project_init-0.5.2}/templates/amp/dot_agents/skills/github_workflow/SKILL.md.tmpl +0 -0
  153. {project_init-0.5.1 → project_init-0.5.2}/templates/amp/dot_agents/skills/plan/SKILL.md +0 -0
  154. {project_init-0.5.1 → project_init-0.5.2}/templates/amp/dot_agents/skills/request_review/SKILL.md.tmpl +0 -0
  155. {project_init-0.5.1 → project_init-0.5.2}/templates/amp/dot_agents/skills/review/SKILL.md +0 -0
  156. {project_init-0.5.1 → project_init-0.5.2}/templates/amp/dot_agents/skills/save_memory/SKILL.md +0 -0
  157. {project_init-0.5.1 → project_init-0.5.2}/templates/amp/dot_agents/skills/session_summary/SKILL.md +0 -0
  158. {project_init-0.5.1 → project_init-0.5.2}/templates/amp/dot_agents/skills/start_task/SKILL.md.tmpl +0 -0
  159. {project_init-0.5.1 → project_init-0.5.2}/templates/amp/dot_agents/skills/status/SKILL.md +0 -0
  160. {project_init-0.5.1 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/add_adr/SKILL.md +0 -0
  161. {project_init-0.5.1 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/add_command/SKILL.md +0 -0
  162. {project_init-0.5.1 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/add_hook/SKILL.md +0 -0
  163. {project_init-0.5.1 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/audit/SKILL.md.tmpl +0 -0
  164. {project_init-0.5.1 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/create_issue/SKILL.md.tmpl +0 -0
  165. {project_init-0.5.1 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/github_workflow/SKILL.md.tmpl +0 -0
  166. {project_init-0.5.1 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/plan/SKILL.md +0 -0
  167. {project_init-0.5.1 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/request_review/SKILL.md.tmpl +0 -0
  168. {project_init-0.5.1 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/review/SKILL.md +0 -0
  169. {project_init-0.5.1 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/save_memory/SKILL.md +0 -0
  170. {project_init-0.5.1 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/session_summary/SKILL.md +0 -0
  171. {project_init-0.5.1 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/start_task/SKILL.md.tmpl +0 -0
  172. {project_init-0.5.1 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/status/SKILL.md +0 -0
  173. {project_init-0.5.1 → project_init-0.5.2}/templates/auto/dot_claude/memory/MEMORY.md.tmpl +0 -0
  174. {project_init-0.5.1 → project_init-0.5.2}/templates/auto/dot_claude/memory/README.md +0 -0
  175. {project_init-0.5.1 → project_init-0.5.2}/templates/auto/dot_claude/memory/SCHEMA.md +0 -0
  176. {project_init-0.5.1 → project_init-0.5.2}/templates/auto/dot_claude/memory/feedback_conventions.md +0 -0
  177. {project_init-0.5.1 → project_init-0.5.2}/templates/auto/dot_claude/memory/project_context.md.tmpl +0 -0
  178. {project_init-0.5.1 → project_init-0.5.2}/templates/auto/dot_claude/memory/user_role.md +0 -0
  179. {project_init-0.5.1 → project_init-0.5.2}/templates/auto/dot_claude/scripts/lint_memory.sh +0 -0
  180. {project_init-0.5.1 → project_init-0.5.2}/templates/base/AGENTS.md.tmpl +0 -0
  181. {project_init-0.5.1 → project_init-0.5.2}/templates/base/CLAUDE.md.tmpl +0 -0
  182. {project_init-0.5.1 → project_init-0.5.2}/templates/base/CONTRIBUTING.md.tmpl +0 -0
  183. {project_init-0.5.1 → project_init-0.5.2}/templates/base/Dockerfile.tmpl +0 -0
  184. {project_init-0.5.1 → project_init-0.5.2}/templates/base/LICENSE.tmpl +0 -0
  185. {project_init-0.5.1 → project_init-0.5.2}/templates/base/SECURITY.md.tmpl +0 -0
  186. {project_init-0.5.1 → project_init-0.5.2}/templates/base/compose.yaml.tmpl +0 -0
  187. {project_init-0.5.1 → project_init-0.5.2}/templates/base/deploy/environments.yaml.tmpl +0 -0
  188. {project_init-0.5.1 → project_init-0.5.2}/templates/base/docs/explanation/index.md.tmpl +0 -0
  189. {project_init-0.5.1 → project_init-0.5.2}/templates/base/docs/how-to/index.md.tmpl +0 -0
  190. {project_init-0.5.1 → project_init-0.5.2}/templates/base/docs/index.md.tmpl +0 -0
  191. {project_init-0.5.1 → project_init-0.5.2}/templates/base/docs/reference/index.md.tmpl +0 -0
  192. {project_init-0.5.1 → project_init-0.5.2}/templates/base/docs/tutorials/index.md.tmpl +0 -0
  193. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/agents/README.md +0 -0
  194. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/agents/code-reviewer.md +0 -0
  195. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/agents/explore.md +0 -0
  196. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/config.yaml.tmpl +0 -0
  197. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/docs/README.md.tmpl +0 -0
  198. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/docs/adr/adr-002-mcp-choices.md.tmpl +0 -0
  199. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/docs/adr/adr-template.md +0 -0
  200. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/docs/development/conventions.md.tmpl +0 -0
  201. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/docs/development/testing.md +0 -0
  202. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/docs/guides/cloud-integration.md.tmpl +0 -0
  203. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/docs/guides/developer-onboarding.md +0 -0
  204. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/docs/guides/environments.md +0 -0
  205. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/docs/guides/secrets.md +0 -0
  206. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/hooks/README.md +0 -0
  207. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/hooks/_py.sh +0 -0
  208. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/hooks/agent_guard_adapter.py.tmpl +0 -0
  209. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/hooks/prod_guard.py +0 -0
  210. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/project-init.md.tmpl +0 -0
  211. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/rules/go.md +0 -0
  212. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/rules/hooks.md.tmpl +0 -0
  213. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/rules/node.md +0 -0
  214. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/rules/python.md +0 -0
  215. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/scripts/README.md.tmpl +0 -0
  216. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/scripts/gen_code_map.py.tmpl +0 -0
  217. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/scripts/gh_host.sh +0 -0
  218. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/scripts/install_hooks.sh +0 -0
  219. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/scripts/setup_env_protection.sh.tmpl +0 -0
  220. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/scripts/whats_deployed.sh.tmpl +0 -0
  221. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/settings.json.tmpl +0 -0
  222. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/skills/README.md.tmpl +0 -0
  223. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_claude/skills/plan/SKILL.md.tmpl +0 -0
  224. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_devcontainer/devcontainer.json.tmpl +0 -0
  225. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_devcontainer/post-create.sh.tmpl +0 -0
  226. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_dockerignore.tmpl +0 -0
  227. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_env.example.tmpl +0 -0
  228. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_gitattributes +0 -0
  229. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_github/CODEOWNERS.tmpl +0 -0
  230. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_github/hooks/commit-msg +0 -0
  231. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_github/hooks/pre-commit +0 -0
  232. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_github/hooks/pre-push.tmpl +0 -0
  233. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_github/workflows/ci.yml.tmpl +0 -0
  234. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_github/workflows/deploy.yml.tmpl +0 -0
  235. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_github/workflows/infra.yml.tmpl +0 -0
  236. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_github/workflows/registry-publish.yml.tmpl +0 -0
  237. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_github/workflows/release.yml.tmpl +0 -0
  238. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_gitignore.tmpl +0 -0
  239. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_golangci.yml.tmpl +0 -0
  240. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_vscode/extensions.json.tmpl +0 -0
  241. {project_init-0.5.1 → project_init-0.5.2}/templates/base/dot_vscode/settings.json.tmpl +0 -0
  242. {project_init-0.5.1 → project_init-0.5.2}/templates/base/eslint.config.mjs.tmpl +0 -0
  243. {project_init-0.5.1 → project_init-0.5.2}/templates/base/infra/README.md.tmpl +0 -0
  244. {project_init-0.5.1 → project_init-0.5.2}/templates/base/infra/backend.tf.tmpl +0 -0
  245. {project_init-0.5.1 → project_init-0.5.2}/templates/base/infra/dot_gitignore.tmpl +0 -0
  246. {project_init-0.5.1 → project_init-0.5.2}/templates/base/infra/dot_pre-commit-config.yaml.tmpl +0 -0
  247. {project_init-0.5.1 → project_init-0.5.2}/templates/base/infra/main.tf.tmpl +0 -0
  248. {project_init-0.5.1 → project_init-0.5.2}/templates/base/infra/outputs.tf.tmpl +0 -0
  249. {project_init-0.5.1 → project_init-0.5.2}/templates/base/infra/variables.tf.tmpl +0 -0
  250. {project_init-0.5.1 → project_init-0.5.2}/templates/base/infra/versions.tf.tmpl +0 -0
  251. {project_init-0.5.1 → project_init-0.5.2}/templates/base/justfile.tmpl +0 -0
  252. {project_init-0.5.1 → project_init-0.5.2}/templates/base/mise.toml.tmpl +0 -0
  253. {project_init-0.5.1 → project_init-0.5.2}/templates/base/mkdocs.yml.tmpl +0 -0
  254. {project_init-0.5.1 → project_init-0.5.2}/templates/base/renovate.json.tmpl +0 -0
  255. {project_init-0.5.1 → project_init-0.5.2}/templates/base/ruff.toml.tmpl +0 -0
  256. {project_init-0.5.1 → project_init-0.5.2}/templates/base/typedoc.json.tmpl +0 -0
  257. {project_init-0.5.1 → project_init-0.5.2}/templates/codex/dot_agents/skills/add_adr/SKILL.md +0 -0
  258. {project_init-0.5.1 → project_init-0.5.2}/templates/codex/dot_agents/skills/add_command/SKILL.md +0 -0
  259. {project_init-0.5.1 → project_init-0.5.2}/templates/codex/dot_agents/skills/add_hook/SKILL.md +0 -0
  260. {project_init-0.5.1 → project_init-0.5.2}/templates/codex/dot_agents/skills/audit/SKILL.md.tmpl +0 -0
  261. {project_init-0.5.1 → project_init-0.5.2}/templates/codex/dot_agents/skills/create_issue/SKILL.md.tmpl +0 -0
  262. {project_init-0.5.1 → project_init-0.5.2}/templates/codex/dot_agents/skills/github_workflow/SKILL.md.tmpl +0 -0
  263. {project_init-0.5.1 → project_init-0.5.2}/templates/codex/dot_agents/skills/plan/SKILL.md +0 -0
  264. {project_init-0.5.1 → project_init-0.5.2}/templates/codex/dot_agents/skills/request_review/SKILL.md.tmpl +0 -0
  265. {project_init-0.5.1 → project_init-0.5.2}/templates/codex/dot_agents/skills/review/SKILL.md +0 -0
  266. {project_init-0.5.1 → project_init-0.5.2}/templates/codex/dot_agents/skills/save_memory/SKILL.md +0 -0
  267. {project_init-0.5.1 → project_init-0.5.2}/templates/codex/dot_agents/skills/session_summary/SKILL.md +0 -0
  268. {project_init-0.5.1 → project_init-0.5.2}/templates/codex/dot_agents/skills/start_task/SKILL.md.tmpl +0 -0
  269. {project_init-0.5.1 → project_init-0.5.2}/templates/codex/dot_agents/skills/status/SKILL.md +0 -0
  270. {project_init-0.5.1 → project_init-0.5.2}/templates/codex/dot_codex/hooks.json.tmpl +0 -0
  271. {project_init-0.5.1 → project_init-0.5.2}/templates/fallback/dot_claude/hooks/_usage_log.sh +0 -0
  272. {project_init-0.5.1 → project_init-0.5.2}/templates/fallback/dot_claude/hooks/post_edit_lint.sh +0 -0
  273. {project_init-0.5.1 → project_init-0.5.2}/templates/fallback/dot_claude/hooks/pre_commit_gate.sh +0 -0
  274. {project_init-0.5.1 → project_init-0.5.2}/templates/fallback/dot_claude/hooks/session_setup.sh +0 -0
  275. {project_init-0.5.1 → project_init-0.5.2}/templates/fallback/dot_claude/skills/INDEX.md.tmpl +0 -0
  276. {project_init-0.5.1 → project_init-0.5.2}/templates/fallback/dot_claude/skills/add_adr/SKILL.md +0 -0
  277. {project_init-0.5.1 → project_init-0.5.2}/templates/fallback/dot_claude/skills/add_command/SKILL.md +0 -0
  278. {project_init-0.5.1 → project_init-0.5.2}/templates/fallback/dot_claude/skills/add_hook/SKILL.md +0 -0
  279. {project_init-0.5.1 → project_init-0.5.2}/templates/fallback/dot_claude/skills/review/SKILL.md +0 -0
  280. {project_init-0.5.1 → project_init-0.5.2}/templates/fallback/dot_claude/skills/save_memory/SKILL.md +0 -0
  281. {project_init-0.5.1 → project_init-0.5.2}/templates/fallback/dot_claude/skills/session_summary/SKILL.md +0 -0
  282. {project_init-0.5.1 → project_init-0.5.2}/templates/fallback/dot_claude/skills/status/SKILL.md +0 -0
  283. {project_init-0.5.1 → project_init-0.5.2}/templates/governance/dot_claude/governance/AI_USAGE_POLICY.md +0 -0
  284. {project_init-0.5.1 → project_init-0.5.2}/templates/governance/dot_claude/governance/NIST_RMF_CROSSWALK.md +0 -0
  285. {project_init-0.5.1 → project_init-0.5.2}/templates/governance/dot_claude/governance/README.md +0 -0
  286. {project_init-0.5.1 → project_init-0.5.2}/templates/governance/dot_claude/governance/ai-code-provenance.md +0 -0
  287. {project_init-0.5.1 → project_init-0.5.2}/templates/governance/dot_claude/governance/ai-declarations.md +0 -0
  288. {project_init-0.5.1 → project_init-0.5.2}/templates/governance/dot_claude/governance/approved-tools.md +0 -0
  289. {project_init-0.5.1 → project_init-0.5.2}/templates/governance/dot_claude/governance/config.example.json +0 -0
  290. {project_init-0.5.1 → project_init-0.5.2}/templates/governance/dot_claude/governance/data-handling.md +0 -0
  291. {project_init-0.5.1 → project_init-0.5.2}/templates/governance/dot_claude/governance/examples/SYSTEM_CARD.example.md +0 -0
  292. {project_init-0.5.1 → project_init-0.5.2}/templates/governance/dot_claude/governance/examples/SYSTEM_CARD.template.md +0 -0
  293. {project_init-0.5.1 → project_init-0.5.2}/templates/governance/dot_claude/scripts/governance_gate.py +0 -0
  294. {project_init-0.5.1 → project_init-0.5.2}/templates/governance/dot_claude/scripts/governance_gate.sh +0 -0
  295. {project_init-0.5.1 → project_init-0.5.2}/templates/graphify/dot_claude/docs/guides/using-graphify.md +0 -0
  296. {project_init-0.5.1 → project_init-0.5.2}/templates/graphify/dot_claude/rules/graphify.md +0 -0
  297. {project_init-0.5.1 → project_init-0.5.2}/templates/graphify/dot_claude/scripts/setup_graphify.sh +0 -0
  298. {project_init-0.5.1 → project_init-0.5.2}/templates/junie/dot_junie/skills/add_adr/SKILL.md +0 -0
  299. {project_init-0.5.1 → project_init-0.5.2}/templates/junie/dot_junie/skills/add_command/SKILL.md +0 -0
  300. {project_init-0.5.1 → project_init-0.5.2}/templates/junie/dot_junie/skills/add_hook/SKILL.md +0 -0
  301. {project_init-0.5.1 → project_init-0.5.2}/templates/junie/dot_junie/skills/audit/SKILL.md.tmpl +0 -0
  302. {project_init-0.5.1 → project_init-0.5.2}/templates/junie/dot_junie/skills/create_issue/SKILL.md.tmpl +0 -0
  303. {project_init-0.5.1 → project_init-0.5.2}/templates/junie/dot_junie/skills/github_workflow/SKILL.md.tmpl +0 -0
  304. {project_init-0.5.1 → project_init-0.5.2}/templates/junie/dot_junie/skills/plan/SKILL.md +0 -0
  305. {project_init-0.5.1 → project_init-0.5.2}/templates/junie/dot_junie/skills/request_review/SKILL.md.tmpl +0 -0
  306. {project_init-0.5.1 → project_init-0.5.2}/templates/junie/dot_junie/skills/review/SKILL.md +0 -0
  307. {project_init-0.5.1 → project_init-0.5.2}/templates/junie/dot_junie/skills/save_memory/SKILL.md +0 -0
  308. {project_init-0.5.1 → project_init-0.5.2}/templates/junie/dot_junie/skills/session_summary/SKILL.md +0 -0
  309. {project_init-0.5.1 → project_init-0.5.2}/templates/junie/dot_junie/skills/start_task/SKILL.md.tmpl +0 -0
  310. {project_init-0.5.1 → project_init-0.5.2}/templates/junie/dot_junie/skills/status/SKILL.md +0 -0
  311. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_claude/docs/guides/issue-metadata.md +0 -0
  312. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/create_issue.sh +0 -0
  313. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/create_nojira_pr.sh +0 -0
  314. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/finish_pr.sh +0 -0
  315. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/monitor_pr.sh +0 -0
  316. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/promote_review.sh +0 -0
  317. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/push_branch.sh +0 -0
  318. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/push_wiki.sh +0 -0
  319. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/setup_github.sh +0 -0
  320. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/start_issue.sh +0 -0
  321. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/bug.yml +0 -0
  322. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/chore.yml +0 -0
  323. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/config.yml +0 -0
  324. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/docs.yml +0 -0
  325. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/feature.yml +0 -0
  326. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/test.yml +0 -0
  327. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_github/copilot-instructions.md.tmpl +0 -0
  328. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_github/pull_request_template.md +0 -0
  329. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_github/workflows/board-automation.yml +0 -0
  330. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_github/workflows/issue-validation.yml +0 -0
  331. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_github/workflows/project-init-upgrade.yml.tmpl +0 -0
  332. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_github/workflows/review-status.yml +0 -0
  333. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle/dot_github/workflows/validate-pr.yml.tmpl +0 -0
  334. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle_fallback/dot_claude/hooks/github_command_guard.sh +0 -0
  335. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle_fallback/dot_claude/hooks/workflow_state_reminder.sh +0 -0
  336. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle_fallback/dot_claude/skills/audit/SKILL.md +0 -0
  337. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle_fallback/dot_claude/skills/create_issue/SKILL.md +0 -0
  338. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle_fallback/dot_claude/skills/github_workflow/SKILL.md +0 -0
  339. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle_fallback/dot_claude/skills/request_review/SKILL.md +0 -0
  340. {project_init-0.5.1 → project_init-0.5.2}/templates/lifecycle_fallback/dot_claude/skills/start_task/SKILL.md +0 -0
  341. {project_init-0.5.1 → project_init-0.5.2}/templates/multi_model/dot_claude/docs/guides/using-multi-model.md +0 -0
  342. {project_init-0.5.1 → project_init-0.5.2}/templates/multi_model/dot_claude/multi-model/README.md +0 -0
  343. {project_init-0.5.1 → project_init-0.5.2}/templates/multi_model/dot_claude/multi-model/config.json +0 -0
  344. {project_init-0.5.1 → project_init-0.5.2}/templates/multi_model/dot_claude/multi-model/dot_env.example +0 -0
  345. {project_init-0.5.1 → project_init-0.5.2}/templates/multi_model/dot_claude/scripts/models.sh +0 -0
  346. {project_init-0.5.1 → project_init-0.5.2}/templates/multi_model/dot_claude/scripts/setup_models.sh +0 -0
  347. {project_init-0.5.1 → project_init-0.5.2}/templates/observability/dot_claude/docs/guides/upgrading-observability.md +0 -0
  348. {project_init-0.5.1 → project_init-0.5.2}/templates/observability/dot_claude/docs/guides/using-observability.md +0 -0
  349. {project_init-0.5.1 → project_init-0.5.2}/templates/observability/dot_claude/observability/.keep +0 -0
  350. {project_init-0.5.1 → project_init-0.5.2}/templates/observability/dot_claude/observability/README.md +0 -0
  351. {project_init-0.5.1 → project_init-0.5.2}/templates/observability/dot_claude/observability/dot_gitignore +0 -0
  352. {project_init-0.5.1 → project_init-0.5.2}/templates/observability/dot_claude/observability/usage_report.py +0 -0
  353. {project_init-0.5.1 → project_init-0.5.2}/templates/observability/dot_claude/scripts/observability.sh +0 -0
  354. {project_init-0.5.1 → project_init-0.5.2}/templates/obsidian/dot_claude/docs/adr/adr-001-memory-stack.md.tmpl +0 -0
  355. {project_init-0.5.1 → project_init-0.5.2}/templates/obsidian/dot_claude/docs/guides/using-memory.md +0 -0
  356. {project_init-0.5.1 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/README.md +0 -0
  357. {project_init-0.5.1 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/decisions/README.md +0 -0
  358. {project_init-0.5.1 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/decisions/adr-000-project-setup.md.tmpl +0 -0
  359. {project_init-0.5.1 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/design/README.md +0 -0
  360. {project_init-0.5.1 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/dot_obsidian/README.md +0 -0
  361. {project_init-0.5.1 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/dot_obsidian/app.json +0 -0
  362. {project_init-0.5.1 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/dot_obsidian/community-plugins.json +0 -0
  363. {project_init-0.5.1 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/dot_obsidian/core-plugins.json +0 -0
  364. {project_init-0.5.1 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/knowledge/README.md +0 -0
  365. {project_init-0.5.1 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/log.md +0 -0
  366. {project_init-0.5.1 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/sessions/README.md +0 -0
  367. {project_init-0.5.1 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/templates/decision.md +0 -0
  368. {project_init-0.5.1 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/templates/design-note.md +0 -0
  369. {project_init-0.5.1 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/templates/knowledge-note.md +0 -0
  370. {project_init-0.5.1 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/templates/session-note.md +0 -0
  371. {project_init-0.5.1 → project_init-0.5.2}/templates/presets/auto.toml +0 -0
  372. {project_init-0.5.1 → project_init-0.5.2}/templates/presets/core.toml +0 -0
  373. {project_init-0.5.1 → project_init-0.5.2}/templates/presets/governed.toml +0 -0
  374. {project_init-0.5.1 → project_init-0.5.2}/templates/presets/obsidian-graphify.toml +0 -0
  375. {project_init-0.5.1 → project_init-0.5.2}/templates/presets/obsidian-only.toml +0 -0
  376. {project_init-0.5.1 → project_init-0.5.2}/templates/rag/dot_claude/docs/guides/using-rag.md +0 -0
  377. {project_init-0.5.1 → project_init-0.5.2}/templates/rag/dot_claude/rules/rag.md +0 -0
  378. {project_init-0.5.1 → project_init-0.5.2}/templates/rag/dot_claude/scripts/setup_rag.sh +0 -0
  379. {project_init-0.5.1 → project_init-0.5.2}/tests/__init__.py +0 -0
  380. {project_init-0.5.1 → project_init-0.5.2}/tests/conftest.py +0 -0
  381. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_agent_overlays.py +0 -0
  382. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_agents_canonical.py +0 -0
  383. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_benchmark_cost_latency.py +0 -0
  384. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_benchmark_harness.py +0 -0
  385. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_benchmark_report.py +0 -0
  386. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_benchmark_scoring.py +0 -0
  387. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_capabilities.py +0 -0
  388. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_cross_stack_examples.py +0 -0
  389. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_deploy_overlay.py +0 -0
  390. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_docs_renovate.py +0 -0
  391. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_emission_hardening.py +0 -0
  392. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_enforcement.py +0 -0
  393. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_enterprise_host.py +0 -0
  394. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_env_tooling.py +0 -0
  395. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_governance.py +0 -0
  396. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_governance_overlay.py +0 -0
  397. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_governance_product.py +0 -0
  398. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_hook_portability.py +0 -0
  399. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_iac_overlay.py +0 -0
  400. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_integration_seam.py +0 -0
  401. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_integrity.py +0 -0
  402. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_interpreter_portability.py +0 -0
  403. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_justfile.py +0 -0
  404. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_library_release.py +0 -0
  405. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_lifecycle_none.py +0 -0
  406. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_marketplace_source.py +0 -0
  407. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_memory_none.py +0 -0
  408. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_multi_model_overlay.py +0 -0
  409. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_no_bytecode_leak.py +0 -0
  410. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_no_egress.py +0 -0
  411. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_observability_overlay.py +0 -0
  412. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_observability_report.py +0 -0
  413. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_observability_self_log.py +0 -0
  414. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_parity_bundle.py +0 -0
  415. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_plugin_marketplace.py +0 -0
  416. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_portability_hardening.py +0 -0
  417. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_prod_guard.py +0 -0
  418. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_quality_toolchain.py +0 -0
  419. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_release_engineering.py +0 -0
  420. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_renovate.py +0 -0
  421. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_repo_validate_pr.py +0 -0
  422. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_scaffold_graphify.py +0 -0
  423. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_scaffold_obsidian.py +0 -0
  424. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_session_bootstrap.py +0 -0
  425. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_skill_index.py +0 -0
  426. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_subagent_specs.py +0 -0
  427. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_surface_emission.py +0 -0
  428. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_templates.py +0 -0
  429. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_third_party_pin_contract.py +0 -0
  430. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_upgrade_pr_workflow.py +0 -0
  431. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_variable_contract.py +0 -0
  432. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_wiki_skill.py +0 -0
  433. {project_init-0.5.1 → project_init-0.5.2}/tests/contracts/test_wizard_explanations.py +0 -0
  434. {project_init-0.5.1 → project_init-0.5.2}/tests/helpers.py +0 -0
  435. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_cli.py +0 -0
  436. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_code_map.py +0 -0
  437. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_combination_matrix.py +0 -0
  438. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_compose_interop.py +0 -0
  439. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_concern_add_remove.py +0 -0
  440. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_concern_skill_gating.py +0 -0
  441. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_consent.py +0 -0
  442. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_hooks_and_safety.py +0 -0
  443. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_install_script.py +0 -0
  444. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_issue_metadata_workflow.py +0 -0
  445. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_json_output.py +0 -0
  446. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_lifecycle.py +0 -0
  447. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_memory_backends.py +0 -0
  448. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_memory_descriptor.py +0 -0
  449. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_memory_starters.py +0 -0
  450. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_observability.py +0 -0
  451. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_org_lifecycle.py +0 -0
  452. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_overwrite_protection.py +0 -0
  453. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_quality_gate_lint.py +0 -0
  454. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_rag_seam.py +0 -0
  455. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_readme_examples.py +0 -0
  456. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_session_cold_start.py +0 -0
  457. {project_init-0.5.1 → project_init-0.5.2}/tests/integration/test_upgrade.py +0 -0
  458. {project_init-0.5.1 → project_init-0.5.2}/tests/smoke/test_packaging.py +0 -0
  459. {project_init-0.5.1 → project_init-0.5.2}/tests/unit/test_command_variables.py +0 -0
  460. {project_init-0.5.1 → project_init-0.5.2}/tests/unit/test_interactive_prompts.py +0 -0
  461. {project_init-0.5.1 → project_init-0.5.2}/tests/unit/test_mcps.py +0 -0
  462. {project_init-0.5.1 → project_init-0.5.2}/tests/unit/test_migration_notes.py +0 -0
  463. {project_init-0.5.1 → project_init-0.5.2}/tests/unit/test_presets.py +0 -0
  464. {project_init-0.5.1 → project_init-0.5.2}/tests/unit/test_presets_inheritance.py +0 -0
  465. {project_init-0.5.1 → project_init-0.5.2}/tests/unit/test_profile.py +0 -0
  466. {project_init-0.5.1 → project_init-0.5.2}/tests/unit/test_render_nesting.py +0 -0
  467. {project_init-0.5.1 → project_init-0.5.2}/tests/unit/test_scaffold_inputs.py +0 -0
  468. {project_init-0.5.1 → project_init-0.5.2}/tests/unit/test_shell_portability.py +0 -0
  469. {project_init-0.5.1 → project_init-0.5.2}/tests/unit/test_surfaces.py +0 -0
  470. {project_init-0.5.1 → project_init-0.5.2}/tests/unit/test_third_party_updates.py +0 -0
  471. {project_init-0.5.1 → project_init-0.5.2}/tests/unit/test_version_span.py +0 -0
  472. {project_init-0.5.1 → project_init-0.5.2}/tools/benchmark/README.md +0 -0
  473. {project_init-0.5.1 → project_init-0.5.2}/tools/benchmark/harness.py +0 -0
  474. {project_init-0.5.1 → project_init-0.5.2}/tools/benchmark/latency.py +0 -0
  475. {project_init-0.5.1 → project_init-0.5.2}/tools/benchmark/model_prices.json +0 -0
  476. {project_init-0.5.1 → project_init-0.5.2}/tools/benchmark/prices.py +0 -0
  477. {project_init-0.5.1 → project_init-0.5.2}/tools/benchmark/record.py +0 -0
  478. {project_init-0.5.1 → project_init-0.5.2}/tools/benchmark/report.py +0 -0
  479. {project_init-0.5.1 → project_init-0.5.2}/tools/benchmark/scoring.py +0 -0
  480. {project_init-0.5.1 → project_init-0.5.2}/tools/benchmark/tasks/feat.toml +0 -0
  481. {project_init-0.5.1 → project_init-0.5.2}/tools/benchmark/tasks/fix.toml +0 -0
  482. {project_init-0.5.1 → project_init-0.5.2}/tools/benchmark/tasks/noop.toml +0 -0
  483. {project_init-0.5.1 → project_init-0.5.2}/tools/benchmark/tasks/qa.toml +0 -0
  484. {project_init-0.5.1 → project_init-0.5.2}/tools/benchmark/transcript.py +0 -0
  485. {project_init-0.5.1 → project_init-0.5.2}/tools/check_third_party_updates.py +0 -0
  486. {project_init-0.5.1 → project_init-0.5.2}/tools/pinned_third_party.toml +0 -0
  487. {project_init-0.5.1 → project_init-0.5.2}/tools/propose_third_party_bumps.sh +0 -0
  488. {project_init-0.5.1 → project_init-0.5.2}/tools/sync_plugin.py +0 -0
@@ -297,6 +297,37 @@ def _strip_heredocs(cmd: str) -> str:
297
297
  return _HEREDOC_RE.sub("", cmd)
298
298
 
299
299
 
300
+ # Free-text flag values carry arbitrary prose (commit messages, issue/PR comment
301
+ # and release bodies, titles) that must not be scanned for command patterns — a
302
+ # `--body` mentioning the literal "git push main" is data, not an invocation.
303
+ _TEXT_FLAG_RE = re.compile(
304
+ r"""(?P<flag>--body|--message|--title|--notes|-b|-m|-t) # known free-text flags
305
+ (?:=|\s+) # = or whitespace separator
306
+ (?P<q>['"]) # opening quote
307
+ (?P<val>(?:\\.|(?!(?P=q)).)*) # value (escapes allowed)
308
+ (?P=q) # matching closing quote
309
+ """,
310
+ re.VERBOSE | re.DOTALL,
311
+ )
312
+
313
+
314
+ def _strip_text_flag_values(cmd: str) -> str:
315
+ """Blank the quoted value of known free-text flags so prose can't trip the
316
+ pattern rules. Values containing a command substitution (``$(`` or a
317
+ backtick) are left intact — those ARE executed, so the rules must still see
318
+ them. Flag values are otherwise inert data: masking loses no real
319
+ enforcement (an actual ``git push origin main`` uses a positional ref, not a
320
+ flag value, and stays blocked)."""
321
+
322
+ def _blank(m: re.Match[str]) -> str:
323
+ val = m.group("val")
324
+ if "$(" in val or "`" in val:
325
+ return m.group(0)
326
+ return f'{m.group("flag")} ""'
327
+
328
+ return _TEXT_FLAG_RE.sub(_blank, cmd)
329
+
330
+
300
331
  def _redirect_target_exists(reason: str) -> bool:
301
332
  """Best-effort: scan the redirect message for a `.claude/scripts/<name>`
302
333
  reference and check whether the file exists. If no reference is found,
@@ -325,9 +356,10 @@ def guard(payload: dict) -> dict | None:
325
356
  if not cmd:
326
357
  return None
327
358
 
328
- # Strip heredoc bodies so pattern rules don't fire on body content
329
- # (e.g. `gh issue create --body "$(cat <<'EOF'\n...git push...\nEOF\n)"`)
330
- cmd_scan = _strip_heredocs(cmd)
359
+ # Strip heredoc bodies and free-text flag values so pattern rules don't fire
360
+ # on prose content (e.g. `gh issue create --body "$(cat <<'EOF'\n...git
361
+ # push...\nEOF\n)"`, or `gh pr comment --body "...git push main..."`).
362
+ cmd_scan = _strip_text_flag_values(_strip_heredocs(cmd))
331
363
 
332
364
  for pattern, target, message in COMMAND_RULES:
333
365
  if not pattern.search(cmd_scan):
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "name": "project-init",
3
+ "description": "Plugins extracted from the project-init scaffolder: forge-agnostic quality and safety hooks plus general skills (project-init-workflow), and GitHub issue->branch->PR->review->merge lifecycle automation (project-init-lifecycle).",
3
4
  "owner": {
4
5
  "name": "Vytautas Čepas",
5
6
  "url": "https://github.com/VytCepas"
@@ -9,4 +9,4 @@ authors:
9
9
  repository-code: https://github.com/VytCepas/project-init
10
10
  url: https://vytcepas.github.io/project-init/
11
11
  license: Apache-2.0
12
- version: 0.5.1
12
+ version: 0.5.2
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: project-init
3
- Version: 0.5.1
3
+ Version: 0.5.2
4
4
  Summary: Scaffolder for agentic-development infrastructure inside any project
5
5
  Project-URL: Repository, https://github.com/VytCepas/project-init
6
6
  Project-URL: Documentation, https://vytcepas.github.io/project-init/
@@ -38,6 +38,14 @@ Description-Content-Type: text/markdown
38
38
 
39
39
  Scaffolder for agentic-development infrastructure. One command drops a `.claude/` folder into any project so Claude Code (and other agents) have memory, docs, hooks, and curated MCPs ready to go.
40
40
 
41
+ **Who it's for** — solo devs and small teams running Claude Code seriously across multiple repos who want consistent, *enforced* agent infrastructure (CI, a git-lifecycle DAG guard, memory, curated MCPs) — not a hand-maintained `.claude/` per project.
42
+
43
+ ```bash
44
+ uvx project-init . # scaffold into the current directory
45
+ ```
46
+
47
+ → **How it compares** to other scaffolders and Claude Code plugins: [docs/positioning.md](docs/positioning.md).
48
+
41
49
  ## What it gives you
42
50
 
43
51
  Inside any target project:
@@ -66,6 +74,52 @@ Principles:
66
74
  - **Claude-first, portable core** — built and tested for Claude Code; other agents get instructions, not enforcement. See [Agent support tiers](#agent-support-tiers).
67
75
  - **`bun` and `uv` only** — no `npm`/`npx`/`pip`/`venv` anywhere in scaffolded projects.
68
76
 
77
+ ## Install (one-time)
78
+
79
+ Two install paths — pick by how you'll invoke it:
80
+
81
+ **CLI-only, from [PyPI](https://pypi.org/project/project-init/)** (ADR-011). Gives
82
+ you the `project-init` command — no `/project-init` slash command:
83
+
84
+ ```bash
85
+ uv tool install project-init # or one-off: uvx project-init .
86
+ ```
87
+
88
+ **Full setup, from git** — adds the Claude Code slash command:
89
+
90
+ ```bash
91
+ curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh | bash
92
+ ```
93
+
94
+ This installs [`uv`](https://docs.astral.sh/uv/) if missing, clones the repo to `~/.local/share/project-init` (override with `PROJECT_INIT_HOME=...`) **pinned to the latest tagged release**, and writes a user-level slash command at `~/.claude/commands/project-init.md`.
95
+
96
+ Pin a specific version, or opt into the unreleased development head:
97
+
98
+ ```bash
99
+ PROJECT_INIT_REF=v0.5.1 bash -c "$(curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh)"
100
+ PROJECT_INIT_REF=main bash -c "$(curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh)"
101
+ ```
102
+
103
+ Direct tool install without the slash command (any pinned tag):
104
+
105
+ ```bash
106
+ uv tool install git+https://github.com/VytCepas/project-init@v0.5.1
107
+ ```
108
+
109
+ Distribution rationale: [ADR-008](https://github.com/VytCepas/project-init/blob/main/docs/adr/adr-008-distribution-channel.md) (git channel), [ADR-011](https://github.com/VytCepas/project-init/blob/main/docs/adr/adr-011-pypi-trusted-publishing.md) (PyPI via trusted publishing).
110
+
111
+ ### Platform requirements
112
+
113
+ macOS, Linux, and WSL work out of the box. The scaffolded hooks and lifecycle
114
+ scripts are bash (a single bash-3.2 portability floor, epic #359) — so on **native Windows
115
+ (non-WSL)** you need **[Git for Windows](https://gitforwindows.org/)** (it ships
116
+ `bash`/`sh` + coreutils), and you should run from a **Git Bash** shell. Claude
117
+ Code then runs hooks through Git Bash automatically; the wired hooks also pin
118
+ `"shell": "bash"` to make that explicit. Without Git for Windows, Claude Code
119
+ falls back to PowerShell, which can't run a bash hook — so the enforcement
120
+ hooks won't fire. PowerShell-only is not a supported target; there are no
121
+ `.ps1` equivalents by design. (WSL remains the smoothest Windows path.)
122
+
69
123
  ## Agent support tiers
70
124
 
71
125
  This is **firstly a Claude Code scaffolder**. It aims to be agent-agnostic where
@@ -121,52 +175,6 @@ Two honest caveats hold across all of it:
121
175
  files.** The suite validates settings/skills/hooks/MCP and the generated
122
176
  surface configs; no GUI agent is driven live in CI.
123
177
 
124
- ## Install (one-time)
125
-
126
- Two install paths — pick by how you'll invoke it:
127
-
128
- **CLI-only, from [PyPI](https://pypi.org/project/project-init/)** (ADR-011). Gives
129
- you the `project-init` command — no `/project-init` slash command:
130
-
131
- ```bash
132
- uv tool install project-init # or one-off: uvx project-init .
133
- ```
134
-
135
- **Full setup, from git** — adds the Claude Code slash command:
136
-
137
- ```bash
138
- curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh | bash
139
- ```
140
-
141
- This installs [`uv`](https://docs.astral.sh/uv/) if missing, clones the repo to `~/.local/share/project-init` (override with `PROJECT_INIT_HOME=...`) **pinned to the latest tagged release**, and writes a user-level slash command at `~/.claude/commands/project-init.md`.
142
-
143
- Pin a specific version, or opt into the unreleased development head:
144
-
145
- ```bash
146
- PROJECT_INIT_REF=v0.5.1 bash -c "$(curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh)"
147
- PROJECT_INIT_REF=main bash -c "$(curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh)"
148
- ```
149
-
150
- Direct tool install without the slash command (any pinned tag):
151
-
152
- ```bash
153
- uv tool install git+https://github.com/VytCepas/project-init@v0.5.1
154
- ```
155
-
156
- Distribution rationale: [ADR-008](https://github.com/VytCepas/project-init/blob/main/docs/adr/adr-008-distribution-channel.md) (git channel), [ADR-011](https://github.com/VytCepas/project-init/blob/main/docs/adr/adr-011-pypi-trusted-publishing.md) (PyPI via trusted publishing).
157
-
158
- ### Platform requirements
159
-
160
- macOS, Linux, and WSL work out of the box. The scaffolded hooks and lifecycle
161
- scripts are bash (a single bash-3.2 portability floor, epic #359) — so on **native Windows
162
- (non-WSL)** you need **[Git for Windows](https://gitforwindows.org/)** (it ships
163
- `bash`/`sh` + coreutils), and you should run from a **Git Bash** shell. Claude
164
- Code then runs hooks through Git Bash automatically; the wired hooks also pin
165
- `"shell": "bash"` to make that explicit. Without Git for Windows, Claude Code
166
- falls back to PowerShell, which can't run a bash hook — so the enforcement
167
- hooks won't fire. PowerShell-only is not a supported target; there are no
168
- `.ps1` equivalents by design. (WSL remains the smoothest Windows path.)
169
-
170
178
  ## Use
171
179
 
172
180
  ### Option 1: Inside a Claude Code session (interactive)
@@ -452,15 +460,23 @@ four-category comparison and the moat, see
452
460
 
453
461
  ```
454
462
  project-init/
455
- ├── pyproject.toml # uv-managed, rich-only runtime dep, ruff-only dev
456
- ├── install.sh # bootstrap one-liner
457
- ├── src/project_init/ # wizard CLI + scaffold engine
463
+ ├── pyproject.toml # uv-managed, rich-only runtime dep, ruff-only dev
464
+ ├── install.sh # bootstrap one-liner
465
+ ├── src/project_init/ # wizard CLI + scaffold engine (scaffold, concerns, surfaces, mcps, …)
458
466
  ├── templates/
459
- │ ├── base/ # always copied (no memory backend of its own)
460
- │ ├── obsidian/ # vault + agent-memory overlay; derived from memory_stack (#466)
461
- │ ├── graphify/ # Graphify memory overlay (implies obsidian)
462
- └── presets/ # toml preset definitions
463
- └── tests/ # focused pytest modules by behavior area
467
+ │ ├── base/ # always copied
468
+ │ ├── fallback/ # shared hooks/skills rendered only with --no-plugin (ADR-010)
469
+ │ ├── presets/ # toml preset definitions
470
+ ├── obsidian/ # vault + agent-memory overlay
471
+ │ ├── graphify/ # Graphify memory overlay (implies obsidian)
472
+ │ ├── rag/ # tier-3 RAG memory overlay
473
+ │ ├── lifecycle/ # git lifecycle enforcement (+ lifecycle_fallback for --no-plugin)
474
+ │ ├── multi_model/ # CCR model-switching overlay (--multi-model)
475
+ │ ├── observability/ # transcript metrics overlay (--observability)
476
+ │ ├── governance/ # AI governance overlay (--governance)
477
+ │ ├── auto/ # always-on emitted artifacts
478
+ │ └── amp/ antigravity/ codex/ junie/ # per-surface wiring overlays (--agents)
479
+ └── tests/ # focused pytest modules by behavior area
464
480
  ```
465
481
 
466
482
  ## Status
@@ -7,6 +7,14 @@
7
7
 
8
8
  Scaffolder for agentic-development infrastructure. One command drops a `.claude/` folder into any project so Claude Code (and other agents) have memory, docs, hooks, and curated MCPs ready to go.
9
9
 
10
+ **Who it's for** — solo devs and small teams running Claude Code seriously across multiple repos who want consistent, *enforced* agent infrastructure (CI, a git-lifecycle DAG guard, memory, curated MCPs) — not a hand-maintained `.claude/` per project.
11
+
12
+ ```bash
13
+ uvx project-init . # scaffold into the current directory
14
+ ```
15
+
16
+ → **How it compares** to other scaffolders and Claude Code plugins: [docs/positioning.md](docs/positioning.md).
17
+
10
18
  ## What it gives you
11
19
 
12
20
  Inside any target project:
@@ -35,6 +43,52 @@ Principles:
35
43
  - **Claude-first, portable core** — built and tested for Claude Code; other agents get instructions, not enforcement. See [Agent support tiers](#agent-support-tiers).
36
44
  - **`bun` and `uv` only** — no `npm`/`npx`/`pip`/`venv` anywhere in scaffolded projects.
37
45
 
46
+ ## Install (one-time)
47
+
48
+ Two install paths — pick by how you'll invoke it:
49
+
50
+ **CLI-only, from [PyPI](https://pypi.org/project/project-init/)** (ADR-011). Gives
51
+ you the `project-init` command — no `/project-init` slash command:
52
+
53
+ ```bash
54
+ uv tool install project-init # or one-off: uvx project-init .
55
+ ```
56
+
57
+ **Full setup, from git** — adds the Claude Code slash command:
58
+
59
+ ```bash
60
+ curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh | bash
61
+ ```
62
+
63
+ This installs [`uv`](https://docs.astral.sh/uv/) if missing, clones the repo to `~/.local/share/project-init` (override with `PROJECT_INIT_HOME=...`) **pinned to the latest tagged release**, and writes a user-level slash command at `~/.claude/commands/project-init.md`.
64
+
65
+ Pin a specific version, or opt into the unreleased development head:
66
+
67
+ ```bash
68
+ PROJECT_INIT_REF=v0.5.1 bash -c "$(curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh)"
69
+ PROJECT_INIT_REF=main bash -c "$(curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh)"
70
+ ```
71
+
72
+ Direct tool install without the slash command (any pinned tag):
73
+
74
+ ```bash
75
+ uv tool install git+https://github.com/VytCepas/project-init@v0.5.1
76
+ ```
77
+
78
+ Distribution rationale: [ADR-008](https://github.com/VytCepas/project-init/blob/main/docs/adr/adr-008-distribution-channel.md) (git channel), [ADR-011](https://github.com/VytCepas/project-init/blob/main/docs/adr/adr-011-pypi-trusted-publishing.md) (PyPI via trusted publishing).
79
+
80
+ ### Platform requirements
81
+
82
+ macOS, Linux, and WSL work out of the box. The scaffolded hooks and lifecycle
83
+ scripts are bash (a single bash-3.2 portability floor, epic #359) — so on **native Windows
84
+ (non-WSL)** you need **[Git for Windows](https://gitforwindows.org/)** (it ships
85
+ `bash`/`sh` + coreutils), and you should run from a **Git Bash** shell. Claude
86
+ Code then runs hooks through Git Bash automatically; the wired hooks also pin
87
+ `"shell": "bash"` to make that explicit. Without Git for Windows, Claude Code
88
+ falls back to PowerShell, which can't run a bash hook — so the enforcement
89
+ hooks won't fire. PowerShell-only is not a supported target; there are no
90
+ `.ps1` equivalents by design. (WSL remains the smoothest Windows path.)
91
+
38
92
  ## Agent support tiers
39
93
 
40
94
  This is **firstly a Claude Code scaffolder**. It aims to be agent-agnostic where
@@ -90,52 +144,6 @@ Two honest caveats hold across all of it:
90
144
  files.** The suite validates settings/skills/hooks/MCP and the generated
91
145
  surface configs; no GUI agent is driven live in CI.
92
146
 
93
- ## Install (one-time)
94
-
95
- Two install paths — pick by how you'll invoke it:
96
-
97
- **CLI-only, from [PyPI](https://pypi.org/project/project-init/)** (ADR-011). Gives
98
- you the `project-init` command — no `/project-init` slash command:
99
-
100
- ```bash
101
- uv tool install project-init # or one-off: uvx project-init .
102
- ```
103
-
104
- **Full setup, from git** — adds the Claude Code slash command:
105
-
106
- ```bash
107
- curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh | bash
108
- ```
109
-
110
- This installs [`uv`](https://docs.astral.sh/uv/) if missing, clones the repo to `~/.local/share/project-init` (override with `PROJECT_INIT_HOME=...`) **pinned to the latest tagged release**, and writes a user-level slash command at `~/.claude/commands/project-init.md`.
111
-
112
- Pin a specific version, or opt into the unreleased development head:
113
-
114
- ```bash
115
- PROJECT_INIT_REF=v0.5.1 bash -c "$(curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh)"
116
- PROJECT_INIT_REF=main bash -c "$(curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh)"
117
- ```
118
-
119
- Direct tool install without the slash command (any pinned tag):
120
-
121
- ```bash
122
- uv tool install git+https://github.com/VytCepas/project-init@v0.5.1
123
- ```
124
-
125
- Distribution rationale: [ADR-008](https://github.com/VytCepas/project-init/blob/main/docs/adr/adr-008-distribution-channel.md) (git channel), [ADR-011](https://github.com/VytCepas/project-init/blob/main/docs/adr/adr-011-pypi-trusted-publishing.md) (PyPI via trusted publishing).
126
-
127
- ### Platform requirements
128
-
129
- macOS, Linux, and WSL work out of the box. The scaffolded hooks and lifecycle
130
- scripts are bash (a single bash-3.2 portability floor, epic #359) — so on **native Windows
131
- (non-WSL)** you need **[Git for Windows](https://gitforwindows.org/)** (it ships
132
- `bash`/`sh` + coreutils), and you should run from a **Git Bash** shell. Claude
133
- Code then runs hooks through Git Bash automatically; the wired hooks also pin
134
- `"shell": "bash"` to make that explicit. Without Git for Windows, Claude Code
135
- falls back to PowerShell, which can't run a bash hook — so the enforcement
136
- hooks won't fire. PowerShell-only is not a supported target; there are no
137
- `.ps1` equivalents by design. (WSL remains the smoothest Windows path.)
138
-
139
147
  ## Use
140
148
 
141
149
  ### Option 1: Inside a Claude Code session (interactive)
@@ -421,15 +429,23 @@ four-category comparison and the moat, see
421
429
 
422
430
  ```
423
431
  project-init/
424
- ├── pyproject.toml # uv-managed, rich-only runtime dep, ruff-only dev
425
- ├── install.sh # bootstrap one-liner
426
- ├── src/project_init/ # wizard CLI + scaffold engine
432
+ ├── pyproject.toml # uv-managed, rich-only runtime dep, ruff-only dev
433
+ ├── install.sh # bootstrap one-liner
434
+ ├── src/project_init/ # wizard CLI + scaffold engine (scaffold, concerns, surfaces, mcps, …)
427
435
  ├── templates/
428
- │ ├── base/ # always copied (no memory backend of its own)
429
- │ ├── obsidian/ # vault + agent-memory overlay; derived from memory_stack (#466)
430
- │ ├── graphify/ # Graphify memory overlay (implies obsidian)
431
- └── presets/ # toml preset definitions
432
- └── tests/ # focused pytest modules by behavior area
436
+ │ ├── base/ # always copied
437
+ │ ├── fallback/ # shared hooks/skills rendered only with --no-plugin (ADR-010)
438
+ │ ├── presets/ # toml preset definitions
439
+ ├── obsidian/ # vault + agent-memory overlay
440
+ │ ├── graphify/ # Graphify memory overlay (implies obsidian)
441
+ │ ├── rag/ # tier-3 RAG memory overlay
442
+ │ ├── lifecycle/ # git lifecycle enforcement (+ lifecycle_fallback for --no-plugin)
443
+ │ ├── multi_model/ # CCR model-switching overlay (--multi-model)
444
+ │ ├── observability/ # transcript metrics overlay (--observability)
445
+ │ ├── governance/ # AI governance overlay (--governance)
446
+ │ ├── auto/ # always-on emitted artifacts
447
+ │ └── amp/ antigravity/ codex/ junie/ # per-surface wiring overlays (--agents)
448
+ └── tests/ # focused pytest modules by behavior area
433
449
  ```
434
450
 
435
451
  ## Status
@@ -297,6 +297,37 @@ def _strip_heredocs(cmd: str) -> str:
297
297
  return _HEREDOC_RE.sub("", cmd)
298
298
 
299
299
 
300
+ # Free-text flag values carry arbitrary prose (commit messages, issue/PR comment
301
+ # and release bodies, titles) that must not be scanned for command patterns — a
302
+ # `--body` mentioning the literal "git push main" is data, not an invocation.
303
+ _TEXT_FLAG_RE = re.compile(
304
+ r"""(?P<flag>--body|--message|--title|--notes|-b|-m|-t) # known free-text flags
305
+ (?:=|\s+) # = or whitespace separator
306
+ (?P<q>['"]) # opening quote
307
+ (?P<val>(?:\\.|(?!(?P=q)).)*) # value (escapes allowed)
308
+ (?P=q) # matching closing quote
309
+ """,
310
+ re.VERBOSE | re.DOTALL,
311
+ )
312
+
313
+
314
+ def _strip_text_flag_values(cmd: str) -> str:
315
+ """Blank the quoted value of known free-text flags so prose can't trip the
316
+ pattern rules. Values containing a command substitution (``$(`` or a
317
+ backtick) are left intact — those ARE executed, so the rules must still see
318
+ them. Flag values are otherwise inert data: masking loses no real
319
+ enforcement (an actual ``git push origin main`` uses a positional ref, not a
320
+ flag value, and stays blocked)."""
321
+
322
+ def _blank(m: re.Match[str]) -> str:
323
+ val = m.group("val")
324
+ if "$(" in val or "`" in val:
325
+ return m.group(0)
326
+ return f'{m.group("flag")} ""'
327
+
328
+ return _TEXT_FLAG_RE.sub(_blank, cmd)
329
+
330
+
300
331
  def _redirect_target_exists(reason: str) -> bool:
301
332
  """Best-effort: scan the redirect message for a `.claude/scripts/<name>`
302
333
  reference and check whether the file exists. If no reference is found,
@@ -325,9 +356,10 @@ def guard(payload: dict) -> dict | None:
325
356
  if not cmd:
326
357
  return None
327
358
 
328
- # Strip heredoc bodies so pattern rules don't fire on body content
329
- # (e.g. `gh issue create --body "$(cat <<'EOF'\n...git push...\nEOF\n)"`)
330
- cmd_scan = _strip_heredocs(cmd)
359
+ # Strip heredoc bodies and free-text flag values so pattern rules don't fire
360
+ # on prose content (e.g. `gh issue create --body "$(cat <<'EOF'\n...git
361
+ # push...\nEOF\n)"`, or `gh pr comment --body "...git push main..."`).
362
+ cmd_scan = _strip_text_flag_values(_strip_heredocs(cmd))
331
363
 
332
364
  for pattern, target, message in COMMAND_RULES:
333
365
  if not pattern.search(cmd_scan):
@@ -2,7 +2,7 @@
2
2
  "name": "project-init-workflow",
3
3
  "displayName": "project-init Workflow",
4
4
  "version": "0.1.0",
5
- "description": "GitHub lifecycle skills and deterministic guard hooks from project-init: issue->branch->PR->review->merge workflow, commit gating, and session bootstrap.",
5
+ "description": "Forge-agnostic quality and safety hooks plus general skills from project-init: commit gating, lint-on-edit, prod-safety guard, and session bootstrap. The always-on core payload; GitHub lifecycle automation lives in the separate project-init-lifecycle plugin.",
6
6
  "author": {
7
7
  "name": "Vytautas Čepas",
8
8
  "url": "https://github.com/VytCepas"
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "project-init"
7
- version = "0.5.1"
7
+ version = "0.5.2"
8
8
  description = "Scaffolder for agentic-development infrastructure inside any project"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1,6 +1,6 @@
1
1
  """project-init — scaffolder for agentic-development infrastructure."""
2
2
 
3
- __version__ = "0.5.1"
3
+ __version__ = "0.5.2"
4
4
  # Plugin version is independent of the scaffolder (ADR-010). Kept in sync with
5
5
  # plugins/project-init-workflow/.claude-plugin/plugin.json by a contract test;
6
6
  # a constant here because plugins/ is not packaged into the installed wheel.
@@ -297,6 +297,37 @@ def _strip_heredocs(cmd: str) -> str:
297
297
  return _HEREDOC_RE.sub("", cmd)
298
298
 
299
299
 
300
+ # Free-text flag values carry arbitrary prose (commit messages, issue/PR comment
301
+ # and release bodies, titles) that must not be scanned for command patterns — a
302
+ # `--body` mentioning the literal "git push main" is data, not an invocation.
303
+ _TEXT_FLAG_RE = re.compile(
304
+ r"""(?P<flag>--body|--message|--title|--notes|-b|-m|-t) # known free-text flags
305
+ (?:=|\s+) # = or whitespace separator
306
+ (?P<q>['"]) # opening quote
307
+ (?P<val>(?:\\.|(?!(?P=q)).)*) # value (escapes allowed)
308
+ (?P=q) # matching closing quote
309
+ """,
310
+ re.VERBOSE | re.DOTALL,
311
+ )
312
+
313
+
314
+ def _strip_text_flag_values(cmd: str) -> str:
315
+ """Blank the quoted value of known free-text flags so prose can't trip the
316
+ pattern rules. Values containing a command substitution (``$(`` or a
317
+ backtick) are left intact — those ARE executed, so the rules must still see
318
+ them. Flag values are otherwise inert data: masking loses no real
319
+ enforcement (an actual ``git push origin main`` uses a positional ref, not a
320
+ flag value, and stays blocked)."""
321
+
322
+ def _blank(m: re.Match[str]) -> str:
323
+ val = m.group("val")
324
+ if "$(" in val or "`" in val:
325
+ return m.group(0)
326
+ return f'{m.group("flag")} ""'
327
+
328
+ return _TEXT_FLAG_RE.sub(_blank, cmd)
329
+
330
+
300
331
  def _redirect_target_exists(reason: str) -> bool:
301
332
  """Best-effort: scan the redirect message for a `.claude/scripts/<name>`
302
333
  reference and check whether the file exists. If no reference is found,
@@ -325,9 +356,10 @@ def guard(payload: dict) -> dict | None:
325
356
  if not cmd:
326
357
  return None
327
358
 
328
- # Strip heredoc bodies so pattern rules don't fire on body content
329
- # (e.g. `gh issue create --body "$(cat <<'EOF'\n...git push...\nEOF\n)"`)
330
- cmd_scan = _strip_heredocs(cmd)
359
+ # Strip heredoc bodies and free-text flag values so pattern rules don't fire
360
+ # on prose content (e.g. `gh issue create --body "$(cat <<'EOF'\n...git
361
+ # push...\nEOF\n)"`, or `gh pr comment --body "...git push main..."`).
362
+ cmd_scan = _strip_text_flag_values(_strip_heredocs(cmd))
331
363
 
332
364
  for pattern, target, message in COMMAND_RULES:
333
365
  if not pattern.search(cmd_scan):
@@ -28,6 +28,12 @@ Exception (PI-526): the concern-decoupled skills `save_memory`, `status`, and
28
28
  `session_summary` gained deterministic presence-checks in their bodies — a
29
29
  deliberate fix, not move-drift. Only those three SKILL.md hashes were re-pinned
30
30
  (no_plugin combos), after verifying every other file still matched.
31
+
32
+ Exception (PI-550): `dag_workflow.py` gained `_strip_text_flag_values` so the
33
+ command-guard no longer false-positives on blocked-command phrases inside
34
+ free-text flag values (`--body`/`-m`/`--title`/`--notes`). A deliberate guard
35
+ fix, not move-drift. Only the `.claude/hooks/dag_workflow.py` hash was re-pinned
36
+ across all four combos, after verifying every other file still matched.
31
37
  """
32
38
 
33
39
  from __future__ import annotations
@@ -34,6 +34,12 @@ Exception (PI-526): the concern-decoupled skills `save_memory`, `status`, and
34
34
  write to `.claude/memory/` or `.claude/vault/` when that concern was declined) —
35
35
  a deliberate fix, not move-drift. Only those three SKILL.md hashes were re-pinned
36
36
  (no_plugin combos), after verifying every other file still matched.
37
+
38
+ Exception (PI-550): `dag_workflow.py` gained `_strip_text_flag_values` so the
39
+ command-guard no longer false-positives on blocked-command phrases inside
40
+ free-text flag values. A deliberate guard fix, not move-drift. Only the
41
+ `.claude/hooks/dag_workflow.py` hash was re-pinned across all four combos, after
42
+ verifying every other file still matched.
37
43
  """
38
44
 
39
45
  from __future__ import annotations
@@ -19,7 +19,7 @@
19
19
  ".claude/hooks/README.md": "9a6533d1f8ad8cc667683ba58bbda5e524c230931f65c77cb2d477c72c080061",
20
20
  ".claude/hooks/_py.sh": "41c28f08f42df48131b052aa6a74f0b49b2baa17624e4c17e2f6ca4c289ad100",
21
21
  ".claude/hooks/_usage_log.sh": "9684c3821fd3ac2cbac334a3f2ccb6de6c5792062b1bc30702001c02d19da5de",
22
- ".claude/hooks/dag_workflow.py": "b143f12e5f94ecd7b78ed7c9b0e99e5db16b541c1e7edf0870ac86ea38fa863d",
22
+ ".claude/hooks/dag_workflow.py": "04d34eebb7ae9184ffe40cf0dfe04bfa75b8df10add87853229ff0f596191357",
23
23
  ".claude/hooks/github_command_guard.sh": "14bcf3da720916a0fdaec22febb33401c60d79717cc0035880c7c84b2cd428f1",
24
24
  ".claude/hooks/post_edit_lint.sh": "6bccb22869a6630e0b8fe739a509a5277ce6fad249093e622f1a9466b7687789",
25
25
  ".claude/hooks/pre_commit_gate.sh": "060072ea89a9c8fbd6feea761e58af330b84e24a302a815faa2facdd10e7b0b8",
@@ -18,7 +18,7 @@
18
18
  ".claude/docs/guides/using-memory.md": "433598cd17ee0a7d98f2987100cae5426947ee8edb8e0b2dfa7c7786a7b94e1e",
19
19
  ".claude/hooks/README.md": "9a6533d1f8ad8cc667683ba58bbda5e524c230931f65c77cb2d477c72c080061",
20
20
  ".claude/hooks/_py.sh": "41c28f08f42df48131b052aa6a74f0b49b2baa17624e4c17e2f6ca4c289ad100",
21
- ".claude/hooks/dag_workflow.py": "b143f12e5f94ecd7b78ed7c9b0e99e5db16b541c1e7edf0870ac86ea38fa863d",
21
+ ".claude/hooks/dag_workflow.py": "04d34eebb7ae9184ffe40cf0dfe04bfa75b8df10add87853229ff0f596191357",
22
22
  ".claude/hooks/prod_guard.py": "b801d9f46b0b91f3af75e3b8b55fae869561e1f4f1bb161ef8c9812d2516ef9f",
23
23
  ".claude/memory/MEMORY.md": "544dac81979cbe795cc55a020360c2569036381b62f879d10ce8dffdc0de0791",
24
24
  ".claude/memory/README.md": "ff7e14d842d875f537d7d3a6cbe18df47e754088949804f94f348e300bbcbc5e",
@@ -18,7 +18,7 @@
18
18
  ".claude/hooks/README.md": "9a6533d1f8ad8cc667683ba58bbda5e524c230931f65c77cb2d477c72c080061",
19
19
  ".claude/hooks/_py.sh": "41c28f08f42df48131b052aa6a74f0b49b2baa17624e4c17e2f6ca4c289ad100",
20
20
  ".claude/hooks/_usage_log.sh": "9684c3821fd3ac2cbac334a3f2ccb6de6c5792062b1bc30702001c02d19da5de",
21
- ".claude/hooks/dag_workflow.py": "b143f12e5f94ecd7b78ed7c9b0e99e5db16b541c1e7edf0870ac86ea38fa863d",
21
+ ".claude/hooks/dag_workflow.py": "04d34eebb7ae9184ffe40cf0dfe04bfa75b8df10add87853229ff0f596191357",
22
22
  ".claude/hooks/github_command_guard.sh": "14bcf3da720916a0fdaec22febb33401c60d79717cc0035880c7c84b2cd428f1",
23
23
  ".claude/hooks/post_edit_lint.sh": "6bccb22869a6630e0b8fe739a509a5277ce6fad249093e622f1a9466b7687789",
24
24
  ".claude/hooks/pre_commit_gate.sh": "060072ea89a9c8fbd6feea761e58af330b84e24a302a815faa2facdd10e7b0b8",
@@ -17,7 +17,7 @@
17
17
  ".claude/docs/guides/using-memory.md": "433598cd17ee0a7d98f2987100cae5426947ee8edb8e0b2dfa7c7786a7b94e1e",
18
18
  ".claude/hooks/README.md": "9a6533d1f8ad8cc667683ba58bbda5e524c230931f65c77cb2d477c72c080061",
19
19
  ".claude/hooks/_py.sh": "41c28f08f42df48131b052aa6a74f0b49b2baa17624e4c17e2f6ca4c289ad100",
20
- ".claude/hooks/dag_workflow.py": "b143f12e5f94ecd7b78ed7c9b0e99e5db16b541c1e7edf0870ac86ea38fa863d",
20
+ ".claude/hooks/dag_workflow.py": "04d34eebb7ae9184ffe40cf0dfe04bfa75b8df10add87853229ff0f596191357",
21
21
  ".claude/hooks/prod_guard.py": "b801d9f46b0b91f3af75e3b8b55fae869561e1f4f1bb161ef8c9812d2516ef9f",
22
22
  ".claude/memory/MEMORY.md": "544dac81979cbe795cc55a020360c2569036381b62f879d10ce8dffdc0de0791",
23
23
  ".claude/memory/README.md": "ff7e14d842d875f537d7d3a6cbe18df47e754088949804f94f348e300bbcbc5e",
@@ -19,7 +19,7 @@
19
19
  ".claude/hooks/README.md": "9a6533d1f8ad8cc667683ba58bbda5e524c230931f65c77cb2d477c72c080061",
20
20
  ".claude/hooks/_py.sh": "41c28f08f42df48131b052aa6a74f0b49b2baa17624e4c17e2f6ca4c289ad100",
21
21
  ".claude/hooks/_usage_log.sh": "9684c3821fd3ac2cbac334a3f2ccb6de6c5792062b1bc30702001c02d19da5de",
22
- ".claude/hooks/dag_workflow.py": "b143f12e5f94ecd7b78ed7c9b0e99e5db16b541c1e7edf0870ac86ea38fa863d",
22
+ ".claude/hooks/dag_workflow.py": "04d34eebb7ae9184ffe40cf0dfe04bfa75b8df10add87853229ff0f596191357",
23
23
  ".claude/hooks/github_command_guard.sh": "14bcf3da720916a0fdaec22febb33401c60d79717cc0035880c7c84b2cd428f1",
24
24
  ".claude/hooks/post_edit_lint.sh": "6bccb22869a6630e0b8fe739a509a5277ce6fad249093e622f1a9466b7687789",
25
25
  ".claude/hooks/pre_commit_gate.sh": "060072ea89a9c8fbd6feea761e58af330b84e24a302a815faa2facdd10e7b0b8",
@@ -18,7 +18,7 @@
18
18
  ".claude/docs/guides/using-memory.md": "433598cd17ee0a7d98f2987100cae5426947ee8edb8e0b2dfa7c7786a7b94e1e",
19
19
  ".claude/hooks/README.md": "9a6533d1f8ad8cc667683ba58bbda5e524c230931f65c77cb2d477c72c080061",
20
20
  ".claude/hooks/_py.sh": "41c28f08f42df48131b052aa6a74f0b49b2baa17624e4c17e2f6ca4c289ad100",
21
- ".claude/hooks/dag_workflow.py": "b143f12e5f94ecd7b78ed7c9b0e99e5db16b541c1e7edf0870ac86ea38fa863d",
21
+ ".claude/hooks/dag_workflow.py": "04d34eebb7ae9184ffe40cf0dfe04bfa75b8df10add87853229ff0f596191357",
22
22
  ".claude/hooks/prod_guard.py": "b801d9f46b0b91f3af75e3b8b55fae869561e1f4f1bb161ef8c9812d2516ef9f",
23
23
  ".claude/memory/MEMORY.md": "544dac81979cbe795cc55a020360c2569036381b62f879d10ce8dffdc0de0791",
24
24
  ".claude/memory/README.md": "ff7e14d842d875f537d7d3a6cbe18df47e754088949804f94f348e300bbcbc5e",
@@ -18,7 +18,7 @@
18
18
  ".claude/hooks/README.md": "9a6533d1f8ad8cc667683ba58bbda5e524c230931f65c77cb2d477c72c080061",
19
19
  ".claude/hooks/_py.sh": "41c28f08f42df48131b052aa6a74f0b49b2baa17624e4c17e2f6ca4c289ad100",
20
20
  ".claude/hooks/_usage_log.sh": "9684c3821fd3ac2cbac334a3f2ccb6de6c5792062b1bc30702001c02d19da5de",
21
- ".claude/hooks/dag_workflow.py": "b143f12e5f94ecd7b78ed7c9b0e99e5db16b541c1e7edf0870ac86ea38fa863d",
21
+ ".claude/hooks/dag_workflow.py": "04d34eebb7ae9184ffe40cf0dfe04bfa75b8df10add87853229ff0f596191357",
22
22
  ".claude/hooks/github_command_guard.sh": "14bcf3da720916a0fdaec22febb33401c60d79717cc0035880c7c84b2cd428f1",
23
23
  ".claude/hooks/post_edit_lint.sh": "6bccb22869a6630e0b8fe739a509a5277ce6fad249093e622f1a9466b7687789",
24
24
  ".claude/hooks/pre_commit_gate.sh": "060072ea89a9c8fbd6feea761e58af330b84e24a302a815faa2facdd10e7b0b8",
@@ -17,7 +17,7 @@
17
17
  ".claude/docs/guides/using-memory.md": "433598cd17ee0a7d98f2987100cae5426947ee8edb8e0b2dfa7c7786a7b94e1e",
18
18
  ".claude/hooks/README.md": "9a6533d1f8ad8cc667683ba58bbda5e524c230931f65c77cb2d477c72c080061",
19
19
  ".claude/hooks/_py.sh": "41c28f08f42df48131b052aa6a74f0b49b2baa17624e4c17e2f6ca4c289ad100",
20
- ".claude/hooks/dag_workflow.py": "b143f12e5f94ecd7b78ed7c9b0e99e5db16b541c1e7edf0870ac86ea38fa863d",
20
+ ".claude/hooks/dag_workflow.py": "04d34eebb7ae9184ffe40cf0dfe04bfa75b8df10add87853229ff0f596191357",
21
21
  ".claude/hooks/prod_guard.py": "b801d9f46b0b91f3af75e3b8b55fae869561e1f4f1bb161ef8c9812d2516ef9f",
22
22
  ".claude/memory/MEMORY.md": "544dac81979cbe795cc55a020360c2569036381b62f879d10ce8dffdc0de0791",
23
23
  ".claude/memory/README.md": "ff7e14d842d875f537d7d3a6cbe18df47e754088949804f94f348e300bbcbc5e",