project-init 0.5.2__tar.gz → 0.6.0__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.2/templates/lifecycle/dot_claude → project_init-0.6.0/.claude}/hooks/dag_workflow.py +72 -4
- {project_init-0.5.2 → project_init-0.6.0}/.github/workflows/ci.yml +25 -17
- {project_init-0.5.2 → project_init-0.6.0}/.github/workflows/docs.yml +4 -4
- {project_init-0.5.2 → project_init-0.6.0}/.github/workflows/release.yml +7 -7
- {project_init-0.5.2/templates/lifecycle/dot_github → project_init-0.6.0/.github}/workflows/review-status.yml +5 -1
- {project_init-0.5.2 → project_init-0.6.0}/.github/workflows/third-party-updates.yml +2 -2
- {project_init-0.5.2 → project_init-0.6.0}/CITATION.cff +1 -1
- {project_init-0.5.2 → project_init-0.6.0}/CLAUDE.md +13 -3
- {project_init-0.5.2 → project_init-0.6.0}/PKG-INFO +4 -8
- {project_init-0.5.2 → project_init-0.6.0}/README.md +3 -3
- project_init-0.6.0/docs/reviews/2026-07-project-review.md +249 -0
- {project_init-0.5.2 → project_init-0.6.0}/justfile +1 -1
- {project_init-0.5.2/plugins/project-init-workflow → project_init-0.6.0/plugins/project-init-lifecycle}/hooks/_py.sh +2 -2
- {project_init-0.5.2/.claude → project_init-0.6.0/plugins/project-init-lifecycle}/hooks/dag_workflow.py +72 -4
- {project_init-0.5.2/templates/lifecycle_fallback/dot_claude → project_init-0.6.0/plugins/project-init-lifecycle}/hooks/github_command_guard.sh +1 -1
- {project_init-0.5.2/templates/lifecycle_fallback/dot_claude → project_init-0.6.0/plugins/project-init-lifecycle}/hooks/workflow_state_reminder.sh +24 -4
- {project_init-0.5.2 → project_init-0.6.0}/plugins/project-init-workflow/.claude-plugin/plugin.json +1 -1
- {project_init-0.5.2/plugins/project-init-lifecycle → project_init-0.6.0/plugins/project-init-workflow}/hooks/_py.sh +2 -2
- {project_init-0.5.2 → project_init-0.6.0}/plugins/project-init-workflow/hooks/hooks.json +6 -0
- project_init-0.6.0/plugins/project-init-workflow/hooks/package_guard.py +370 -0
- project_init-0.6.0/plugins/project-init-workflow/hooks/post_edit_lint.sh +111 -0
- {project_init-0.5.2/templates/fallback/dot_claude → project_init-0.6.0/plugins/project-init-workflow}/hooks/pre_commit_gate.sh +35 -30
- {project_init-0.5.2/templates/base/dot_claude → project_init-0.6.0/plugins/project-init-workflow}/hooks/prod_guard.py +10 -1
- {project_init-0.5.2/templates/fallback/dot_claude → project_init-0.6.0/plugins/project-init-workflow}/hooks/session_setup.sh +14 -8
- project_init-0.6.0/plugins/project-init-workflow/skills/report_upstream_issue/SKILL.md +114 -0
- {project_init-0.5.2 → project_init-0.6.0}/pyproject.toml +9 -4
- {project_init-0.5.2 → project_init-0.6.0}/renovate.json +2 -2
- {project_init-0.5.2 → project_init-0.6.0}/src/project_init/__init__.py +2 -2
- {project_init-0.5.2 → project_init-0.6.0}/src/project_init/__main__.py +26 -10
- {project_init-0.5.2 → project_init-0.6.0}/src/project_init/capabilities.py +10 -6
- {project_init-0.5.2 → project_init-0.6.0}/src/project_init/concerns.py +5 -1
- {project_init-0.5.2 → project_init-0.6.0}/src/project_init/mcps.py +12 -0
- {project_init-0.5.2 → project_init-0.6.0}/src/project_init/migration_notes.py +23 -7
- {project_init-0.5.2 → project_init-0.6.0}/src/project_init/scaffold.py +170 -54
- {project_init-0.5.2 → project_init-0.6.0}/src/project_init/surfaces.py +0 -9
- {project_init-0.5.2 → project_init-0.6.0}/src/project_init/upgrade.py +63 -12
- project_init-0.6.0/templates/amp/dot_agents/skills/report_upstream_issue/SKILL.md +114 -0
- project_init-0.6.0/templates/antigravity/dot_agents/skills/report_upstream_issue/SKILL.md +114 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/auto/dot_claude/scripts/lint_memory.sh +23 -11
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/AGENTS.md.tmpl +4 -3
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/Dockerfile.tmpl +26 -1
- project_init-0.6.0/templates/base/bunfig.toml.tmpl +14 -0
- project_init-0.6.0/templates/base/clippy.toml.tmpl +5 -0
- project_init-0.6.0/templates/base/deny.toml.tmpl +40 -0
- project_init-0.6.0/templates/base/dot_cargo/config.toml.tmpl +7 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/config.yaml.tmpl +1 -1
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/hooks/_py.sh +2 -2
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/hooks/agent_guard_adapter.py.tmpl +21 -9
- project_init-0.6.0/templates/base/dot_claude/hooks/package_guard.py +370 -0
- {project_init-0.5.2/plugins/project-init-workflow → project_init-0.6.0/templates/base/dot_claude}/hooks/prod_guard.py +10 -1
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/project-init.md.tmpl +2 -1
- project_init-0.6.0/templates/base/dot_claude/rules/go.md +37 -0
- project_init-0.6.0/templates/base/dot_claude/rules/node.md +40 -0
- project_init-0.6.0/templates/base/dot_claude/rules/python.md +57 -0
- project_init-0.6.0/templates/base/dot_claude/rules/rust.md +50 -0
- project_init-0.6.0/templates/base/dot_claude/rules/typescript.md +31 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/scripts/gh_host.sh +7 -4
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/settings.json.tmpl +6 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/skills/README.md.tmpl +2 -1
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_devcontainer/devcontainer.json.tmpl +4 -1
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_env.example.tmpl +1 -1
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_github/hooks/commit-msg +1 -1
- project_init-0.6.0/templates/base/dot_github/workflows/ci.yml.tmpl +704 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_github/workflows/deploy.yml.tmpl +12 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_github/workflows/registry-publish.yml.tmpl +18 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_github/workflows/release.yml.tmpl +72 -5
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_gitignore.tmpl +7 -2
- project_init-0.6.0/templates/base/dot_gitleaks.toml +17 -0
- project_init-0.6.0/templates/base/dot_golangci.yml.tmpl +43 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_vscode/extensions.json.tmpl +2 -1
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_vscode/settings.json.tmpl +4 -1
- project_init-0.6.0/templates/base/eslint.config.mjs.tmpl +52 -0
- project_init-0.6.0/templates/base/justfile.tmpl +296 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/mise.toml.tmpl +2 -1
- project_init-0.6.0/templates/base/mypy.ini.tmpl +19 -0
- project_init-0.6.0/templates/base/ruff.toml.tmpl +50 -0
- project_init-0.6.0/templates/base/rustfmt.toml.tmpl +4 -0
- project_init-0.6.0/templates/base/tsconfig.base.json.tmpl +19 -0
- project_init-0.6.0/templates/base/tsconfig.json.tmpl +6 -0
- project_init-0.6.0/templates/codex/dot_agents/skills/report_upstream_issue/SKILL.md +114 -0
- project_init-0.6.0/templates/fallback/dot_claude/hooks/post_edit_lint.sh +111 -0
- {project_init-0.5.2/plugins/project-init-workflow → project_init-0.6.0/templates/fallback/dot_claude}/hooks/pre_commit_gate.sh +35 -30
- {project_init-0.5.2/plugins/project-init-workflow → project_init-0.6.0/templates/fallback/dot_claude}/hooks/session_setup.sh +14 -8
- {project_init-0.5.2 → project_init-0.6.0}/templates/fallback/dot_claude/skills/INDEX.md.tmpl +1 -0
- project_init-0.6.0/templates/fallback/dot_claude/skills/report_upstream_issue/SKILL.md +114 -0
- project_init-0.6.0/templates/junie/dot_junie/skills/report_upstream_issue/SKILL.md +114 -0
- {project_init-0.5.2/plugins/project-init-lifecycle → project_init-0.6.0/templates/lifecycle/dot_claude}/hooks/dag_workflow.py +72 -4
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_claude/scripts/create_issue.sh +137 -105
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_claude/scripts/monitor_pr.sh +57 -15
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_claude/scripts/setup_github.sh +78 -52
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_claude/scripts/start_issue.sh +23 -21
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_github/copilot-instructions.md.tmpl +1 -1
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_github/workflows/board-automation.yml +44 -30
- project_init-0.6.0/templates/lifecycle/dot_github/workflows/issue-validation.yml +121 -0
- {project_init-0.5.2/plugins/project-init-lifecycle → project_init-0.6.0/templates/lifecycle_fallback/dot_claude}/hooks/github_command_guard.sh +1 -1
- {project_init-0.5.2/plugins/project-init-lifecycle → project_init-0.6.0/templates/lifecycle_fallback/dot_claude}/hooks/workflow_state_reminder.sh +24 -4
- {project_init-0.5.2 → project_init-0.6.0}/templates/multi_model/dot_claude/scripts/models.sh +44 -15
- {project_init-0.5.2 → project_init-0.6.0}/templates/multi_model/dot_claude/scripts/setup_models.sh +34 -17
- project_init-0.6.0/templates/observability/dot_claude/scripts/observability.sh +60 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/rag/dot_claude/scripts/setup_rag.sh +2 -2
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_cross_stack_examples.py +3 -3
- project_init-0.6.0/tests/contracts/test_dockerfile_lint.py +96 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_emission_hardening.py +7 -8
- project_init-0.6.0/tests/contracts/test_fuzzing.py +81 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_governance.py +10 -4
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_hook_portability.py +15 -0
- project_init-0.6.0/tests/contracts/test_image_scan.py +79 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_justfile.py +61 -5
- project_init-0.6.0/tests/contracts/test_justfile_combinations.py +59 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_library_release.py +6 -1
- project_init-0.6.0/tests/contracts/test_license_scan.py +105 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_lifecycle_byte_identity.py +82 -1
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_memory_byte_identity.py +75 -1
- project_init-0.6.0/tests/contracts/test_package_guard.py +247 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_parity_bundle.py +5 -3
- project_init-0.6.0/tests/contracts/test_post_edit_lint_typecheck.py +64 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_prod_guard.py +6 -0
- project_init-0.6.0/tests/contracts/test_provenance.py +88 -0
- project_init-0.6.0/tests/contracts/test_quality_toolchain.py +531 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_release_engineering.py +6 -2
- project_init-0.6.0/tests/contracts/test_sbom.py +100 -0
- project_init-0.6.0/tests/contracts/test_scorecard.py +69 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_templates.py +38 -0
- {project_init-0.5.2/tests/fixtures/memory_baseline → project_init-0.6.0/tests/fixtures/lifecycle_baseline}/obsidian-graphify__no_plugin.json +6 -6
- {project_init-0.5.2/tests/fixtures/memory_baseline → project_init-0.6.0/tests/fixtures/lifecycle_baseline}/obsidian-graphify__plugin.json +4 -4
- {project_init-0.5.2 → project_init-0.6.0}/tests/fixtures/lifecycle_baseline/obsidian-only__no_plugin.json +6 -6
- {project_init-0.5.2 → project_init-0.6.0}/tests/fixtures/lifecycle_baseline/obsidian-only__plugin.json +4 -4
- {project_init-0.5.2/tests/fixtures/lifecycle_baseline → project_init-0.6.0/tests/fixtures/memory_baseline}/obsidian-graphify__no_plugin.json +6 -6
- {project_init-0.5.2/tests/fixtures/lifecycle_baseline → project_init-0.6.0/tests/fixtures/memory_baseline}/obsidian-graphify__plugin.json +4 -4
- {project_init-0.5.2 → project_init-0.6.0}/tests/fixtures/memory_baseline/obsidian-only__no_plugin.json +6 -6
- {project_init-0.5.2 → project_init-0.6.0}/tests/fixtures/memory_baseline/obsidian-only__plugin.json +4 -4
- {project_init-0.5.2 → project_init-0.6.0}/tests/helpers.py +1 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_cli.py +36 -6
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_dag_workflow.py +58 -0
- project_init-0.6.0/tests/integration/test_gitignore_scaffold.py +77 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_issue_metadata_workflow.py +38 -2
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_overwrite_protection.py +124 -0
- project_init-0.6.0/tests/integration/test_report_upstream_issue_skill.py +91 -0
- project_init-0.6.0/tests/integration/test_upgrade_edges.py +87 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/unit/test_third_party_updates.py +16 -0
- {project_init-0.5.2 → project_init-0.6.0}/tools/check_third_party_updates.py +20 -18
- {project_init-0.5.2 → project_init-0.6.0}/tools/sync_plugin.py +69 -3
- {project_init-0.5.2 → project_init-0.6.0}/uv.lock +14 -8
- project_init-0.5.2/plugins/project-init-workflow/hooks/post_edit_lint.sh +0 -68
- project_init-0.5.2/templates/base/dot_claude/rules/go.md +0 -14
- project_init-0.5.2/templates/base/dot_claude/rules/node.md +0 -17
- project_init-0.5.2/templates/base/dot_claude/rules/python.md +0 -25
- project_init-0.5.2/templates/base/dot_github/workflows/ci.yml.tmpl +0 -328
- project_init-0.5.2/templates/base/dot_golangci.yml.tmpl +0 -20
- project_init-0.5.2/templates/base/eslint.config.mjs.tmpl +0 -29
- project_init-0.5.2/templates/base/justfile.tmpl +0 -113
- project_init-0.5.2/templates/base/ruff.toml.tmpl +0 -31
- project_init-0.5.2/templates/fallback/dot_claude/hooks/post_edit_lint.sh +0 -68
- project_init-0.5.2/templates/lifecycle/dot_github/workflows/issue-validation.yml +0 -72
- project_init-0.5.2/templates/observability/dot_claude/scripts/observability.sh +0 -52
- project_init-0.5.2/tests/contracts/test_quality_toolchain.py +0 -204
- {project_init-0.5.2 → project_init-0.6.0}/.claude/hooks/github_command_guard.sh +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/hooks/workflow_state_reminder.sh +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/scripts/create_nojira_pr.sh +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/scripts/finish_pr.sh +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/scripts/monitor_pr.sh +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/scripts/promote_review.sh +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/scripts/push_branch.sh +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/scripts/push_wiki.sh +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/settings.json +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/skills/INDEX.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/skills/README.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/skills/add_command/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/skills/add_hook/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/skills/github_workflow/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/skills/live_test/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/skills/session_summary/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/skills/start_task/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/skills/wiki/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/skills/wiki/templates/architecture.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/skills/wiki/templates/implementation-guide.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/skills/wiki/templates/preset-guide.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude/skills/wiki/templates/scaffolder-logic.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.claude-plugin/marketplace.json +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.gitattributes +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.github/ISSUE_TEMPLATE/bug.yml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.github/ISSUE_TEMPLATE/chore.yml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.github/ISSUE_TEMPLATE/docs.yml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.github/ISSUE_TEMPLATE/feature.yml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.github/ISSUE_TEMPLATE/test.yml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.github/copilot-instructions.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.github/workflows/board-automation.yml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.github/workflows/validate-pr.yml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.gitignore +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/.gitleaks.toml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/AGENTS.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/CONTRIBUTING.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/LICENSE +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/cliff.toml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/README.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-001-scaffolder-design.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-002-dotglob-template-convention.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-003-github-native-workflow.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-004-obsidian-docs-integration.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-005-github-pr-board-workflow.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-006-conventional-commit-titles.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-007-security-enforcement-layers.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-008-distribution-channel.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-009-graphify-memory-preset.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-010-plugin-marketplace-dual-ship.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-011-pypi-trusted-publishing.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-012-prod-safety-guard.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-013-distribution-governance-model.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-014-environment-promotion-chains.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-015-env-deploy-model.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-016-model-agnostic-switching.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-017-per-surface-config-generator.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-018-ai-governance-overlay.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-019-local-observability-overlay.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-020-memory-backend-decomposition.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-021-quality-vs-lifecycle-tier-boundary.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-022-toolchain-gate-map.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-023-wizard-explanation-standard.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-024-memory-tier-model.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-025-agentic-os-root-layer.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/adr/adr-026-tier3-rag-engine-cocoindex.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/development/agentic-os-root-layer.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/development/build-reproducibility.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/development/contributing.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/development/enforcement-classification.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/development/enterprise-github-support-matrix.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/development/measurement-methodology.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/development/memory-descriptor.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/development/mobile-remote-access.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/development/non-cli-surface-matrix.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/development/template-system.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/development/testing.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/guides/org-fork-lifecycle.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/guides/using-project-init.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/positioning.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/docs/research/model-agnostic-switching.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/install.sh +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/mkdocs.yml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/plugins/project-init-lifecycle/.claude-plugin/plugin.json +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/plugins/project-init-lifecycle/hooks/_usage_log.sh +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/plugins/project-init-lifecycle/hooks/hooks.json +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/plugins/project-init-lifecycle/skills/audit/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/plugins/project-init-lifecycle/skills/create_issue/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/plugins/project-init-lifecycle/skills/github_workflow/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/plugins/project-init-lifecycle/skills/request_review/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/plugins/project-init-lifecycle/skills/start_task/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/plugins/project-init-workflow/hooks/_usage_log.sh +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/plugins/project-init-workflow/skills/add_adr/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/plugins/project-init-workflow/skills/add_command/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/plugins/project-init-workflow/skills/add_hook/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/plugins/project-init-workflow/skills/review/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/plugins/project-init-workflow/skills/save_memory/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/plugins/project-init-workflow/skills/session_summary/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/plugins/project-init-workflow/skills/status/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/src/project_init/governance.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/amp/dot_agents/skills/add_adr/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/amp/dot_agents/skills/add_command/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/amp/dot_agents/skills/add_hook/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/amp/dot_agents/skills/audit/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/amp/dot_agents/skills/create_issue/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/amp/dot_agents/skills/github_workflow/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/amp/dot_agents/skills/plan/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/amp/dot_agents/skills/request_review/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/amp/dot_agents/skills/review/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/amp/dot_agents/skills/save_memory/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/amp/dot_agents/skills/session_summary/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/amp/dot_agents/skills/start_task/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/amp/dot_agents/skills/status/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/antigravity/dot_agents/skills/add_adr/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/antigravity/dot_agents/skills/add_command/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/antigravity/dot_agents/skills/add_hook/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/antigravity/dot_agents/skills/audit/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/antigravity/dot_agents/skills/create_issue/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/antigravity/dot_agents/skills/github_workflow/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/antigravity/dot_agents/skills/plan/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/antigravity/dot_agents/skills/request_review/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/antigravity/dot_agents/skills/review/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/antigravity/dot_agents/skills/save_memory/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/antigravity/dot_agents/skills/session_summary/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/antigravity/dot_agents/skills/start_task/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/antigravity/dot_agents/skills/status/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/auto/dot_claude/memory/MEMORY.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/auto/dot_claude/memory/README.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/auto/dot_claude/memory/SCHEMA.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/auto/dot_claude/memory/feedback_conventions.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/auto/dot_claude/memory/project_context.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/auto/dot_claude/memory/user_role.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/CLAUDE.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/CONTRIBUTING.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/LICENSE.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/SECURITY.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/compose.yaml.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/deploy/environments.yaml.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/docs/explanation/index.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/docs/how-to/index.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/docs/index.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/docs/reference/index.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/docs/tutorials/index.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/agents/README.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/agents/code-reviewer.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/agents/explore.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/docs/README.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/docs/adr/adr-002-mcp-choices.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/docs/adr/adr-template.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/docs/development/conventions.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/docs/development/testing.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/docs/guides/cloud-integration.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/docs/guides/developer-onboarding.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/docs/guides/environments.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/docs/guides/secrets.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/hooks/README.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/rules/hooks.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/scripts/README.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/scripts/gen_code_map.py.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/scripts/install_hooks.sh +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/scripts/setup_env_protection.sh.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/scripts/whats_deployed.sh.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_claude/skills/plan/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_devcontainer/post-create.sh.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_dockerignore.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_gitattributes +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_github/CODEOWNERS.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_github/hooks/pre-commit +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_github/hooks/pre-push.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/dot_github/workflows/infra.yml.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/infra/README.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/infra/backend.tf.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/infra/dot_gitignore.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/infra/dot_pre-commit-config.yaml.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/infra/main.tf.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/infra/outputs.tf.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/infra/variables.tf.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/infra/versions.tf.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/mkdocs.yml.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/renovate.json.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/base/typedoc.json.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/codex/dot_agents/skills/add_adr/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/codex/dot_agents/skills/add_command/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/codex/dot_agents/skills/add_hook/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/codex/dot_agents/skills/audit/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/codex/dot_agents/skills/create_issue/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/codex/dot_agents/skills/github_workflow/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/codex/dot_agents/skills/plan/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/codex/dot_agents/skills/request_review/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/codex/dot_agents/skills/review/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/codex/dot_agents/skills/save_memory/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/codex/dot_agents/skills/session_summary/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/codex/dot_agents/skills/start_task/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/codex/dot_agents/skills/status/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/codex/dot_codex/hooks.json.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/fallback/dot_claude/hooks/_usage_log.sh +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/fallback/dot_claude/skills/add_adr/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/fallback/dot_claude/skills/add_command/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/fallback/dot_claude/skills/add_hook/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/fallback/dot_claude/skills/review/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/fallback/dot_claude/skills/save_memory/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/fallback/dot_claude/skills/session_summary/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/fallback/dot_claude/skills/status/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/governance/dot_claude/governance/AI_USAGE_POLICY.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/governance/dot_claude/governance/NIST_RMF_CROSSWALK.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/governance/dot_claude/governance/README.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/governance/dot_claude/governance/ai-code-provenance.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/governance/dot_claude/governance/ai-declarations.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/governance/dot_claude/governance/approved-tools.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/governance/dot_claude/governance/config.example.json +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/governance/dot_claude/governance/data-handling.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/governance/dot_claude/governance/examples/SYSTEM_CARD.example.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/governance/dot_claude/governance/examples/SYSTEM_CARD.template.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/governance/dot_claude/scripts/governance_gate.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/governance/dot_claude/scripts/governance_gate.sh +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/graphify/dot_claude/docs/guides/using-graphify.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/graphify/dot_claude/rules/graphify.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/graphify/dot_claude/scripts/setup_graphify.sh +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/junie/dot_junie/skills/add_adr/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/junie/dot_junie/skills/add_command/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/junie/dot_junie/skills/add_hook/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/junie/dot_junie/skills/audit/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/junie/dot_junie/skills/create_issue/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/junie/dot_junie/skills/github_workflow/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/junie/dot_junie/skills/plan/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/junie/dot_junie/skills/request_review/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/junie/dot_junie/skills/review/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/junie/dot_junie/skills/save_memory/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/junie/dot_junie/skills/session_summary/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/junie/dot_junie/skills/start_task/SKILL.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/junie/dot_junie/skills/status/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_claude/docs/guides/issue-metadata.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_claude/scripts/create_nojira_pr.sh +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_claude/scripts/finish_pr.sh +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_claude/scripts/promote_review.sh +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_claude/scripts/push_branch.sh +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_claude/scripts/push_wiki.sh +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/bug.yml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/chore.yml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/config.yml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/docs.yml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/feature.yml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_github/ISSUE_TEMPLATE/test.yml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_github/pull_request_template.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_github/workflows/project-init-upgrade.yml.tmpl +0 -0
- {project_init-0.5.2/.github → project_init-0.6.0/templates/lifecycle/dot_github}/workflows/review-status.yml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle/dot_github/workflows/validate-pr.yml.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle_fallback/dot_claude/skills/audit/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle_fallback/dot_claude/skills/create_issue/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle_fallback/dot_claude/skills/github_workflow/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle_fallback/dot_claude/skills/request_review/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/lifecycle_fallback/dot_claude/skills/start_task/SKILL.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/multi_model/dot_claude/docs/guides/using-multi-model.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/multi_model/dot_claude/multi-model/README.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/multi_model/dot_claude/multi-model/config.json +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/multi_model/dot_claude/multi-model/dot_env.example +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/observability/dot_claude/docs/guides/upgrading-observability.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/observability/dot_claude/docs/guides/using-observability.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/observability/dot_claude/observability/.keep +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/observability/dot_claude/observability/README.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/observability/dot_claude/observability/dot_gitignore +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/observability/dot_claude/observability/usage_report.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/obsidian/dot_claude/docs/adr/adr-001-memory-stack.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/obsidian/dot_claude/docs/guides/using-memory.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/obsidian/dot_claude/vault/README.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/obsidian/dot_claude/vault/decisions/README.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/obsidian/dot_claude/vault/decisions/adr-000-project-setup.md.tmpl +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/obsidian/dot_claude/vault/design/README.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/obsidian/dot_claude/vault/dot_obsidian/README.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/obsidian/dot_claude/vault/dot_obsidian/app.json +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/obsidian/dot_claude/vault/dot_obsidian/community-plugins.json +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/obsidian/dot_claude/vault/dot_obsidian/core-plugins.json +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/obsidian/dot_claude/vault/knowledge/README.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/obsidian/dot_claude/vault/log.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/obsidian/dot_claude/vault/sessions/README.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/obsidian/dot_claude/vault/templates/decision.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/obsidian/dot_claude/vault/templates/design-note.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/obsidian/dot_claude/vault/templates/knowledge-note.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/obsidian/dot_claude/vault/templates/session-note.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/presets/auto.toml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/presets/core.toml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/presets/governed.toml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/presets/obsidian-graphify.toml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/presets/obsidian-only.toml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/rag/dot_claude/docs/guides/using-rag.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/templates/rag/dot_claude/rules/rag.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/__init__.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/conftest.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_agent_overlays.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_agents_canonical.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_benchmark_cost_latency.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_benchmark_harness.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_benchmark_report.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_benchmark_scoring.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_capabilities.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_deploy_overlay.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_docs_renovate.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_enforcement.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_enterprise_host.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_env_tooling.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_governance_overlay.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_governance_product.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_iac_overlay.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_integration_seam.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_integrity.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_interpreter_portability.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_lifecycle_none.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_marketplace_source.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_memory_none.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_multi_model_overlay.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_no_bytecode_leak.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_no_egress.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_observability_overlay.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_observability_report.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_observability_self_log.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_plugin_marketplace.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_portability_hardening.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_renovate.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_repo_validate_pr.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_scaffold_graphify.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_scaffold_obsidian.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_session_bootstrap.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_skill_index.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_subagent_specs.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_surface_emission.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_third_party_pin_contract.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_upgrade_pr_workflow.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_variable_contract.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_wiki_skill.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/contracts/test_wizard_explanations.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_code_map.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_combination_matrix.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_compose_interop.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_concern_add_remove.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_concern_skill_gating.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_consent.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_hooks_and_safety.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_install_script.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_json_output.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_lifecycle.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_memory_backends.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_memory_descriptor.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_memory_starters.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_observability.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_org_lifecycle.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_quality_gate_lint.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_rag_seam.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_readme_examples.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_session_cold_start.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/integration/test_upgrade.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/smoke/test_packaging.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/unit/test_command_variables.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/unit/test_interactive_prompts.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/unit/test_mcps.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/unit/test_migration_notes.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/unit/test_presets.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/unit/test_presets_inheritance.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/unit/test_profile.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/unit/test_render_nesting.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/unit/test_scaffold_inputs.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/unit/test_shell_portability.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/unit/test_surfaces.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tests/unit/test_version_span.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tools/benchmark/README.md +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tools/benchmark/harness.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tools/benchmark/latency.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tools/benchmark/model_prices.json +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tools/benchmark/prices.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tools/benchmark/record.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tools/benchmark/report.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tools/benchmark/scoring.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tools/benchmark/tasks/feat.toml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tools/benchmark/tasks/fix.toml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tools/benchmark/tasks/noop.toml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tools/benchmark/tasks/qa.toml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tools/benchmark/transcript.py +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tools/pinned_third_party.toml +0 -0
- {project_init-0.5.2 → project_init-0.6.0}/tools/propose_third_party_bumps.sh +0 -0
|
@@ -42,8 +42,6 @@ import sys
|
|
|
42
42
|
import time
|
|
43
43
|
from pathlib import Path
|
|
44
44
|
|
|
45
|
-
CACHE_PATH = Path(".claude/.workflow-state.json")
|
|
46
|
-
|
|
47
45
|
GRAPH: dict[str, list[str]] = {
|
|
48
46
|
"issue.created": [],
|
|
49
47
|
"branch.created": [],
|
|
@@ -253,6 +251,17 @@ COMMAND_RULES: list[tuple[re.Pattern[str], str | None, str]] = [
|
|
|
253
251
|
"pr.merged",
|
|
254
252
|
"Use .claude/scripts/monitor_pr.sh <pr> --merge instead of `gh api .../merge` so CI and review gates are honored.",
|
|
255
253
|
),
|
|
254
|
+
(
|
|
255
|
+
# GraphQL merges bypass the REST-path rule above (2026-07 review): a
|
|
256
|
+
# `gh api graphql` mutation can merge or enable auto-merge without ever
|
|
257
|
+
# naming `/pulls/N/merge`. Block the mutation fields themselves.
|
|
258
|
+
re.compile(
|
|
259
|
+
r"\bgh\s+api\b[^&;]*\bgraphql\b[^&;]*"
|
|
260
|
+
r"(?:mergePullRequest|enablePullRequestAutoMerge)"
|
|
261
|
+
),
|
|
262
|
+
"pr.merged",
|
|
263
|
+
"Use .claude/scripts/monitor_pr.sh <pr> --merge instead of a `gh api graphql` merge mutation so CI and review gates are honored.",
|
|
264
|
+
),
|
|
256
265
|
(
|
|
257
266
|
re.compile(r"\bgh\s+pr\s+merge\b"),
|
|
258
267
|
"pr.merged",
|
|
@@ -291,12 +300,64 @@ _HEREDOC_RE = re.compile(
|
|
|
291
300
|
re.DOTALL,
|
|
292
301
|
)
|
|
293
302
|
|
|
303
|
+
# Git global options that sit BETWEEN `git` and the subcommand (`git -C dir
|
|
304
|
+
# push`, `git -c k=v push`). Left unnormalized they defeat every `git push`
|
|
305
|
+
# rule, including the direct-push-to-main block (2026-07 review). Options that
|
|
306
|
+
# consume a value are listed with their value; boolean options stand alone.
|
|
307
|
+
_GIT_GLOBAL_OPT = (
|
|
308
|
+
r"(?:"
|
|
309
|
+
r"-C[ \t]+\S+" # -C <path>
|
|
310
|
+
r"|-c[ \t]+\S+" # -c <name=value>
|
|
311
|
+
r"|--git-dir(?:=\S+|[ \t]+\S+)"
|
|
312
|
+
r"|--work-tree(?:=\S+|[ \t]+\S+)"
|
|
313
|
+
r"|--namespace(?:=\S+|[ \t]+\S+)"
|
|
314
|
+
r"|--config-env(?:=\S+|[ \t]+\S+)"
|
|
315
|
+
r"|--exec-path(?:=\S+)?"
|
|
316
|
+
r"|--no-pager|--paginate|-p|-P|--bare"
|
|
317
|
+
r"|--no-replace-objects|--literal-pathspecs|--no-optional-locks|--icase-pathspecs"
|
|
318
|
+
r")"
|
|
319
|
+
)
|
|
320
|
+
_GIT_NORMALIZE_RE = re.compile(r"\bgit((?:[ \t]+" + _GIT_GLOBAL_OPT + r")+)[ \t]+")
|
|
321
|
+
|
|
322
|
+
# An interpreter receiving a heredoc executes its body, so a guarded command
|
|
323
|
+
# hidden in `bash <<'EOF' … EOF` must still be scanned (2026-07 review). The
|
|
324
|
+
# negative lookbehind lets `/bin/bash` match while sparing `rebash`.
|
|
325
|
+
_INTERP = r"(?:bash|sh|zsh|dash|ksh|python3?|python2|eval|source)"
|
|
326
|
+
_INTERP_INTRO_RE = re.compile(r"(?<![\w.-])" + _INTERP + r"\b")
|
|
327
|
+
_PIPE_INTERP_RE = re.compile(r"^\s*\|\s*(?:sudo[ \t]+)?(?<![\w.-])" + _INTERP + r"\b")
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
def _normalize_git_globals(cmd: str) -> str:
|
|
331
|
+
"""Rewrite ``git <global-opts> <subcommand>`` to ``git <subcommand>`` for
|
|
332
|
+
matching, so interposed ``-C``/``-c``/``--git-dir`` flags can't smuggle a
|
|
333
|
+
push past the rules (2026-07 review)."""
|
|
334
|
+
return _GIT_NORMALIZE_RE.sub("git ", cmd)
|
|
335
|
+
|
|
294
336
|
|
|
295
337
|
def _strip_heredocs(cmd: str) -> str:
|
|
296
338
|
"""Remove heredoc body text so pattern rules don't fire on body content."""
|
|
297
339
|
return _HEREDOC_RE.sub("", cmd)
|
|
298
340
|
|
|
299
341
|
|
|
342
|
+
def _executing_heredoc_bodies(cmd: str) -> str:
|
|
343
|
+
"""Concatenate heredoc bodies that WILL run — those fed to an interpreter
|
|
344
|
+
directly (``bash <<EOF``) or via a pipe (``cat <<EOF … | bash``).
|
|
345
|
+
|
|
346
|
+
``_strip_heredocs`` removes every body to spare prose (a commit message or
|
|
347
|
+
``gh pr comment --body-file - <<EOF`` mentioning "git push main"), but that
|
|
348
|
+
also hid genuinely-executing bodies. Re-surfacing only the interpreter-fed
|
|
349
|
+
ones keeps prose exempt while closing the execution bypass (2026-07 review).
|
|
350
|
+
"""
|
|
351
|
+
bodies = []
|
|
352
|
+
for m in _HEREDOC_RE.finditer(cmd):
|
|
353
|
+
line_start = cmd.rfind("\n", 0, m.start()) + 1
|
|
354
|
+
intro = cmd[line_start : m.start()]
|
|
355
|
+
after = cmd[m.end() : m.end() + 60]
|
|
356
|
+
if _INTERP_INTRO_RE.search(intro) or _PIPE_INTERP_RE.match(after):
|
|
357
|
+
bodies.append(m.group(0))
|
|
358
|
+
return "\n".join(bodies)
|
|
359
|
+
|
|
360
|
+
|
|
300
361
|
# Free-text flag values carry arbitrary prose (commit messages, issue/PR comment
|
|
301
362
|
# and release bodies, titles) that must not be scanned for command patterns — a
|
|
302
363
|
# `--body` mentioning the literal "git push main" is data, not an invocation.
|
|
@@ -358,8 +419,15 @@ def guard(payload: dict) -> dict | None:
|
|
|
358
419
|
|
|
359
420
|
# Strip heredoc bodies and free-text flag values so pattern rules don't fire
|
|
360
421
|
# 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
|
-
|
|
422
|
+
# push...\nEOF\n)"`, or `gh pr comment --body "...git push main..."`), then
|
|
423
|
+
# normalize interposed git global options so `git -C dir push` is matched
|
|
424
|
+
# like `git push` (2026-07 review).
|
|
425
|
+
cmd_scan = _normalize_git_globals(_strip_text_flag_values(_strip_heredocs(cmd)))
|
|
426
|
+
# A heredoc fed to an interpreter DOES execute its body — scan those too, so
|
|
427
|
+
# `bash <<'EOF' … git push … EOF` is not a bypass (2026-07 review).
|
|
428
|
+
exec_bodies = _executing_heredoc_bodies(cmd)
|
|
429
|
+
if exec_bodies:
|
|
430
|
+
cmd_scan += "\n" + _normalize_git_globals(_strip_text_flag_values(exec_bodies))
|
|
363
431
|
|
|
364
432
|
for pattern, target, message in COMMAND_RULES:
|
|
365
433
|
if not pattern.search(cmd_scan):
|
|
@@ -14,10 +14,10 @@ jobs:
|
|
|
14
14
|
name: Lint and test
|
|
15
15
|
runs-on: ubuntu-24.04
|
|
16
16
|
steps:
|
|
17
|
-
- uses: actions/checkout@v6
|
|
17
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
18
18
|
|
|
19
19
|
- name: Install uv
|
|
20
|
-
uses: astral-sh/setup-uv@v8.1.0
|
|
20
|
+
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
|
21
21
|
with:
|
|
22
22
|
version: "0.11.7"
|
|
23
23
|
enable-cache: true
|
|
@@ -25,24 +25,32 @@ jobs:
|
|
|
25
25
|
python-version: "3.12"
|
|
26
26
|
|
|
27
27
|
- name: Sync dev dependencies
|
|
28
|
-
run: uv sync --
|
|
28
|
+
run: uv sync --group dev --locked
|
|
29
29
|
|
|
30
30
|
- name: Lint (ruff)
|
|
31
31
|
run: uv run ruff check .
|
|
32
32
|
|
|
33
33
|
- name: Tests (pytest) — parallel mode
|
|
34
|
-
#
|
|
35
|
-
|
|
34
|
+
# Use xdist when importable, else single-threaded — decided by an
|
|
35
|
+
# explicit capability check, not `|| retry`, so a genuinely failing
|
|
36
|
+
# suite is not run twice with its first-pass stderr hidden (2026-07
|
|
37
|
+
# review).
|
|
38
|
+
run: |
|
|
39
|
+
if uv run python -c "import xdist" 2>/dev/null; then
|
|
40
|
+
uv run pytest -n auto --tb=short -q
|
|
41
|
+
else
|
|
42
|
+
uv run pytest --tb=short -q
|
|
43
|
+
fi
|
|
36
44
|
|
|
37
45
|
wheel-smoke:
|
|
38
46
|
name: Wheel smoke test
|
|
39
47
|
runs-on: ubuntu-24.04
|
|
40
48
|
needs: lint-and-test
|
|
41
49
|
steps:
|
|
42
|
-
- uses: actions/checkout@v6
|
|
50
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
43
51
|
|
|
44
52
|
- name: Install uv
|
|
45
|
-
uses: astral-sh/setup-uv@v8.1.0
|
|
53
|
+
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
|
46
54
|
with:
|
|
47
55
|
version: "0.11.7"
|
|
48
56
|
enable-cache: true
|
|
@@ -89,12 +97,12 @@ jobs:
|
|
|
89
97
|
name: Secret scan (gitleaks)
|
|
90
98
|
runs-on: ubuntu-24.04
|
|
91
99
|
steps:
|
|
92
|
-
- uses: actions/checkout@v6
|
|
100
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
93
101
|
with:
|
|
94
102
|
# Full history so leaked commits are caught, not just the latest diff
|
|
95
103
|
fetch-depth: 0
|
|
96
104
|
|
|
97
|
-
- uses: gitleaks/gitleaks-action@v3
|
|
105
|
+
- uses: gitleaks/gitleaks-action@e0c47f4f8be36e29cdc102c57e68cb5cbf0e8d1e # v3
|
|
98
106
|
env:
|
|
99
107
|
GITHUB_TOKEN: ${{ github.token }}
|
|
100
108
|
|
|
@@ -104,10 +112,10 @@ jobs:
|
|
|
104
112
|
name: ShellCheck (scaffolded scripts)
|
|
105
113
|
runs-on: ubuntu-24.04
|
|
106
114
|
steps:
|
|
107
|
-
- uses: actions/checkout@v6
|
|
115
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
108
116
|
|
|
109
117
|
- name: Install uv
|
|
110
|
-
uses: astral-sh/setup-uv@v8.1.0
|
|
118
|
+
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
|
111
119
|
with:
|
|
112
120
|
version: "0.11.7"
|
|
113
121
|
enable-cache: true
|
|
@@ -146,8 +154,8 @@ jobs:
|
|
|
146
154
|
outputs:
|
|
147
155
|
shell: ${{ steps.filter.outputs.shell }}
|
|
148
156
|
steps:
|
|
149
|
-
- uses: actions/checkout@v6
|
|
150
|
-
- uses: dorny/paths-filter@v3
|
|
157
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
158
|
+
- uses: dorny/paths-filter@d1c1ffe0248fe513906c8e24db8ea791d46f8590 # v3
|
|
151
159
|
id: filter
|
|
152
160
|
with:
|
|
153
161
|
filters: |
|
|
@@ -170,10 +178,10 @@ jobs:
|
|
|
170
178
|
if: needs.changes.outputs.shell == 'true'
|
|
171
179
|
runs-on: macos-latest
|
|
172
180
|
steps:
|
|
173
|
-
- uses: actions/checkout@v6
|
|
181
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
174
182
|
|
|
175
183
|
- name: Install uv
|
|
176
|
-
uses: astral-sh/setup-uv@v8.1.0
|
|
184
|
+
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
|
177
185
|
with:
|
|
178
186
|
version: "0.11.7"
|
|
179
187
|
python-version: "3.12"
|
|
@@ -228,10 +236,10 @@ jobs:
|
|
|
228
236
|
run:
|
|
229
237
|
shell: bash # GitHub's "bash" on Windows is Git Bash — the supported path
|
|
230
238
|
steps:
|
|
231
|
-
- uses: actions/checkout@v6
|
|
239
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
232
240
|
|
|
233
241
|
- name: Install uv
|
|
234
|
-
uses: astral-sh/setup-uv@v8.1.0
|
|
242
|
+
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
|
235
243
|
with:
|
|
236
244
|
version: "0.11.7"
|
|
237
245
|
python-version: "3.12"
|
|
@@ -35,10 +35,10 @@ jobs:
|
|
|
35
35
|
name: Build site
|
|
36
36
|
runs-on: ubuntu-24.04
|
|
37
37
|
steps:
|
|
38
|
-
- uses: actions/checkout@v6
|
|
38
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
39
39
|
|
|
40
40
|
- name: Install uv
|
|
41
|
-
uses: astral-sh/setup-uv@v8.1.0
|
|
41
|
+
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
|
42
42
|
with:
|
|
43
43
|
version: "0.11.7"
|
|
44
44
|
enable-cache: true
|
|
@@ -54,7 +54,7 @@ jobs:
|
|
|
54
54
|
run: uv run mkdocs build --strict
|
|
55
55
|
|
|
56
56
|
- name: Upload Pages artifact
|
|
57
|
-
uses: actions/upload-pages-artifact@v3
|
|
57
|
+
uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3
|
|
58
58
|
with:
|
|
59
59
|
path: site
|
|
60
60
|
|
|
@@ -72,4 +72,4 @@ jobs:
|
|
|
72
72
|
steps:
|
|
73
73
|
- name: Deploy to GitHub Pages
|
|
74
74
|
id: deployment
|
|
75
|
-
uses: actions/deploy-pages@v4
|
|
75
|
+
uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4
|
|
@@ -18,13 +18,13 @@ jobs:
|
|
|
18
18
|
release:
|
|
19
19
|
runs-on: ubuntu-24.04
|
|
20
20
|
steps:
|
|
21
|
-
- uses: actions/checkout@v6
|
|
21
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
22
22
|
with:
|
|
23
23
|
# Full history — git-cliff needs prior tags to scope --latest.
|
|
24
24
|
fetch-depth: 0
|
|
25
25
|
|
|
26
26
|
- name: Install uv
|
|
27
|
-
uses: astral-sh/setup-uv@v8.1.0
|
|
27
|
+
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
|
28
28
|
with:
|
|
29
29
|
version: "0.11.7"
|
|
30
30
|
|
|
@@ -40,7 +40,7 @@ jobs:
|
|
|
40
40
|
run: uv build
|
|
41
41
|
|
|
42
42
|
- name: Generate changelog (latest tag)
|
|
43
|
-
uses: orhun/git-cliff-action@v4
|
|
43
|
+
uses: orhun/git-cliff-action@f50e11560dce63f7c33227798f90b924471a88b5 # v4
|
|
44
44
|
with:
|
|
45
45
|
config: cliff.toml
|
|
46
46
|
args: --latest
|
|
@@ -48,7 +48,7 @@ jobs:
|
|
|
48
48
|
OUTPUT: RELEASE_NOTES.md
|
|
49
49
|
|
|
50
50
|
- name: Create GitHub Release
|
|
51
|
-
uses: softprops/action-gh-release@v3
|
|
51
|
+
uses: softprops/action-gh-release@718ea10b132b3b2eba29c1007bb80653f286566b # v3
|
|
52
52
|
with:
|
|
53
53
|
# Only the build artifacts — an unscoped glob also picks up the
|
|
54
54
|
# tracked dist/.gitignore and uploads it as a stray
|
|
@@ -72,10 +72,10 @@ jobs:
|
|
|
72
72
|
contents: read
|
|
73
73
|
id-token: write
|
|
74
74
|
steps:
|
|
75
|
-
- uses: actions/checkout@v6
|
|
75
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
76
76
|
|
|
77
77
|
- name: Install uv
|
|
78
|
-
uses: astral-sh/setup-uv@v8.1.0
|
|
78
|
+
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
|
79
79
|
with:
|
|
80
80
|
version: "0.11.7"
|
|
81
81
|
|
|
@@ -83,4 +83,4 @@ jobs:
|
|
|
83
83
|
run: uv build
|
|
84
84
|
|
|
85
85
|
- name: Publish to PyPI
|
|
86
|
-
uses: pypa/gh-action-pypi-publish@release/v1
|
|
86
|
+
uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # release/v1
|
|
@@ -31,6 +31,10 @@ jobs:
|
|
|
31
31
|
PR_NUMBER: ${{ github.event.pull_request.number }}
|
|
32
32
|
SHA: ${{ github.event.pull_request.head.sha }}
|
|
33
33
|
REPO: ${{ github.repository }}
|
|
34
|
+
# Route the event value through env, not inline ${{ }} in the script —
|
|
35
|
+
# keeps the whole workflow to one untrusted-input discipline (2026-07
|
|
36
|
+
# review). GitHub-generated URL, so risk is low; consistency matters.
|
|
37
|
+
REVIEW_URL: ${{ github.event.review.html_url }}
|
|
34
38
|
run: |
|
|
35
39
|
DECISION=$(gh pr view "$PR_NUMBER" --repo "$REPO" --json reviewDecision -q '.reviewDecision // ""')
|
|
36
40
|
case "$DECISION" in
|
|
@@ -45,4 +49,4 @@ jobs:
|
|
|
45
49
|
--field state="$STATE" \
|
|
46
50
|
--field description="$DESCRIPTION" \
|
|
47
51
|
--field context="review/decision" \
|
|
48
|
-
--field target_url="$
|
|
52
|
+
--field target_url="$REVIEW_URL"
|
|
@@ -17,10 +17,10 @@ jobs:
|
|
|
17
17
|
name: Check pinned third-party tools
|
|
18
18
|
runs-on: ubuntu-24.04
|
|
19
19
|
steps:
|
|
20
|
-
- uses: actions/checkout@v6
|
|
20
|
+
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
|
|
21
21
|
|
|
22
22
|
- name: Install uv
|
|
23
|
-
uses: astral-sh/setup-uv@v8.1.0
|
|
23
|
+
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
|
|
24
24
|
with:
|
|
25
25
|
version: "0.11.7"
|
|
26
26
|
python-version: "3.12"
|
|
@@ -16,13 +16,23 @@ Before doing any GitHub issue, branch, push, PR, review, CI, or merge work, read
|
|
|
16
16
|
├── pyproject.toml # uv-managed; core dep = rich; dev = ruff + pytest
|
|
17
17
|
├── install.sh # user-facing bootstrap (curl | bash)
|
|
18
18
|
├── src/project_init/ # wizard CLI + scaffold engine
|
|
19
|
+
├── plugins/ # synced plugin payloads (tools/sync_plugin.py; ADR-010)
|
|
20
|
+
├── tools/ # sync_plugin.py, third-party update checker, benchmark
|
|
19
21
|
├── templates/
|
|
20
22
|
│ ├── base/ # always copied into target projects
|
|
23
|
+
│ ├── auto/ # always-on emitted artifacts (agent memory files)
|
|
21
24
|
│ ├── fallback/ # shared hooks/skills — rendered only with --no-plugin (ADR-010)
|
|
22
|
-
│ ├──
|
|
23
|
-
│ ├──
|
|
25
|
+
│ ├── lifecycle/ # GitHub lifecycle enforcement (default; --lifecycle none opts out)
|
|
26
|
+
│ ├── lifecycle_fallback/ # lifecycle guard hooks + skills for --no-plugin
|
|
27
|
+
│ ├── obsidian/ # vault overlay for both Obsidian-* presets
|
|
28
|
+
│ ├── graphify/ # Graphify overlay (implies obsidian)
|
|
29
|
+
│ ├── rag/ # tier-3 RAG memory overlay
|
|
30
|
+
│ ├── multi_model/ # CCR model-switching overlay (--multi-model)
|
|
31
|
+
│ ├── governance/ # AI governance overlay (--governance)
|
|
32
|
+
│ ├── observability/ # transcript metrics overlay (--observability)
|
|
33
|
+
│ ├── codex/ antigravity/ amp/ junie/ # per-surface wiring overlays (--agents)
|
|
24
34
|
│ └── presets/ # toml preset definitions
|
|
25
|
-
└── tests/ # focused pytest modules by behavior area
|
|
35
|
+
└── tests/ # focused pytest modules by behavior area (unit/contract/integration/smoke)
|
|
26
36
|
```
|
|
27
37
|
|
|
28
38
|
Template naming convention: directories stored as `dot_claude/`, `dot_gitignore` etc. The scaffolder renames them to `.claude/`, `.gitignore` on copy. This keeps templates visible in GitHub and avoids this repo being auto-loaded as a Claude Code config for itself.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: project-init
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.0
|
|
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/
|
|
@@ -21,10 +21,6 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
21
21
|
Classifier: Topic :: Software Development :: Code Generators
|
|
22
22
|
Requires-Python: >=3.11
|
|
23
23
|
Requires-Dist: rich>=13.7
|
|
24
|
-
Provides-Extra: dev
|
|
25
|
-
Requires-Dist: pytest-xdist>=3.0; extra == 'dev'
|
|
26
|
-
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
27
|
-
Requires-Dist: ruff>=0.4; extra == 'dev'
|
|
28
24
|
Provides-Extra: docs
|
|
29
25
|
Requires-Dist: mkdocs-material>=9.7.6; extra == 'docs'
|
|
30
26
|
Description-Content-Type: text/markdown
|
|
@@ -206,7 +202,7 @@ uvx --from ~/.local/share/project-init project-init . \
|
|
|
206
202
|
The wizard asks (interactive mode only):
|
|
207
203
|
|
|
208
204
|
- Project name / description
|
|
209
|
-
- Language (Python/Node/Go/none) — drives `lint_command`, `format_command`, `test_command`
|
|
205
|
+
- Language (Python/Node/Go/Rust/none) — drives `lint_command`, `format_command`, `test_command`
|
|
210
206
|
- Delivery model (`--delivery library|service|prototype`) — how the project ships, driving its env/CI/release bundle (ADR-015). `service` adds the container **parity bundle** (Dockerfile + `compose.yaml` + devcontainer + `just up`/`build`) and unlocks the deploy overlay; `library` adds a tag-triggered release workflow (publish **disabled** until you wire the registry); `prototype` (default) adds nothing env-specific. `service` requires a language.
|
|
211
207
|
- Deploy overlay (`--deploy none|cloud-run|fly|k8s|registry|custom`) — opt-in, **service only**. Container targets scaffold a build-once-**by-digest** `deploy.yml` (GitHub Environments: staging auto-deploys, production is **gated**) + a declarative `deploy/environments.yaml`, plus `setup_env_protection.sh` (server-side prod gate, tiered by profile) and `whats_deployed.sh`. `none` (default) = your platform (Vercel/Render/Fly/…) owns deploy.
|
|
212
208
|
- Infrastructure-as-Code (`--iac none|opentofu`) — opt-in OpenTofu/HCL skeleton under `infra/` + a plan-on-PR workflow (apply is **manual / environment-gated**, never apply-on-merge). Emits structure only — no resources or credentials.
|
|
@@ -242,7 +238,7 @@ baseline branch protection (require CI green, require PR review, block
|
|
|
242
238
|
force-push) — unprotected default branches undermine the workflow
|
|
243
239
|
enforcement everything else sets up.
|
|
244
240
|
|
|
245
|
-
Your answers are recorded in `.claude/config.yaml`. On the **first** scaffold into a project that already has files, your existing files are never clobbered: when a generated file (e.g. a hand-written `CLAUDE.md`) would differ, the new render is written alongside as a `<file>.new` sibling for you to merge, and the run prints which files were preserved. On a **re-run** (config already present) it refreshes the files project-init manages and never overwrites your `memory/` or `vault/` notes. With `--strict`, templates are rendered and validated in a temporary directory first, then the validated scaffold files are merged into the target; strict mode is not a whole-directory replacement.
|
|
241
|
+
Your answers are recorded in `.claude/config.yaml`. On the **first** scaffold into a project that already has files, your existing files are never clobbered: when a generated file (e.g. a hand-written `CLAUDE.md`) would differ, the new render is written alongside as a `<file>.new` sibling for you to merge, and the run prints which files were preserved. On a **re-run** (config already present) it refreshes the files project-init manages and never overwrites your `memory/` or `vault/` notes — and a managed file you have **edited** since the last scaffold (detected via the recorded content hashes) is protected the same way: your file stays, the fresh render lands as a `<file>.new` sibling. With `--strict`, templates are rendered and validated in a temporary directory first, then the validated scaffold files are merged into the target; strict mode is not a whole-directory replacement.
|
|
246
242
|
|
|
247
243
|
### Remote and web agent sessions
|
|
248
244
|
|
|
@@ -481,7 +477,7 @@ project-init/
|
|
|
481
477
|
|
|
482
478
|
## Status
|
|
483
479
|
|
|
484
|
-
Actively developed and published to [PyPI](https://pypi.org/project/project-init/) (current release: v0.
|
|
480
|
+
Actively developed and published to [PyPI](https://pypi.org/project/project-init/) (current release: v0.6.0). 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.
|
|
485
481
|
|
|
486
482
|
## License
|
|
487
483
|
|
|
@@ -175,7 +175,7 @@ uvx --from ~/.local/share/project-init project-init . \
|
|
|
175
175
|
The wizard asks (interactive mode only):
|
|
176
176
|
|
|
177
177
|
- Project name / description
|
|
178
|
-
- Language (Python/Node/Go/none) — drives `lint_command`, `format_command`, `test_command`
|
|
178
|
+
- Language (Python/Node/Go/Rust/none) — drives `lint_command`, `format_command`, `test_command`
|
|
179
179
|
- Delivery model (`--delivery library|service|prototype`) — how the project ships, driving its env/CI/release bundle (ADR-015). `service` adds the container **parity bundle** (Dockerfile + `compose.yaml` + devcontainer + `just up`/`build`) and unlocks the deploy overlay; `library` adds a tag-triggered release workflow (publish **disabled** until you wire the registry); `prototype` (default) adds nothing env-specific. `service` requires a language.
|
|
180
180
|
- Deploy overlay (`--deploy none|cloud-run|fly|k8s|registry|custom`) — opt-in, **service only**. Container targets scaffold a build-once-**by-digest** `deploy.yml` (GitHub Environments: staging auto-deploys, production is **gated**) + a declarative `deploy/environments.yaml`, plus `setup_env_protection.sh` (server-side prod gate, tiered by profile) and `whats_deployed.sh`. `none` (default) = your platform (Vercel/Render/Fly/…) owns deploy.
|
|
181
181
|
- Infrastructure-as-Code (`--iac none|opentofu`) — opt-in OpenTofu/HCL skeleton under `infra/` + a plan-on-PR workflow (apply is **manual / environment-gated**, never apply-on-merge). Emits structure only — no resources or credentials.
|
|
@@ -211,7 +211,7 @@ baseline branch protection (require CI green, require PR review, block
|
|
|
211
211
|
force-push) — unprotected default branches undermine the workflow
|
|
212
212
|
enforcement everything else sets up.
|
|
213
213
|
|
|
214
|
-
Your answers are recorded in `.claude/config.yaml`. On the **first** scaffold into a project that already has files, your existing files are never clobbered: when a generated file (e.g. a hand-written `CLAUDE.md`) would differ, the new render is written alongside as a `<file>.new` sibling for you to merge, and the run prints which files were preserved. On a **re-run** (config already present) it refreshes the files project-init manages and never overwrites your `memory/` or `vault/` notes. With `--strict`, templates are rendered and validated in a temporary directory first, then the validated scaffold files are merged into the target; strict mode is not a whole-directory replacement.
|
|
214
|
+
Your answers are recorded in `.claude/config.yaml`. On the **first** scaffold into a project that already has files, your existing files are never clobbered: when a generated file (e.g. a hand-written `CLAUDE.md`) would differ, the new render is written alongside as a `<file>.new` sibling for you to merge, and the run prints which files were preserved. On a **re-run** (config already present) it refreshes the files project-init manages and never overwrites your `memory/` or `vault/` notes — and a managed file you have **edited** since the last scaffold (detected via the recorded content hashes) is protected the same way: your file stays, the fresh render lands as a `<file>.new` sibling. With `--strict`, templates are rendered and validated in a temporary directory first, then the validated scaffold files are merged into the target; strict mode is not a whole-directory replacement.
|
|
215
215
|
|
|
216
216
|
### Remote and web agent sessions
|
|
217
217
|
|
|
@@ -450,7 +450,7 @@ project-init/
|
|
|
450
450
|
|
|
451
451
|
## Status
|
|
452
452
|
|
|
453
|
-
Actively developed and published to [PyPI](https://pypi.org/project/project-init/) (current release: v0.
|
|
453
|
+
Actively developed and published to [PyPI](https://pypi.org/project/project-init/) (current release: v0.6.0). 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.
|
|
454
454
|
|
|
455
455
|
## License
|
|
456
456
|
|