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.
- {project_init-0.5.0/plugins/project-init-lifecycle → project_init-0.5.2/.claude}/hooks/dag_workflow.py +35 -3
- {project_init-0.5.0 → project_init-0.5.2}/.claude-plugin/marketplace.json +1 -0
- project_init-0.5.2/.github/PULL_REQUEST_TEMPLATE.md +21 -0
- project_init-0.5.2/CITATION.cff +12 -0
- project_init-0.5.2/CONTRIBUTING.md +64 -0
- {project_init-0.5.0 → project_init-0.5.2}/PKG-INFO +121 -57
- {project_init-0.5.0 → project_init-0.5.2}/README.md +120 -56
- {project_init-0.5.0 → project_init-0.5.2}/docs/README.md +1 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/guides/org-fork-lifecycle.md +3 -2
- {project_init-0.5.0 → project_init-0.5.2}/docs/guides/using-project-init.md +24 -0
- project_init-0.5.2/docs/positioning.md +36 -0
- {project_init-0.5.0 → project_init-0.5.2}/mkdocs.yml +1 -0
- {project_init-0.5.0/.claude → project_init-0.5.2/plugins/project-init-lifecycle}/hooks/dag_workflow.py +35 -3
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/.claude-plugin/plugin.json +1 -1
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/hooks/post_edit_lint.sh +4 -4
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/hooks/pre_commit_gate.sh +4 -4
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/hooks/prod_guard.py +14 -5
- {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
- {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
- {project_init-0.5.0/templates/antigravity/dot_agents → project_init-0.5.2/plugins/project-init-workflow}/skills/status/SKILL.md +1 -1
- {project_init-0.5.0 → project_init-0.5.2}/pyproject.toml +1 -1
- {project_init-0.5.0 → project_init-0.5.2}/src/project_init/__init__.py +1 -1
- {project_init-0.5.0 → project_init-0.5.2}/src/project_init/__main__.py +130 -11
- {project_init-0.5.0 → project_init-0.5.2}/src/project_init/capabilities.py +32 -7
- project_init-0.5.2/src/project_init/concerns.py +398 -0
- {project_init-0.5.0 → project_init-0.5.2}/src/project_init/governance.py +23 -6
- {project_init-0.5.0 → project_init-0.5.2}/src/project_init/scaffold.py +51 -5
- {project_init-0.5.0 → project_init-0.5.2}/src/project_init/surfaces.py +23 -5
- {project_init-0.5.0 → project_init-0.5.2}/src/project_init/upgrade.py +52 -3
- 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
- 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
- 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
- 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
- {project_init-0.5.0/templates/codex → project_init-0.5.2/templates/amp}/dot_agents/skills/save_memory/SKILL.md +3 -1
- {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
- 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
- {project_init-0.5.0/plugins/project-init-workflow → project_init-0.5.2/templates/amp/dot_agents}/skills/status/SKILL.md +1 -1
- 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
- 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
- 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
- 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
- {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
- {project_init-0.5.0 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/session_summary/SKILL.md +5 -3
- 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
- {project_init-0.5.0/templates/codex → project_init-0.5.2/templates/antigravity}/dot_agents/skills/status/SKILL.md +1 -1
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/AGENTS.md.tmpl +2 -2
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/docs/guides/developer-onboarding.md +1 -1
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/hooks/prod_guard.py +14 -5
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/project-init.md.tmpl +2 -2
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/scripts/gen_code_map.py.tmpl +15 -2
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/skills/README.md.tmpl +2 -2
- project_init-0.5.2/templates/codex/dot_agents/skills/audit/SKILL.md.tmpl +148 -0
- project_init-0.5.2/templates/codex/dot_agents/skills/create_issue/SKILL.md.tmpl +63 -0
- project_init-0.5.2/templates/codex/dot_agents/skills/github_workflow/SKILL.md.tmpl +90 -0
- project_init-0.5.2/templates/codex/dot_agents/skills/request_review/SKILL.md.tmpl +20 -0
- {project_init-0.5.0/templates/amp → project_init-0.5.2/templates/codex}/dot_agents/skills/save_memory/SKILL.md +3 -1
- project_init-0.5.2/templates/codex/dot_agents/skills/session_summary/SKILL.md +37 -0
- project_init-0.5.2/templates/codex/dot_agents/skills/start_task/SKILL.md.tmpl +49 -0
- {project_init-0.5.0/templates/amp → project_init-0.5.2/templates/codex}/dot_agents/skills/status/SKILL.md +1 -1
- {project_init-0.5.0 → project_init-0.5.2}/templates/codex/dot_codex/hooks.json.tmpl +1 -1
- {project_init-0.5.0 → project_init-0.5.2}/templates/fallback/dot_claude/hooks/post_edit_lint.sh +4 -4
- {project_init-0.5.0 → project_init-0.5.2}/templates/fallback/dot_claude/hooks/pre_commit_gate.sh +4 -4
- {project_init-0.5.0 → project_init-0.5.2}/templates/fallback/dot_claude/skills/INDEX.md.tmpl +3 -3
- project_init-0.5.2/templates/fallback/dot_claude/skills/save_memory/SKILL.md +19 -0
- project_init-0.5.2/templates/fallback/dot_claude/skills/session_summary/SKILL.md +37 -0
- project_init-0.5.2/templates/fallback/dot_claude/skills/status/SKILL.md +15 -0
- project_init-0.5.2/templates/junie/dot_junie/skills/audit/SKILL.md.tmpl +148 -0
- project_init-0.5.2/templates/junie/dot_junie/skills/create_issue/SKILL.md.tmpl +63 -0
- project_init-0.5.2/templates/junie/dot_junie/skills/github_workflow/SKILL.md.tmpl +90 -0
- project_init-0.5.2/templates/junie/dot_junie/skills/request_review/SKILL.md.tmpl +20 -0
- project_init-0.5.2/templates/junie/dot_junie/skills/save_memory/SKILL.md +19 -0
- project_init-0.5.2/templates/junie/dot_junie/skills/session_summary/SKILL.md +37 -0
- project_init-0.5.2/templates/junie/dot_junie/skills/start_task/SKILL.md.tmpl +49 -0
- project_init-0.5.2/templates/junie/dot_junie/skills/status/SKILL.md +15 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/hooks/dag_workflow.py +35 -3
- {project_init-0.5.0 → project_init-0.5.2}/templates/observability/dot_claude/observability/usage_report.py +12 -12
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_agent_overlays.py +30 -9
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_agents_canonical.py +5 -2
- project_init-0.5.2/tests/contracts/test_emission_hardening.py +257 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_hook_portability.py +20 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_lifecycle_byte_identity.py +11 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_lifecycle_none.py +46 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_memory_byte_identity.py +12 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_portability_hardening.py +5 -3
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_release_engineering.py +10 -1
- {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
- {project_init-0.5.0/tests/fixtures/memory_baseline → project_init-0.5.2/tests/fixtures/lifecycle_baseline}/obsidian-graphify__plugin.json +5 -5
- {project_init-0.5.0 → project_init-0.5.2}/tests/fixtures/lifecycle_baseline/obsidian-only__no_plugin.json +10 -10
- {project_init-0.5.0 → project_init-0.5.2}/tests/fixtures/lifecycle_baseline/obsidian-only__plugin.json +5 -5
- {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
- {project_init-0.5.0/tests/fixtures/lifecycle_baseline → project_init-0.5.2/tests/fixtures/memory_baseline}/obsidian-graphify__plugin.json +5 -5
- {project_init-0.5.0 → project_init-0.5.2}/tests/fixtures/memory_baseline/obsidian-only__no_plugin.json +10 -10
- {project_init-0.5.0 → project_init-0.5.2}/tests/fixtures/memory_baseline/obsidian-only__plugin.json +5 -5
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_cli.py +106 -2
- project_init-0.5.2/tests/integration/test_compose_interop.py +130 -0
- project_init-0.5.2/tests/integration/test_concern_add_remove.py +288 -0
- project_init-0.5.2/tests/integration/test_concern_skill_gating.py +94 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_dag_workflow.py +41 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_surfaces.py +3 -0
- {project_init-0.5.0 → project_init-0.5.2}/tools/sync_plugin.py +36 -1
- {project_init-0.5.0 → project_init-0.5.2}/uv.lock +1 -1
- project_init-0.5.0/templates/codex/dot_agents/skills/session_summary/SKILL.md +0 -35
- project_init-0.5.0/templates/fallback/dot_claude/skills/save_memory/SKILL.md +0 -17
- project_init-0.5.0/templates/fallback/dot_claude/skills/session_summary/SKILL.md +0 -35
- project_init-0.5.0/templates/fallback/dot_claude/skills/status/SKILL.md +0 -15
- project_init-0.5.0/templates/junie/dot_junie/skills/audit/SKILL.md +0 -147
- project_init-0.5.0/templates/junie/dot_junie/skills/create_issue/SKILL.md +0 -62
- project_init-0.5.0/templates/junie/dot_junie/skills/github_workflow/SKILL.md +0 -89
- project_init-0.5.0/templates/junie/dot_junie/skills/request_review/SKILL.md +0 -19
- project_init-0.5.0/templates/junie/dot_junie/skills/save_memory/SKILL.md +0 -17
- project_init-0.5.0/templates/junie/dot_junie/skills/session_summary/SKILL.md +0 -35
- project_init-0.5.0/templates/junie/dot_junie/skills/start_task/SKILL.md +0 -48
- project_init-0.5.0/templates/junie/dot_junie/skills/status/SKILL.md +0 -15
- project_init-0.5.0/templates/lifecycle_fallback/dot_claude/skills/audit/SKILL.md +0 -147
- project_init-0.5.0/templates/lifecycle_fallback/dot_claude/skills/create_issue/SKILL.md +0 -62
- project_init-0.5.0/templates/lifecycle_fallback/dot_claude/skills/github_workflow/SKILL.md +0 -89
- project_init-0.5.0/templates/lifecycle_fallback/dot_claude/skills/request_review/SKILL.md +0 -19
- project_init-0.5.0/templates/lifecycle_fallback/dot_claude/skills/start_task/SKILL.md +0 -48
- {project_init-0.5.0 → project_init-0.5.2}/.claude/hooks/github_command_guard.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/hooks/workflow_state_reminder.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/scripts/create_nojira_pr.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/scripts/finish_pr.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/scripts/monitor_pr.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/scripts/promote_review.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/scripts/push_branch.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/scripts/push_wiki.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/settings.json +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/INDEX.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/README.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/add_command/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/add_hook/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/github_workflow/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/live_test/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/session_summary/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/start_task/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/wiki/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/wiki/templates/architecture.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/wiki/templates/implementation-guide.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/wiki/templates/preset-guide.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.claude/skills/wiki/templates/scaffolder-logic.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.gitattributes +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.github/ISSUE_TEMPLATE/chore.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.github/ISSUE_TEMPLATE/docs.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.github/ISSUE_TEMPLATE/feature.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.github/ISSUE_TEMPLATE/test.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.github/copilot-instructions.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.github/workflows/board-automation.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.github/workflows/ci.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.github/workflows/docs.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.github/workflows/release.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.github/workflows/review-status.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.github/workflows/third-party-updates.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.github/workflows/validate-pr.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.gitignore +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/.gitleaks.toml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/AGENTS.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/CLAUDE.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/LICENSE +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/cliff.toml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-001-scaffolder-design.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-002-dotglob-template-convention.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-003-github-native-workflow.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-004-obsidian-docs-integration.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-005-github-pr-board-workflow.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-006-conventional-commit-titles.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-007-security-enforcement-layers.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-008-distribution-channel.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-009-graphify-memory-preset.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-010-plugin-marketplace-dual-ship.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-011-pypi-trusted-publishing.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-012-prod-safety-guard.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-013-distribution-governance-model.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-014-environment-promotion-chains.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-015-env-deploy-model.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-016-model-agnostic-switching.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-017-per-surface-config-generator.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-018-ai-governance-overlay.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-019-local-observability-overlay.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-020-memory-backend-decomposition.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-021-quality-vs-lifecycle-tier-boundary.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-022-toolchain-gate-map.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-023-wizard-explanation-standard.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-024-memory-tier-model.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-025-agentic-os-root-layer.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/adr/adr-026-tier3-rag-engine-cocoindex.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/development/agentic-os-root-layer.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/development/build-reproducibility.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/development/contributing.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/development/enforcement-classification.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/development/enterprise-github-support-matrix.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/development/measurement-methodology.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/development/memory-descriptor.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/development/mobile-remote-access.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/development/non-cli-surface-matrix.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/development/template-system.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/development/testing.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/docs/research/model-agnostic-switching.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/install.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/justfile +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/.claude-plugin/plugin.json +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/hooks/_py.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/hooks/_usage_log.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/hooks/github_command_guard.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/hooks/hooks.json +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/hooks/workflow_state_reminder.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/skills/audit/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/skills/create_issue/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/skills/github_workflow/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/skills/request_review/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-lifecycle/skills/start_task/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/hooks/_py.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/hooks/_usage_log.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/hooks/hooks.json +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/hooks/session_setup.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/skills/add_adr/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/skills/add_command/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/skills/add_hook/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/plugins/project-init-workflow/skills/review/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/renovate.json +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/src/project_init/mcps.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/src/project_init/migration_notes.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/amp/dot_agents/skills/add_adr/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/amp/dot_agents/skills/add_command/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/amp/dot_agents/skills/add_hook/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/amp/dot_agents/skills/plan/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/amp/dot_agents/skills/review/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/add_adr/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/add_command/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/add_hook/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/plan/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/antigravity/dot_agents/skills/review/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/auto/dot_claude/memory/MEMORY.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/auto/dot_claude/memory/README.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/auto/dot_claude/memory/SCHEMA.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/auto/dot_claude/memory/feedback_conventions.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/auto/dot_claude/memory/project_context.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/auto/dot_claude/memory/user_role.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/auto/dot_claude/scripts/lint_memory.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/CLAUDE.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/CONTRIBUTING.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/Dockerfile.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/LICENSE.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/SECURITY.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/compose.yaml.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/deploy/environments.yaml.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/docs/explanation/index.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/docs/how-to/index.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/docs/index.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/docs/reference/index.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/docs/tutorials/index.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/agents/README.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/agents/code-reviewer.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/agents/explore.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/config.yaml.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/docs/README.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/docs/adr/adr-002-mcp-choices.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/docs/adr/adr-template.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/docs/development/conventions.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/docs/development/testing.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/docs/guides/cloud-integration.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/docs/guides/environments.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/docs/guides/secrets.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/hooks/README.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/hooks/_py.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/hooks/agent_guard_adapter.py.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/rules/go.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/rules/hooks.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/rules/node.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/rules/python.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/scripts/README.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/scripts/gh_host.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/scripts/install_hooks.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/scripts/setup_env_protection.sh.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/scripts/whats_deployed.sh.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/settings.json.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_claude/skills/plan/SKILL.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_devcontainer/devcontainer.json.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_devcontainer/post-create.sh.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_dockerignore.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_env.example.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_gitattributes +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_github/CODEOWNERS.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_github/hooks/commit-msg +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_github/hooks/pre-commit +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_github/hooks/pre-push.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_github/workflows/ci.yml.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_github/workflows/deploy.yml.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_github/workflows/infra.yml.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_github/workflows/registry-publish.yml.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_github/workflows/release.yml.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_gitignore.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_golangci.yml.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_vscode/extensions.json.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/dot_vscode/settings.json.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/eslint.config.mjs.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/infra/README.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/infra/backend.tf.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/infra/dot_gitignore.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/infra/dot_pre-commit-config.yaml.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/infra/main.tf.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/infra/outputs.tf.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/infra/variables.tf.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/infra/versions.tf.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/justfile.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/mise.toml.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/mkdocs.yml.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/renovate.json.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/ruff.toml.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/base/typedoc.json.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/codex/dot_agents/skills/add_adr/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/codex/dot_agents/skills/add_command/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/codex/dot_agents/skills/add_hook/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/codex/dot_agents/skills/plan/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/codex/dot_agents/skills/review/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/fallback/dot_claude/hooks/_usage_log.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/fallback/dot_claude/hooks/session_setup.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/fallback/dot_claude/skills/add_adr/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/fallback/dot_claude/skills/add_command/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/fallback/dot_claude/skills/add_hook/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/fallback/dot_claude/skills/review/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/governance/AI_USAGE_POLICY.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/governance/NIST_RMF_CROSSWALK.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/governance/README.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/governance/ai-code-provenance.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/governance/ai-declarations.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/governance/approved-tools.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/governance/config.example.json +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/governance/data-handling.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/governance/examples/SYSTEM_CARD.example.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/governance/examples/SYSTEM_CARD.template.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/scripts/governance_gate.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/governance/dot_claude/scripts/governance_gate.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/graphify/dot_claude/docs/guides/using-graphify.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/graphify/dot_claude/rules/graphify.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/graphify/dot_claude/scripts/setup_graphify.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/junie/dot_junie/skills/add_adr/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/junie/dot_junie/skills/add_command/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/junie/dot_junie/skills/add_hook/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/junie/dot_junie/skills/plan/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/junie/dot_junie/skills/review/SKILL.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/docs/guides/issue-metadata.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/create_issue.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/create_nojira_pr.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/finish_pr.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/monitor_pr.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/promote_review.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/push_branch.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/push_wiki.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/setup_github.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_claude/scripts/start_issue.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/bug.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/chore.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/config.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/docs.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/feature.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/test.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/copilot-instructions.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/pull_request_template.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/workflows/board-automation.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/workflows/issue-validation.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/workflows/project-init-upgrade.yml.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/workflows/review-status.yml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle/dot_github/workflows/validate-pr.yml.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle_fallback/dot_claude/hooks/github_command_guard.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/lifecycle_fallback/dot_claude/hooks/workflow_state_reminder.sh +0 -0
- {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
- {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
- {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
- {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
- {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
- {project_init-0.5.0 → project_init-0.5.2}/templates/multi_model/dot_claude/docs/guides/using-multi-model.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/multi_model/dot_claude/multi-model/README.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/multi_model/dot_claude/multi-model/config.json +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/multi_model/dot_claude/multi-model/dot_env.example +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/multi_model/dot_claude/scripts/models.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/multi_model/dot_claude/scripts/setup_models.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/observability/dot_claude/docs/guides/upgrading-observability.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/observability/dot_claude/docs/guides/using-observability.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/observability/dot_claude/observability/.keep +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/observability/dot_claude/observability/README.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/observability/dot_claude/observability/dot_gitignore +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/observability/dot_claude/scripts/observability.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/docs/adr/adr-001-memory-stack.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/docs/guides/using-memory.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/README.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/decisions/README.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/decisions/adr-000-project-setup.md.tmpl +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/design/README.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/dot_obsidian/README.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/dot_obsidian/app.json +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/dot_obsidian/community-plugins.json +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/dot_obsidian/core-plugins.json +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/knowledge/README.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/log.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/sessions/README.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/templates/decision.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/templates/design-note.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/templates/knowledge-note.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/obsidian/dot_claude/vault/templates/session-note.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/presets/auto.toml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/presets/core.toml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/presets/governed.toml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/presets/obsidian-graphify.toml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/presets/obsidian-only.toml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/rag/dot_claude/docs/guides/using-rag.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/rag/dot_claude/rules/rag.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/templates/rag/dot_claude/scripts/setup_rag.sh +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/__init__.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/conftest.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_benchmark_cost_latency.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_benchmark_harness.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_benchmark_report.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_benchmark_scoring.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_capabilities.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_cross_stack_examples.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_deploy_overlay.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_docs_renovate.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_enforcement.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_enterprise_host.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_env_tooling.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_governance.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_governance_overlay.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_governance_product.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_iac_overlay.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_integration_seam.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_integrity.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_interpreter_portability.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_justfile.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_library_release.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_marketplace_source.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_memory_none.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_multi_model_overlay.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_no_bytecode_leak.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_no_egress.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_observability_overlay.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_observability_report.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_observability_self_log.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_parity_bundle.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_plugin_marketplace.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_prod_guard.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_quality_toolchain.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_renovate.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_repo_validate_pr.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_scaffold_graphify.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_scaffold_obsidian.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_session_bootstrap.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_skill_index.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_subagent_specs.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_surface_emission.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_templates.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_third_party_pin_contract.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_upgrade_pr_workflow.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_variable_contract.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_wiki_skill.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/contracts/test_wizard_explanations.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/helpers.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_code_map.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_combination_matrix.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_consent.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_hooks_and_safety.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_install_script.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_issue_metadata_workflow.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_json_output.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_lifecycle.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_memory_backends.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_memory_descriptor.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_memory_starters.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_observability.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_org_lifecycle.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_overwrite_protection.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_quality_gate_lint.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_rag_seam.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_readme_examples.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_session_cold_start.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/integration/test_upgrade.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/smoke/test_packaging.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_command_variables.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_interactive_prompts.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_mcps.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_migration_notes.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_presets.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_presets_inheritance.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_profile.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_render_nesting.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_scaffold_inputs.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_shell_portability.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_third_party_updates.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tests/unit/test_version_span.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/README.md +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/harness.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/latency.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/model_prices.json +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/prices.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/record.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/report.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/scoring.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/tasks/feat.toml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/tasks/fix.toml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/tasks/noop.toml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/tasks/qa.toml +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tools/benchmark/transcript.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tools/check_third_party_updates.py +0 -0
- {project_init-0.5.0 → project_init-0.5.2}/tools/pinned_third_party.toml +0 -0
- {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
|
|
329
|
-
# (e.g. `gh issue create --body "$(cat <<'EOF'\n...git
|
|
330
|
-
|
|
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.
|
|
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
|
[](https://github.com/VytCepas/project-init/actions/workflows/ci.yml)
|
|
35
|
+
[](https://pypi.org/project/project-init/)
|
|
36
|
+
[](https://pypi.org/project/project-init/)
|
|
37
|
+
[](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
|
|
408
|
-
├── install.sh
|
|
409
|
-
├── src/project_init/
|
|
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/
|
|
412
|
-
│ ├──
|
|
413
|
-
│ ├──
|
|
414
|
-
│
|
|
415
|
-
|
|
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
|
|
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
|
[](https://github.com/VytCepas/project-init/actions/workflows/ci.yml)
|
|
4
|
+
[](https://pypi.org/project/project-init/)
|
|
5
|
+
[](https://pypi.org/project/project-init/)
|
|
6
|
+
[](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
|
|
377
|
-
├── install.sh
|
|
378
|
-
├── src/project_init/
|
|
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/
|
|
381
|
-
│ ├──
|
|
382
|
-
│ ├──
|
|
383
|
-
│
|
|
384
|
-
|
|
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
|
|
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__`)
|
|
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:
|