git-repokit 0.9.11__tar.gz → 0.10.1__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 (232) hide show
  1. {git_repokit-0.9.11/git_repokit.egg-info → git_repokit-0.10.1}/PKG-INFO +6 -5
  2. {git_repokit-0.9.11 → git_repokit-0.10.1}/README.md +5 -4
  3. {git_repokit-0.9.11 → git_repokit-0.10.1/git_repokit.egg-info}/PKG-INFO +6 -5
  4. {git_repokit-0.9.11 → git_repokit-0.10.1}/git_repokit.egg-info/SOURCES.txt +13 -0
  5. {git_repokit-0.9.11 → git_repokit-0.10.1}/pyproject.toml +1 -1
  6. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/__version__.py +1 -1
  7. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/branch_utils.py +4 -2
  8. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/common_kit.py +66 -5
  9. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/config.py +2 -3
  10. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/defaults.py +6 -4
  11. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/guardrails.py +1 -1
  12. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/hooks/pre-commit-template +2 -2
  13. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/layers.py +9 -1
  14. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/repo_manager.py +92 -78
  15. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/hooks/pre-commit.template +2 -2
  16. git_repokit-0.10.1/repokit/templates/layers/archetypes/paradox/ck3/.repokit-common.toml +28 -0
  17. git_repokit-0.10.1/repokit/templates/layers/archetypes/paradox/ck3/mod/descriptor.mod +6 -0
  18. git_repokit-0.10.1/repokit/templates/layers/archetypes/paradox/clausewitz/mod/localisation/english/__RK_SNAKE___l_english.yml +2 -0
  19. git_repokit-0.10.1/repokit/templates/layers/archetypes/paradox/descriptor-mod/mod/descriptor.mod +9 -0
  20. git_repokit-0.10.1/repokit/templates/layers/archetypes/paradox/descriptor-mod/mod/thumbnail.png +0 -0
  21. git_repokit-0.10.1/repokit/templates/layers/archetypes/paradox/jomini/mod/localization/english/__RK_SNAKE___l_english.yml +2 -0
  22. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/languages/js-ts/.repokit-common.toml +4 -3
  23. git_repokit-0.10.1/repokit/templates/layers/languages/paradox/.gitattributes.rkappend +12 -0
  24. git_repokit-0.10.1/repokit/templates/layers/languages/paradox/.repokit-common.toml +29 -0
  25. git_repokit-0.10.1/repokit/templates/layers/languages/paradox/VERSION +1 -0
  26. git_repokit-0.10.1/repokit/templates/layers/languages/paradox/docs/modding.md +34 -0
  27. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/manifest.toml +113 -0
  28. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/vault.py +8 -0
  29. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_directory_profiles.py +24 -14
  30. git_repokit-0.10.1/tests/test_languages_setting.py +79 -0
  31. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_layers.py +39 -1
  32. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_layers_claude_plugin.py +3 -3
  33. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_layers_cli.py +5 -1
  34. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_layers_compositions.py +29 -1
  35. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_layers_js_ts.py +3 -1
  36. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_layers_vscode.py +9 -1
  37. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_new_default.py +11 -0
  38. git_repokit-0.10.1/tests/test_paradox.py +177 -0
  39. git_repokit-0.10.1/tests/test_private_branch_create.py +338 -0
  40. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_vault_bootstrap.py +20 -0
  41. {git_repokit-0.9.11 → git_repokit-0.10.1}/LICENSE +0 -0
  42. {git_repokit-0.9.11 → git_repokit-0.10.1}/MANIFEST.in +0 -0
  43. {git_repokit-0.9.11 → git_repokit-0.10.1}/git_repokit.egg-info/dependency_links.txt +0 -0
  44. {git_repokit-0.9.11 → git_repokit-0.10.1}/git_repokit.egg-info/entry_points.txt +0 -0
  45. {git_repokit-0.9.11 → git_repokit-0.10.1}/git_repokit.egg-info/requires.txt +0 -0
  46. {git_repokit-0.9.11 → git_repokit-0.10.1}/git_repokit.egg-info/top_level.txt +0 -0
  47. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/__init__.py +0 -0
  48. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/__main__.py +0 -0
  49. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/_vendor/__init__.py +0 -0
  50. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/_vendor/ailib/__init__.py +0 -0
  51. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/_vendor/ailib/analyzer.py +0 -0
  52. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/_vendor/ailib/backend.py +0 -0
  53. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/_vendor/ailib/cache.py +0 -0
  54. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/_vendor/ailib/parsers.py +0 -0
  55. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/_vendor/ailib/transports/__init__.py +0 -0
  56. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/_vendor/ailib/transports/cli.py +0 -0
  57. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/_vendor/ailib/transports/openai_compat.py +0 -0
  58. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/_vendor/ailib/transports/prompt_file.py +0 -0
  59. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/_vendor/ailib/types.py +0 -0
  60. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/auth_integration.py +0 -0
  61. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/badges.py +0 -0
  62. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/cli.py +0 -0
  63. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/directory_analyzer.py +0 -0
  64. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/directory_profiles.py +0 -0
  65. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/git_config.py +0 -0
  66. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/github_create.py +0 -0
  67. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/github_setup.py +0 -0
  68. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/history_cleaner.py +0 -0
  69. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/history_protection.py +0 -0
  70. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/hooks/pre-commit-guardrails +0 -0
  71. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/0bsd.txt +0 -0
  72. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/LICENSES.md +0 -0
  73. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/__init__.py +0 -0
  74. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/agpl-3.0.txt +0 -0
  75. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/all-rights-reserved.txt +0 -0
  76. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/apache-2.0.txt +0 -0
  77. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/bsd-2-clause.txt +0 -0
  78. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/bsd-3-clause.txt +0 -0
  79. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/bsl-1.0.txt +0 -0
  80. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/cc-by-4.0.txt +0 -0
  81. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/cc-by-sa-4.0.txt +0 -0
  82. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/cc0-1.0.txt +0 -0
  83. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/epl-2.0.txt +0 -0
  84. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/gpl-2.0.txt +0 -0
  85. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/gpl-3.0.txt +0 -0
  86. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/isc.txt +0 -0
  87. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/lgpl-2.1.txt +0 -0
  88. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/lgpl-3.0.txt +0 -0
  89. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/mit.txt +0 -0
  90. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/mpl-2.0.txt +0 -0
  91. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/proprietary-evaluation.txt +0 -0
  92. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/licenses/unlicense.txt +0 -0
  93. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/readme_blocks.py +0 -0
  94. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/remote_integration.py +0 -0
  95. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/template_engine.py +0 -0
  96. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/ai/claude/CLAUDE-nested.md.template +0 -0
  97. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/ai/claude/CLAUDE.md.template +0 -0
  98. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/ai/claude/instructions/step1_context_rebuilder.md +0 -0
  99. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/ai/claude/instructions/step2_dev_workflow_process.md +0 -0
  100. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/ai/claude/instructions/step3_context_bridge.md +0 -0
  101. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/common/CHANGELOG.md.template +0 -0
  102. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/common/CONTRIBUTING.md.template +0 -0
  103. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/common/README.md.template +0 -0
  104. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/common/gitattributes.template +0 -0
  105. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/common/gitignore.template +0 -0
  106. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/extras/FUNDING.yml.template +0 -0
  107. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/extras/ROADMAP.md.template +0 -0
  108. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/extras/dependabot.yml.template +0 -0
  109. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/extras/one-offs-README.md.template +0 -0
  110. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/extras/platform-support.md.template +0 -0
  111. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/extras/pull_request_template.md.template +0 -0
  112. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/extras/release-template.md.template +0 -0
  113. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/extras/settings.json.template +0 -0
  114. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/extras/stale.yml.template +0 -0
  115. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/github/CODEOWNERS.template +0 -0
  116. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/github/ISSUE_TEMPLATE/bug-report.md.template +0 -0
  117. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/github/ISSUE_TEMPLATE/feature-request.md.template +0 -0
  118. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/github/issues/notes.md.template +0 -0
  119. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/github/issues/roadmap.md.template +0 -0
  120. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/any/claude-plugin/.claude-plugin/marketplace.json +0 -0
  121. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/any/claude-plugin/plugin/.claude-plugin/plugin.json +0 -0
  122. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/any/claude-plugin/plugin/README.md +0 -0
  123. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/c-cpp/cmake-app/.github/workflows/ci-c-cpp.yml +0 -0
  124. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/c-cpp/cmake-app/.repokit-common.toml.rkappend +0 -0
  125. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/c-cpp/cmake-app/.vscode/launch.json +0 -0
  126. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/c-cpp/cmake-app/.vscode/tasks.json +0 -0
  127. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/c-cpp/cmake-app/CMakeLists.txt +0 -0
  128. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/c-cpp/cmake-app/CMakePresets.json +0 -0
  129. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/c-cpp/cmake-app/cmake/GenerateStamp.cmake +0 -0
  130. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/c-cpp/cmake-app/src/main.cpp +0 -0
  131. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/c-cpp/cmake-app/tests/test_version.cpp +0 -0
  132. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/c-cpp/cmake-app/vcpkg.json +0 -0
  133. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/c-cpp/minimal/.vscode/launch.json +0 -0
  134. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/c-cpp/minimal/Makefile +0 -0
  135. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/c-cpp/minimal/build.bat +0 -0
  136. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/c-cpp/minimal/src/__RK_SNAKE__.c +0 -0
  137. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/c-cpp/msbuild/.vscode/launch.json +0 -0
  138. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/c-cpp/msbuild/.vscode/tasks.json +0 -0
  139. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/c-cpp/msbuild/__RK_PROJECT__.sln +0 -0
  140. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/c-cpp/msbuild/__RK_PROJECT__.vcxproj +0 -0
  141. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/c-cpp/msbuild/src/main.cpp +0 -0
  142. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/js-ts/claude-plugin/.repokit-common.toml +0 -0
  143. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/js-ts/claude-plugin/.vscode/launch.json +0 -0
  144. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/js-ts/claude-plugin/plugin/hooks/hooks.json +0 -0
  145. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/js-ts/claude-plugin/plugin/hooks/scripts/session-start.mjs +0 -0
  146. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/js-ts/claude-plugin/plugin/tests/manifest.test.js +0 -0
  147. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/js-ts/node/.repokit-common.toml.rkappend +0 -0
  148. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/js-ts/node/package.json +0 -0
  149. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/js-ts/node-package/.github/workflows/release.yml +0 -0
  150. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/js-ts/node-package/package.json +0 -0
  151. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/js-ts/node-package/src/index.ts +0 -0
  152. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/js-ts/node-package/tests/index.test.ts +0 -0
  153. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/js-ts/script/.vscode/launch.json +0 -0
  154. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/js-ts/script/__RK_PROJECT__.js +0 -0
  155. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/js-ts/script/tests/version.test.js +0 -0
  156. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/js-ts/ts/package.json +0 -0
  157. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/js-ts/ts/tsconfig.json +0 -0
  158. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/claude-plugin/.github/workflows/ci-python.yml +0 -0
  159. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/claude-plugin/.repokit-common.toml +0 -0
  160. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/claude-plugin/.vscode/launch.json +0 -0
  161. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/claude-plugin/VERSION +0 -0
  162. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/claude-plugin/plugin/hooks/hooks.json +0 -0
  163. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/claude-plugin/plugin/hooks/scripts/run-hook.mjs +0 -0
  164. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/claude-plugin/plugin/hooks/scripts/session_start.py +0 -0
  165. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/claude-plugin/plugin/tests/test_manifest.py +0 -0
  166. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/pypi/.github/workflows/release.yml +0 -0
  167. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/pypi/.vscode/launch.json +0 -0
  168. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/pypi/__RK_SNAKE__/__init__.py +0 -0
  169. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/pypi/__RK_SNAKE__/__main__.py +0 -0
  170. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/pypi/__RK_SNAKE__/_version.py +0 -0
  171. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/pypi/__RK_SNAKE__/cli.py +0 -0
  172. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/pypi/pyproject.toml +0 -0
  173. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/pypi/tests/conftest.py +0 -0
  174. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/pypi/tests/test_version.py +0 -0
  175. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/script/.github/workflows/ci-python.yml +0 -0
  176. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/script/.repokit-common.toml +0 -0
  177. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/script/.vscode/launch.json +0 -0
  178. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/script/VERSION +0 -0
  179. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/script/__RK_PROJECT__.py +0 -0
  180. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/script/tests/test_version.py +0 -0
  181. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/setuppy/requirements.txt +0 -0
  182. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/archetypes/python/setuppy/setup.py +0 -0
  183. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/languages/c-cpp/.gitignore.rkappend +0 -0
  184. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/languages/c-cpp/.repokit-common.toml +0 -0
  185. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/languages/c-cpp/include/__RK_SNAKE__/version.h +0 -0
  186. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/languages/c-cpp/src/app.rc +0 -0
  187. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/languages/js-ts/.editorconfig +0 -0
  188. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/languages/js-ts/.github/workflows/ci-js-ts.yml +0 -0
  189. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/languages/js-ts/.gitignore.rkappend +0 -0
  190. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/languages/js-ts/.vscode/launch.json +0 -0
  191. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/languages/js-ts/VERSION +0 -0
  192. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/languages/python/.github/workflows/ci-python.yml +0 -0
  193. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/languages/python/.gitignore.rkappend +0 -0
  194. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/layers/languages/python/.vscode/launch.json +0 -0
  195. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/vault/CLAUDE.md +0 -0
  196. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/vault/claude/_maps/MOC-project.md +0 -0
  197. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/vault/claude/_oracle/backlinks.md +0 -0
  198. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/vault/claude/_oracle/concepts.md +0 -0
  199. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/vault/claude/_oracle/manifest.md +0 -0
  200. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/vault/claude/_todo/ACTIVE-WORK.md +0 -0
  201. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/templates/vault/claude/_todo/OPEN-LOOPS.md +0 -0
  202. {git_repokit-0.9.11 → git_repokit-0.10.1}/repokit/utils.py +0 -0
  203. {git_repokit-0.9.11 → git_repokit-0.10.1}/setup.cfg +0 -0
  204. {git_repokit-0.9.11 → git_repokit-0.10.1}/setup.py +0 -0
  205. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_badges.py +0 -0
  206. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_branch_strategies.py +0 -0
  207. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_cli_examples.py +0 -0
  208. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_cli_integration.py +0 -0
  209. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_core_functionality.py +0 -0
  210. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_deployment_scenarios.py +0 -0
  211. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_docs_links.py +0 -0
  212. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_extras_cli.py +0 -0
  213. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_github_create.py +0 -0
  214. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_github_integration.py +0 -0
  215. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_github_owner.py +0 -0
  216. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_github_setup.py +0 -0
  217. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_guardrails.py +0 -0
  218. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_hermetic.py +0 -0
  219. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_hook_encoding.py +0 -0
  220. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_hook_patterns.py +0 -0
  221. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_layer_action_pins.py +0 -0
  222. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_layers_c_cpp.py +0 -0
  223. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_legacy_smoke.py +0 -0
  224. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_license_adopt.py +0 -0
  225. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_license_cli.py +0 -0
  226. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_licenses.py +0 -0
  227. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_packaging.py +0 -0
  228. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_readme_blocks.py +0 -0
  229. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_run_tests_driver.py +0 -0
  230. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_template_parity.py +0 -0
  231. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_utils.py +0 -0
  232. {git_repokit-0.9.11 → git_repokit-0.10.1}/tests/test_vendored_ailib.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: git-repokit
3
- Version: 0.9.11
3
+ Version: 0.10.1
4
4
  Summary: Create standardized Git repositories: language presets, licenses, GitHub setup, and a private notes vault
5
5
  Author: Dustin Darcy
6
6
  License-Expression: MIT
@@ -58,10 +58,10 @@ Dynamic: license-file
58
58
  A full create (the [Quick Start](#-quick-start) below) produces:
59
59
 
60
60
  - **The structure:** README, CONTRIBUTING, CHANGELOG, LICENSE, `.gitignore`, `.gitattributes`, `docs/`, `tests/`, `scripts/`, and, if you ask for them, ROADMAP, a funding file, Dependabot, a stale-issue policy and PR and release templates.
61
- - **The code for its language:** a Python package with `pyproject.toml` and a CLI, a CMake or Visual Studio C/C++ project, a TypeScript npm package, a Claude Code plugin, and more. Each comes with tests, a CI workflow and a VS Code debug configuration that work from the first commit. See [Languages and layers](docs/Languages-and-Layers.md).
61
+ - **The code for its language:** a Python package with `pyproject.toml` and a CLI, a CMake or Visual Studio C/C++ project, a TypeScript npm package, a Claude Code plugin, a Paradox game mod (Crusader Kings III and others), and more. Each comes with tests, a CI workflow and a VS Code debug configuration where it has something to run, from the first commit. The project's settings name its languages, so the hooks run the right checks. See [Languages and layers](docs/Languages-and-Layers.md).
62
62
  - **A README that names the project:** the real GitHub owner, badges for the release, the Python or Node minimum and the license, install and test commands for the preset, and a License section at the end.
63
63
  - **The tooling:** [git-repokit-common](https://github.com/DazzleTools/git-repokit-common) vendored at `scripts/repokit-common/`, with git hooks that keep version numbers in step, keep private files out of public commits, and run the tests before a push.
64
- - **A private vault:** `private/` is its own git repository, ignored by the project, for notes, design documents and postmortems. It starts with a map, an index for an oracle session and a to-do board. See [The vault](docs/The-Vault.md).
64
+ - **A private vault:** `private/` is its own git repository, ignored by the project, for notes, design documents, postmortems, conversations (`convos/`) and old revisions (`revisions/`); run logs go to `private/logs/`, kept on disk and never versioned. It starts with a map, an index for an oracle session and a to-do board. See [The vault](docs/The-Vault.md).
65
65
  - **The repository on GitHub** (with `--github`): created with your `gh` login and pushed. It gets the standard labels, Roadmap and Quick Notes as issues #1 and #2 (pinned), discussions and topics. See [GitHub setup](docs/GitHub-Setup.md).
66
66
 
67
67
  ## 📦 Installation
@@ -157,8 +157,6 @@ git push
157
157
 
158
158
  `safe-merge` leaves out the private content (`private/`, `CLAUDE.md`, `revisions/`, ...), and the hooks refuse it on a public branch if it ever gets staged. `--github` pushes only the public branches. Other layouts: `simple` (private, dev, main), `gitflow`, `github-flow`, and your own with `--branches` and `--worktrees`; see [Branch strategies](#branch-strategies) below.
159
159
 
160
- > **Known issue in 0.9.11:** this create prints `fatal: ambiguous argument 'private'` once per public branch, and `dev/` and `github/` start with only the README and `.github/`. The loop above still brings the work across. The fix is tracked in [#16](https://github.com/DazzleTools/git-repokit/issues/16).
161
-
162
160
  ### Other common creates
163
161
 
164
162
  ```bash
@@ -175,6 +173,9 @@ repokit create my-app --with c-cpp/msbuild --license gpl-3.0-or-later
175
173
  # A TypeScript npm package
176
174
  repokit create my-lib --language js-ts --license mpl-2.0
177
175
 
176
+ # A Crusader Kings III mod: the mod in mod/, the repository's own files above it
177
+ repokit create my-mod --language paradox --license mit
178
+
178
179
  # A one-file Python script, no packaging, given away to the public domain
179
180
  repokit create my-script --with python/script --license unlicense
180
181
 
@@ -17,10 +17,10 @@
17
17
  A full create (the [Quick Start](#-quick-start) below) produces:
18
18
 
19
19
  - **The structure:** README, CONTRIBUTING, CHANGELOG, LICENSE, `.gitignore`, `.gitattributes`, `docs/`, `tests/`, `scripts/`, and, if you ask for them, ROADMAP, a funding file, Dependabot, a stale-issue policy and PR and release templates.
20
- - **The code for its language:** a Python package with `pyproject.toml` and a CLI, a CMake or Visual Studio C/C++ project, a TypeScript npm package, a Claude Code plugin, and more. Each comes with tests, a CI workflow and a VS Code debug configuration that work from the first commit. See [Languages and layers](docs/Languages-and-Layers.md).
20
+ - **The code for its language:** a Python package with `pyproject.toml` and a CLI, a CMake or Visual Studio C/C++ project, a TypeScript npm package, a Claude Code plugin, a Paradox game mod (Crusader Kings III and others), and more. Each comes with tests, a CI workflow and a VS Code debug configuration where it has something to run, from the first commit. The project's settings name its languages, so the hooks run the right checks. See [Languages and layers](docs/Languages-and-Layers.md).
21
21
  - **A README that names the project:** the real GitHub owner, badges for the release, the Python or Node minimum and the license, install and test commands for the preset, and a License section at the end.
22
22
  - **The tooling:** [git-repokit-common](https://github.com/DazzleTools/git-repokit-common) vendored at `scripts/repokit-common/`, with git hooks that keep version numbers in step, keep private files out of public commits, and run the tests before a push.
23
- - **A private vault:** `private/` is its own git repository, ignored by the project, for notes, design documents and postmortems. It starts with a map, an index for an oracle session and a to-do board. See [The vault](docs/The-Vault.md).
23
+ - **A private vault:** `private/` is its own git repository, ignored by the project, for notes, design documents, postmortems, conversations (`convos/`) and old revisions (`revisions/`); run logs go to `private/logs/`, kept on disk and never versioned. It starts with a map, an index for an oracle session and a to-do board. See [The vault](docs/The-Vault.md).
24
24
  - **The repository on GitHub** (with `--github`): created with your `gh` login and pushed. It gets the standard labels, Roadmap and Quick Notes as issues #1 and #2 (pinned), discussions and topics. See [GitHub setup](docs/GitHub-Setup.md).
25
25
 
26
26
  ## 📦 Installation
@@ -116,8 +116,6 @@ git push
116
116
 
117
117
  `safe-merge` leaves out the private content (`private/`, `CLAUDE.md`, `revisions/`, ...), and the hooks refuse it on a public branch if it ever gets staged. `--github` pushes only the public branches. Other layouts: `simple` (private, dev, main), `gitflow`, `github-flow`, and your own with `--branches` and `--worktrees`; see [Branch strategies](#branch-strategies) below.
118
118
 
119
- > **Known issue in 0.9.11:** this create prints `fatal: ambiguous argument 'private'` once per public branch, and `dev/` and `github/` start with only the README and `.github/`. The loop above still brings the work across. The fix is tracked in [#16](https://github.com/DazzleTools/git-repokit/issues/16).
120
-
121
119
  ### Other common creates
122
120
 
123
121
  ```bash
@@ -134,6 +132,9 @@ repokit create my-app --with c-cpp/msbuild --license gpl-3.0-or-later
134
132
  # A TypeScript npm package
135
133
  repokit create my-lib --language js-ts --license mpl-2.0
136
134
 
135
+ # A Crusader Kings III mod: the mod in mod/, the repository's own files above it
136
+ repokit create my-mod --language paradox --license mit
137
+
137
138
  # A one-file Python script, no packaging, given away to the public domain
138
139
  repokit create my-script --with python/script --license unlicense
139
140
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: git-repokit
3
- Version: 0.9.11
3
+ Version: 0.10.1
4
4
  Summary: Create standardized Git repositories: language presets, licenses, GitHub setup, and a private notes vault
5
5
  Author: Dustin Darcy
6
6
  License-Expression: MIT
@@ -58,10 +58,10 @@ Dynamic: license-file
58
58
  A full create (the [Quick Start](#-quick-start) below) produces:
59
59
 
60
60
  - **The structure:** README, CONTRIBUTING, CHANGELOG, LICENSE, `.gitignore`, `.gitattributes`, `docs/`, `tests/`, `scripts/`, and, if you ask for them, ROADMAP, a funding file, Dependabot, a stale-issue policy and PR and release templates.
61
- - **The code for its language:** a Python package with `pyproject.toml` and a CLI, a CMake or Visual Studio C/C++ project, a TypeScript npm package, a Claude Code plugin, and more. Each comes with tests, a CI workflow and a VS Code debug configuration that work from the first commit. See [Languages and layers](docs/Languages-and-Layers.md).
61
+ - **The code for its language:** a Python package with `pyproject.toml` and a CLI, a CMake or Visual Studio C/C++ project, a TypeScript npm package, a Claude Code plugin, a Paradox game mod (Crusader Kings III and others), and more. Each comes with tests, a CI workflow and a VS Code debug configuration where it has something to run, from the first commit. The project's settings name its languages, so the hooks run the right checks. See [Languages and layers](docs/Languages-and-Layers.md).
62
62
  - **A README that names the project:** the real GitHub owner, badges for the release, the Python or Node minimum and the license, install and test commands for the preset, and a License section at the end.
63
63
  - **The tooling:** [git-repokit-common](https://github.com/DazzleTools/git-repokit-common) vendored at `scripts/repokit-common/`, with git hooks that keep version numbers in step, keep private files out of public commits, and run the tests before a push.
64
- - **A private vault:** `private/` is its own git repository, ignored by the project, for notes, design documents and postmortems. It starts with a map, an index for an oracle session and a to-do board. See [The vault](docs/The-Vault.md).
64
+ - **A private vault:** `private/` is its own git repository, ignored by the project, for notes, design documents, postmortems, conversations (`convos/`) and old revisions (`revisions/`); run logs go to `private/logs/`, kept on disk and never versioned. It starts with a map, an index for an oracle session and a to-do board. See [The vault](docs/The-Vault.md).
65
65
  - **The repository on GitHub** (with `--github`): created with your `gh` login and pushed. It gets the standard labels, Roadmap and Quick Notes as issues #1 and #2 (pinned), discussions and topics. See [GitHub setup](docs/GitHub-Setup.md).
66
66
 
67
67
  ## 📦 Installation
@@ -157,8 +157,6 @@ git push
157
157
 
158
158
  `safe-merge` leaves out the private content (`private/`, `CLAUDE.md`, `revisions/`, ...), and the hooks refuse it on a public branch if it ever gets staged. `--github` pushes only the public branches. Other layouts: `simple` (private, dev, main), `gitflow`, `github-flow`, and your own with `--branches` and `--worktrees`; see [Branch strategies](#branch-strategies) below.
159
159
 
160
- > **Known issue in 0.9.11:** this create prints `fatal: ambiguous argument 'private'` once per public branch, and `dev/` and `github/` start with only the README and `.github/`. The loop above still brings the work across. The fix is tracked in [#16](https://github.com/DazzleTools/git-repokit/issues/16).
161
-
162
160
  ### Other common creates
163
161
 
164
162
  ```bash
@@ -175,6 +173,9 @@ repokit create my-app --with c-cpp/msbuild --license gpl-3.0-or-later
175
173
  # A TypeScript npm package
176
174
  repokit create my-lib --language js-ts --license mpl-2.0
177
175
 
176
+ # A Crusader Kings III mod: the mod in mod/, the repository's own files above it
177
+ repokit create my-mod --language paradox --license mit
178
+
178
179
  # A one-file Python script, no packaging, given away to the public domain
179
180
  repokit create my-script --with python/script --license unlicense
180
181
 
@@ -133,6 +133,12 @@ repokit/templates/layers/archetypes/js-ts/script/.vscode/launch.json
133
133
  repokit/templates/layers/archetypes/js-ts/script/tests/version.test.js
134
134
  repokit/templates/layers/archetypes/js-ts/ts/package.json
135
135
  repokit/templates/layers/archetypes/js-ts/ts/tsconfig.json
136
+ repokit/templates/layers/archetypes/paradox/ck3/.repokit-common.toml
137
+ repokit/templates/layers/archetypes/paradox/ck3/mod/descriptor.mod
138
+ repokit/templates/layers/archetypes/paradox/clausewitz/mod/localisation/english/__RK_SNAKE___l_english.yml
139
+ repokit/templates/layers/archetypes/paradox/descriptor-mod/mod/descriptor.mod
140
+ repokit/templates/layers/archetypes/paradox/descriptor-mod/mod/thumbnail.png
141
+ repokit/templates/layers/archetypes/paradox/jomini/mod/localization/english/__RK_SNAKE___l_english.yml
136
142
  repokit/templates/layers/archetypes/python/claude-plugin/.repokit-common.toml
137
143
  repokit/templates/layers/archetypes/python/claude-plugin/VERSION
138
144
  repokit/templates/layers/archetypes/python/claude-plugin/.github/workflows/ci-python.yml
@@ -168,6 +174,10 @@ repokit/templates/layers/languages/js-ts/.repokit-common.toml
168
174
  repokit/templates/layers/languages/js-ts/VERSION
169
175
  repokit/templates/layers/languages/js-ts/.github/workflows/ci-js-ts.yml
170
176
  repokit/templates/layers/languages/js-ts/.vscode/launch.json
177
+ repokit/templates/layers/languages/paradox/.gitattributes.rkappend
178
+ repokit/templates/layers/languages/paradox/.repokit-common.toml
179
+ repokit/templates/layers/languages/paradox/VERSION
180
+ repokit/templates/layers/languages/paradox/docs/modding.md
171
181
  repokit/templates/layers/languages/python/.gitignore.rkappend
172
182
  repokit/templates/layers/languages/python/.github/workflows/ci-python.yml
173
183
  repokit/templates/layers/languages/python/.vscode/launch.json
@@ -195,6 +205,7 @@ tests/test_guardrails.py
195
205
  tests/test_hermetic.py
196
206
  tests/test_hook_encoding.py
197
207
  tests/test_hook_patterns.py
208
+ tests/test_languages_setting.py
198
209
  tests/test_layer_action_pins.py
199
210
  tests/test_layers.py
200
211
  tests/test_layers_c_cpp.py
@@ -209,6 +220,8 @@ tests/test_license_cli.py
209
220
  tests/test_licenses.py
210
221
  tests/test_new_default.py
211
222
  tests/test_packaging.py
223
+ tests/test_paradox.py
224
+ tests/test_private_branch_create.py
212
225
  tests/test_readme_blocks.py
213
226
  tests/test_run_tests_driver.py
214
227
  tests/test_template_parity.py
@@ -8,7 +8,7 @@ build-backend = "setuptools.build_meta"
8
8
  # PyPI's trusted publisher is registered for this name (DazzleTools/git-repokit,
9
9
  # publish.yml, environment pypi); the command stays `repokit`
10
10
  name = "git-repokit"
11
- version = "0.9.11"
11
+ version = "0.10.1"
12
12
  description = "Create standardized Git repositories: language presets, licenses, GitHub setup, and a private notes vault"
13
13
  readme = "README.md"
14
14
  license = "MIT"
@@ -1,4 +1,4 @@
1
1
  """Version information for RepoKit."""
2
2
 
3
- __version__ = "0.9.11"
3
+ __version__ = "0.9.12"
4
4
  __version_info__ = tuple(int(part) for part in __version__.split("."))
@@ -154,10 +154,12 @@ class BranchContext:
154
154
  return self.branch_type == 'public'
155
155
 
156
156
  def get_staged_files(self) -> List[str]:
157
- """Get list of files staged for commit."""
157
+ """Files the commit adds or changes (0.9.12: deletions are left out --
158
+ removing a private file from a public branch is what the guard wants,
159
+ not something to refuse)."""
158
160
  try:
159
161
  result = subprocess.run(
160
- ['git', 'diff', '--cached', '--name-only'],
162
+ ['git', 'diff', '--cached', '--name-only', '--diff-filter=ACMR'],
161
163
  cwd=self.repo_path,
162
164
  capture_output=True,
163
165
  text=True,
@@ -124,6 +124,30 @@ def private_branch_settings(private_branch: Optional[str], private_paths: List[s
124
124
  return settings
125
125
 
126
126
 
127
+ def languages_setting(languages: List[str], layer_folders: List[str]) -> List[str]:
128
+ """The `languages` value a create writes for git-repokit-common's hooks.
129
+
130
+ repokit's language names mapped to repokit-common's, in the composed
131
+ order (the first is primary): js-ts is "typescript" when the ts layer is
132
+ part of the composition, else "javascript"; python, c-cpp and paradox
133
+ are the same names; generic and the `any` pseudo-language add nothing.
134
+ Writing it, rather than leaving the hooks to detect it from the root,
135
+ keeps a project whose markers sit in a subfolder (a plugin in plugin/)
136
+ from reading as Python (design 2026-10-30__08-28-15, Addendum 2).
137
+ """
138
+ out: List[str] = []
139
+ for lang in languages:
140
+ if lang == "js-ts":
141
+ name = "typescript" if any(f.endswith("js-ts/ts") for f in layer_folders) else "javascript"
142
+ elif lang in ("python", "c-cpp", "paradox"):
143
+ name = lang
144
+ else:
145
+ continue
146
+ if name not in out:
147
+ out.append(name)
148
+ return out
149
+
150
+
127
151
  def _toml_list(values: List[str]) -> str:
128
152
  return "[" + ", ".join('"' + v.replace("\\", "\\\\").replace('"', '\\"') + '"' for v in values) + "]"
129
153
 
@@ -131,23 +155,59 @@ def _toml_list(values: List[str]) -> str:
131
155
  _TABLE_HEADER = re.compile(r"^[ \t]*\[[ \t]*tool[ \t]*\.[ \t]*\"?repokit-common\"?[ \t]*\][ \t]*\r?\n", re.MULTILINE)
132
156
 
133
157
 
158
+ # Keys whose list only ever protects more as it grows: when the table already
159
+ # has one, the entries it lacks are added to it rather than the key being
160
+ # skipped (0.9.12). A layer's pyproject.toml ships its own private-patterns, and
161
+ # skipping the key dropped CLAUDE.md and the private dirs from the guard.
162
+ _UNION_KEYS = ("private-patterns",)
163
+ _TOML_STRING = re.compile(r'"((?:[^"\\]|\\.)*)"|\'([^\']*)\'')
164
+
165
+
166
+ def _union_into_list(table: str, key: str, values: List[str]) -> Optional[str]:
167
+ """`table` with the `values` its `key = [...]` list lacks appended inside
168
+ the brackets (a list written over several lines is kept as written).
169
+ None when the key is not a list or nothing is missing."""
170
+ found = re.search(rf"^([ \t]*{re.escape(key)}[ \t]*=[ \t]*\[)(.*?)(\])", table, re.MULTILINE | re.DOTALL)
171
+ if not found:
172
+ return None
173
+ inner = found.group(2)
174
+ present = {(m.group(1) if m.group(1) is not None else m.group(2)).replace('\\"', '"').replace("\\\\", "\\")
175
+ for m in _TOML_STRING.finditer(inner)}
176
+ missing = [v for v in values if v not in present]
177
+ if not missing:
178
+ return None
179
+ kept = inner.rstrip()
180
+ tail = inner[len(kept):]
181
+ sep = "" if not kept.strip() else (" " if kept.endswith(",") else ", ")
182
+ added = _toml_list(missing)[1:-1]
183
+ return table[: found.start(2)] + kept + sep + added + tail + table[found.end(2):]
184
+
185
+
134
186
  def _merge_into_table(text: str, settings: Dict[str, List[str]]) -> Optional[str]:
135
187
  """Add the keys the existing [tool.repokit-common] table lacks, right after
136
- its header; a key already present is never overwritten. Returns the new
137
- text, or None when nothing was missing."""
188
+ its header. A key already present is never overwritten, except that a
189
+ `_UNION_KEYS` list gains the entries it lacks. Returns the new text, or
190
+ None when nothing was missing."""
138
191
  header = _TABLE_HEADER.search(text)
139
192
  if not header:
140
193
  return None
141
194
  rest = text[header.end():]
142
195
  next_table = re.search(r"^[ \t]*\[", rest, re.MULTILINE) # the table ends at the next header
143
196
  table = rest[: next_table.start()] if next_table else rest
197
+ after = rest[len(table):]
144
198
  missing = [key for key in settings
145
199
  if not re.search(rf"^[ \t]*{re.escape(key)}[ \t]*=", table, re.MULTILINE)]
146
- if not missing:
200
+ grown = table
201
+ for key in _UNION_KEYS:
202
+ if key in settings and key not in missing:
203
+ unioned = _union_into_list(grown, key, settings[key])
204
+ if unioned is not None:
205
+ grown = unioned
206
+ if not missing and grown == table:
147
207
  return None
148
208
  nl = "\r\n" if "\r\n" in text else "\n"
149
209
  lines = "".join(f"{key} = {_toml_list(settings[key])}{nl}" for key in missing)
150
- return text[: header.end()] + lines + rest
210
+ return text[: header.end()] + lines + grown + after
151
211
 
152
212
 
153
213
  def write_settings(repo_root: str, settings: Dict[str, List[str]]) -> Optional[str]:
@@ -158,7 +218,8 @@ def write_settings(repo_root: str, settings: Dict[str, List[str]]) -> Optional[s
158
218
  (created with the header repokit-common requires, or merged the same way).
159
219
  A key already present is never overwritten: a code-type layer may ship
160
220
  the file with its own version-source, and the private-branch settings go
161
- in beside it rather than being dropped.
221
+ in beside it rather than being dropped. The one exception is
222
+ private-patterns, whose existing list gains the entries it lacks.
162
223
  """
163
224
  if not settings:
164
225
  return None
@@ -59,12 +59,11 @@ class ConfigManager:
59
59
  # replaces them with the chosen strategy's values
60
60
  "branches": list(BRANCH_STRATEGIES[DEFAULT_BRANCH_STRATEGY]["branches"]),
61
61
  "worktrees": list(BRANCH_STRATEGIES[DEFAULT_BRANCH_STRATEGY]["worktrees"]),
62
+ # convos/, revisions/ and logs/ live in private/ since 0.10.0
63
+ # (vault.PRIVATE_STRUCTURE), not at the project root
62
64
  "directories": [
63
- "convos",
64
65
  "docs",
65
- "logs",
66
66
  "private",
67
- "revisions",
68
67
  "scripts",
69
68
  "tests",
70
69
  ],
@@ -180,15 +180,17 @@ def strategy_push_branches(name: str) -> List[str]:
180
180
  DEFAULT_BRANCH_STRATEGIES = {name: strategy_branch_list(name) for name in BRANCH_STRATEGIES}
181
181
 
182
182
  # Default directory profiles - centralized from directory_profiles.py
183
+ # convos/, revisions/ and logs/ are made inside private/ (vault.PRIVATE_STRUCTURE)
184
+ # since 0.10.0, never at the project root; DEFAULT_PRIVATE_DIRS still names
185
+ # them, so a root folder an older project has stays out of public history.
183
186
  DEFAULT_DIRECTORY_PROFILES = {
184
187
  "minimal": ["src", "tests", "docs"],
185
188
  "standard": [
186
- "src", "tests", "docs", "scripts", "config",
187
- "logs", "private", "convos", "revisions"
189
+ "src", "tests", "docs", "scripts", "config", "private"
188
190
  ],
189
191
  "complete": [
190
- "src", "tests", "docs", "scripts", "config", "logs",
191
- "private", "convos", "revisions", "data", "examples",
192
+ "src", "tests", "docs", "scripts", "config",
193
+ "private", "data", "examples",
192
194
  "tools", "resources", "assets"
193
195
  ]
194
196
  }
@@ -214,7 +214,7 @@ except ImportError:
214
214
 
215
215
  if branch not in ['private', 'local']:
216
216
  # Check for obvious private files
217
- result = subprocess.run(['git', 'diff', '--cached', '--name-only'],
217
+ result = subprocess.run(['git', 'diff', '--cached', '--name-only', '--diff-filter=ACMR'],
218
218
  capture_output=True, text=True)
219
219
  files = result.stdout.strip().split('\\n')
220
220
 
@@ -2,7 +2,7 @@
2
2
  # Pre-commit hook to prevent committing private content
3
3
 
4
4
  # Check for private directories
5
- for file in $(git diff --cached --name-only); do
5
+ for file in $(git diff --cached --name-only --diff-filter=ACMR); do
6
6
  if echo "$file" | grep -q -E "^private/|^convos/|^logs/|__private__"; then
7
7
  echo "ERROR: Attempting to commit private content: $file"
8
8
  echo "Private content should not be committed to the repository."
@@ -15,7 +15,7 @@ PRIVATE_PATTERNS=(
15
15
  $private_dirs_patterns
16
16
  )
17
17
 
18
- for file in $(git diff --cached --name-only); do
18
+ for file in $(git diff --cached --name-only --diff-filter=ACMR); do
19
19
  for pattern in "${PRIVATE_PATTERNS[@]}"; do
20
20
  if echo "$file" | grep -q -E "$pattern"; then
21
21
  echo "ERROR: Attempting to commit private content: $file"
@@ -376,14 +376,22 @@ def catalogue_lines(manifest: Dict[str, Any], language: Optional[str] = None) ->
376
376
  head = f"{lang}:" + (f" (planned: {entry.get('description', '')})" if entry.get("stub") else "")
377
377
  lines.append(head)
378
378
  default = entry.get("default")
379
+ planned = []
379
380
  for key in sorted(k for k in manifest["archetypes"] if k.startswith(lang + "/")):
380
381
  preset = manifest["archetypes"][key]
381
382
  if preset.get("stub"):
382
- lines.append(f" {key:28} (planned: {preset.get('description', '')})")
383
+ if language:
384
+ lines.append(f" {key:28} (planned: {preset.get('description', '')})")
385
+ else:
386
+ planned.append(key.split("/", 1)[1])
383
387
  else:
384
388
  parts = [f.split("/", 2)[-1] for f in preset.get("layers", [])]
385
389
  mark = " <- default" if key == default else ""
386
390
  lines.append(f" {key:28} = {', '.join(parts)}{mark}")
391
+ if planned:
392
+ # The overview keeps one screen (AC-10): a language's planned presets
393
+ # share a line; `repokit list <lang>` shows each with its description.
394
+ lines.append(f" {'planned:':28} {', '.join(planned)}")
387
395
  for facet, spec in facets:
388
396
  if facet == "language":
389
397
  continue