project-init 0.5.0__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 (505) hide show
  1. {project_init-0.5.0/plugins/project-init-lifecycle → project_init-0.5.2/.claude}/hooks/dag_workflow.py +35 -3
  2. {project_init-0.5.0 → project_init-0.5.2}/.claude-plugin/marketplace.json +1 -0
  3. project_init-0.5.2/.github/PULL_REQUEST_TEMPLATE.md +21 -0
  4. project_init-0.5.2/CITATION.cff +12 -0
  5. project_init-0.5.2/CONTRIBUTING.md +64 -0
  6. {project_init-0.5.0 → project_init-0.5.2}/PKG-INFO +121 -57
  7. {project_init-0.5.0 → project_init-0.5.2}/README.md +120 -56
  8. {project_init-0.5.0 → project_init-0.5.2}/docs/README.md +1 -0
  9. {project_init-0.5.0 → project_init-0.5.2}/docs/guides/org-fork-lifecycle.md +3 -2
  10. {project_init-0.5.0 → project_init-0.5.2}/docs/guides/using-project-init.md +24 -0
  11. project_init-0.5.2/docs/positioning.md +36 -0
  12. {project_init-0.5.0 → project_init-0.5.2}/mkdocs.yml +1 -0
  13. {project_init-0.5.0/.claude → project_init-0.5.2/plugins/project-init-lifecycle}/hooks/dag_workflow.py +35 -3
  14. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/.claude-plugin/plugin.json +1 -1
  15. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/hooks/post_edit_lint.sh +4 -4
  16. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/hooks/pre_commit_gate.sh +4 -4
  17. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/hooks/prod_guard.py +14 -5
  18. {project_init-0.5.0/templates/antigravity/dot_agents → project_init-0.5.2/plugins/project-init-workflow}/skills/save_memory/SKILL.md +3 -1
  19. {project_init-0.5.0/templates/amp/dot_agents → project_init-0.5.2/plugins/project-init-workflow}/skills/session_summary/SKILL.md +5 -3
  20. {project_init-0.5.0/templates/antigravity/dot_agents → project_init-0.5.2/plugins/project-init-workflow}/skills/status/SKILL.md +1 -1
  21. {project_init-0.5.0 → project_init-0.5.2}/pyproject.toml +1 -1
  22. {project_init-0.5.0 → project_init-0.5.2}/src/project_init/__init__.py +1 -1
  23. {project_init-0.5.0 → project_init-0.5.2}/src/project_init/__main__.py +130 -11
  24. {project_init-0.5.0 → project_init-0.5.2}/src/project_init/capabilities.py +32 -7
  25. project_init-0.5.2/src/project_init/concerns.py +398 -0
  26. {project_init-0.5.0 → project_init-0.5.2}/src/project_init/governance.py +23 -6
  27. {project_init-0.5.0 → project_init-0.5.2}/src/project_init/scaffold.py +51 -5
  28. {project_init-0.5.0 → project_init-0.5.2}/src/project_init/surfaces.py +23 -5
  29. {project_init-0.5.0 → project_init-0.5.2}/src/project_init/upgrade.py +52 -3
  30. project_init-0.5.0/templates/antigravity/dot_agents/skills/audit/SKILL.md → project_init-0.5.2/templates/amp/dot_agents/skills/audit/SKILL.md.tmpl +2 -1
  31. project_init-0.5.0/templates/antigravity/dot_agents/skills/create_issue/SKILL.md → project_init-0.5.2/templates/amp/dot_agents/skills/create_issue/SKILL.md.tmpl +2 -1
  32. project_init-0.5.0/templates/antigravity/dot_agents/skills/github_workflow/SKILL.md → project_init-0.5.2/templates/amp/dot_agents/skills/github_workflow/SKILL.md.tmpl +2 -1
  33. project_init-0.5.0/templates/antigravity/dot_agents/skills/request_review/SKILL.md → project_init-0.5.2/templates/amp/dot_agents/skills/request_review/SKILL.md.tmpl +2 -1
  34. {project_init-0.5.0/templates/codex → project_init-0.5.2/templates/amp}/dot_agents/skills/save_memory/SKILL.md +3 -1
  35. {project_init-0.5.0/plugins/project-init-workflow → project_init-0.5.2/templates/amp/dot_agents}/skills/session_summary/SKILL.md +5 -3
  36. project_init-0.5.0/templates/codex/dot_agents/skills/start_task/SKILL.md → project_init-0.5.2/templates/amp/dot_agents/skills/start_task/SKILL.md.tmpl +2 -1
  37. {project_init-0.5.0/plugins/project-init-workflow → project_init-0.5.2/templates/amp/dot_agents}/skills/status/SKILL.md +1 -1
  38. project_init-0.5.0/templates/codex/dot_agents/skills/audit/SKILL.md → project_init-0.5.2/templates/antigravity/dot_agents/skills/audit/SKILL.md.tmpl +2 -1
  39. project_init-0.5.0/templates/codex/dot_agents/skills/create_issue/SKILL.md → project_init-0.5.2/templates/antigravity/dot_agents/skills/create_issue/SKILL.md.tmpl +2 -1
  40. project_init-0.5.0/templates/codex/dot_agents/skills/github_workflow/SKILL.md → project_init-0.5.2/templates/antigravity/dot_agents/skills/github_workflow/SKILL.md.tmpl +2 -1
  41. project_init-0.5.0/templates/codex/dot_agents/skills/request_review/SKILL.md → project_init-0.5.2/templates/antigravity/dot_agents/skills/request_review/SKILL.md.tmpl +2 -1
  42. {project_init-0.5.0/plugins/project-init-workflow → project_init-0.5.2/templates/antigravity/dot_agents}/skills/save_memory/SKILL.md +3 -1
  43. {project_init-0.5.0 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/session_summary/SKILL.md +5 -3
  44. project_init-0.5.0/templates/antigravity/dot_agents/skills/start_task/SKILL.md → project_init-0.5.2/templates/antigravity/dot_agents/skills/start_task/SKILL.md.tmpl +2 -1
  45. {project_init-0.5.0/templates/codex → project_init-0.5.2/templates/antigravity}/dot_agents/skills/status/SKILL.md +1 -1
  46. {project_init-0.5.0 → project_init-0.5.2}/templates/base/AGENTS.md.tmpl +2 -2
  47. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/docs/guides/developer-onboarding.md +1 -1
  48. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/hooks/prod_guard.py +14 -5
  49. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/project-init.md.tmpl +2 -2
  50. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/scripts/gen_code_map.py.tmpl +15 -2
  51. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/skills/README.md.tmpl +2 -2
  52. project_init-0.5.2/templates/codex/dot_agents/skills/audit/SKILL.md.tmpl +148 -0
  53. project_init-0.5.2/templates/codex/dot_agents/skills/create_issue/SKILL.md.tmpl +63 -0
  54. project_init-0.5.2/templates/codex/dot_agents/skills/github_workflow/SKILL.md.tmpl +90 -0
  55. project_init-0.5.2/templates/codex/dot_agents/skills/request_review/SKILL.md.tmpl +20 -0
  56. {project_init-0.5.0/templates/amp → project_init-0.5.2/templates/codex}/dot_agents/skills/save_memory/SKILL.md +3 -1
  57. project_init-0.5.2/templates/codex/dot_agents/skills/session_summary/SKILL.md +37 -0
  58. project_init-0.5.2/templates/codex/dot_agents/skills/start_task/SKILL.md.tmpl +49 -0
  59. {project_init-0.5.0/templates/amp → project_init-0.5.2/templates/codex}/dot_agents/skills/status/SKILL.md +1 -1
  60. {project_init-0.5.0 → project_init-0.5.2}/templates/codex/dot_codex/hooks.json.tmpl +1 -1
  61. {project_init-0.5.0 → project_init-0.5.2}/templates/fallback/dot_claude/hooks/post_edit_lint.sh +4 -4
  62. {project_init-0.5.0 → project_init-0.5.2}/templates/fallback/dot_claude/hooks/pre_commit_gate.sh +4 -4
  63. {project_init-0.5.0 → project_init-0.5.2}/templates/fallback/dot_claude/skills/INDEX.md.tmpl +3 -3
  64. project_init-0.5.2/templates/fallback/dot_claude/skills/save_memory/SKILL.md +19 -0
  65. project_init-0.5.2/templates/fallback/dot_claude/skills/session_summary/SKILL.md +37 -0
  66. project_init-0.5.2/templates/fallback/dot_claude/skills/status/SKILL.md +15 -0
  67. project_init-0.5.2/templates/junie/dot_junie/skills/audit/SKILL.md.tmpl +148 -0
  68. project_init-0.5.2/templates/junie/dot_junie/skills/create_issue/SKILL.md.tmpl +63 -0
  69. project_init-0.5.2/templates/junie/dot_junie/skills/github_workflow/SKILL.md.tmpl +90 -0
  70. project_init-0.5.2/templates/junie/dot_junie/skills/request_review/SKILL.md.tmpl +20 -0
  71. project_init-0.5.2/templates/junie/dot_junie/skills/save_memory/SKILL.md +19 -0
  72. project_init-0.5.2/templates/junie/dot_junie/skills/session_summary/SKILL.md +37 -0
  73. project_init-0.5.2/templates/junie/dot_junie/skills/start_task/SKILL.md.tmpl +49 -0
  74. project_init-0.5.2/templates/junie/dot_junie/skills/status/SKILL.md +15 -0
  75. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/hooks/dag_workflow.py +35 -3
  76. {project_init-0.5.0 → project_init-0.5.2}/templates/observability/dot_claude/observability/usage_report.py +12 -12
  77. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_agent_overlays.py +30 -9
  78. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_agents_canonical.py +5 -2
  79. project_init-0.5.2/tests/contracts/test_emission_hardening.py +257 -0
  80. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_hook_portability.py +20 -0
  81. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_lifecycle_byte_identity.py +11 -0
  82. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_lifecycle_none.py +46 -0
  83. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_memory_byte_identity.py +12 -0
  84. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_portability_hardening.py +5 -3
  85. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_release_engineering.py +10 -1
  86. {project_init-0.5.0/tests/fixtures/memory_baseline → project_init-0.5.2/tests/fixtures/lifecycle_baseline}/obsidian-graphify__no_plugin.json +10 -10
  87. {project_init-0.5.0/tests/fixtures/memory_baseline → project_init-0.5.2/tests/fixtures/lifecycle_baseline}/obsidian-graphify__plugin.json +5 -5
  88. {project_init-0.5.0 → project_init-0.5.2}/tests/fixtures/lifecycle_baseline/obsidian-only__no_plugin.json +10 -10
  89. {project_init-0.5.0 → project_init-0.5.2}/tests/fixtures/lifecycle_baseline/obsidian-only__plugin.json +5 -5
  90. {project_init-0.5.0/tests/fixtures/lifecycle_baseline → project_init-0.5.2/tests/fixtures/memory_baseline}/obsidian-graphify__no_plugin.json +10 -10
  91. {project_init-0.5.0/tests/fixtures/lifecycle_baseline → project_init-0.5.2/tests/fixtures/memory_baseline}/obsidian-graphify__plugin.json +5 -5
  92. {project_init-0.5.0 → project_init-0.5.2}/tests/fixtures/memory_baseline/obsidian-only__no_plugin.json +10 -10
  93. {project_init-0.5.0 → project_init-0.5.2}/tests/fixtures/memory_baseline/obsidian-only__plugin.json +5 -5
  94. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_cli.py +106 -2
  95. project_init-0.5.2/tests/integration/test_compose_interop.py +130 -0
  96. project_init-0.5.2/tests/integration/test_concern_add_remove.py +288 -0
  97. project_init-0.5.2/tests/integration/test_concern_skill_gating.py +94 -0
  98. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_dag_workflow.py +41 -0
  99. {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_surfaces.py +3 -0
  100. {project_init-0.5.0 → project_init-0.5.2}/tools/sync_plugin.py +36 -1
  101. {project_init-0.5.0 → project_init-0.5.2}/uv.lock +1 -1
  102. project_init-0.5.0/templates/codex/dot_agents/skills/session_summary/SKILL.md +0 -35
  103. project_init-0.5.0/templates/fallback/dot_claude/skills/save_memory/SKILL.md +0 -17
  104. project_init-0.5.0/templates/fallback/dot_claude/skills/session_summary/SKILL.md +0 -35
  105. project_init-0.5.0/templates/fallback/dot_claude/skills/status/SKILL.md +0 -15
  106. project_init-0.5.0/templates/junie/dot_junie/skills/audit/SKILL.md +0 -147
  107. project_init-0.5.0/templates/junie/dot_junie/skills/create_issue/SKILL.md +0 -62
  108. project_init-0.5.0/templates/junie/dot_junie/skills/github_workflow/SKILL.md +0 -89
  109. project_init-0.5.0/templates/junie/dot_junie/skills/request_review/SKILL.md +0 -19
  110. project_init-0.5.0/templates/junie/dot_junie/skills/save_memory/SKILL.md +0 -17
  111. project_init-0.5.0/templates/junie/dot_junie/skills/session_summary/SKILL.md +0 -35
  112. project_init-0.5.0/templates/junie/dot_junie/skills/start_task/SKILL.md +0 -48
  113. project_init-0.5.0/templates/junie/dot_junie/skills/status/SKILL.md +0 -15
  114. project_init-0.5.0/templates/lifecycle_fallback/dot_claude/skills/audit/SKILL.md +0 -147
  115. project_init-0.5.0/templates/lifecycle_fallback/dot_claude/skills/create_issue/SKILL.md +0 -62
  116. project_init-0.5.0/templates/lifecycle_fallback/dot_claude/skills/github_workflow/SKILL.md +0 -89
  117. project_init-0.5.0/templates/lifecycle_fallback/dot_claude/skills/request_review/SKILL.md +0 -19
  118. project_init-0.5.0/templates/lifecycle_fallback/dot_claude/skills/start_task/SKILL.md +0 -48
  119. {project_init-0.5.0 → project_init-0.5.2}/.claude/hooks/github_command_guard.sh +0 -0
  120. {project_init-0.5.0 → project_init-0.5.2}/.claude/hooks/workflow_state_reminder.sh +0 -0
  121. {project_init-0.5.0 → project_init-0.5.2}/.claude/scripts/create_nojira_pr.sh +0 -0
  122. {project_init-0.5.0 → project_init-0.5.2}/.claude/scripts/finish_pr.sh +0 -0
  123. {project_init-0.5.0 → project_init-0.5.2}/.claude/scripts/monitor_pr.sh +0 -0
  124. {project_init-0.5.0 → project_init-0.5.2}/.claude/scripts/promote_review.sh +0 -0
  125. {project_init-0.5.0 → project_init-0.5.2}/.claude/scripts/push_branch.sh +0 -0
  126. {project_init-0.5.0 → project_init-0.5.2}/.claude/scripts/push_wiki.sh +0 -0
  127. {project_init-0.5.0 → project_init-0.5.2}/.claude/settings.json +0 -0
  128. {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/INDEX.md +0 -0
  129. {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/README.md +0 -0
  130. {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/add_command/SKILL.md +0 -0
  131. {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/add_hook/SKILL.md +0 -0
  132. {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/github_workflow/SKILL.md +0 -0
  133. {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/live_test/SKILL.md +0 -0
  134. {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/session_summary/SKILL.md +0 -0
  135. {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/start_task/SKILL.md +0 -0
  136. {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/wiki/SKILL.md +0 -0
  137. {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/wiki/templates/architecture.md +0 -0
  138. {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/wiki/templates/implementation-guide.md +0 -0
  139. {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/wiki/templates/preset-guide.md +0 -0
  140. {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/wiki/templates/scaffolder-logic.md +0 -0
  141. {project_init-0.5.0 → project_init-0.5.2}/.gitattributes +0 -0
  142. {project_init-0.5.0 → project_init-0.5.2}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
  143. {project_init-0.5.0 → project_init-0.5.2}/.github/ISSUE_TEMPLATE/chore.yml +0 -0
  144. {project_init-0.5.0 → project_init-0.5.2}/.github/ISSUE_TEMPLATE/docs.yml +0 -0
  145. {project_init-0.5.0 → project_init-0.5.2}/.github/ISSUE_TEMPLATE/feature.yml +0 -0
  146. {project_init-0.5.0 → project_init-0.5.2}/.github/ISSUE_TEMPLATE/test.yml +0 -0
  147. {project_init-0.5.0 → project_init-0.5.2}/.github/copilot-instructions.md +0 -0
  148. {project_init-0.5.0 → project_init-0.5.2}/.github/workflows/board-automation.yml +0 -0
  149. {project_init-0.5.0 → project_init-0.5.2}/.github/workflows/ci.yml +0 -0
  150. {project_init-0.5.0 → project_init-0.5.2}/.github/workflows/docs.yml +0 -0
  151. {project_init-0.5.0 → project_init-0.5.2}/.github/workflows/release.yml +0 -0
  152. {project_init-0.5.0 → project_init-0.5.2}/.github/workflows/review-status.yml +0 -0
  153. {project_init-0.5.0 → project_init-0.5.2}/.github/workflows/third-party-updates.yml +0 -0
  154. {project_init-0.5.0 → project_init-0.5.2}/.github/workflows/validate-pr.yml +0 -0
  155. {project_init-0.5.0 → project_init-0.5.2}/.gitignore +0 -0
  156. {project_init-0.5.0 → project_init-0.5.2}/.gitleaks.toml +0 -0
  157. {project_init-0.5.0 → project_init-0.5.2}/AGENTS.md +0 -0
  158. {project_init-0.5.0 → project_init-0.5.2}/CLAUDE.md +0 -0
  159. {project_init-0.5.0 → project_init-0.5.2}/LICENSE +0 -0
  160. {project_init-0.5.0 → project_init-0.5.2}/cliff.toml +0 -0
  161. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-001-scaffolder-design.md +0 -0
  162. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-002-dotglob-template-convention.md +0 -0
  163. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-003-github-native-workflow.md +0 -0
  164. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-004-obsidian-docs-integration.md +0 -0
  165. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-005-github-pr-board-workflow.md +0 -0
  166. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-006-conventional-commit-titles.md +0 -0
  167. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-007-security-enforcement-layers.md +0 -0
  168. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-008-distribution-channel.md +0 -0
  169. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-009-graphify-memory-preset.md +0 -0
  170. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-010-plugin-marketplace-dual-ship.md +0 -0
  171. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-011-pypi-trusted-publishing.md +0 -0
  172. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-012-prod-safety-guard.md +0 -0
  173. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-013-distribution-governance-model.md +0 -0
  174. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-014-environment-promotion-chains.md +0 -0
  175. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-015-env-deploy-model.md +0 -0
  176. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-016-model-agnostic-switching.md +0 -0
  177. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-017-per-surface-config-generator.md +0 -0
  178. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-018-ai-governance-overlay.md +0 -0
  179. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-019-local-observability-overlay.md +0 -0
  180. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-020-memory-backend-decomposition.md +0 -0
  181. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-021-quality-vs-lifecycle-tier-boundary.md +0 -0
  182. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-022-toolchain-gate-map.md +0 -0
  183. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-023-wizard-explanation-standard.md +0 -0
  184. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-024-memory-tier-model.md +0 -0
  185. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-025-agentic-os-root-layer.md +0 -0
  186. {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-026-tier3-rag-engine-cocoindex.md +0 -0
  187. {project_init-0.5.0 → project_init-0.5.2}/docs/development/agentic-os-root-layer.md +0 -0
  188. {project_init-0.5.0 → project_init-0.5.2}/docs/development/build-reproducibility.md +0 -0
  189. {project_init-0.5.0 → project_init-0.5.2}/docs/development/contributing.md +0 -0
  190. {project_init-0.5.0 → project_init-0.5.2}/docs/development/enforcement-classification.md +0 -0
  191. {project_init-0.5.0 → project_init-0.5.2}/docs/development/enterprise-github-support-matrix.md +0 -0
  192. {project_init-0.5.0 → project_init-0.5.2}/docs/development/measurement-methodology.md +0 -0
  193. {project_init-0.5.0 → project_init-0.5.2}/docs/development/memory-descriptor.md +0 -0
  194. {project_init-0.5.0 → project_init-0.5.2}/docs/development/mobile-remote-access.md +0 -0
  195. {project_init-0.5.0 → project_init-0.5.2}/docs/development/non-cli-surface-matrix.md +0 -0
  196. {project_init-0.5.0 → project_init-0.5.2}/docs/development/template-system.md +0 -0
  197. {project_init-0.5.0 → project_init-0.5.2}/docs/development/testing.md +0 -0
  198. {project_init-0.5.0 → project_init-0.5.2}/docs/research/model-agnostic-switching.md +0 -0
  199. {project_init-0.5.0 → project_init-0.5.2}/install.sh +0 -0
  200. {project_init-0.5.0 → project_init-0.5.2}/justfile +0 -0
  201. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/.claude-plugin/plugin.json +0 -0
  202. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/hooks/_py.sh +0 -0
  203. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/hooks/_usage_log.sh +0 -0
  204. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/hooks/github_command_guard.sh +0 -0
  205. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/hooks/hooks.json +0 -0
  206. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/hooks/workflow_state_reminder.sh +0 -0
  207. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/skills/audit/SKILL.md +0 -0
  208. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/skills/create_issue/SKILL.md +0 -0
  209. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/skills/github_workflow/SKILL.md +0 -0
  210. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/skills/request_review/SKILL.md +0 -0
  211. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/skills/start_task/SKILL.md +0 -0
  212. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/hooks/_py.sh +0 -0
  213. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/hooks/_usage_log.sh +0 -0
  214. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/hooks/hooks.json +0 -0
  215. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/hooks/session_setup.sh +0 -0
  216. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/skills/add_adr/SKILL.md +0 -0
  217. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/skills/add_command/SKILL.md +0 -0
  218. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/skills/add_hook/SKILL.md +0 -0
  219. {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/skills/review/SKILL.md +0 -0
  220. {project_init-0.5.0 → project_init-0.5.2}/renovate.json +0 -0
  221. {project_init-0.5.0 → project_init-0.5.2}/src/project_init/mcps.py +0 -0
  222. {project_init-0.5.0 → project_init-0.5.2}/src/project_init/migration_notes.py +0 -0
  223. {project_init-0.5.0 → project_init-0.5.2}/templates/amp/dot_agents/skills/add_adr/SKILL.md +0 -0
  224. {project_init-0.5.0 → project_init-0.5.2}/templates/amp/dot_agents/skills/add_command/SKILL.md +0 -0
  225. {project_init-0.5.0 → project_init-0.5.2}/templates/amp/dot_agents/skills/add_hook/SKILL.md +0 -0
  226. {project_init-0.5.0 → project_init-0.5.2}/templates/amp/dot_agents/skills/plan/SKILL.md +0 -0
  227. {project_init-0.5.0 → project_init-0.5.2}/templates/amp/dot_agents/skills/review/SKILL.md +0 -0
  228. {project_init-0.5.0 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/add_adr/SKILL.md +0 -0
  229. {project_init-0.5.0 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/add_command/SKILL.md +0 -0
  230. {project_init-0.5.0 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/add_hook/SKILL.md +0 -0
  231. {project_init-0.5.0 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/plan/SKILL.md +0 -0
  232. {project_init-0.5.0 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/review/SKILL.md +0 -0
  233. {project_init-0.5.0 → project_init-0.5.2}/templates/auto/dot_claude/memory/MEMORY.md.tmpl +0 -0
  234. {project_init-0.5.0 → project_init-0.5.2}/templates/auto/dot_claude/memory/README.md +0 -0
  235. {project_init-0.5.0 → project_init-0.5.2}/templates/auto/dot_claude/memory/SCHEMA.md +0 -0
  236. {project_init-0.5.0 → project_init-0.5.2}/templates/auto/dot_claude/memory/feedback_conventions.md +0 -0
  237. {project_init-0.5.0 → project_init-0.5.2}/templates/auto/dot_claude/memory/project_context.md.tmpl +0 -0
  238. {project_init-0.5.0 → project_init-0.5.2}/templates/auto/dot_claude/memory/user_role.md +0 -0
  239. {project_init-0.5.0 → project_init-0.5.2}/templates/auto/dot_claude/scripts/lint_memory.sh +0 -0
  240. {project_init-0.5.0 → project_init-0.5.2}/templates/base/CLAUDE.md.tmpl +0 -0
  241. {project_init-0.5.0 → project_init-0.5.2}/templates/base/CONTRIBUTING.md.tmpl +0 -0
  242. {project_init-0.5.0 → project_init-0.5.2}/templates/base/Dockerfile.tmpl +0 -0
  243. {project_init-0.5.0 → project_init-0.5.2}/templates/base/LICENSE.tmpl +0 -0
  244. {project_init-0.5.0 → project_init-0.5.2}/templates/base/SECURITY.md.tmpl +0 -0
  245. {project_init-0.5.0 → project_init-0.5.2}/templates/base/compose.yaml.tmpl +0 -0
  246. {project_init-0.5.0 → project_init-0.5.2}/templates/base/deploy/environments.yaml.tmpl +0 -0
  247. {project_init-0.5.0 → project_init-0.5.2}/templates/base/docs/explanation/index.md.tmpl +0 -0
  248. {project_init-0.5.0 → project_init-0.5.2}/templates/base/docs/how-to/index.md.tmpl +0 -0
  249. {project_init-0.5.0 → project_init-0.5.2}/templates/base/docs/index.md.tmpl +0 -0
  250. {project_init-0.5.0 → project_init-0.5.2}/templates/base/docs/reference/index.md.tmpl +0 -0
  251. {project_init-0.5.0 → project_init-0.5.2}/templates/base/docs/tutorials/index.md.tmpl +0 -0
  252. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/agents/README.md +0 -0
  253. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/agents/code-reviewer.md +0 -0
  254. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/agents/explore.md +0 -0
  255. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/config.yaml.tmpl +0 -0
  256. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/docs/README.md.tmpl +0 -0
  257. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/docs/adr/adr-002-mcp-choices.md.tmpl +0 -0
  258. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/docs/adr/adr-template.md +0 -0
  259. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/docs/development/conventions.md.tmpl +0 -0
  260. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/docs/development/testing.md +0 -0
  261. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/docs/guides/cloud-integration.md.tmpl +0 -0
  262. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/docs/guides/environments.md +0 -0
  263. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/docs/guides/secrets.md +0 -0
  264. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/hooks/README.md +0 -0
  265. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/hooks/_py.sh +0 -0
  266. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/hooks/agent_guard_adapter.py.tmpl +0 -0
  267. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/rules/go.md +0 -0
  268. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/rules/hooks.md.tmpl +0 -0
  269. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/rules/node.md +0 -0
  270. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/rules/python.md +0 -0
  271. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/scripts/README.md.tmpl +0 -0
  272. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/scripts/gh_host.sh +0 -0
  273. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/scripts/install_hooks.sh +0 -0
  274. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/scripts/setup_env_protection.sh.tmpl +0 -0
  275. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/scripts/whats_deployed.sh.tmpl +0 -0
  276. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/settings.json.tmpl +0 -0
  277. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/skills/plan/SKILL.md.tmpl +0 -0
  278. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_devcontainer/devcontainer.json.tmpl +0 -0
  279. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_devcontainer/post-create.sh.tmpl +0 -0
  280. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_dockerignore.tmpl +0 -0
  281. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_env.example.tmpl +0 -0
  282. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_gitattributes +0 -0
  283. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_github/CODEOWNERS.tmpl +0 -0
  284. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_github/hooks/commit-msg +0 -0
  285. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_github/hooks/pre-commit +0 -0
  286. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_github/hooks/pre-push.tmpl +0 -0
  287. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_github/workflows/ci.yml.tmpl +0 -0
  288. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_github/workflows/deploy.yml.tmpl +0 -0
  289. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_github/workflows/infra.yml.tmpl +0 -0
  290. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_github/workflows/registry-publish.yml.tmpl +0 -0
  291. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_github/workflows/release.yml.tmpl +0 -0
  292. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_gitignore.tmpl +0 -0
  293. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_golangci.yml.tmpl +0 -0
  294. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_vscode/extensions.json.tmpl +0 -0
  295. {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_vscode/settings.json.tmpl +0 -0
  296. {project_init-0.5.0 → project_init-0.5.2}/templates/base/eslint.config.mjs.tmpl +0 -0
  297. {project_init-0.5.0 → project_init-0.5.2}/templates/base/infra/README.md.tmpl +0 -0
  298. {project_init-0.5.0 → project_init-0.5.2}/templates/base/infra/backend.tf.tmpl +0 -0
  299. {project_init-0.5.0 → project_init-0.5.2}/templates/base/infra/dot_gitignore.tmpl +0 -0
  300. {project_init-0.5.0 → project_init-0.5.2}/templates/base/infra/dot_pre-commit-config.yaml.tmpl +0 -0
  301. {project_init-0.5.0 → project_init-0.5.2}/templates/base/infra/main.tf.tmpl +0 -0
  302. {project_init-0.5.0 → project_init-0.5.2}/templates/base/infra/outputs.tf.tmpl +0 -0
  303. {project_init-0.5.0 → project_init-0.5.2}/templates/base/infra/variables.tf.tmpl +0 -0
  304. {project_init-0.5.0 → project_init-0.5.2}/templates/base/infra/versions.tf.tmpl +0 -0
  305. {project_init-0.5.0 → project_init-0.5.2}/templates/base/justfile.tmpl +0 -0
  306. {project_init-0.5.0 → project_init-0.5.2}/templates/base/mise.toml.tmpl +0 -0
  307. {project_init-0.5.0 → project_init-0.5.2}/templates/base/mkdocs.yml.tmpl +0 -0
  308. {project_init-0.5.0 → project_init-0.5.2}/templates/base/renovate.json.tmpl +0 -0
  309. {project_init-0.5.0 → project_init-0.5.2}/templates/base/ruff.toml.tmpl +0 -0
  310. {project_init-0.5.0 → project_init-0.5.2}/templates/base/typedoc.json.tmpl +0 -0
  311. {project_init-0.5.0 → project_init-0.5.2}/templates/codex/dot_agents/skills/add_adr/SKILL.md +0 -0
  312. {project_init-0.5.0 → project_init-0.5.2}/templates/codex/dot_agents/skills/add_command/SKILL.md +0 -0
  313. {project_init-0.5.0 → project_init-0.5.2}/templates/codex/dot_agents/skills/add_hook/SKILL.md +0 -0
  314. {project_init-0.5.0 → project_init-0.5.2}/templates/codex/dot_agents/skills/plan/SKILL.md +0 -0
  315. {project_init-0.5.0 → project_init-0.5.2}/templates/codex/dot_agents/skills/review/SKILL.md +0 -0
  316. {project_init-0.5.0 → project_init-0.5.2}/templates/fallback/dot_claude/hooks/_usage_log.sh +0 -0
  317. {project_init-0.5.0 → project_init-0.5.2}/templates/fallback/dot_claude/hooks/session_setup.sh +0 -0
  318. {project_init-0.5.0 → project_init-0.5.2}/templates/fallback/dot_claude/skills/add_adr/SKILL.md +0 -0
  319. {project_init-0.5.0 → project_init-0.5.2}/templates/fallback/dot_claude/skills/add_command/SKILL.md +0 -0
  320. {project_init-0.5.0 → project_init-0.5.2}/templates/fallback/dot_claude/skills/add_hook/SKILL.md +0 -0
  321. {project_init-0.5.0 → project_init-0.5.2}/templates/fallback/dot_claude/skills/review/SKILL.md +0 -0
  322. {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/governance/AI_USAGE_POLICY.md +0 -0
  323. {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/governance/NIST_RMF_CROSSWALK.md +0 -0
  324. {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/governance/README.md +0 -0
  325. {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/governance/ai-code-provenance.md +0 -0
  326. {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/governance/ai-declarations.md +0 -0
  327. {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/governance/approved-tools.md +0 -0
  328. {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/governance/config.example.json +0 -0
  329. {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/governance/data-handling.md +0 -0
  330. {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/governance/examples/SYSTEM_CARD.example.md +0 -0
  331. {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/governance/examples/SYSTEM_CARD.template.md +0 -0
  332. {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/scripts/governance_gate.py +0 -0
  333. {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/scripts/governance_gate.sh +0 -0
  334. {project_init-0.5.0 → project_init-0.5.2}/templates/graphify/dot_claude/docs/guides/using-graphify.md +0 -0
  335. {project_init-0.5.0 → project_init-0.5.2}/templates/graphify/dot_claude/rules/graphify.md +0 -0
  336. {project_init-0.5.0 → project_init-0.5.2}/templates/graphify/dot_claude/scripts/setup_graphify.sh +0 -0
  337. {project_init-0.5.0 → project_init-0.5.2}/templates/junie/dot_junie/skills/add_adr/SKILL.md +0 -0
  338. {project_init-0.5.0 → project_init-0.5.2}/templates/junie/dot_junie/skills/add_command/SKILL.md +0 -0
  339. {project_init-0.5.0 → project_init-0.5.2}/templates/junie/dot_junie/skills/add_hook/SKILL.md +0 -0
  340. {project_init-0.5.0 → project_init-0.5.2}/templates/junie/dot_junie/skills/plan/SKILL.md +0 -0
  341. {project_init-0.5.0 → project_init-0.5.2}/templates/junie/dot_junie/skills/review/SKILL.md +0 -0
  342. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/docs/guides/issue-metadata.md +0 -0
  343. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/create_issue.sh +0 -0
  344. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/create_nojira_pr.sh +0 -0
  345. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/finish_pr.sh +0 -0
  346. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/monitor_pr.sh +0 -0
  347. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/promote_review.sh +0 -0
  348. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/push_branch.sh +0 -0
  349. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/push_wiki.sh +0 -0
  350. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/setup_github.sh +0 -0
  351. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/start_issue.sh +0 -0
  352. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/bug.yml +0 -0
  353. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/chore.yml +0 -0
  354. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/config.yml +0 -0
  355. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/docs.yml +0 -0
  356. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/feature.yml +0 -0
  357. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/test.yml +0 -0
  358. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/copilot-instructions.md.tmpl +0 -0
  359. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/pull_request_template.md +0 -0
  360. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/workflows/board-automation.yml +0 -0
  361. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/workflows/issue-validation.yml +0 -0
  362. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/workflows/project-init-upgrade.yml.tmpl +0 -0
  363. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/workflows/review-status.yml +0 -0
  364. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/workflows/validate-pr.yml.tmpl +0 -0
  365. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle_fallback/dot_claude/hooks/github_command_guard.sh +0 -0
  366. {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle_fallback/dot_claude/hooks/workflow_state_reminder.sh +0 -0
  367. {project_init-0.5.0/templates/amp/dot_agents → project_init-0.5.2/templates/lifecycle_fallback/dot_claude}/skills/audit/SKILL.md +0 -0
  368. {project_init-0.5.0/templates/amp/dot_agents → project_init-0.5.2/templates/lifecycle_fallback/dot_claude}/skills/create_issue/SKILL.md +0 -0
  369. {project_init-0.5.0/templates/amp/dot_agents → project_init-0.5.2/templates/lifecycle_fallback/dot_claude}/skills/github_workflow/SKILL.md +0 -0
  370. {project_init-0.5.0/templates/amp/dot_agents → project_init-0.5.2/templates/lifecycle_fallback/dot_claude}/skills/request_review/SKILL.md +0 -0
  371. {project_init-0.5.0/templates/amp/dot_agents → project_init-0.5.2/templates/lifecycle_fallback/dot_claude}/skills/start_task/SKILL.md +0 -0
  372. {project_init-0.5.0 → project_init-0.5.2}/templates/multi_model/dot_claude/docs/guides/using-multi-model.md +0 -0
  373. {project_init-0.5.0 → project_init-0.5.2}/templates/multi_model/dot_claude/multi-model/README.md +0 -0
  374. {project_init-0.5.0 → project_init-0.5.2}/templates/multi_model/dot_claude/multi-model/config.json +0 -0
  375. {project_init-0.5.0 → project_init-0.5.2}/templates/multi_model/dot_claude/multi-model/dot_env.example +0 -0
  376. {project_init-0.5.0 → project_init-0.5.2}/templates/multi_model/dot_claude/scripts/models.sh +0 -0
  377. {project_init-0.5.0 → project_init-0.5.2}/templates/multi_model/dot_claude/scripts/setup_models.sh +0 -0
  378. {project_init-0.5.0 → project_init-0.5.2}/templates/observability/dot_claude/docs/guides/upgrading-observability.md +0 -0
  379. {project_init-0.5.0 → project_init-0.5.2}/templates/observability/dot_claude/docs/guides/using-observability.md +0 -0
  380. {project_init-0.5.0 → project_init-0.5.2}/templates/observability/dot_claude/observability/.keep +0 -0
  381. {project_init-0.5.0 → project_init-0.5.2}/templates/observability/dot_claude/observability/README.md +0 -0
  382. {project_init-0.5.0 → project_init-0.5.2}/templates/observability/dot_claude/observability/dot_gitignore +0 -0
  383. {project_init-0.5.0 → project_init-0.5.2}/templates/observability/dot_claude/scripts/observability.sh +0 -0
  384. {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/docs/adr/adr-001-memory-stack.md.tmpl +0 -0
  385. {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/docs/guides/using-memory.md +0 -0
  386. {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/README.md +0 -0
  387. {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/decisions/README.md +0 -0
  388. {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/decisions/adr-000-project-setup.md.tmpl +0 -0
  389. {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/design/README.md +0 -0
  390. {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/dot_obsidian/README.md +0 -0
  391. {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/dot_obsidian/app.json +0 -0
  392. {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/dot_obsidian/community-plugins.json +0 -0
  393. {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/dot_obsidian/core-plugins.json +0 -0
  394. {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/knowledge/README.md +0 -0
  395. {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/log.md +0 -0
  396. {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/sessions/README.md +0 -0
  397. {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/templates/decision.md +0 -0
  398. {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/templates/design-note.md +0 -0
  399. {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/templates/knowledge-note.md +0 -0
  400. {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/templates/session-note.md +0 -0
  401. {project_init-0.5.0 → project_init-0.5.2}/templates/presets/auto.toml +0 -0
  402. {project_init-0.5.0 → project_init-0.5.2}/templates/presets/core.toml +0 -0
  403. {project_init-0.5.0 → project_init-0.5.2}/templates/presets/governed.toml +0 -0
  404. {project_init-0.5.0 → project_init-0.5.2}/templates/presets/obsidian-graphify.toml +0 -0
  405. {project_init-0.5.0 → project_init-0.5.2}/templates/presets/obsidian-only.toml +0 -0
  406. {project_init-0.5.0 → project_init-0.5.2}/templates/rag/dot_claude/docs/guides/using-rag.md +0 -0
  407. {project_init-0.5.0 → project_init-0.5.2}/templates/rag/dot_claude/rules/rag.md +0 -0
  408. {project_init-0.5.0 → project_init-0.5.2}/templates/rag/dot_claude/scripts/setup_rag.sh +0 -0
  409. {project_init-0.5.0 → project_init-0.5.2}/tests/__init__.py +0 -0
  410. {project_init-0.5.0 → project_init-0.5.2}/tests/conftest.py +0 -0
  411. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_benchmark_cost_latency.py +0 -0
  412. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_benchmark_harness.py +0 -0
  413. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_benchmark_report.py +0 -0
  414. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_benchmark_scoring.py +0 -0
  415. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_capabilities.py +0 -0
  416. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_cross_stack_examples.py +0 -0
  417. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_deploy_overlay.py +0 -0
  418. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_docs_renovate.py +0 -0
  419. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_enforcement.py +0 -0
  420. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_enterprise_host.py +0 -0
  421. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_env_tooling.py +0 -0
  422. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_governance.py +0 -0
  423. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_governance_overlay.py +0 -0
  424. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_governance_product.py +0 -0
  425. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_iac_overlay.py +0 -0
  426. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_integration_seam.py +0 -0
  427. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_integrity.py +0 -0
  428. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_interpreter_portability.py +0 -0
  429. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_justfile.py +0 -0
  430. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_library_release.py +0 -0
  431. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_marketplace_source.py +0 -0
  432. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_memory_none.py +0 -0
  433. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_multi_model_overlay.py +0 -0
  434. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_no_bytecode_leak.py +0 -0
  435. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_no_egress.py +0 -0
  436. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_observability_overlay.py +0 -0
  437. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_observability_report.py +0 -0
  438. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_observability_self_log.py +0 -0
  439. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_parity_bundle.py +0 -0
  440. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_plugin_marketplace.py +0 -0
  441. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_prod_guard.py +0 -0
  442. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_quality_toolchain.py +0 -0
  443. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_renovate.py +0 -0
  444. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_repo_validate_pr.py +0 -0
  445. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_scaffold_graphify.py +0 -0
  446. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_scaffold_obsidian.py +0 -0
  447. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_session_bootstrap.py +0 -0
  448. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_skill_index.py +0 -0
  449. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_subagent_specs.py +0 -0
  450. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_surface_emission.py +0 -0
  451. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_templates.py +0 -0
  452. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_third_party_pin_contract.py +0 -0
  453. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_upgrade_pr_workflow.py +0 -0
  454. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_variable_contract.py +0 -0
  455. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_wiki_skill.py +0 -0
  456. {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_wizard_explanations.py +0 -0
  457. {project_init-0.5.0 → project_init-0.5.2}/tests/helpers.py +0 -0
  458. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_code_map.py +0 -0
  459. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_combination_matrix.py +0 -0
  460. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_consent.py +0 -0
  461. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_hooks_and_safety.py +0 -0
  462. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_install_script.py +0 -0
  463. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_issue_metadata_workflow.py +0 -0
  464. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_json_output.py +0 -0
  465. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_lifecycle.py +0 -0
  466. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_memory_backends.py +0 -0
  467. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_memory_descriptor.py +0 -0
  468. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_memory_starters.py +0 -0
  469. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_observability.py +0 -0
  470. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_org_lifecycle.py +0 -0
  471. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_overwrite_protection.py +0 -0
  472. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_quality_gate_lint.py +0 -0
  473. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_rag_seam.py +0 -0
  474. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_readme_examples.py +0 -0
  475. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_session_cold_start.py +0 -0
  476. {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_upgrade.py +0 -0
  477. {project_init-0.5.0 → project_init-0.5.2}/tests/smoke/test_packaging.py +0 -0
  478. {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_command_variables.py +0 -0
  479. {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_interactive_prompts.py +0 -0
  480. {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_mcps.py +0 -0
  481. {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_migration_notes.py +0 -0
  482. {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_presets.py +0 -0
  483. {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_presets_inheritance.py +0 -0
  484. {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_profile.py +0 -0
  485. {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_render_nesting.py +0 -0
  486. {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_scaffold_inputs.py +0 -0
  487. {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_shell_portability.py +0 -0
  488. {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_third_party_updates.py +0 -0
  489. {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_version_span.py +0 -0
  490. {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/README.md +0 -0
  491. {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/harness.py +0 -0
  492. {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/latency.py +0 -0
  493. {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/model_prices.json +0 -0
  494. {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/prices.py +0 -0
  495. {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/record.py +0 -0
  496. {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/report.py +0 -0
  497. {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/scoring.py +0 -0
  498. {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/tasks/feat.toml +0 -0
  499. {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/tasks/fix.toml +0 -0
  500. {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/tasks/noop.toml +0 -0
  501. {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/tasks/qa.toml +0 -0
  502. {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/transcript.py +0 -0
  503. {project_init-0.5.0 → project_init-0.5.2}/tools/check_third_party_updates.py +0 -0
  504. {project_init-0.5.0 → project_init-0.5.2}/tools/pinned_third_party.toml +0 -0
  505. {project_init-0.5.0 → project_init-0.5.2}/tools/propose_third_party_bumps.sh +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"
@@ -0,0 +1,21 @@
1
+ <!--
2
+ PR title must use Conventional Commits and becomes the squash-merge commit message:
3
+ - issue-linked work: `type(PI-N): description` e.g. `feat(PI-42): add new overlay`
4
+ - no-issue minor fix: `type: description` e.g. `fix: handle empty preset name`
5
+ -->
6
+
7
+ ## What & why
8
+
9
+ <!-- What does this change do, and why is it needed? -->
10
+
11
+ ## Related issue
12
+
13
+ Closes #
14
+ <!-- Omit this line for minor fixes without a tracking issue. -->
15
+
16
+ ## Checklist
17
+
18
+ - [ ] `just ci` passes locally (lint + full test suite)
19
+ - [ ] Changes under `templates/` have a matching test in `tests/<layer>/test_*.py`
20
+ - [ ] Docs / README updated if behavior or flags changed
21
+ - [ ] PR title follows Conventional Commits (`type(PI-N): description`, or `type: description` with no issue)
@@ -0,0 +1,12 @@
1
+ cff-version: 1.2.0
2
+ message: "If you use project-init, please cite it using these metadata."
3
+ title: project-init
4
+ type: software
5
+ authors:
6
+ - given-names: Vytautas
7
+ family-names: Čepas
8
+ email: vyt.cepas.ve@gmail.com
9
+ repository-code: https://github.com/VytCepas/project-init
10
+ url: https://vytcepas.github.io/project-init/
11
+ license: Apache-2.0
12
+ version: 0.5.2
@@ -0,0 +1,64 @@
1
+ # Contributing to project-init
2
+
3
+ Thanks for your interest! **project-init** is a scaffolder that drops a `.claude/`
4
+ agentic-development layout into other projects. Bug reports, ideas, docs fixes,
5
+ and pull requests are all welcome.
6
+
7
+ ## Ways to contribute
8
+
9
+ - **Ask a question or float an idea** → [GitHub Discussions](https://github.com/VytCepas/project-init/discussions).
10
+ - **Report a bug or request a feature** → [open an Issue](https://github.com/VytCepas/project-init/issues/new/choose) using one of the templates.
11
+ - **Send a fix or improvement** → fork, branch, and open a pull request (see below).
12
+
13
+ ## Development setup
14
+
15
+ This repo uses [`uv`](https://docs.astral.sh/uv/) and a `justfile` as the command surface.
16
+
17
+ ```bash
18
+ git clone https://github.com/VytCepas/project-init.git
19
+ cd project-init
20
+ just setup # uv sync + dev deps
21
+ just --list # see all recipes
22
+ ```
23
+
24
+ | Recipe | What it does |
25
+ |---|---|
26
+ | `just lint` | ruff check + format check (the gate hooks/CI enforce) |
27
+ | `just format` | ruff format |
28
+ | `just test` | full pytest suite (`pytest -n auto`) |
29
+ | `just docs` | build the MkDocs site |
30
+ | `just ci` | lint + test (run before pushing) |
31
+
32
+ Tooling conventions: **uv** for everything (never `pip`/`venv`), **ruff** only
33
+ (no black/isort/mypy), and keep dependencies minimal — `tomllib` + `argparse`
34
+ cover most needs. The scaffolder stays small and deterministic (no LLM calls).
35
+
36
+ ## Making changes
37
+
38
+ 1. **Fork** the repo and create a branch. Types: `feat` `fix` `chore` `docs` `test`.
39
+ - Issue-linked work: `type/PI-<n>-slug` (e.g. `feat/PI-42-new-preset`) so the
40
+ CI `validate-pr` workflow can keep branch, title, and body consistent.
41
+ - Minor work without a tracking issue: `type/slug` (e.g. `fix/wizard-typo`).
42
+ 2. **Templates are tested by scaffolding into a temp dir** — any change under
43
+ `templates/` should have a matching test in the focused
44
+ `tests/<layer>/test_*.py` module (`unit` / `integration` / `contracts` /
45
+ `smoke`) for that behavior. Create a new focused file if none fits.
46
+ 3. **Run `just ci`** locally and make sure it's green.
47
+ 4. **Commit** using [Conventional Commits](https://www.conventionalcommits.org/),
48
+ then open a pull request. Issue-linked work uses an issue-key scope
49
+ (`type(PI-N): description`); no-issue work uses `type: description`.
50
+
51
+ ## Pull requests
52
+
53
+ - Use a Conventional-Commits PR title (it becomes the squash-merge commit
54
+ message): `type(PI-N): description` for issue-linked work, or `type: description`
55
+ for a minor fix with no tracking issue.
56
+ - Fill in the pull request template — describe *what* changed and *why*, and link
57
+ any related issue with `Closes #N`.
58
+ - CI runs lint, the full test suite, a secret scan, and a wheel smoke test. All
59
+ checks must pass before merge.
60
+
61
+ ## License
62
+
63
+ By contributing you agree that your contributions are licensed under the
64
+ project's [Apache-2.0](LICENSE) license.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: project-init
3
- Version: 0.5.0
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/
@@ -32,9 +32,20 @@ Description-Content-Type: text/markdown
32
32
  # project-init
33
33
 
34
34
  [![CI](https://github.com/VytCepas/project-init/actions/workflows/ci.yml/badge.svg)](https://github.com/VytCepas/project-init/actions/workflows/ci.yml)
35
+ [![PyPI](https://img.shields.io/pypi/v/project-init)](https://pypi.org/project/project-init/)
36
+ [![Python versions](https://img.shields.io/pypi/pyversions/project-init)](https://pypi.org/project/project-init/)
37
+ [![License](https://img.shields.io/badge/license-Apache--2.0-blue)](LICENSE)
35
38
 
36
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.
37
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
+
38
49
  ## What it gives you
39
50
 
40
51
  Inside any target project:
@@ -63,6 +74,52 @@ Principles:
63
74
  - **Claude-first, portable core** — built and tested for Claude Code; other agents get instructions, not enforcement. See [Agent support tiers](#agent-support-tiers).
64
75
  - **`bun` and `uv` only** — no `npm`/`npx`/`pip`/`venv` anywhere in scaffolded projects.
65
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
+
66
123
  ## Agent support tiers
67
124
 
68
125
  This is **firstly a Claude Code scaffolder**. It aims to be agent-agnostic where
@@ -118,52 +175,6 @@ Two honest caveats hold across all of it:
118
175
  files.** The suite validates settings/skills/hooks/MCP and the generated
119
176
  surface configs; no GUI agent is driven live in CI.
120
177
 
121
- ## Install (one-time)
122
-
123
- Two install paths — pick by how you'll invoke it:
124
-
125
- **CLI-only, from PyPI** (after the first published release; ADR-011). Gives
126
- you the `project-init` command — no `/project-init` slash command:
127
-
128
- ```bash
129
- uv tool install project-init # or one-off: uvx project-init .
130
- ```
131
-
132
- **Full setup, from git** — adds the Claude Code slash command:
133
-
134
- ```bash
135
- curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh | bash
136
- ```
137
-
138
- 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`.
139
-
140
- Pin a specific version, or opt into the unreleased development head:
141
-
142
- ```bash
143
- PROJECT_INIT_REF=v0.3.0 bash -c "$(curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh)"
144
- PROJECT_INIT_REF=main bash -c "$(curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh)"
145
- ```
146
-
147
- Direct tool install without the slash command (any pinned tag):
148
-
149
- ```bash
150
- uv tool install git+https://github.com/VytCepas/project-init@v0.3.0
151
- ```
152
-
153
- 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).
154
-
155
- ### Platform requirements
156
-
157
- macOS, Linux, and WSL work out of the box. The scaffolded hooks and lifecycle
158
- scripts are bash (a single bash-3.2 portability floor, epic #359) — so on **native Windows
159
- (non-WSL)** you need **[Git for Windows](https://gitforwindows.org/)** (it ships
160
- `bash`/`sh` + coreutils), and you should run from a **Git Bash** shell. Claude
161
- Code then runs hooks through Git Bash automatically; the wired hooks also pin
162
- `"shell": "bash"` to make that explicit. Without Git for Windows, Claude Code
163
- falls back to PowerShell, which can't run a bash hook — so the enforcement
164
- hooks won't fire. PowerShell-only is not a supported target; there are no
165
- `.ps1` equivalents by design. (WSL remains the smoothest Windows path.)
166
-
167
178
  ## Use
168
179
 
169
180
  ### Option 1: Inside a Claude Code session (interactive)
@@ -334,6 +345,49 @@ fields; without recorded hashes or a base, every modified file is conservatively
334
345
  treated as a conflict (`.new` sibling). Run `upgrade --apply` once and the record
335
346
  is written for next time.
336
347
 
348
+ ### Adding or removing a concern later
349
+
350
+ Changed your mind about a tier you declined (or want to drop one)? `add` and
351
+ `remove` toggle a single concern on an **already-scaffolded** project — no need to
352
+ re-run the wizard. They reuse the upgrade engine, so the shared wiring
353
+ (`settings.json`, `config.yaml`, CI) is re-rendered with the concern flipped.
354
+
355
+ ```bash
356
+ project-init add governance --target /path/to/proj # dry-run: report only
357
+ project-init add governance --target /path/to/proj --apply # land it
358
+ project-init add memory obsidian-only --target /path --apply # memory takes a tier
359
+ project-init remove lifecycle --target /path/to/proj --apply # drop a concern
360
+ ```
361
+
362
+ Concerns: `lifecycle`, `governance`, `observability`, `multi-model`, `docs`,
363
+ `renovate`, and `memory <stack>` (`auto` · `obsidian-only` · `obsidian-graphify` ·
364
+ `obsidian-graphify-rag` · `none`).
365
+
366
+ - **Dry-run by default** — without `--apply` it only reports what would change.
367
+ - **`--apply` is git-guarded** — it refuses a dirty work tree (so the change lands
368
+ as one revertible diff); `--allow-dirty` overrides.
369
+ - **`remove` never destroys your edits** — it deletes a concern's files only when
370
+ they are byte-identical to what it scaffolded; a file you edited is kept and
371
+ reported.
372
+ - **Your notes are safe** — `remove memory` unwires the tier but **keeps**
373
+ `.claude/memory/` and `.claude/vault/` (your accumulated notes) by default. To
374
+ also handle that source data, opt in explicitly:
375
+
376
+ ```bash
377
+ project-init remove memory --target /path --apply --export ~/notes-backup # move it out first
378
+ project-init remove memory --target /path --apply --purge # delete it (destructive)
379
+ ```
380
+
381
+ `--purge` and `--export` are mutually exclusive; `--purge` prints what it will
382
+ delete and (like all `--apply` runs) requires a clean tree, so the data is
383
+ recoverable from git. The same flags also clean **governance** user files.
384
+
385
+ **Known limits.** `multi-model`'s CCR config lives in your global `~/.config`
386
+ (outside the project), so `--purge` does not touch it. A memory tier *downgrade*
387
+ done via `add memory <lower-tier>` keeps the now-unused higher-tier data in place;
388
+ to drop it, `remove memory --purge` then `add memory <tier>` again, or delete the
389
+ directory yourself.
390
+
337
391
  ## Uninstall
338
392
 
339
393
  ```bash
@@ -366,7 +420,9 @@ Run `project-init --help` and pick from `core` (vault-free), `auto` (memory file
366
420
  ## Positioning in the ecosystem
367
421
 
368
422
  Where project-init sits relative to the (fast-moving) community landscape, so
369
- adopters know what this tool owns and where it defers:
423
+ adopters know what this tool owns and where it defers. For the full
424
+ four-category comparison and the moat, see
425
+ [docs/positioning.md](docs/positioning.md):
370
426
 
371
427
  - **What this scaffolder owns**: project infrastructure files (CI workflows,
372
428
  `.gitignore`, GitHub issue/PR templates and board automation),
@@ -404,20 +460,28 @@ adopters know what this tool owns and where it defers:
404
460
 
405
461
  ```
406
462
  project-init/
407
- ├── pyproject.toml # uv-managed, rich-only runtime dep, ruff-only dev
408
- ├── install.sh # bootstrap one-liner
409
- ├── 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, …)
410
466
  ├── templates/
411
- │ ├── base/ # always copied (no memory backend of its own)
412
- │ ├── obsidian/ # vault + agent-memory overlay; derived from memory_stack (#466)
413
- │ ├── graphify/ # Graphify memory overlay (implies obsidian)
414
- └── presets/ # toml preset definitions
415
- └── 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
416
480
  ```
417
481
 
418
482
  ## Status
419
483
 
420
- Actively developed; v0.3.0 is the first PyPI release. Track work in [GitHub Issues](https://github.com/VytCepas/project-init/issues).
484
+ Actively developed and published to [PyPI](https://pypi.org/project/project-init/) (current release: v0.5.1). Contributions welcome track and propose work in [GitHub Issues](https://github.com/VytCepas/project-init/issues), and use [GitHub Discussions](https://github.com/VytCepas/project-init/discussions) for questions, ideas, and feedback. Forks and pull requests are encouraged.
421
485
 
422
486
  ## License
423
487
 
@@ -1,9 +1,20 @@
1
1
  # project-init
2
2
 
3
3
  [![CI](https://github.com/VytCepas/project-init/actions/workflows/ci.yml/badge.svg)](https://github.com/VytCepas/project-init/actions/workflows/ci.yml)
4
+ [![PyPI](https://img.shields.io/pypi/v/project-init)](https://pypi.org/project/project-init/)
5
+ [![Python versions](https://img.shields.io/pypi/pyversions/project-init)](https://pypi.org/project/project-init/)
6
+ [![License](https://img.shields.io/badge/license-Apache--2.0-blue)](LICENSE)
4
7
 
5
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.
6
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
+
7
18
  ## What it gives you
8
19
 
9
20
  Inside any target project:
@@ -32,6 +43,52 @@ Principles:
32
43
  - **Claude-first, portable core** — built and tested for Claude Code; other agents get instructions, not enforcement. See [Agent support tiers](#agent-support-tiers).
33
44
  - **`bun` and `uv` only** — no `npm`/`npx`/`pip`/`venv` anywhere in scaffolded projects.
34
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
+
35
92
  ## Agent support tiers
36
93
 
37
94
  This is **firstly a Claude Code scaffolder**. It aims to be agent-agnostic where
@@ -87,52 +144,6 @@ Two honest caveats hold across all of it:
87
144
  files.** The suite validates settings/skills/hooks/MCP and the generated
88
145
  surface configs; no GUI agent is driven live in CI.
89
146
 
90
- ## Install (one-time)
91
-
92
- Two install paths — pick by how you'll invoke it:
93
-
94
- **CLI-only, from PyPI** (after the first published release; ADR-011). Gives
95
- you the `project-init` command — no `/project-init` slash command:
96
-
97
- ```bash
98
- uv tool install project-init # or one-off: uvx project-init .
99
- ```
100
-
101
- **Full setup, from git** — adds the Claude Code slash command:
102
-
103
- ```bash
104
- curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh | bash
105
- ```
106
-
107
- 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`.
108
-
109
- Pin a specific version, or opt into the unreleased development head:
110
-
111
- ```bash
112
- PROJECT_INIT_REF=v0.3.0 bash -c "$(curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh)"
113
- PROJECT_INIT_REF=main bash -c "$(curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh)"
114
- ```
115
-
116
- Direct tool install without the slash command (any pinned tag):
117
-
118
- ```bash
119
- uv tool install git+https://github.com/VytCepas/project-init@v0.3.0
120
- ```
121
-
122
- 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).
123
-
124
- ### Platform requirements
125
-
126
- macOS, Linux, and WSL work out of the box. The scaffolded hooks and lifecycle
127
- scripts are bash (a single bash-3.2 portability floor, epic #359) — so on **native Windows
128
- (non-WSL)** you need **[Git for Windows](https://gitforwindows.org/)** (it ships
129
- `bash`/`sh` + coreutils), and you should run from a **Git Bash** shell. Claude
130
- Code then runs hooks through Git Bash automatically; the wired hooks also pin
131
- `"shell": "bash"` to make that explicit. Without Git for Windows, Claude Code
132
- falls back to PowerShell, which can't run a bash hook — so the enforcement
133
- hooks won't fire. PowerShell-only is not a supported target; there are no
134
- `.ps1` equivalents by design. (WSL remains the smoothest Windows path.)
135
-
136
147
  ## Use
137
148
 
138
149
  ### Option 1: Inside a Claude Code session (interactive)
@@ -303,6 +314,49 @@ fields; without recorded hashes or a base, every modified file is conservatively
303
314
  treated as a conflict (`.new` sibling). Run `upgrade --apply` once and the record
304
315
  is written for next time.
305
316
 
317
+ ### Adding or removing a concern later
318
+
319
+ Changed your mind about a tier you declined (or want to drop one)? `add` and
320
+ `remove` toggle a single concern on an **already-scaffolded** project — no need to
321
+ re-run the wizard. They reuse the upgrade engine, so the shared wiring
322
+ (`settings.json`, `config.yaml`, CI) is re-rendered with the concern flipped.
323
+
324
+ ```bash
325
+ project-init add governance --target /path/to/proj # dry-run: report only
326
+ project-init add governance --target /path/to/proj --apply # land it
327
+ project-init add memory obsidian-only --target /path --apply # memory takes a tier
328
+ project-init remove lifecycle --target /path/to/proj --apply # drop a concern
329
+ ```
330
+
331
+ Concerns: `lifecycle`, `governance`, `observability`, `multi-model`, `docs`,
332
+ `renovate`, and `memory <stack>` (`auto` · `obsidian-only` · `obsidian-graphify` ·
333
+ `obsidian-graphify-rag` · `none`).
334
+
335
+ - **Dry-run by default** — without `--apply` it only reports what would change.
336
+ - **`--apply` is git-guarded** — it refuses a dirty work tree (so the change lands
337
+ as one revertible diff); `--allow-dirty` overrides.
338
+ - **`remove` never destroys your edits** — it deletes a concern's files only when
339
+ they are byte-identical to what it scaffolded; a file you edited is kept and
340
+ reported.
341
+ - **Your notes are safe** — `remove memory` unwires the tier but **keeps**
342
+ `.claude/memory/` and `.claude/vault/` (your accumulated notes) by default. To
343
+ also handle that source data, opt in explicitly:
344
+
345
+ ```bash
346
+ project-init remove memory --target /path --apply --export ~/notes-backup # move it out first
347
+ project-init remove memory --target /path --apply --purge # delete it (destructive)
348
+ ```
349
+
350
+ `--purge` and `--export` are mutually exclusive; `--purge` prints what it will
351
+ delete and (like all `--apply` runs) requires a clean tree, so the data is
352
+ recoverable from git. The same flags also clean **governance** user files.
353
+
354
+ **Known limits.** `multi-model`'s CCR config lives in your global `~/.config`
355
+ (outside the project), so `--purge` does not touch it. A memory tier *downgrade*
356
+ done via `add memory <lower-tier>` keeps the now-unused higher-tier data in place;
357
+ to drop it, `remove memory --purge` then `add memory <tier>` again, or delete the
358
+ directory yourself.
359
+
306
360
  ## Uninstall
307
361
 
308
362
  ```bash
@@ -335,7 +389,9 @@ Run `project-init --help` and pick from `core` (vault-free), `auto` (memory file
335
389
  ## Positioning in the ecosystem
336
390
 
337
391
  Where project-init sits relative to the (fast-moving) community landscape, so
338
- adopters know what this tool owns and where it defers:
392
+ adopters know what this tool owns and where it defers. For the full
393
+ four-category comparison and the moat, see
394
+ [docs/positioning.md](docs/positioning.md):
339
395
 
340
396
  - **What this scaffolder owns**: project infrastructure files (CI workflows,
341
397
  `.gitignore`, GitHub issue/PR templates and board automation),
@@ -373,20 +429,28 @@ adopters know what this tool owns and where it defers:
373
429
 
374
430
  ```
375
431
  project-init/
376
- ├── pyproject.toml # uv-managed, rich-only runtime dep, ruff-only dev
377
- ├── install.sh # bootstrap one-liner
378
- ├── 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, …)
379
435
  ├── templates/
380
- │ ├── base/ # always copied (no memory backend of its own)
381
- │ ├── obsidian/ # vault + agent-memory overlay; derived from memory_stack (#466)
382
- │ ├── graphify/ # Graphify memory overlay (implies obsidian)
383
- └── presets/ # toml preset definitions
384
- └── 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
385
449
  ```
386
450
 
387
451
  ## Status
388
452
 
389
- Actively developed; v0.3.0 is the first PyPI release. Track work in [GitHub Issues](https://github.com/VytCepas/project-init/issues).
453
+ Actively developed and published to [PyPI](https://pypi.org/project/project-init/) (current release: v0.5.1). Contributions welcome track and propose work in [GitHub Issues](https://github.com/VytCepas/project-init/issues), and use [GitHub Discussions](https://github.com/VytCepas/project-init/discussions) for questions, ideas, and feedback. Forks and pull requests are encouraged.
390
454
 
391
455
  ## License
392
456
 
@@ -6,6 +6,7 @@ Architecture decisions, development guides, and references for contributors and
6
6
 
7
7
  | Path | Purpose |
8
8
  |---|---|
9
+ | [`positioning.md`](positioning.md) | Where project-init sits in the ecosystem — comparison table + moat |
9
10
  | [`adr/`](adr/) | Architecture Decision Records — why decisions were made |
10
11
  | [`development/`](development/) | Standards, testing, template system |
11
12
  | [`guides/`](guides/) | How-to guides for users and contributors |
@@ -49,8 +49,9 @@ import on EMU.
49
49
 
50
50
  The fork owns its releases:
51
51
 
52
- 1. Bump the version in `src/project_init/__init__.py` (`__version__`) and
53
- `pyproject.toml`, on a branch → PR → merge.
52
+ 1. Bump the version in `src/project_init/__init__.py` (`__version__`),
53
+ `pyproject.toml`, and `CITATION.cff` (`version:`), on a branch → PR → merge.
54
+ A contract test (`test_release_engineering.py`) enforces that all three agree.
54
55
  2. Tag the release — `release.yml` triggers on a tag push:
55
56
  `git tag vX.Y.Z && git push origin vX.Y.Z`. If your org's rulesets or the
56
57
  workflow guard restrict tag pushes, create the tag via the API instead: