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