open-codev-workflow 0.1.4__tar.gz → 0.4.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.
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/LICENSE +1 -1
- open_codev_workflow-0.4.0/PKG-INFO +137 -0
- open_codev_workflow-0.4.0/README.md +107 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/pyproject.toml +20 -9
- open_codev_workflow-0.4.0/src/codev_workflow/__init__.py +33 -0
- open_codev_workflow-0.4.0/src/codev_workflow/__main__.py +32 -0
- open_codev_workflow-0.4.0/src/codev_workflow/adapter.py +229 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/agents/assistant.md +59 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/audit-google-python-style/SKILL.md +185 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/audit-google-python-style/agents/openai.yaml +7 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/audit-google-python-style/references/check-matrix.md +28 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/audit-google-python-style/scripts/check_google_rules.py +1191 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/audit-google-python-style/skill-card.md +23 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/audit-google-typescript-style/SKILL.md +137 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/audit-google-typescript-style/agents/openai.yaml +7 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/audit-google-typescript-style/references/check-matrix.md +33 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/audit-google-typescript-style/scripts/check_google_rules.mjs +136 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/audit-google-typescript-style/skill-card.md +23 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/build-change/SKILL.md +25 -4
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/build-change/skill-card.md +23 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/critique-review/SKILL.md +12 -3
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/critique-review/skill-card.md +23 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/define-product/SKILL.md +7 -4
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/define-product/skill-card.md +23 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/design-skill-eval/SKILL.md +222 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/design-skill-eval/agents/openai.yaml +4 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/design-skill-eval/references/eval-design-checklist.md +110 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/design-skill-eval/skill-card.md +23 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/design-solution/SKILL.md +194 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/design-solution/assets/adr.template.md +37 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/design-solution/assets/design.template.md +1 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/design-solution/skill-card.md +23 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/github-actions-ci-results/SKILL.md +98 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/github-actions-ci-results/agents/openai.yaml +4 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/github-actions-ci-results/references/gh-command-cookbook.md +65 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/github-actions-ci-results/skill-card.md +23 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/launch-product/SKILL.md +4 -1
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/launch-product/skill-card.md +23 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/plan-delivery/SKILL.md +39 -14
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/plan-delivery/assets/delivery-plan.template.md +1 -1
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/plan-delivery/skill-card.md +23 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/pr-review/SKILL.md +47 -13
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/pr-review/scripts/publish_review.py +102 -23
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/pr-review/skill-card.md +23 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/review-change/SKILL.md +25 -15
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/review-change/skill-card.md +23 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/specify-project/SKILL.md +8 -2
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/specify-project/scripts/validate_specification.py +28 -1
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/specify-project/skill-card.md +23 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/technical-writing-style/SKILL.md +92 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/technical-writing-style/agents/openai.yaml +4 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/technical-writing-style/references/writing-style.md +230 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/technical-writing-style/scripts/check_structure.py +410 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/technical-writing-style/skill-card.md +23 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/testing-craft/SKILL.md +80 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/testing-craft/agents/openai.yaml +4 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/testing-craft/references/test-strategy.md +115 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/testing-craft/references/test-suite-health.md +105 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/testing-craft/references/writing-tests.md +103 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.agents/skills/testing-craft/skill-card.md +23 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.claude/CLAUDE.md +38 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.claude/agents/architecture-maintainability-specialist.md +79 -0
- {open_codev_workflow-0.1.4/src/codev_workflow/bundle/.agents → open_codev_workflow-0.4.0/src/codev_workflow/bundle/.claude}/agents/builder.md +15 -13
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.claude/agents/code-audit-gate.md.template +62 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.claude/agents/code-audit.md.template +74 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.claude/agents/concurrency-specialist.md +42 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.claude/agents/correctness-tests-specialist.md +54 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.claude/agents/lightweight-reviewer.md +61 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.claude/agents/orchestrator.md +163 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.claude/agents/outer-loop-runner.md +215 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.claude/agents/planner.md +54 -0
- {open_codev_workflow-0.1.4/src/codev_workflow/bundle/.agents → open_codev_workflow-0.4.0/src/codev_workflow/bundle/.claude}/agents/reviewer.md +16 -11
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.claude/agents/rollout-specialist.md +45 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.claude/agents/security-data-specialist.md +42 -0
- {open_codev_workflow-0.1.4/src/codev_workflow/bundle/.junie → open_codev_workflow-0.4.0/src/codev_workflow/bundle/.claude}/commands/pr-review.md +5 -3
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.claude/hooks/require_plan.py +203 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.claude/settings.json +18 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.codev/for-ai/ai-agent-guidelines.md +449 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.github/ISSUE_TEMPLATE/task.md +48 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.github/pull_request_template.md +40 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.junie/agents/assistant.md +56 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.opencode/agents/architecture-maintainability-specialist.md +88 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.opencode/agents/builder.md +11 -4
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.opencode/agents/code-audit-gate.md.template +77 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.opencode/agents/code-audit.md.template +89 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.opencode/agents/concurrency-specialist.md +51 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.opencode/agents/correctness-tests-specialist.md +63 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.opencode/agents/lightweight-reviewer.md +71 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.opencode/agents/orchestrator.md +176 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.opencode/agents/outer-loop-runner.md +239 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.opencode/agents/planner.md +64 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.opencode/agents/reviewer.md +12 -2
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.opencode/agents/rollout-specialist.md +54 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/.opencode/agents/security-data-specialist.md +51 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/AGENTS.md +12 -8
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/docs/codev/onboarding/examples.md +108 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/docs/codev/onboarding/normal-development-workflow.md +73 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/docs/codev/onboarding/onboarding-guide.md +166 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/docs/codev/onboarding/skill-card.template.md +64 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/docs/codev/onboarding/starting-prompts.md +73 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/docs/codev/tutorials/01-your-first-fix.md +296 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/docs/codev/tutorials/02-a-design-worthy-change.md +100 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/docs/codev/tutorials/03-outer-loop-review.md +106 -0
- open_codev_workflow-0.4.0/src/codev_workflow/bundle/docs/codev/tutorials/04-multi-developer-coordination.md +108 -0
- open_codev_workflow-0.4.0/src/codev_workflow/cli.py +1526 -0
- open_codev_workflow-0.4.0/src/codev_workflow/config.py +158 -0
- open_codev_workflow-0.4.0/src/codev_workflow/conflict_wizard.py +140 -0
- open_codev_workflow-0.4.0/src/codev_workflow/eval.py +2686 -0
- open_codev_workflow-0.4.0/src/codev_workflow/eval_checks.py +220 -0
- open_codev_workflow-0.4.0/src/codev_workflow/eval_environment.py +163 -0
- open_codev_workflow-0.4.0/src/codev_workflow/eval_nvidia.py +379 -0
- open_codev_workflow-0.4.0/src/codev_workflow/git_ops.py +685 -0
- open_codev_workflow-0.4.0/src/codev_workflow/installer.py +1664 -0
- open_codev_workflow-0.4.0/src/codev_workflow/task.py +1323 -0
- open_codev_workflow-0.4.0/src/open_codev_workflow.egg-info/PKG-INFO +137 -0
- open_codev_workflow-0.4.0/src/open_codev_workflow.egg-info/SOURCES.txt +155 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/open_codev_workflow.egg-info/requires.txt +1 -0
- open_codev_workflow-0.4.0/tests/test_adapter.py +252 -0
- open_codev_workflow-0.4.0/tests/test_claude_hook.py +261 -0
- open_codev_workflow-0.4.0/tests/test_cli.py +2473 -0
- open_codev_workflow-0.4.0/tests/test_config.py +203 -0
- open_codev_workflow-0.4.0/tests/test_conflict_wizard.py +198 -0
- open_codev_workflow-0.4.0/tests/test_documentation_links.py +109 -0
- open_codev_workflow-0.4.0/tests/test_eval.py +2573 -0
- open_codev_workflow-0.4.0/tests/test_eval_artifact_set.py +325 -0
- open_codev_workflow-0.4.0/tests/test_eval_checks.py +279 -0
- open_codev_workflow-0.4.0/tests/test_eval_docker_benchmark.py +388 -0
- open_codev_workflow-0.4.0/tests/test_eval_environment.py +171 -0
- open_codev_workflow-0.4.0/tests/test_eval_nvidia.py +348 -0
- open_codev_workflow-0.4.0/tests/test_git_ops.py +1122 -0
- open_codev_workflow-0.4.0/tests/test_google_style_audit_rules.py +534 -0
- open_codev_workflow-0.4.0/tests/test_installer.py +1346 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/tests/test_pr_review.py +31 -0
- open_codev_workflow-0.4.0/tests/test_seeded_defect_tasks.py +236 -0
- open_codev_workflow-0.4.0/tests/test_task.py +2377 -0
- open_codev_workflow-0.4.0/tests/test_verify_release.py +192 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/tests/test_version.py +29 -1
- open_codev_workflow-0.1.4/PKG-INFO +0 -256
- open_codev_workflow-0.1.4/README.md +0 -227
- open_codev_workflow-0.1.4/src/codev_workflow/__init__.py +0 -5
- open_codev_workflow-0.1.4/src/codev_workflow/__main__.py +0 -4
- open_codev_workflow-0.1.4/src/codev_workflow/bundle/.agents/agents/orchestrator.md +0 -62
- open_codev_workflow-0.1.4/src/codev_workflow/bundle/.agents/skills/clean-code-review/SKILL.md +0 -252
- open_codev_workflow-0.1.4/src/codev_workflow/bundle/.agents/skills/clean-code-review/agents/openai.yaml +0 -4
- open_codev_workflow-0.1.4/src/codev_workflow/bundle/.agents/skills/design-solution/SKILL.md +0 -75
- open_codev_workflow-0.1.4/src/codev_workflow/bundle/.agents/skills/design-solution/assets/decision.template.md +0 -26
- open_codev_workflow-0.1.4/src/codev_workflow/bundle/.junie/agents/builder.md +0 -41
- open_codev_workflow-0.1.4/src/codev_workflow/bundle/.junie/agents/orchestrator.md +0 -56
- open_codev_workflow-0.1.4/src/codev_workflow/bundle/.junie/agents/reviewer.md +0 -26
- open_codev_workflow-0.1.4/src/codev_workflow/bundle/.opencode/agents/orchestrator.md +0 -72
- open_codev_workflow-0.1.4/src/codev_workflow/bundle/docs/AI-WORKFLOW-PROMPTS.md +0 -322
- open_codev_workflow-0.1.4/src/codev_workflow/bundle/docs/WORKFLOW-COOKBOOK.md +0 -427
- open_codev_workflow-0.1.4/src/codev_workflow/bundle/docs/WORKFLOW-HUMAN.md +0 -221
- open_codev_workflow-0.1.4/src/codev_workflow/bundle/docs/for-ai/WORKFLOW-AGENTS.md +0 -188
- open_codev_workflow-0.1.4/src/codev_workflow/bundle/docs/handbooks/IDEA-TO-PRODUCTION-HANDBOOK.md +0 -1198
- open_codev_workflow-0.1.4/src/codev_workflow/bundle/docs/handbooks/LANGUAGE-AGNOSTIC-PROJECT-HANDBOOK.md +0 -753
- open_codev_workflow-0.1.4/src/codev_workflow/bundle/docs/handbooks/PYTHON-PROJECT-HANDBOOK.md +0 -955
- open_codev_workflow-0.1.4/src/codev_workflow/bundle/evals/development-workflow/scenarios.json +0 -169
- open_codev_workflow-0.1.4/src/codev_workflow/bundle/scripts/evaluate-development-workflow.py +0 -352
- open_codev_workflow-0.1.4/src/codev_workflow/bundle/scripts/validate-development-workflow.py +0 -216
- open_codev_workflow-0.1.4/src/codev_workflow/cli.py +0 -154
- open_codev_workflow-0.1.4/src/codev_workflow/installer.py +0 -905
- open_codev_workflow-0.1.4/src/open_codev_workflow.egg-info/PKG-INFO +0 -256
- open_codev_workflow-0.1.4/src/open_codev_workflow.egg-info/SOURCES.txt +0 -71
- open_codev_workflow-0.1.4/tests/test_cli.py +0 -99
- open_codev_workflow-0.1.4/tests/test_installer.py +0 -316
- open_codev_workflow-0.1.4/tests/test_verify_release.py +0 -39
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/setup.cfg +0 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/build-change/agents/openai.yaml +0 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/build-change/assets/implementation-plan.template.md +0 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/critique-review/agents/openai.yaml +0 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/critique-review/assets/suggested-edit.template.md +0 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/define-product/agents/openai.yaml +0 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/define-product/assets/brief.template.md +0 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/design-solution/agents/openai.yaml +0 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/launch-product/agents/openai.yaml +0 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/launch-product/assets/launch-plan.template.md +0 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/plan-delivery/agents/openai.yaml +0 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/pr-review/agents/openai.yaml +0 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/pr-review/scripts/set-github-token.ps1 +0 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/review-change/agents/openai.yaml +0 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/specify-project/agents/openai.yaml +0 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/specify-project/assets/specification.template.md +0 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/codev_workflow/bundle/.agents/skills/specify-project/references/interview-coverage.md +0 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/open_codev_workflow.egg-info/dependency_links.txt +0 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/open_codev_workflow.egg-info/entry_points.txt +0 -0
- {open_codev_workflow-0.1.4 → open_codev_workflow-0.4.0}/src/open_codev_workflow.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: open-codev-workflow
|
|
3
|
+
Version: 0.4.0
|
|
4
|
+
Summary: Human-guided AI software delivery for real repositories.
|
|
5
|
+
Author: Martin Urban
|
|
6
|
+
License-Expression: BSD-3-Clause
|
|
7
|
+
Project-URL: Homepage, https://github.com/urban233/CoDev
|
|
8
|
+
Project-URL: Repository, https://github.com/urban233/CoDev
|
|
9
|
+
Project-URL: Issues, https://github.com/urban233/CoDev/issues
|
|
10
|
+
Keywords: ai,developer-tools,software-delivery,antigravity,claude-code,junie,opencode
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
20
|
+
Requires-Python: >=3.11
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE
|
|
23
|
+
Requires-Dist: pre-commit>=4.6.1
|
|
24
|
+
Provides-Extra: dev
|
|
25
|
+
Requires-Dist: build>=1.2.2; extra == "dev"
|
|
26
|
+
Requires-Dist: mypy>=1.15; extra == "dev"
|
|
27
|
+
Requires-Dist: ruff>=0.11; extra == "dev"
|
|
28
|
+
Requires-Dist: twine>=6.1; extra == "dev"
|
|
29
|
+
Dynamic: license-file
|
|
30
|
+
|
|
31
|
+
<p align="center">
|
|
32
|
+
<img src="assets/codev-mark.svg" width="96" height="96" alt="CoDev mark">
|
|
33
|
+
</p>
|
|
34
|
+
|
|
35
|
+
<h1 align="center">CoDev</h1>
|
|
36
|
+
|
|
37
|
+
<p align="center"><strong>Human-guided AI software delivery.</strong></p>
|
|
38
|
+
|
|
39
|
+

|
|
40
|
+

|
|
41
|
+

|
|
42
|
+

|
|
43
|
+

|
|
44
|
+

|
|
45
|
+

|
|
46
|
+

|
|
47
|
+

|
|
48
|
+
|
|
49
|
+
CoDev installs a small, production-minded collaboration system into any Git repository. A
|
|
50
|
+
developer and AI move through four steps — **Understand, Build, Review, Ship** — plus two
|
|
51
|
+
that only show up when the work actually needs them: **Specify** for a genuinely new
|
|
52
|
+
product, **Launch** for a real rollout decision. Review is layered, not a single pass: a
|
|
53
|
+
fast correctness check after each build, an automatic style and maintainability gate
|
|
54
|
+
immediately before a pull request opens, and five parallel specialist reviewers once it's
|
|
55
|
+
open. It supports bounded three-agent execution without turning product development into
|
|
56
|
+
an unattended coding loop.
|
|
57
|
+
|
|
58
|
+
## Why CoDev
|
|
59
|
+
|
|
60
|
+
- One workflow for solo developers and multi-developer teams.
|
|
61
|
+
- Repository-grounded plans instead of invented APIs or architecture.
|
|
62
|
+
- A bounded builder, an automatic pre-PR audit gate, and five parallel specialist
|
|
63
|
+
reviewers — not just one read-only pass.
|
|
64
|
+
- Human authority over material decisions, merge, deployment, and rollout.
|
|
65
|
+
- A general-purpose skill-evaluation harness — measure whether a skill (CoDev's own, or
|
|
66
|
+
one you wrote) actually helps, empirically, rather than just trusting that it does.
|
|
67
|
+
- Versioned, conflict-aware installation across existing repositories.
|
|
68
|
+
- No runtime dependency in the software being built.
|
|
69
|
+
|
|
70
|
+
## Try it in 60 seconds
|
|
71
|
+
|
|
72
|
+
```shell
|
|
73
|
+
pipx install open-codev-workflow
|
|
74
|
+
# or: uv tool install open-codev-workflow
|
|
75
|
+
|
|
76
|
+
codev init --target . --agent-platform all
|
|
77
|
+
codev status --target .
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
```text
|
|
81
|
+
CoDev 0.4.0 - /path/to/your/repo
|
|
82
|
+
Bundle: healthy (83 managed files, no drift)
|
|
83
|
+
Adapters: opencode
|
|
84
|
+
Tasks in progress: 0
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Commit the installed files as one infrastructure change, then start an AI session in the
|
|
88
|
+
repository and describe a small bug or task in plain language — you don't need to name a
|
|
89
|
+
skill. **[Tutorial 1](src/codev_workflow/bundle/docs/codev/tutorials/01-your-first-fix.md)
|
|
90
|
+
walks one small fix from here to a merged pull request, with every command and real
|
|
91
|
+
output shown.**
|
|
92
|
+
|
|
93
|
+
## Where to go next
|
|
94
|
+
|
|
95
|
+
| I want to... | Go to |
|
|
96
|
+
|---|---|
|
|
97
|
+
| Understand the mental model before doing anything | [Onboarding guide](src/codev_workflow/bundle/docs/codev/onboarding/onboarding-guide.md) |
|
|
98
|
+
| Just try it, right now | [Tutorial 1: your first fix](src/codev_workflow/bundle/docs/codev/tutorials/01-your-first-fix.md) |
|
|
99
|
+
| See every command | [CLI reference](docs/cli-reference.md) |
|
|
100
|
+
| See exactly what gets installed and why | [Architecture](docs/architecture.md) |
|
|
101
|
+
| Adopt CoDev for a team, not just myself | [Adoption guide](docs/adoption.md) |
|
|
102
|
+
| Understand why a specific mechanism exists | [Architecture Decision Records](docs/adr/) |
|
|
103
|
+
| Set up GitHub CLI for PR review on Windows | [PR review setup](docs/pr-review-github-cli-setup.md) |
|
|
104
|
+
| Contribute to CoDev itself | [Contributing](CONTRIBUTING.md) |
|
|
105
|
+
| See everything `docs/` contains, organized by audience | [docs/README.md](docs/README.md) |
|
|
106
|
+
|
|
107
|
+
## Design principles
|
|
108
|
+
|
|
109
|
+
1. **Local at use time.** Agents read ordinary files in the target repository.
|
|
110
|
+
2. **Central at maintenance time.** This repository is the canonical source.
|
|
111
|
+
3. **Human at authority boundaries.** Automation supplies evidence, not approval.
|
|
112
|
+
4. **Small by default.** Deeper design and delivery planning appear only when risk or
|
|
113
|
+
coordination requires them.
|
|
114
|
+
5. **Safe to adopt.** Existing instructions and OpenCode settings are preserved.
|
|
115
|
+
|
|
116
|
+
## Development
|
|
117
|
+
|
|
118
|
+
```shell
|
|
119
|
+
python -m unittest discover -s tests -v
|
|
120
|
+
python -m compileall -q src tests
|
|
121
|
+
python -m codev_workflow --version
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Optional development checks:
|
|
125
|
+
|
|
126
|
+
```shell
|
|
127
|
+
python -m ruff check .
|
|
128
|
+
python -m ruff format --check .
|
|
129
|
+
python -m mypy
|
|
130
|
+
python -m build
|
|
131
|
+
python scripts/check_bundled_doc_links.py
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for what's expected of a change, and
|
|
135
|
+
[docs/releasing.md](docs/releasing.md) for the release process.
|
|
136
|
+
|
|
137
|
+
CoDev is licensed under BSD-3-Clause.
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/codev-mark.svg" width="96" height="96" alt="CoDev mark">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">CoDev</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center"><strong>Human-guided AI software delivery.</strong></p>
|
|
8
|
+
|
|
9
|
+

|
|
10
|
+

|
|
11
|
+

|
|
12
|
+

|
|
13
|
+

|
|
14
|
+

|
|
15
|
+

|
|
16
|
+

|
|
17
|
+

|
|
18
|
+
|
|
19
|
+
CoDev installs a small, production-minded collaboration system into any Git repository. A
|
|
20
|
+
developer and AI move through four steps — **Understand, Build, Review, Ship** — plus two
|
|
21
|
+
that only show up when the work actually needs them: **Specify** for a genuinely new
|
|
22
|
+
product, **Launch** for a real rollout decision. Review is layered, not a single pass: a
|
|
23
|
+
fast correctness check after each build, an automatic style and maintainability gate
|
|
24
|
+
immediately before a pull request opens, and five parallel specialist reviewers once it's
|
|
25
|
+
open. It supports bounded three-agent execution without turning product development into
|
|
26
|
+
an unattended coding loop.
|
|
27
|
+
|
|
28
|
+
## Why CoDev
|
|
29
|
+
|
|
30
|
+
- One workflow for solo developers and multi-developer teams.
|
|
31
|
+
- Repository-grounded plans instead of invented APIs or architecture.
|
|
32
|
+
- A bounded builder, an automatic pre-PR audit gate, and five parallel specialist
|
|
33
|
+
reviewers — not just one read-only pass.
|
|
34
|
+
- Human authority over material decisions, merge, deployment, and rollout.
|
|
35
|
+
- A general-purpose skill-evaluation harness — measure whether a skill (CoDev's own, or
|
|
36
|
+
one you wrote) actually helps, empirically, rather than just trusting that it does.
|
|
37
|
+
- Versioned, conflict-aware installation across existing repositories.
|
|
38
|
+
- No runtime dependency in the software being built.
|
|
39
|
+
|
|
40
|
+
## Try it in 60 seconds
|
|
41
|
+
|
|
42
|
+
```shell
|
|
43
|
+
pipx install open-codev-workflow
|
|
44
|
+
# or: uv tool install open-codev-workflow
|
|
45
|
+
|
|
46
|
+
codev init --target . --agent-platform all
|
|
47
|
+
codev status --target .
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
CoDev 0.4.0 - /path/to/your/repo
|
|
52
|
+
Bundle: healthy (83 managed files, no drift)
|
|
53
|
+
Adapters: opencode
|
|
54
|
+
Tasks in progress: 0
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Commit the installed files as one infrastructure change, then start an AI session in the
|
|
58
|
+
repository and describe a small bug or task in plain language — you don't need to name a
|
|
59
|
+
skill. **[Tutorial 1](src/codev_workflow/bundle/docs/codev/tutorials/01-your-first-fix.md)
|
|
60
|
+
walks one small fix from here to a merged pull request, with every command and real
|
|
61
|
+
output shown.**
|
|
62
|
+
|
|
63
|
+
## Where to go next
|
|
64
|
+
|
|
65
|
+
| I want to... | Go to |
|
|
66
|
+
|---|---|
|
|
67
|
+
| Understand the mental model before doing anything | [Onboarding guide](src/codev_workflow/bundle/docs/codev/onboarding/onboarding-guide.md) |
|
|
68
|
+
| Just try it, right now | [Tutorial 1: your first fix](src/codev_workflow/bundle/docs/codev/tutorials/01-your-first-fix.md) |
|
|
69
|
+
| See every command | [CLI reference](docs/cli-reference.md) |
|
|
70
|
+
| See exactly what gets installed and why | [Architecture](docs/architecture.md) |
|
|
71
|
+
| Adopt CoDev for a team, not just myself | [Adoption guide](docs/adoption.md) |
|
|
72
|
+
| Understand why a specific mechanism exists | [Architecture Decision Records](docs/adr/) |
|
|
73
|
+
| Set up GitHub CLI for PR review on Windows | [PR review setup](docs/pr-review-github-cli-setup.md) |
|
|
74
|
+
| Contribute to CoDev itself | [Contributing](CONTRIBUTING.md) |
|
|
75
|
+
| See everything `docs/` contains, organized by audience | [docs/README.md](docs/README.md) |
|
|
76
|
+
|
|
77
|
+
## Design principles
|
|
78
|
+
|
|
79
|
+
1. **Local at use time.** Agents read ordinary files in the target repository.
|
|
80
|
+
2. **Central at maintenance time.** This repository is the canonical source.
|
|
81
|
+
3. **Human at authority boundaries.** Automation supplies evidence, not approval.
|
|
82
|
+
4. **Small by default.** Deeper design and delivery planning appear only when risk or
|
|
83
|
+
coordination requires them.
|
|
84
|
+
5. **Safe to adopt.** Existing instructions and OpenCode settings are preserved.
|
|
85
|
+
|
|
86
|
+
## Development
|
|
87
|
+
|
|
88
|
+
```shell
|
|
89
|
+
python -m unittest discover -s tests -v
|
|
90
|
+
python -m compileall -q src tests
|
|
91
|
+
python -m codev_workflow --version
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Optional development checks:
|
|
95
|
+
|
|
96
|
+
```shell
|
|
97
|
+
python -m ruff check .
|
|
98
|
+
python -m ruff format --check .
|
|
99
|
+
python -m mypy
|
|
100
|
+
python -m build
|
|
101
|
+
python scripts/check_bundled_doc_links.py
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for what's expected of a change, and
|
|
105
|
+
[docs/releasing.md](docs/releasing.md) for the release process.
|
|
106
|
+
|
|
107
|
+
CoDev is licensed under BSD-3-Clause.
|
|
@@ -4,13 +4,13 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "open-codev-workflow"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.4.0"
|
|
8
8
|
description = "Human-guided AI software delivery for real repositories."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
11
11
|
license = "BSD-3-Clause"
|
|
12
12
|
authors = [{ name = "Martin Urban" }]
|
|
13
|
-
keywords = ["ai", "developer-tools", "software-delivery", "antigravity", "
|
|
13
|
+
keywords = ["ai", "developer-tools", "software-delivery", "antigravity", "claude-code", "junie", "opencode"]
|
|
14
14
|
classifiers = [
|
|
15
15
|
"Development Status :: 3 - Alpha",
|
|
16
16
|
"Environment :: Console",
|
|
@@ -22,7 +22,9 @@ classifiers = [
|
|
|
22
22
|
"Programming Language :: Python :: 3.13",
|
|
23
23
|
"Topic :: Software Development :: Quality Assurance",
|
|
24
24
|
]
|
|
25
|
-
dependencies = [
|
|
25
|
+
dependencies = [
|
|
26
|
+
"pre-commit>=4.6.1",
|
|
27
|
+
]
|
|
26
28
|
|
|
27
29
|
[project.urls]
|
|
28
30
|
Homepage = "https://github.com/urban233/CoDev"
|
|
@@ -50,26 +52,35 @@ where = ["src"]
|
|
|
50
52
|
[tool.setuptools.package-data]
|
|
51
53
|
codev_workflow = [
|
|
52
54
|
"bundle/AGENTS.md",
|
|
55
|
+
"bundle/.codev/for-ai/*.md",
|
|
53
56
|
"bundle/.agents/skills/*/SKILL.md",
|
|
57
|
+
"bundle/.agents/skills/*/skill-card.md",
|
|
54
58
|
"bundle/.agents/skills/*/agents/*.yaml",
|
|
55
59
|
"bundle/.agents/skills/*/assets/*",
|
|
56
60
|
"bundle/.agents/skills/*/references/*",
|
|
57
61
|
"bundle/.agents/skills/*/scripts/*",
|
|
58
62
|
"bundle/.agents/agents/*.md",
|
|
63
|
+
"bundle/.agents/agents/*.md.template",
|
|
64
|
+
"bundle/.claude/agents/*.md",
|
|
65
|
+
"bundle/.claude/agents/*.md.template",
|
|
66
|
+
"bundle/.claude/commands/*.md",
|
|
67
|
+
"bundle/.claude/hooks/*.py",
|
|
68
|
+
"bundle/.claude/settings.json",
|
|
69
|
+
"bundle/.claude/CLAUDE.md",
|
|
59
70
|
"bundle/.opencode/agents/*.md",
|
|
71
|
+
"bundle/.opencode/agents/*.md.template",
|
|
60
72
|
"bundle/.junie/agents/*.md",
|
|
61
|
-
"bundle/.
|
|
73
|
+
"bundle/.github/*.md",
|
|
74
|
+
"bundle/.github/ISSUE_TEMPLATE/*.md",
|
|
62
75
|
"bundle/docs/*.md",
|
|
63
|
-
"bundle/docs/
|
|
64
|
-
"bundle/docs/
|
|
65
|
-
"bundle/evals/development-workflow/*.json",
|
|
66
|
-
"bundle/scripts/*.py",
|
|
76
|
+
"bundle/docs/codev/onboarding/*.md",
|
|
77
|
+
"bundle/docs/codev/tutorials/*.md",
|
|
67
78
|
]
|
|
68
79
|
|
|
69
80
|
[tool.ruff]
|
|
70
81
|
line-length = 88
|
|
71
82
|
target-version = "py311"
|
|
72
|
-
exclude = ["src/codev_workflow/bundle"]
|
|
83
|
+
exclude = ["src/codev_workflow/bundle", ".codev/eval/tasks/*/repository"]
|
|
73
84
|
|
|
74
85
|
[tool.ruff.lint]
|
|
75
86
|
select = ["E", "F", "I", "UP", "B", "SIM"]
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# BSD 3-Clause License
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2026, Martin Urban, Hannah Kullik
|
|
4
|
+
#
|
|
5
|
+
# Redistribution and use in source and binary forms, with or without
|
|
6
|
+
# modification, are permitted provided that the following conditions are met:
|
|
7
|
+
#
|
|
8
|
+
# 1. Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
# list of conditions and the following disclaimer.
|
|
10
|
+
#
|
|
11
|
+
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
# this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
# and/or other materials provided with the distribution.
|
|
14
|
+
#
|
|
15
|
+
# 3. Neither the name of the copyright holder nor the names of its
|
|
16
|
+
# contributors may be used to endorse or promote products derived from
|
|
17
|
+
# this software without specific prior written permission.
|
|
18
|
+
#
|
|
19
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
20
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
21
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
+
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
23
|
+
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
24
|
+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
25
|
+
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
26
|
+
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
27
|
+
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
28
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
29
|
+
"""CoDev: human-guided AI software delivery."""
|
|
30
|
+
|
|
31
|
+
__all__ = ["__version__"]
|
|
32
|
+
|
|
33
|
+
__version__ = "0.4.0"
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# BSD 3-Clause License
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2026, Martin Urban, Hannah Kullik
|
|
4
|
+
#
|
|
5
|
+
# Redistribution and use in source and binary forms, with or without
|
|
6
|
+
# modification, are permitted provided that the following conditions are met:
|
|
7
|
+
#
|
|
8
|
+
# 1. Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
# list of conditions and the following disclaimer.
|
|
10
|
+
#
|
|
11
|
+
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
# this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
# and/or other materials provided with the distribution.
|
|
14
|
+
#
|
|
15
|
+
# 3. Neither the name of the copyright holder nor the names of its
|
|
16
|
+
# contributors may be used to endorse or promote products derived from
|
|
17
|
+
# this software without specific prior written permission.
|
|
18
|
+
#
|
|
19
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
20
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
21
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
+
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
23
|
+
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
24
|
+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
25
|
+
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
26
|
+
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
27
|
+
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
28
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
29
|
+
from codev_workflow.cli import main
|
|
30
|
+
|
|
31
|
+
if __name__ == "__main__":
|
|
32
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# BSD 3-Clause License
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2026, Martin Urban, Hannah Kullik
|
|
4
|
+
#
|
|
5
|
+
# Redistribution and use in source and binary forms, with or without
|
|
6
|
+
# modification, are permitted provided that the following conditions are met:
|
|
7
|
+
#
|
|
8
|
+
# 1. Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
# list of conditions and the following disclaimer.
|
|
10
|
+
#
|
|
11
|
+
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
# this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
# and/or other materials provided with the distribution.
|
|
14
|
+
#
|
|
15
|
+
# 3. Neither the name of the copyright holder nor the names of its
|
|
16
|
+
# contributors may be used to endorse or promote products derived from
|
|
17
|
+
# this software without specific prior written permission.
|
|
18
|
+
#
|
|
19
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
20
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
21
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
+
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
23
|
+
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
24
|
+
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
25
|
+
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
26
|
+
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
27
|
+
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
28
|
+
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
29
|
+
"""Conformance checks for installed platform adapters.
|
|
30
|
+
|
|
31
|
+
Verifies structural parity across the full-workflow platform adapters
|
|
32
|
+
(OpenCode, Claude Code) without requiring them to be rendered from one source
|
|
33
|
+
yet: every role file must reference the `codev task` lifecycle wiring, must
|
|
34
|
+
not resurrect the retired P0-P3 finding scale, and must not grant
|
|
35
|
+
unrestricted shell execution. This is a second line of defense against
|
|
36
|
+
cross-adapter drift, not a substitute for eventually rendering adapters from
|
|
37
|
+
one config source.
|
|
38
|
+
|
|
39
|
+
Junie and Antigravity are a narrower tier (ADR-0031): a single bounded-edit
|
|
40
|
+
`assistant` role with no task-lifecycle integration. They still go through
|
|
41
|
+
the same forbidden-pattern checks below (no unrestricted shell, no raw git
|
|
42
|
+
mutation), just with no required markers to enforce.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
from __future__ import annotations
|
|
46
|
+
|
|
47
|
+
import tomllib
|
|
48
|
+
from dataclasses import dataclass
|
|
49
|
+
from pathlib import Path
|
|
50
|
+
|
|
51
|
+
_OUTER_LOOP_ROLES = (
|
|
52
|
+
"outer-loop-runner",
|
|
53
|
+
"correctness-tests-specialist",
|
|
54
|
+
"security-data-specialist",
|
|
55
|
+
"concurrency-specialist",
|
|
56
|
+
"architecture-maintainability-specialist",
|
|
57
|
+
"rollout-specialist",
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _role_paths(directory: str, extension: str) -> dict[str, str]:
|
|
62
|
+
# code-audit (and its code-audit-gate counterpart, ADR-0015) are
|
|
63
|
+
# deliberately absent here: both are templated ({{LANGUAGE_INSTRUCTIONS}}
|
|
64
|
+
# etc.), so the raw bundle only ever has a .template source, never the
|
|
65
|
+
# rendered filename this function's paths assume -- verify_adapter's
|
|
66
|
+
# bundle-parity test runs directly against the raw bundle. Their rendered
|
|
67
|
+
# output is instead checked where it's actually produced, by the
|
|
68
|
+
# installer's own per-platform agent-rendering tests.
|
|
69
|
+
paths = {
|
|
70
|
+
"orchestrator": f"{directory}/orchestrator.{extension}",
|
|
71
|
+
"planner": f"{directory}/planner.{extension}",
|
|
72
|
+
"builder": f"{directory}/builder.{extension}",
|
|
73
|
+
"reviewer": f"{directory}/reviewer.{extension}",
|
|
74
|
+
"lightweight-reviewer": f"{directory}/lightweight-reviewer.{extension}",
|
|
75
|
+
}
|
|
76
|
+
for role in _OUTER_LOOP_ROLES:
|
|
77
|
+
paths[role] = f"{directory}/{role}.{extension}"
|
|
78
|
+
return paths
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
ADAPTER_ROLE_PATHS: dict[str, dict[str, str]] = {
|
|
82
|
+
"opencode": _role_paths(".opencode/agents", "md"),
|
|
83
|
+
"claude": _role_paths(".claude/agents", "md"),
|
|
84
|
+
# Junie and Antigravity are the narrow tier: a single bounded-edit
|
|
85
|
+
# `assistant` role, not the full orchestrator-driven workflow (see
|
|
86
|
+
# ADR-0031) -- no outer-loop roles, no code-audit, no task-lifecycle
|
|
87
|
+
# markers to require.
|
|
88
|
+
"junie": {"assistant": ".junie/agents/assistant.md"},
|
|
89
|
+
"antigravity": {"assistant": ".agents/agents/assistant.md"},
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
_REQUIRED_MARKERS: dict[str, tuple[str, ...]] = {
|
|
93
|
+
"orchestrator": (
|
|
94
|
+
"codev task start",
|
|
95
|
+
"codev task check",
|
|
96
|
+
"codev git open-pr",
|
|
97
|
+
"--github-issue",
|
|
98
|
+
"codev git issue-create",
|
|
99
|
+
"--no-github-issue",
|
|
100
|
+
),
|
|
101
|
+
"planner": ("codev git issue-create",),
|
|
102
|
+
"builder": ("codev task record",),
|
|
103
|
+
"reviewer": ("codev task record",),
|
|
104
|
+
"lightweight-reviewer": ("codev task record",),
|
|
105
|
+
"outer-loop-runner": (
|
|
106
|
+
"codev task record",
|
|
107
|
+
"codev task triage",
|
|
108
|
+
"codev task waive",
|
|
109
|
+
"codev task reopen",
|
|
110
|
+
"--selection",
|
|
111
|
+
"codev git mark-ready",
|
|
112
|
+
),
|
|
113
|
+
"correctness-tests-specialist": ("expansion_reason",),
|
|
114
|
+
"security-data-specialist": ("expansion_reason",),
|
|
115
|
+
"concurrency-specialist": ("expansion_reason",),
|
|
116
|
+
"architecture-maintainability-specialist": ("expansion_reason",),
|
|
117
|
+
"rollout-specialist": ("expansion_reason",),
|
|
118
|
+
# The narrow Junie/Antigravity `assistant` role is deliberately decoupled
|
|
119
|
+
# from the task lifecycle -- it never calls `codev task`/`codev git`, so
|
|
120
|
+
# there is no required marker to check for.
|
|
121
|
+
"assistant": (),
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
_FORBIDDEN_MARKERS: tuple[str, ...] = ("P0 through P3",)
|
|
125
|
+
|
|
126
|
+
_UNRESTRICTED_BASH_MARKERS: tuple[str, ...] = ('"*": allow', "'*': allow")
|
|
127
|
+
|
|
128
|
+
# ADR-0002: raw git/GitHub mutation must stay denied everywhere; `codev git`
|
|
129
|
+
# is the only guarded path to committing, pushing, or opening a pull request.
|
|
130
|
+
_RAW_MUTATION_MARKERS: tuple[str, ...] = (
|
|
131
|
+
'"git push*": allow',
|
|
132
|
+
"'git push*': allow",
|
|
133
|
+
'"git commit*": allow',
|
|
134
|
+
"'git commit*': allow",
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
# `codev git open-pr` renders recorded task evidence into the repository PR
|
|
138
|
+
# template when no `--body`/`--body-file` is given. An agent hardcoding a body
|
|
139
|
+
# placeholder would bypass that guarded rendering path.
|
|
140
|
+
_HANDWRITTEN_PR_BODY_MARKERS: tuple[str, ...] = ("--body <body>",)
|
|
141
|
+
|
|
142
|
+
# ADR-0021: OpenCode's per-subagent `task` permission block is the only
|
|
143
|
+
# mechanical backstop against outer-loop-runner silently skipping the human
|
|
144
|
+
# specialist-selection menu (ADR-0016/0018) -- these five must stay "ask",
|
|
145
|
+
# never regress to "allow", or the one available guardrail disappears again
|
|
146
|
+
# without anything noticing.
|
|
147
|
+
_SPECIALIST_ALLOW_MARKERS: tuple[str, ...] = (
|
|
148
|
+
"correctness-tests-specialist: allow",
|
|
149
|
+
"security-data-specialist: allow",
|
|
150
|
+
"concurrency-specialist: allow",
|
|
151
|
+
"architecture-maintainability-specialist: allow",
|
|
152
|
+
"rollout-specialist: allow",
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
class AdapterVerificationError(Exception):
|
|
157
|
+
"""Raised when a platform cannot be verified at all."""
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
@dataclass(frozen=True)
|
|
161
|
+
class RoleFinding:
|
|
162
|
+
role: str
|
|
163
|
+
path: str
|
|
164
|
+
ok: bool
|
|
165
|
+
problems: tuple[str, ...]
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
@dataclass(frozen=True)
|
|
169
|
+
class VerificationResult:
|
|
170
|
+
platform: str
|
|
171
|
+
findings: tuple[RoleFinding, ...]
|
|
172
|
+
|
|
173
|
+
@property
|
|
174
|
+
def ok(self) -> bool:
|
|
175
|
+
return all(finding.ok for finding in self.findings)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def verify_adapter(platform: str, *, target: Path) -> VerificationResult:
|
|
179
|
+
role_paths = ADAPTER_ROLE_PATHS.get(platform)
|
|
180
|
+
if role_paths is None:
|
|
181
|
+
raise AdapterVerificationError(f"unknown platform: {platform!r}")
|
|
182
|
+
|
|
183
|
+
findings: list[RoleFinding] = []
|
|
184
|
+
for role, relative in sorted(role_paths.items()):
|
|
185
|
+
path = target / relative
|
|
186
|
+
problems: list[str] = []
|
|
187
|
+
if not path.is_file():
|
|
188
|
+
findings.append(RoleFinding(role, relative, False, ("missing file",)))
|
|
189
|
+
continue
|
|
190
|
+
|
|
191
|
+
text = path.read_text(encoding="utf-8")
|
|
192
|
+
|
|
193
|
+
if relative.endswith(".toml"):
|
|
194
|
+
try:
|
|
195
|
+
tomllib.loads(text)
|
|
196
|
+
except tomllib.TOMLDecodeError as error:
|
|
197
|
+
problems.append(f"invalid TOML: {error}")
|
|
198
|
+
|
|
199
|
+
for marker in _REQUIRED_MARKERS[role]:
|
|
200
|
+
if marker not in text:
|
|
201
|
+
problems.append(f"missing required reference: {marker!r}")
|
|
202
|
+
for marker in _FORBIDDEN_MARKERS:
|
|
203
|
+
if marker in text:
|
|
204
|
+
problems.append(f"contains a retired pattern: {marker!r}")
|
|
205
|
+
for marker in _UNRESTRICTED_BASH_MARKERS:
|
|
206
|
+
if marker in text:
|
|
207
|
+
problems.append(f"grants unrestricted shell execution: {marker!r}")
|
|
208
|
+
for marker in _RAW_MUTATION_MARKERS:
|
|
209
|
+
if marker in text:
|
|
210
|
+
problems.append(
|
|
211
|
+
f"grants raw git mutation instead of the guarded `codev git` "
|
|
212
|
+
f"surface: {marker!r}"
|
|
213
|
+
)
|
|
214
|
+
for marker in _HANDWRITTEN_PR_BODY_MARKERS:
|
|
215
|
+
if marker in text:
|
|
216
|
+
problems.append(
|
|
217
|
+
f"hardcodes a PR body placeholder instead of relying on "
|
|
218
|
+
f"`codev git open-pr`'s template-aware rendering: {marker!r}"
|
|
219
|
+
)
|
|
220
|
+
for marker in _SPECIALIST_ALLOW_MARKERS:
|
|
221
|
+
if marker in text:
|
|
222
|
+
problems.append(
|
|
223
|
+
f"grants unconfirmed specialist dispatch instead of the "
|
|
224
|
+
f"ADR-0021 permission gate: {marker!r}"
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
findings.append(RoleFinding(role, relative, not problems, tuple(problems)))
|
|
228
|
+
|
|
229
|
+
return VerificationResult(platform, tuple(findings))
|