bpsai-pair 2.35.0__tar.gz → 2.35.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {bpsai_pair-2.35.0/bpsai_pair.egg-info → bpsai_pair-2.35.2}/PKG-INFO +15 -2
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/README.md +13 -1
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/benchmarks/matrix/__init__.py +6 -0
- bpsai_pair-2.35.2/bpsai_pair/benchmarks/matrix/fixtures/bugfix/bf-001.json +19 -0
- bpsai_pair-2.35.2/bpsai_pair/benchmarks/matrix/fixtures/bugfix/bf-002.json +19 -0
- bpsai_pair-2.35.2/bpsai_pair/benchmarks/matrix/fixtures/chore/ch-001.json +19 -0
- bpsai_pair-2.35.2/bpsai_pair/benchmarks/matrix/fixtures/chore/ch-002.json +19 -0
- {bpsai_pair-2.35.0/bpsai_pair/benchmarks/matrix/fixtures → bpsai_pair-2.35.2/bpsai_pair/benchmarks/matrix/fixtures/extended}/plan-draft/pd-001.json +1 -1
- {bpsai_pair-2.35.0/bpsai_pair/benchmarks/matrix/fixtures → bpsai_pair-2.35.2/bpsai_pair/benchmarks/matrix/fixtures/extended}/plan-draft/pd-002.json +1 -1
- {bpsai_pair-2.35.0/bpsai_pair/benchmarks/matrix/fixtures → bpsai_pair-2.35.2/bpsai_pair/benchmarks/matrix/fixtures/extended}/plan-draft/pd-003.json +1 -1
- {bpsai_pair-2.35.0/bpsai_pair/benchmarks/matrix/fixtures → bpsai_pair-2.35.2/bpsai_pair/benchmarks/matrix/fixtures/extended}/security-audit/sa-001.json +1 -1
- {bpsai_pair-2.35.0/bpsai_pair/benchmarks/matrix/fixtures → bpsai_pair-2.35.2/bpsai_pair/benchmarks/matrix/fixtures/extended}/security-audit/sa-002.json +1 -1
- {bpsai_pair-2.35.0/bpsai_pair/benchmarks/matrix/fixtures/implement-with-tests → bpsai_pair-2.35.2/bpsai_pair/benchmarks/matrix/fixtures/feature}/iwt-001.json +1 -1
- {bpsai_pair-2.35.0/bpsai_pair/benchmarks/matrix/fixtures/implement-with-tests → bpsai_pair-2.35.2/bpsai_pair/benchmarks/matrix/fixtures/feature}/iwt-002.json +1 -1
- {bpsai_pair-2.35.0/bpsai_pair/benchmarks/matrix/fixtures/implement-with-tests → bpsai_pair-2.35.2/bpsai_pair/benchmarks/matrix/fixtures/feature}/iwt-003.json +1 -1
- bpsai_pair-2.35.2/bpsai_pair/benchmarks/matrix/fixtures/refactor/rf-001.json +19 -0
- bpsai_pair-2.35.2/bpsai_pair/benchmarks/matrix/fixtures/refactor/rf-002.json +19 -0
- {bpsai_pair-2.35.0/bpsai_pair/benchmarks/matrix/fixtures/code-review → bpsai_pair-2.35.2/bpsai_pair/benchmarks/matrix/fixtures/review}/cr-001.json +2 -2
- {bpsai_pair-2.35.0/bpsai_pair/benchmarks/matrix/fixtures/code-review → bpsai_pair-2.35.2/bpsai_pair/benchmarks/matrix/fixtures/review}/cr-002.json +2 -2
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/benchmarks/matrix/task_set.py +65 -16
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/artifact_ownership.py +14 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage.py +5 -2
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_branch_multi.py +26 -23
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_executor.py +47 -8
- bpsai_pair-2.35.2/bpsai_pair/commands/engage_graph_build.py +42 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_pause_resume.py +1 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_pr.py +21 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_result.py +14 -1
- bpsai_pair-2.35.2/bpsai_pair/commands/engage_sibling_setup.py +133 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/init_repo.py +31 -2
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/upgrade.py +49 -13
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/upgrade_execute.py +14 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/upgrade_helpers.py +9 -0
- bpsai_pair-2.35.2/bpsai_pair/core/claude_paths.py +46 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/agents/divona.md +5 -1
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/skills/managing-task-lifecycle/reference/all-cli-commands.md +3 -3
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/scripts/bootstrap-remote.sh +1 -1
- bpsai_pair-2.35.2/bpsai_pair/data/seeds/manifest.json +11 -0
- bpsai_pair-2.35.2/bpsai_pair/data/seeds/seed-01-verification-is-yours.md +24 -0
- bpsai_pair-2.35.2/bpsai_pair/data/seeds/seed-02-shared-checkouts-belong-to-runs.md +25 -0
- bpsai_pair-2.35.2/bpsai_pair/data/seeds/seed-03-dispatch-dont-implement.md +25 -0
- bpsai_pair-2.35.2/bpsai_pair/data/seeds/seed-04-fail-closed-audited-bypass.md +23 -0
- bpsai_pair-2.35.2/bpsai_pair/data/seeds/seed-05-no-deferral-at-agent-velocity.md +25 -0
- bpsai_pair-2.35.2/bpsai_pair/data/seeds/seed-06-repo-reality-beats-templates.md +23 -0
- bpsai_pair-2.35.2/bpsai_pair/data/seeds/seed-07-bounded-waits-only.md +23 -0
- bpsai_pair-2.35.2/bpsai_pair/data/seeds/seed-08-stop-the-tail.md +23 -0
- bpsai_pair-2.35.2/bpsai_pair/data/seeds/seed-09-delegate-loops-probe-limits.md +35 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/benchmark_seed.py +2 -1
- bpsai_pair-2.35.2/bpsai_pair/feedback/task_type_aliases.py +26 -0
- bpsai_pair-2.35.2/bpsai_pair/gitops/__init__.py +42 -0
- bpsai_pair-2.35.2/bpsai_pair/gitops/failure_rules.py +136 -0
- bpsai_pair-2.35.2/bpsai_pair/gitops/failure_types.py +132 -0
- bpsai_pair-2.35.2/bpsai_pair/gitops/failures.py +237 -0
- bpsai_pair-2.35.2/bpsai_pair/gitops/retry.py +171 -0
- bpsai_pair-2.35.2/bpsai_pair/orchestration/commit_halt.py +97 -0
- bpsai_pair-2.35.2/bpsai_pair/orchestration/commit_landing.py +213 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/headless_dispatch.py +36 -7
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/headless_runner.py +24 -3
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/sibling_branch.py +59 -35
- bpsai_pair-2.35.2/bpsai_pair/orchestration/sibling_branch_verify.py +91 -0
- bpsai_pair-2.35.2/bpsai_pair/orchestration/sibling_fetch.py +248 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/sprint_commit.py +169 -74
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/sprint_executor.py +28 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/sprint_executor_outcome.py +11 -2
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/sprint_models.py +5 -0
- bpsai_pair-2.35.2/bpsai_pair/seeds/__init__.py +1 -0
- bpsai_pair-2.35.2/bpsai_pair/seeds/manifest.py +64 -0
- bpsai_pair-2.35.2/bpsai_pair/seeds/safety.py +82 -0
- bpsai_pair-2.35.2/bpsai_pair/seeds/writer.py +238 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/cache_health.py +4 -4
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/parser.py +4 -3
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2/bpsai_pair.egg-info}/PKG-INFO +15 -2
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair.egg-info/SOURCES.txt +45 -12
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair.egg-info/requires.txt +1 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/pyproject.toml +8 -1
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_feature_gating.py +1 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/LICENSE +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/MANIFEST.in +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/__main__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/agent_archetypes.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/benchmarks/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/benchmarks/matrix/checks.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/benchmarks/matrix/dispatch.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/benchmarks/matrix/engine.py +0 -0
- {bpsai_pair-2.35.0/bpsai_pair/benchmarks/matrix/fixtures → bpsai_pair-2.35.2/bpsai_pair/benchmarks/matrix/fixtures/extended}/content-draft/cd-001.json +0 -0
- {bpsai_pair-2.35.0/bpsai_pair/benchmarks/matrix/fixtures → bpsai_pair-2.35.2/bpsai_pair/benchmarks/matrix/fixtures/extended}/content-draft/cd-002.json +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/benchmarks/matrix/io.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/benchmarks/matrix/models.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/benchmarks/matrix/schema.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/benchmarks/matrix/scorer.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/benchmarks/reports.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/benchmarks/runner.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/benchmarks/validation.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/cli.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/cli_registration.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/cli_startup.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/advisory.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/arch.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/arch_display.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/arch_handler_length.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/arch_lint_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/arch_provenance.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/arch_wiring.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/audit.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/benchmark.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/benchmark_cli_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/benchmark_matrix_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/budget.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/budget_programmatic.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/cache.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/calibration.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/calibration_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/capabilities_merge.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/claude_md_merge.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/compaction_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/config.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/config_cmd.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/containment_checkpoint.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/containment_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/containment_session.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/context_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/core.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/doctor.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/doctor_checks.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/enforce.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/enforce_containment.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/enforce_state_edit.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/enforce_task_edit.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_base.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_base_cache.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_branch.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_checkout_restore.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_cross_base.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_cross_module.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_dry_run.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_entry.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_feasibility_gate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_guard_checks.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_guards.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_navigator.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_p2_surface.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_plan_id.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_pr_body_cap.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_pr_multi.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_pre_dispatch_boundary.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_preflight.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_qa_multi.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_resume.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_resume_integrity.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_run_context.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_security.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_sweep.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_target_repo.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_worktree.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/engage_worktree_guards.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/feedback.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/feedback_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/fleet_audit.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/fleet_check.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/fleet_upgrade_result.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/fleet_upgrade_transaction.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/fleet_workflow_audit.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/gitignore.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/init_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/init_feature.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/license.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/license_display.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/license_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/mcp.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/metrics/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/metrics/analysis_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/metrics/burndown_command.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/metrics/helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/metrics/summary_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/orchestrate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/orchestrate_evaluate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/pm.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/pm_crud.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/pm_diagnostics.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/pm_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/pm_hierarchy_cmd.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/pm_migrate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/pm_sprint.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/preflight.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/preset.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/prime_learn.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/provider_command.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/provider_presets.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/qc_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/query.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/review.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/review_sprint_cmd.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/security.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/session.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/session_check.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/session_status.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/setup_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/state.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/state_anchors.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/state_fence.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/state_validation.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/status_derive.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/status_handoff.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/status_render.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/subscription.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/support.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/sweep_command.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/sweep_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/system.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/telemetry.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/telemetry_aggregate_cmd.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/telemetry_archive_cmd.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/telemetry_display.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/telemetry_export.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/telemetry_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/telemetry_log_failure.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/telemetry_log_lifecycle.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/timer.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/upgrade_agent_removal.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/upgrade_config_write.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/upgrade_containment.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/upgrade_display.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/upgrade_fleet_sync.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/upgrade_prompt.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/upgrade_skill_removal.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/upgrade_source_repo.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/upgrade_state_fence.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/validate_runner.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/validation_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/version_consistency.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/wizard.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/workflow_md_generator.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/workflow_md_plan.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/workspace.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/workspace_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/workspace_impact.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/workspace_index_cmd.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/workspace_init_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/workspace_init_project.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/workspace_repos.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/workspace_setup_permissions.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/commands/workspace_validate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/compaction.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/compaction_events.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/compaction_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/compaction_models.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/compaction_recovery.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/completion/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/completion/ac_claims.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/completion/ac_semantics.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/completion/ac_substance_check.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/completion/ac_substance_gate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/completion/pipeline.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/completion/policy.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/completion/store.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/context/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/context/cache.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/context/freshness.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/context/loader.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/arch_headroom.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/arch_prescan.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/budget_heuristic.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/bypass_log.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/cache_paths.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/ci_gate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/cli_command_tree.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/config.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/config_architecture.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/config_containment.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/config_defaults.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/config_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/config_loader.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/config_profiles.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/config_templates.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/config_validation.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/config_validator.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/constants.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/deprecation.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/encoding.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/encoding_lint.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/enforcement.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/enforcement_analyzer.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/enforcement_checker.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/enforcement_components.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/enforcement_functions.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/enforcement_hub.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/enforcement_imports.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/enforcement_limits.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/enforcement_models.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/enforcement_split_suggest.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/enforcement_utils.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/engage_ac_sidecar.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/engage_task_start.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/enrichment_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/enrichment_hooks.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/file_role_detector.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/gate_executor.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/gate_hooks.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/glob_match.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/handler_baseline.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/handler_lint.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/hook_budget.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/hook_budget_programmatic.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/hook_handlers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/hook_metrics.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/hook_pm.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/hook_routing.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/hook_state.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/hook_trello.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/hook_types.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/hooks.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/line_count_mode.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/line_metrics.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/model_id_lint.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/ops.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/ops_ci.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/ops_context.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/ops_feature.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/ops_git.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/ops_project.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/orchestration_hooks.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/preconditions.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/preferences.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/preset_config.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/preset_definitions.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/presets.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/profile_resolver.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/programmatic_credit_state.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/programmatic_credit_validator.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/provenance_lint.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/randomization_log.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/reachability_ast.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/reachability_lint.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/readonly_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/routing.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/subprocess_lint.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/task_acceptance.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/task_ready.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/task_state.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/core/utils.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/containment_section.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/README.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/cookiecutter.json +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.agentpackignore +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/agent-memory/bellona/MEMORY.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/agent-memory/driver/MEMORY.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/agent-memory/laverna/MEMORY.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/agent-memory/navigator/MEMORY.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/agent-memory/nayru/MEMORY.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/agents/bellona.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/agents/driver.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/agents/laverna.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/agents/navigator.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/agents/nayru.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/agents/vaivora.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/commands/draft-backlog.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/commands/make-it-so.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/commands/pc-audit-sibling.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/commands/pc-plan.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/commands/run-qc.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/commands/start-task.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/commands/update-skills.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/rules/architecture.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/settings.json +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/skills/architecting-modules/SKILL.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/skills/auditing-sibling-projects/SKILL.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/skills/creating-skills/SKILL.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/skills/designing-and-implementing/SKILL.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/skills/finishing-branches/SKILL.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/skills/implementing-with-tdd/SKILL.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/skills/managing-task-lifecycle/SKILL.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/skills/managing-task-lifecycle/reference/bps-trello-conventions.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/skills/managing-task-lifecycle/scripts/check_completion.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/skills/managing-task-lifecycle/scripts/validate_task_status.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/skills/planning-with-pm/SKILL.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/skills/reviewing-code/SKILL.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.claude/skills/running-qc/SKILL.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.editorconfig +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.gitignore +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.paircoder/.gitignore +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.paircoder/capabilities.yaml +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.paircoder/context/project.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.paircoder/context/state.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.paircoder/context/workflow.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.paircoder/feedback/.gitkeep +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.paircoder/history/.gitkeep +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.paircoder/plans/.gitkeep +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.paircoder/security/allowlist.yaml +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.paircoder/security/sandbox.yaml +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.paircoder/security/secret-allowlist.yaml +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.paircoder/tasks/.gitkeep +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.paircoder/telemetry/.gitkeep +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/CLAUDE.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/scripts/on_permission_denied.sh +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/hooks/on_permission_denied.sh +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/workflows/bps-full.yaml +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/data/workflows/simple.yaml +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/engage/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/engage/a2a_push.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/engage/boundary_clean.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/engage/constants.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/engage/containment_audit.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/_batch_stats_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/anomaly.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/calibration.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/calibration_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/calibration_refresh.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/classifier.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/context_load.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/drift.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/feasibility.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/fleet.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/overhead.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/prior_decay.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/query_builder.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/routing_report.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/schema.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/scoring.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/seam_heat.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/service.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/stack_detect.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/state_query.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/stats.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/feedback/workspace_query.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/github/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/github/client.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/github/client_prs.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/github/commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/github/merge_strategy.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/github/pr.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/github/pr_manager.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/github/pr_models.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/github/pr_workflow.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/harness/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/harness/claude_code.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/harness/dispatch_adapter.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/harness/env_overrides.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/harness/provider_loader.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/init_bundled_cli.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/integrations/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/integrations/time_tracking.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/integrations/time_tracking_cache.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/integrations/time_tracking_providers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/integrations/toggl.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intelligence/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intelligence/config.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intelligence/gap_mapper.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intelligence/gate_mapper.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intelligence/license_gate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intelligence/mapper_base.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intelligence/pipeline.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intelligence/recommender.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intelligence/recommender_models.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intelligence/recommender_weights.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intelligence/scorer_mapper.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intelligence/session_mapper.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intelligence/signal_model.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intelligence/task_hook.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intelligence/telemetry_mapper.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intent_gate/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intent_gate/approval.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intent_gate/approval_gate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intent_gate/capability_gate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intent_gate/classifier.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intent_gate/command_router.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intent_gate/dispatch_guard.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intent_gate/frustration.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intent_gate/response_injection.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/intent_gate/schema.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/json_envelope.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/licensing/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/licensing/activation.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/licensing/binding.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/licensing/cache_signing.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/licensing/core.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/licensing/keys.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/licensing/machine.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/licensing/online.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/licensing/paths.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/licensing/public_key.pem +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/licensing/schema.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/licensing/security.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/licensing/snapshot_bridge.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/licensing/startup.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/licensing/tier_change.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/licensing/unchecked.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/licensing/validation_cache.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/mcp/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/mcp/server.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/mcp/server_inspect.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/mcp/tools/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/mcp/tools/channels.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/mcp/tools/completion_gates.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/mcp/tools/context.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/mcp/tools/metrics.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/mcp/tools/orchestration.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/mcp/tools/planning.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/mcp/tools/support.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/mcp/tools/tasks.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/mcp/tools/trello.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/memory_retention.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/metrics/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/metrics/accuracy.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/metrics/budget.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/metrics/burndown.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/metrics/calibration_pin.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/metrics/collector.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/metrics/collector_store.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/metrics/estimation.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/metrics/hours_comparison.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/metrics/reports.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/metrics/token_estimator.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/metrics/token_feedback.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/metrics/velocity.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/migrate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/model_ids.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/_exploration.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/_failure_escalation.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/_model_band.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/_override_warning.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/ac_propagation.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/added_file_placeholder_scan.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/agent_names.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/agent_selector.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/autonomous.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/autonomous_models.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/autonomous_steps.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/backlog_header.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/backlog_materializer.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/backlog_parser.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/backlog_validation.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/backlog_yaml.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/baseline_io.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/blast_radius.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/blocked_completion.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/branch_review.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/checkin_diagnostic.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/checkin_kill.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/circuit_breaker_recovery.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/commit_gitignore_prune.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/commit_scope.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/commit_verification.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/completion_guard.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/dependency_resolver.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/engage_push.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/engage_push_scan.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/engage_review.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/engage_run_state.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/failure_taxonomy.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/failure_taxonomy_backfill.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/final_message_artifact.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/finding_extraction.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/finding_records.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/findings_loop.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/freshness_gate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/handoff.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/handoff_consumer.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/handoff_formatting.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/handoff_retention.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/headless.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/headless_runner_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/headless_session_lifecycle.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/heartbeat.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/impact_dedup.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/invoker.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/invoker_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/issue_refs.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/manager.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/model_doctrine.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/model_routing.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/nayru_deterministic.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/nayru_pregates.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/orchestrator.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/orchestrator_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/orchestrator_models.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/output_verifier.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/output_verifier_git_args.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/output_verifier_signals.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/package_builder.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/plan_graph.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/plan_graph_models.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/plan_vaivora.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/plan_vaivora_llm.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/planner.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/planner_context.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/planner_parsing.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/porcelain_status.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/portfolio_status.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/pr_review.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/pre_dispatch_check.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/pre_task_sha.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/reconciliation.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/residue_sideref.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/review_checks.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/review_common.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/review_dispatch.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/review_models.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/review_output.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/review_severity.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/review_sprint.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/review_sprint_artifact.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/review_sprint_gate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/review_worktree.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/reviewer.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/run_exit_gate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/seam_delta.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/security.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/security_models.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/security_parser.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/selector_scoring.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/serializer.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/sprint_block_handler.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/sprint_executor_baseline.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/sprint_executor_hooks.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/sprint_lifecycle_args.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/sprint_lifecycle_hooks.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/sprint_residue_defer.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/sprint_residue_handler.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/sprint_review_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/sprint_signals.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/sprint_skipped_handler.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/sprint_summary.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/state_commit.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/subagent_context.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/target_repo_resolution.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/targeted_tests.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/task_md_runtime.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/task_review.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/task_review_command.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/task_timeout.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/terminal_message_classifier.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/wiring_review.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/orchestration/workflow_guide.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/auto_assign.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/cli_update_cache.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/completion_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/intelligence_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/intent_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/intent_detection.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/models.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/parser.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_complete_command.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_crud_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_ensure_from_backlog.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_enums.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_estimation.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_feasibility.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_intelligence.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_legacy_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_legacy_sync.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_model.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_parser.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_pm_enrich.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_pm_hierarchy.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_pm_sync.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_query_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_record_emission.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_status_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_task_push.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_trello_sync.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/plan_workspace.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/review_intent.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/scope_detector.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/standup.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/standup_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/state.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/status_hooks.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/status_rendering.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/task_archive_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/task_check_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/task_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/task_consistency.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/task_done.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/task_model.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/task_parser.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/task_reconcile.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/task_update_completion.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/task_update_enforcement.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/token_estimate_display.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/planning/token_estimator.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/actions.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/backlog_mixin.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/backlog_rollup.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/backlog_types.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/compat.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/completion_cascade.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/completion_eval.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/engine.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/errors.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/hierarchy.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/lifecycle.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/migration.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/null_provider.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/orchestration.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/presets.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/project_hooks.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/provider.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/registry.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/sprint_lifecycle.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/status_vocab.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/sync.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/types.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/workflow.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm/workflow_validation.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm_trello/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm_trello/adapter.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm_trello/backlog_engage.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm_trello/backlog_tree.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm_trello/config.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm_trello/discovery.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm_trello/enrichment.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm_trello/label_resolver.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm_trello/provider.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm_trello/relationship_ops.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm_trello/relationships.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/pm_trello/sync_ops.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/prime_learn/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/prime_learn/a2a_push.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/prime_learn/storage.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/prime_learn/synthesis.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/qc/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/qc/config.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/qc/executor.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/qc/fill_validator.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/qc/gate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/qc/loader.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/qc/models.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/qc/reporter.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/qc/results.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/qc/step_handlers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/qc/telemetry_store.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/qc/templates.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/qc/timeout_handler.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/query_skills/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/query_skills/a2a_adapter.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/query_skills/driver_activity.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/query_skills/qc_trends.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/query_skills/quality_metrics.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/query_skills/remote_query_client.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/query_skills/review_findings.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/query_skills/schema_validator.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/query_skills/session_outcomes.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/query_skills/sprint_status.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/query_skills/task_state.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/release/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/release/commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/release/docs_drift_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/release/docs_drift_gate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/release/notes_allowlist.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/release/notes_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/release/notes_gate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/release/notes_markers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/release/phase89_gate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/release/release_checks.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/release/template.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/release/validate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/Dockerfile.containment +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/advisory/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/advisory/manifests.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/advisory/manifests_node.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/advisory/manifests_python.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/advisory/models.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/advisory/package_list.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/advisory/repo_resolve.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/advisory/report_format.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/advisory/scanner.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/advisory/version_match.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/allowlist.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/allowlist_data.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/allowlist_matching.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/checkpoint.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/checkpoint_base.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/checkpoint_containment.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/checkpoint_format.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/checkpoint_models.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/checkpoint_rollback.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/containment.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/containment_check.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/containment_config.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/containment_paths.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/data_classes.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/dep_models.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/dep_scanner.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/dependencies.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/image_manager.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/interactive_runner.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/network.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/network_control.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/review.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/review_agent.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/review_models.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/review_patterns.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/review_scanner.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/runner.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/sandbox.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/secrets.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/secrets_config.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/secrets_format.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/secrets_patterns.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/secrets_scanner.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/security/secrets_types.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/session.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/session_finalize.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/session_handoff.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/classifier.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/classifier_engine.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/classifier_models.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/classifier_report.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/cli_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/display_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/export_base.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/exporter.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/gap_detector.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/gap_engine.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/gap_models.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/gap_persistence.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/gaps_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/gaps_query_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/gate_definitions.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/gate_evaluator.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/gates.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/generator.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/generator_engine.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/generator_io.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/generator_models.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/installer.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/installer_sources.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/intent_matcher.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/pattern_detector.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/scorer.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/scorer_engine.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/scorer_format.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/scorer_models.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/scorer_telemetry.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/skill_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/skill_export_cmd.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/skill_gap_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/skill_gap_handlers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/skill_install_cmd.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/skill_recommend_cmd.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/skill_score_cmds.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/skill_suggester.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/skill_validate_cmd.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/subagent_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/subagent_detector.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/subagent_parser.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/subagent_patterns.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/suggestion.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/skills/validator.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/sprint/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/sprint/commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/statusline.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/statusline_install.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/statusline_state.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/support/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/support/auth.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/support/client.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/support/system_info.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/sweep/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/sweep/a2a_integration.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/sweep/classifier.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/sweep/diff_parser.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/sweep/providers/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/sweep/providers/_patterns.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/sweep/providers/generic.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/sweep/providers/python_provider.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/tasks/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/tasks/archiver.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/tasks/changelog.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/tasks/lifecycle.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/_provider.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/_routing_tier.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/_serialization.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/_token_usage.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/_validation.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/aggregate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/aggregates.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/archive.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/audit.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/auto_archive.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/auto_compaction.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/batch_submit.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/collector.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/collector_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/collectors.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/compaction.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/config.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/failure_pattern_detector.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/hook_collector.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/hooks_schema.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/migrate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/privacy.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/queries.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/query_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/recovery.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/recovery_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/schema.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/session_outcomes.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/session_store.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/signal_checks.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/signal_emitter.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/signal_thresholds.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/snapshot.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/sqlite_migration.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/sqlite_schema.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/sqlite_telemetry_store.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/store.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/t1_gate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/task_state_index.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/telemetry/task_state_log.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/tokens.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/activity.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/auth.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/board_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/board_index.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/board_setup.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/checklist_ops.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/client.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/connection.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/custom_fields.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/errors.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/field_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/fields.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/label_ops.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/list_resolver.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/pm_sync_bridge.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/progress.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/retry.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/sync.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/sync_cards.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/sync_checklists.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/sync_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/sync_fields.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/sync_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/task_card_ops.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/task_checklist_match.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/task_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/task_completion.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/task_display.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/task_done_pipeline.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/task_handoff.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/task_helpers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/task_lifecycle.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/task_operations.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/task_pm_routing.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/task_provider.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/task_sync.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/templates.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/webhook.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/webhook_auth.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/webhook_commands.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/webhook_config.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/webhook_handlers.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/trello/webhook_server.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/utils/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/utils/sysproc.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/api_routes.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/app.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/architecture_api.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/architecture_delta.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/architecture_step.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/budget_api.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/chat_api.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/config_builder.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/config_merge.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/config_parser.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/containment_step.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/creator.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/demo.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/editor_api.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/enforcement_api.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/github_api.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/guided_api.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/license_installer.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/loader.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/mcp_api.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/page_route_registry.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/page_routes.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/preset_tables.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/pro_page_routes.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/project_api.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/prompts/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/prompts/guided_setup.md +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/review_api.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/routes.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/session.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/state.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/static/chat.js +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/static/style.css +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/static/wizard.js +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/steps.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/templates/architecture.html +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/templates/base.html +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/templates/budget.html +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/templates/chat.html +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/templates/enforcement.html +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/templates/github.html +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/templates/index.html +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/templates/mcp.html +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/templates/partials/license_install.html +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/templates/partials/locked_overlay.html +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/templates/partials/upgrade_modal.html +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/templates/project.html +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/templates/review.html +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/templates/success.html +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/templates/trello.html +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/templates/welcome.html +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/templates/workflow.html +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/trello_api.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/update_api.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/wizard/workflow_routes.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/__init__.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/agent_spawning.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/agent_teams.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/audit.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/contracts.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/discovery.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/execution_plan.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/git_ops.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/gitignore.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/impact.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/init_project.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/membership.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/orchestrator.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/parser.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/permissions.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/project_md.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/schema.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/sibling_conventions.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/stack_detect.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/task_push.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair/workspace/workspace_index.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair.egg-info/dependency_links.txt +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair.egg-info/entry_points.txt +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/bpsai_pair.egg-info/top_level.txt +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/setup.cfg +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_agent_archetypes.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_cli_registration.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_cli_startup_archive_pre_t1.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_cli_startup_context_freshness_gate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_cli_startup_offline_network.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_cli_startup_readonly_gate.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_compaction_containment.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_compaction_coverage.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_compaction_decomp.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_compaction_events.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_conftest_env_isolation.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_dependency_completeness.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_init_bundled_cli.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_main_entrypoint.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_memory_retention.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_model_ids.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_readonly_command_state_e2e.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_session_finalize.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_stale_task_lint.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_statusline.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_statusline_heartbeat.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_statusline_install.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_statusline_integration.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_statusline_mtime.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_t42_1_qc_rename.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_template_signal_hooks.py +0 -0
- {bpsai_pair-2.35.0 → bpsai_pair-2.35.2}/tests/test_website_signal_hooks.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bpsai-pair
|
|
3
|
-
Version: 2.35.
|
|
3
|
+
Version: 2.35.2
|
|
4
4
|
Summary: AI-augmented pair programming framework with 270+ CLI commands for planning, orchestration, Trello/GitHub integration, and autonomous workflows
|
|
5
5
|
Author-email: BPS AI Software <support@paircoder.ai>
|
|
6
6
|
License-Expression: LicenseRef-Proprietary
|
|
@@ -40,6 +40,7 @@ Requires-Dist: anthropic>=0.76.0
|
|
|
40
40
|
Requires-Dist: httpx>=0.27
|
|
41
41
|
Requires-Dist: packaging>=21.0
|
|
42
42
|
Requires-Dist: click>=8.0
|
|
43
|
+
Requires-Dist: tenacity>=8.0
|
|
43
44
|
Provides-Extra: test
|
|
44
45
|
Requires-Dist: pytest>=8.0; extra == "test"
|
|
45
46
|
Requires-Dist: pytest-cov>=4.0; extra == "test"
|
|
@@ -78,7 +79,7 @@ Provides-Extra: integrations
|
|
|
78
79
|
Requires-Dist: py-trello>=0.19.0; extra == "integrations"
|
|
79
80
|
Dynamic: license-file
|
|
80
81
|
|
|
81
|
-
# PairCoder v2.35.
|
|
82
|
+
# PairCoder v2.35.2
|
|
82
83
|
|
|
83
84
|
> AI-augmented pair programming framework with 270+ CLI commands
|
|
84
85
|
|
|
@@ -188,6 +189,18 @@ Check your license: `bpsai-pair license status`
|
|
|
188
189
|
|
|
189
190
|
> Full release history and detailed notes: [paircoder.ai](https://paircoder.ai).
|
|
190
191
|
|
|
192
|
+
**v2.35.2 — Benchmarks join reality, QC agent regains its browser**
|
|
193
|
+
- **Benchmark fixtures speak your task types.** The matrix fixture set is re-keyed to the vocabulary real projects actually use (`feature`, `bugfix`, `chore`, `refactor`, `review`), with legacy strings alias-normalized at ingestion — so `benchmark matrix-run --auto-seed` primes the same calibration cells your production tasks read, instead of cells nothing joins.
|
|
194
|
+
- **Fixtures can't over-demand.** A fail-closed fixture lint rejects any fixture whose grading requirements aren't explicitly stated in its own prompt, ending a class of false cross-model failures.
|
|
195
|
+
- **Divona sees Chrome again.** The QC agent's tool allowlist had excluded the browser tools entirely; it now inherits the full toolset and knows to load deferred browser tools before assuming they're absent.
|
|
196
|
+
- **GitHub Release notes publish again.** The release workflow's notes extraction wrote to the wrong stream in CI, shipping empty release bodies; notes now publish with every release.
|
|
197
|
+
|
|
198
|
+
**v2.35.1 — Telemetry restored, typed git-failure handling, memory seed packs**
|
|
199
|
+
- **Driver telemetry records again under parallel lanes.** v2.35.0's run-root worktree isolation sent driver-task telemetry into the ephemeral worktree, which is destroyed at run teardown — runs recorded zero driver rows. Telemetry now lands in the durable checkout, and calibration reads from the same place.
|
|
200
|
+
- **Git and GitHub failures are classified, not guessed.** A typed failure taxonomy (transient / ambiguous / permanent) drives retries — unrecognized failures are never auto-retried — and error text is scrubbed of tokens and credentials.
|
|
201
|
+
- **`engage` commit and branch seams fail closed.** A staging failure now fails the task instead of silently dropping its diff, branch reuse must be provably safe, cross-repo dispatch fetches a missing base branch on demand, and a halted run can no longer exit 0 and cut a PR.
|
|
202
|
+
- **Runtime memory seed packs.** `init`/`upgrade` seed Claude Code's harness memory with shipped doctrine (provenance-stamped, refresh-on-write, organic memories untouched).
|
|
203
|
+
|
|
191
204
|
**v2.35.0 — Parallel lanes, governed actions, fleet threat scanning**
|
|
192
205
|
- **`engage` lanes run in parallel.** Each run's bookkeeping lives in an isolated worktree cut from the declared base, so multiple lanes no longer contend on one shared checkout (`--no-worktree` opt-out available), and a fail-closed count guard refuses dispatch if any task heading fails to parse.
|
|
193
206
|
- **Enforcement moves to the action seam.** An intent layer routes requests, artifact-chain preconditions replace prose-as-command, ad-hoc bypasses are audited, and tasks marked `privileged` run only through an isolated executor.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# PairCoder v2.35.
|
|
1
|
+
# PairCoder v2.35.2
|
|
2
2
|
|
|
3
3
|
> AI-augmented pair programming framework with 270+ CLI commands
|
|
4
4
|
|
|
@@ -108,6 +108,18 @@ Check your license: `bpsai-pair license status`
|
|
|
108
108
|
|
|
109
109
|
> Full release history and detailed notes: [paircoder.ai](https://paircoder.ai).
|
|
110
110
|
|
|
111
|
+
**v2.35.2 — Benchmarks join reality, QC agent regains its browser**
|
|
112
|
+
- **Benchmark fixtures speak your task types.** The matrix fixture set is re-keyed to the vocabulary real projects actually use (`feature`, `bugfix`, `chore`, `refactor`, `review`), with legacy strings alias-normalized at ingestion — so `benchmark matrix-run --auto-seed` primes the same calibration cells your production tasks read, instead of cells nothing joins.
|
|
113
|
+
- **Fixtures can't over-demand.** A fail-closed fixture lint rejects any fixture whose grading requirements aren't explicitly stated in its own prompt, ending a class of false cross-model failures.
|
|
114
|
+
- **Divona sees Chrome again.** The QC agent's tool allowlist had excluded the browser tools entirely; it now inherits the full toolset and knows to load deferred browser tools before assuming they're absent.
|
|
115
|
+
- **GitHub Release notes publish again.** The release workflow's notes extraction wrote to the wrong stream in CI, shipping empty release bodies; notes now publish with every release.
|
|
116
|
+
|
|
117
|
+
**v2.35.1 — Telemetry restored, typed git-failure handling, memory seed packs**
|
|
118
|
+
- **Driver telemetry records again under parallel lanes.** v2.35.0's run-root worktree isolation sent driver-task telemetry into the ephemeral worktree, which is destroyed at run teardown — runs recorded zero driver rows. Telemetry now lands in the durable checkout, and calibration reads from the same place.
|
|
119
|
+
- **Git and GitHub failures are classified, not guessed.** A typed failure taxonomy (transient / ambiguous / permanent) drives retries — unrecognized failures are never auto-retried — and error text is scrubbed of tokens and credentials.
|
|
120
|
+
- **`engage` commit and branch seams fail closed.** A staging failure now fails the task instead of silently dropping its diff, branch reuse must be provably safe, cross-repo dispatch fetches a missing base branch on demand, and a halted run can no longer exit 0 and cut a PR.
|
|
121
|
+
- **Runtime memory seed packs.** `init`/`upgrade` seed Claude Code's harness memory with shipped doctrine (provenance-stamped, refresh-on-write, organic memories untouched).
|
|
122
|
+
|
|
111
123
|
**v2.35.0 — Parallel lanes, governed actions, fleet threat scanning**
|
|
112
124
|
- **`engage` lanes run in parallel.** Each run's bookkeeping lives in an isolated worktree cut from the declared base, so multiple lanes no longer contend on one shared checkout (`--no-worktree` opt-out available), and a fail-closed count guard refuses dispatch if any task heading fails to parse.
|
|
113
125
|
- **Enforcement moves to the action seam.** An intent layer routes requests, artifact-chain preconditions replace prose-as-command, ad-hoc bypasses are audited, and tasks marked `privileged` run only through an isolated executor.
|
|
@@ -15,6 +15,9 @@ Public API:
|
|
|
15
15
|
- ``TASK_TYPES`` -- the five v0 task categories.
|
|
16
16
|
- ``BenchmarkFixture`` / ``ExpectedShape`` -- fixture data model.
|
|
17
17
|
- ``load_fixture`` / ``load_all_fixtures`` / ``fixtures_dir`` -- fixture loaders.
|
|
18
|
+
- ``validate_fixture_shape`` / ``missing_required_sections`` /
|
|
19
|
+
``FixtureShapeMismatch`` -- fixture lint: fail closed when a fixture's
|
|
20
|
+
``required_sections`` aren't demanded by its own prompt.
|
|
18
21
|
- ``score`` / ``ScoreReport`` / ``CheckResult`` -- composable v0 scoring.
|
|
19
22
|
- ``DEFAULT_CHECKS`` -- the three v0 checks.
|
|
20
23
|
- ``MatrixRow`` / ``MatrixResult`` / ``MatrixRunner`` -- 5x5 runner.
|
|
@@ -59,9 +62,12 @@ _LAZY_EXPORTS: dict[str, str] = {
|
|
|
59
62
|
"TASK_TYPES": "task_set",
|
|
60
63
|
"BenchmarkFixture": "task_set",
|
|
61
64
|
"ExpectedShape": "task_set",
|
|
65
|
+
"FixtureShapeMismatch": "task_set",
|
|
62
66
|
"fixtures_dir": "task_set",
|
|
63
67
|
"load_all_fixtures": "task_set",
|
|
64
68
|
"load_fixture": "task_set",
|
|
69
|
+
"missing_required_sections": "task_set",
|
|
70
|
+
"validate_fixture_shape": "task_set",
|
|
65
71
|
}
|
|
66
72
|
|
|
67
73
|
__all__ = sorted(_LAZY_EXPORTS)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "bf-001",
|
|
3
|
+
"task_type": "bugfix",
|
|
4
|
+
"input_prompt": "`parse_duration(s)` currently raises `ValueError` for the input `\"0s\"` because it strips the numeric prefix with `s.rstrip(\"s\")` and then rejects an empty string before checking for zero. Fix `parse_duration` so `\"0s\"` returns `0`, and add a regression test for the zero-duration case alongside the existing suffix cases (`\"s\"`, `\"m\"`, `\"h\"`).",
|
|
5
|
+
"system_prompt": "You are a Driver agent fixing a reported bug. Output a single Python file: the corrected implementation followed by pytest tests, with the new regression test clearly covering the reported input.",
|
|
6
|
+
"expected_shape": {
|
|
7
|
+
"produces_code": true,
|
|
8
|
+
"required_sections": [],
|
|
9
|
+
"min_length": 120,
|
|
10
|
+
"must_contain": ["def parse_duration", "def test_", "0s"],
|
|
11
|
+
"must_not_contain": ["TODO"],
|
|
12
|
+
"json_schema_keys": []
|
|
13
|
+
},
|
|
14
|
+
"metadata": {
|
|
15
|
+
"source": "session-2026-06-02-pc2.1",
|
|
16
|
+
"redacted": true,
|
|
17
|
+
"redaction_notes": "Function name and bug shape generalized from the original report."
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "bf-002",
|
|
3
|
+
"task_type": "bugfix",
|
|
4
|
+
"input_prompt": "`retry_with_backoff(fn, attempts=3)` swallows the final exception and returns `None` on total failure instead of re-raising it, so callers can't distinguish a genuine `None` result from an exhausted retry. Fix it so the last exception propagates after `attempts` failures, and add tests covering the eventual-success-after-retries path and the exhausted-retries path.",
|
|
5
|
+
"system_prompt": "You are a Driver agent fixing a reported bug. Output a single Python file: the corrected implementation followed by pytest tests.",
|
|
6
|
+
"expected_shape": {
|
|
7
|
+
"produces_code": true,
|
|
8
|
+
"required_sections": [],
|
|
9
|
+
"min_length": 150,
|
|
10
|
+
"must_contain": ["def retry_with_backoff", "def test_", "raise"],
|
|
11
|
+
"must_not_contain": ["TODO"],
|
|
12
|
+
"json_schema_keys": []
|
|
13
|
+
},
|
|
14
|
+
"metadata": {
|
|
15
|
+
"source": "session-2026-06-02-pc2.1",
|
|
16
|
+
"redacted": true,
|
|
17
|
+
"redaction_notes": "Retry helper generalized from the original module."
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "ch-001",
|
|
3
|
+
"task_type": "chore",
|
|
4
|
+
"input_prompt": "Write the CHANGELOG entry for v2.18.0: bumps the pinned `httpx` dependency from 0.27 to 0.28, drops the Python 3.9 compatibility shim in `core/compat.py` (now dead code since the minimum supported version is 3.10), and regenerates the lockfile. No new features or bug fixes in this release.",
|
|
5
|
+
"system_prompt": "You are a release chore agent. Structure the entry with exactly one markdown header, `## Changes`, followed by a bullet list of the changes.",
|
|
6
|
+
"expected_shape": {
|
|
7
|
+
"produces_code": false,
|
|
8
|
+
"required_sections": ["## Changes"],
|
|
9
|
+
"min_length": 100,
|
|
10
|
+
"must_contain": ["httpx", "0.28"],
|
|
11
|
+
"must_not_contain": ["TODO:", "lorem ipsum"],
|
|
12
|
+
"json_schema_keys": []
|
|
13
|
+
},
|
|
14
|
+
"metadata": {
|
|
15
|
+
"source": "session-2026-06-10-pc2.3",
|
|
16
|
+
"redacted": true,
|
|
17
|
+
"redaction_notes": "Version numbers and dependency generalized from the real release."
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "ch-002",
|
|
3
|
+
"task_type": "chore",
|
|
4
|
+
"input_prompt": "Delete the deprecated `legacy_format_report()` function from `reporting/format.py` -- it was replaced by `format_report()` two releases ago and every remaining call site (checked: none in `src/`, two in `tests/`) needs updating to call `format_report()` directly instead. Update the two test call sites accordingly.",
|
|
5
|
+
"system_prompt": "You are a cleanup agent. Output a single unified diff showing the deletion and the two call-site updates.",
|
|
6
|
+
"expected_shape": {
|
|
7
|
+
"produces_code": true,
|
|
8
|
+
"required_sections": [],
|
|
9
|
+
"min_length": 80,
|
|
10
|
+
"must_contain": ["format_report"],
|
|
11
|
+
"must_not_contain": ["legacy_format_report"],
|
|
12
|
+
"json_schema_keys": []
|
|
13
|
+
},
|
|
14
|
+
"metadata": {
|
|
15
|
+
"source": "session-2026-06-10-pc2.3",
|
|
16
|
+
"redacted": true,
|
|
17
|
+
"redaction_notes": "Module/function names generalized."
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "pd-001",
|
|
3
3
|
"task_type": "plan-draft",
|
|
4
4
|
"input_prompt": "Draft a sprint backlog for adding per-call cost logging to a sibling repo. Surface should follow the unified ~/.bpsai/burn-log.jsonl schema (timestamp, service, tokens_input, tokens_output, model, cost_estimate_usd, dispatch_origin, blocked, repo). Identify the API callsites, propose a colocated burn_log module, and break the work into tasks with acceptance criteria.",
|
|
5
|
-
"system_prompt": "You are a Navigator agent. Produce a sprint backlog in the engage-compatible markdown format with a Sprint header, a Tasks section, and a Risks section.",
|
|
5
|
+
"system_prompt": "You are a Navigator agent. Produce a sprint backlog in the engage-compatible markdown format with a Sprint header, a `## Tasks` section, and a `## Risks` section.",
|
|
6
6
|
"expected_shape": {
|
|
7
7
|
"produces_code": false,
|
|
8
8
|
"required_sections": ["## Tasks", "## Risks"],
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "pd-002",
|
|
3
3
|
"task_type": "plan-draft",
|
|
4
4
|
"input_prompt": "Plan the rollout of a deterministic-first review pipeline. The Nayru agent should run six pre-gates (ruff, black, secrets, architecture, coverage, contract_break) and only call Claude if any gate fails. Define the module layout, the telemetry signal payload, and the migration plan that keeps Laverna and Vaivora on the legacy path.",
|
|
5
|
-
"system_prompt": "You are a Navigator agent. Output a markdown plan with explicit
|
|
5
|
+
"system_prompt": "You are a Navigator agent. Output a markdown plan with explicit `## Goals`, `## Tasks`, and `## Risks` sections. Include acceptance criteria checklists under each task.",
|
|
6
6
|
"expected_shape": {
|
|
7
7
|
"produces_code": false,
|
|
8
8
|
"required_sections": ["## Goals", "## Tasks", "## Risks"],
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "pd-003",
|
|
3
3
|
"task_type": "plan-draft",
|
|
4
4
|
"input_prompt": "Draft a plan for a new CLI command `bpsai-pair budget programmatic` that reads ~/.bpsai/burn-log.jsonl, aggregates current-month spend, and compares against a configured monthly cap. Define the threshold ladder (80/90/100%) and the CI-gate-ready exit codes. Break the work into one task per sub-feature.",
|
|
5
|
-
"system_prompt": "You are a Navigator agent. Produce a backlog in the engage-compatible format with a Sprint header, Goals, Tasks, and Risks.",
|
|
5
|
+
"system_prompt": "You are a Navigator agent. Produce a backlog in the engage-compatible format with a Sprint header, Goals, a `## Tasks` section, and Risks.",
|
|
6
6
|
"expected_shape": {
|
|
7
7
|
"produces_code": false,
|
|
8
8
|
"required_sections": ["## Tasks"],
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "sa-001",
|
|
3
3
|
"task_type": "security-audit",
|
|
4
4
|
"input_prompt": "Audit the burn-log writer module for security issues. The module appends JSON-Lines records to ~/.bpsai/burn-log.jsonl. Look for: (a) path traversal via the configured BURN_LOG_PATH env override, (b) injection of attacker-controlled fields into the JSON record (model name, service tag), (c) log forging via embedded newlines in string fields, (d) information disclosure (does it ever log secrets like API keys?). Use the P0/P1/P2 severity scheme.",
|
|
5
|
-
"system_prompt": "You are the Laverna security review agent.
|
|
5
|
+
"system_prompt": "You are the Laverna security review agent. Structure the audit with exactly these markdown headers, in order: a `## Findings` section (findings tagged P0/P1/P2), then a `## Recommendation` section with a single line: approve | revise | block.",
|
|
6
6
|
"expected_shape": {
|
|
7
7
|
"produces_code": false,
|
|
8
8
|
"required_sections": ["## Findings", "## Recommendation"],
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "sa-002",
|
|
3
3
|
"task_type": "security-audit",
|
|
4
4
|
"input_prompt": "Audit the `bpsai-pair budget programmatic` CLI command for security issues. It reads ~/.bpsai/burn-log.jsonl, parses each line as JSON, aggregates spend by month, and compares against a cap loaded from .paircoder/config.yaml. Look for: YAML deserialization of untrusted config, JSON-bomb / deeply nested payload DoS, malformed-line crash paths, and exposure of file paths in error messages. Tag findings P0/P1/P2.",
|
|
5
|
-
"system_prompt": "You are the Laverna security review agent.
|
|
5
|
+
"system_prompt": "You are the Laverna security review agent. Structure the audit with exactly these markdown headers, in order: a `## Findings` section (P0/P1/P2-tagged findings), then a `## Recommendation` section with a single line: approve | revise | block.",
|
|
6
6
|
"expected_shape": {
|
|
7
7
|
"produces_code": false,
|
|
8
8
|
"required_sections": ["## Findings", "## Recommendation"],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "iwt-001",
|
|
3
|
-
"task_type": "
|
|
3
|
+
"task_type": "feature",
|
|
4
4
|
"input_prompt": "Implement a pure function `aggregate(records, by)` that groups a list of dicts by the field named `by` and sums `cost_estimate_usd` per bucket. Unknown bucket values become the literal string '(unknown)'. Raise ValueError for an unsupported `by`. Cover with pytest unit tests including the unknown-bucket path and the ValueError branch.",
|
|
5
5
|
"system_prompt": "You are a Driver agent. Output a single Python file. Place the implementation and pytest tests in the same file. Follow TDD ordering: tests appear above the implementation.",
|
|
6
6
|
"expected_shape": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "iwt-002",
|
|
3
|
-
"task_type": "
|
|
3
|
+
"task_type": "feature",
|
|
4
4
|
"input_prompt": "Implement `compute_threshold(spend_usd, cap_usd)` that returns one of the string verdicts 'ok' | 'warn80' | 'warn90' | 'over'. The boundaries are: <80% ok, ≥80% warn80, ≥90% warn90, ≥100% over. Treat cap_usd == 0 as 'over' when spend_usd > 0 and 'ok' otherwise. Cover every boundary exactly and the zero-cap edge case with pytest.",
|
|
5
5
|
"system_prompt": "You are a Driver agent. Output a single Python file with implementation and pytest tests.",
|
|
6
6
|
"expected_shape": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "iwt-003",
|
|
3
|
-
"task_type": "
|
|
3
|
+
"task_type": "feature",
|
|
4
4
|
"input_prompt": "Implement a soft-failing `log_call_safely(*, service, tokens_input, tokens_output, model, cost_estimate_usd, dispatch_origin, blocked, repo, path)` that appends a JSON-Lines record to `path`. The wrapper must NEVER raise: OSError (e.g. permission denied, parent missing) is logged and swallowed. Tests must include a successful write, an append (two records), and a fault-injected OSError path that does not propagate.",
|
|
5
5
|
"system_prompt": "You are a Driver agent. Provide a single Python file: implementation followed by pytest tests using `tmp_path` and monkeypatch.",
|
|
6
6
|
"expected_shape": {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "rf-001",
|
|
3
|
+
"task_type": "refactor",
|
|
4
|
+
"input_prompt": "`validate_order(order)` and `validate_invoice(invoice)` each independently repeat the same three checks: non-empty `line_items`, non-negative `total`, and a valid ISO-8601 `created_at`. Extract the shared checks into a single `_validate_common_fields(obj)` helper that both functions call, without changing either function's public signature or error messages.",
|
|
5
|
+
"system_prompt": "You are a Driver agent doing a pure refactor -- behavior must not change. Output a single Python file: the refactored implementation followed by pytest tests proving both functions still produce identical error messages for each invalid case.",
|
|
6
|
+
"expected_shape": {
|
|
7
|
+
"produces_code": true,
|
|
8
|
+
"required_sections": [],
|
|
9
|
+
"min_length": 150,
|
|
10
|
+
"must_contain": ["def _validate_common_fields", "def test_"],
|
|
11
|
+
"must_not_contain": ["TODO"],
|
|
12
|
+
"json_schema_keys": []
|
|
13
|
+
},
|
|
14
|
+
"metadata": {
|
|
15
|
+
"source": "session-2026-06-15-pc2.4",
|
|
16
|
+
"redacted": true,
|
|
17
|
+
"redaction_notes": "Domain objects (order/invoice) generalized from the original module."
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "rf-002",
|
|
3
|
+
"task_type": "refactor",
|
|
4
|
+
"input_prompt": "`summarize_batch(records)` is a single 90-line function that filters, groups, and aggregates in one pass, making it impossible to unit test the grouping logic in isolation. Decompose it into `_filter_valid(records)`, `_group_by_key(records)`, and `_aggregate_groups(groups)`, with `summarize_batch` becoming a thin composition of the three. Preserve the existing return shape exactly.",
|
|
5
|
+
"system_prompt": "You are a Driver agent doing a pure refactor -- behavior must not change. Output a single Python file: the decomposed implementation followed by pytest tests for each extracted helper plus one end-to-end test for `summarize_batch`.",
|
|
6
|
+
"expected_shape": {
|
|
7
|
+
"produces_code": true,
|
|
8
|
+
"required_sections": [],
|
|
9
|
+
"min_length": 200,
|
|
10
|
+
"must_contain": ["def _filter_valid", "def _group_by_key", "def _aggregate_groups", "def test_"],
|
|
11
|
+
"must_not_contain": ["TODO"],
|
|
12
|
+
"json_schema_keys": []
|
|
13
|
+
},
|
|
14
|
+
"metadata": {
|
|
15
|
+
"source": "session-2026-06-15-pc2.4",
|
|
16
|
+
"redacted": true,
|
|
17
|
+
"redaction_notes": "Function name and field names generalized from the original module."
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "cr-001",
|
|
3
|
-
"task_type": "
|
|
3
|
+
"task_type": "review",
|
|
4
4
|
"input_prompt": "Review the following patch that adds a `dispatch_surface` field to TelemetryRecord. The field is a Literal[\"interactive\", \"programmatic\"] | None classified by a new `classify_dispatch_surface()` helper that wraps an `isatty` check on sys.stdout. Flag any backward-compatibility risks, any correctness gaps in the classifier (terminal detection edge cases), and any test-coverage gaps. Use the P0/P1/P2 severity scheme.",
|
|
5
|
-
"system_prompt": "You are the Nayru review agent.
|
|
5
|
+
"system_prompt": "You are the Nayru review agent. Structure the review with exactly these markdown headers, in order: a `## Findings` section listing findings tagged by severity (P0/P1/P2), then a `## Recommendation` section with a single line: approve | revise | block.",
|
|
6
6
|
"expected_shape": {
|
|
7
7
|
"produces_code": false,
|
|
8
8
|
"required_sections": ["## Findings", "## Recommendation"],
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "cr-002",
|
|
3
|
-
"task_type": "
|
|
3
|
+
"task_type": "review",
|
|
4
4
|
"input_prompt": "Review the change that lifts the hardcoded model string from `_synthesize_with_llm` into a local variable `model = \"claude-sonnet-4-6\"` so it can be logged consistently with the actual API call. Confirm the lift covers the SKIP-response path (still billable) and the API-failure path (no record). Flag any places where the model string drifts away from the logged value.",
|
|
5
|
-
"system_prompt": "You are the Nayru review agent.
|
|
5
|
+
"system_prompt": "You are the Nayru review agent. Structure the review with exactly these markdown headers, in order: a `## Findings` section (findings tagged P0/P1/P2), then a `## Recommendation` section with a single line: approve | revise | block.",
|
|
6
6
|
"expected_shape": {
|
|
7
7
|
"produces_code": false,
|
|
8
8
|
"required_sections": ["## Findings", "## Recommendation"],
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
"""Benchmark fixture data model + on-disk loaders.
|
|
2
2
|
|
|
3
|
-
Defines the five
|
|
3
|
+
Defines the five task types (aligned to the production telemetry
|
|
4
|
+
vocabulary -- paircoder#674), the ``ExpectedShape`` spec used by the
|
|
4
5
|
default scorer, and the ``BenchmarkFixture`` record that ties an input
|
|
5
6
|
prompt to an expected-shape spec. Fixtures live under
|
|
6
|
-
``fixtures/<task-type>/<id>.json`` next to this module.
|
|
7
|
+
``fixtures/<task-type>/<id>.json`` next to this module. Retired fixtures
|
|
8
|
+
whose type has no production-vocabulary equivalent live under
|
|
9
|
+
``fixtures/extended/`` and are excluded from the default load (see
|
|
10
|
+
``load_all_fixtures``).
|
|
7
11
|
"""
|
|
8
12
|
|
|
9
13
|
from __future__ import annotations
|
|
@@ -14,21 +18,23 @@ from pathlib import Path
|
|
|
14
18
|
from typing import Any, Literal
|
|
15
19
|
|
|
16
20
|
TaskType = Literal[
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
21
|
+
"feature",
|
|
22
|
+
"bugfix",
|
|
23
|
+
"chore",
|
|
24
|
+
"refactor",
|
|
25
|
+
"review",
|
|
22
26
|
]
|
|
23
27
|
|
|
24
28
|
TASK_TYPES: tuple[TaskType, ...] = (
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
29
|
+
"feature",
|
|
30
|
+
"bugfix",
|
|
31
|
+
"chore",
|
|
32
|
+
"refactor",
|
|
33
|
+
"review",
|
|
30
34
|
)
|
|
31
35
|
|
|
36
|
+
_EXTENDED_DIR_NAME = "extended"
|
|
37
|
+
|
|
32
38
|
|
|
33
39
|
@dataclass
|
|
34
40
|
class ExpectedShape:
|
|
@@ -103,20 +109,63 @@ class BenchmarkFixture:
|
|
|
103
109
|
)
|
|
104
110
|
|
|
105
111
|
|
|
112
|
+
class FixtureShapeMismatch(ValueError):
|
|
113
|
+
"""Raised when expected_shape demands content the fixture's prompt never states.
|
|
114
|
+
|
|
115
|
+
The grader fails any output missing a literal ``required_sections`` string.
|
|
116
|
+
A fixture whose prompt never asks the model for that section is unwinnable
|
|
117
|
+
by construction, and previously produced misleading cross-model scores
|
|
118
|
+
(paircoder#673). Loading fails closed instead.
|
|
119
|
+
"""
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def missing_required_sections(fixture: BenchmarkFixture) -> list[str]:
|
|
123
|
+
"""Return required_sections entries absent from the fixture's own prompt text."""
|
|
124
|
+
haystack = f"{fixture.system_prompt or ''}\n{fixture.input_prompt}"
|
|
125
|
+
return [s for s in fixture.expected_shape.required_sections if s not in haystack]
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def validate_fixture_shape(fixture: BenchmarkFixture) -> None:
|
|
129
|
+
"""Fail closed if expected_shape.required_sections aren't demanded by the prompt."""
|
|
130
|
+
missing = missing_required_sections(fixture)
|
|
131
|
+
if missing:
|
|
132
|
+
raise FixtureShapeMismatch(
|
|
133
|
+
f"fixture {fixture.id!r} expected_shape.required_sections demands "
|
|
134
|
+
f"{missing}, but neither system_prompt nor input_prompt states it "
|
|
135
|
+
"verbatim",
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
|
|
106
139
|
def fixtures_dir() -> Path:
|
|
107
140
|
"""Return the bundled-fixtures directory next to this module."""
|
|
108
141
|
return Path(__file__).resolve().parent / "fixtures"
|
|
109
142
|
|
|
110
143
|
|
|
111
144
|
def load_fixture(path: Path | str) -> BenchmarkFixture:
|
|
112
|
-
"""Load a single fixture from a JSON file.
|
|
145
|
+
"""Load a single fixture from a JSON file.
|
|
146
|
+
|
|
147
|
+
Raises ``FixtureShapeMismatch`` if the fixture's required_sections aren't
|
|
148
|
+
demanded by its own prompt.
|
|
149
|
+
"""
|
|
113
150
|
raw = json.loads(Path(path).read_text())
|
|
114
|
-
|
|
151
|
+
fixture = BenchmarkFixture.from_dict(raw)
|
|
152
|
+
validate_fixture_shape(fixture)
|
|
153
|
+
return fixture
|
|
115
154
|
|
|
116
155
|
|
|
117
156
|
def load_all_fixtures(root: Path | str) -> list[BenchmarkFixture]:
|
|
118
|
-
"""Recursively load every ``*.json`` fixture under ``root``.
|
|
157
|
+
"""Recursively load every default ``*.json`` fixture under ``root``.
|
|
158
|
+
|
|
159
|
+
Skips anything under an ``extended/`` subdirectory: retired fixtures
|
|
160
|
+
preserved there (paircoder#674) carry pre-vocabulary task_type values
|
|
161
|
+
and are excluded from the default matrix run, not merely a subset of
|
|
162
|
+
it.
|
|
163
|
+
"""
|
|
119
164
|
root_path = Path(root)
|
|
120
165
|
if not root_path.is_dir():
|
|
121
166
|
return []
|
|
122
|
-
return [
|
|
167
|
+
return [
|
|
168
|
+
load_fixture(p)
|
|
169
|
+
for p in sorted(root_path.rglob("*.json"))
|
|
170
|
+
if _EXTENDED_DIR_NAME not in p.relative_to(root_path).parts[:-1]
|
|
171
|
+
]
|
|
@@ -41,6 +41,20 @@ OWNERSHIP_MANIFEST: dict[str, Ownership] = {
|
|
|
41
41
|
"CLAUDE.md": Ownership.MERGED,
|
|
42
42
|
".paircoder/capabilities.yaml": Ownership.MERGED,
|
|
43
43
|
".claude/settings.json": Ownership.MERGED,
|
|
44
|
+
# Seed pack: shipped doctrine seeds under the harness memory dir
|
|
45
|
+
# are tool-owned (refreshed every write); the MEMORY.md index is a
|
|
46
|
+
# managed-region merge -- organic entries and other memory files it
|
|
47
|
+
# doesn't enumerate are never touched.
|
|
48
|
+
"memory/seed-01-verification-is-yours.md": Ownership.TOOL_OWNED,
|
|
49
|
+
"memory/seed-02-shared-checkouts-belong-to-runs.md": Ownership.TOOL_OWNED,
|
|
50
|
+
"memory/seed-03-dispatch-dont-implement.md": Ownership.TOOL_OWNED,
|
|
51
|
+
"memory/seed-04-fail-closed-audited-bypass.md": Ownership.TOOL_OWNED,
|
|
52
|
+
"memory/seed-05-no-deferral-at-agent-velocity.md": Ownership.TOOL_OWNED,
|
|
53
|
+
"memory/seed-06-repo-reality-beats-templates.md": Ownership.TOOL_OWNED,
|
|
54
|
+
"memory/seed-07-bounded-waits-only.md": Ownership.TOOL_OWNED,
|
|
55
|
+
"memory/seed-08-stop-the-tail.md": Ownership.TOOL_OWNED,
|
|
56
|
+
"memory/seed-09-delegate-loops-probe-limits.md": Ownership.TOOL_OWNED,
|
|
57
|
+
"memory/MEMORY.md": Ownership.MERGED,
|
|
44
58
|
}
|
|
45
59
|
|
|
46
60
|
|
|
@@ -260,6 +260,7 @@ def _run_engage(
|
|
|
260
260
|
skip_planning, resume, active_branch, auto_created, parent,
|
|
261
261
|
project_root, env_overrides, touched_siblings, strict_targets,
|
|
262
262
|
use_wt, kickoff_branch, reason, wt_path, wt_branch,
|
|
263
|
+
reuse_branch,
|
|
263
264
|
)
|
|
264
265
|
# A pause is a normal return, not an exception -- see `finally` below.
|
|
265
266
|
pipeline_paused = bool(result.get("paused_task"))
|
|
@@ -291,6 +292,7 @@ def _run_sprint_pipeline(
|
|
|
291
292
|
strict_targets: bool = False,
|
|
292
293
|
reason: str = "",
|
|
293
294
|
wt_path: Path | None = None, wt_branch: str | None = None,
|
|
295
|
+
reuse_branch: bool = False,
|
|
294
296
|
) -> dict[str, Any]:
|
|
295
297
|
"""Execute planning, sprint, and finalization in *run_root*."""
|
|
296
298
|
project_root = project_root or run_root
|
|
@@ -309,12 +311,13 @@ def _run_sprint_pipeline(
|
|
|
309
311
|
backlog_target, per_task_repos, preflight_block = _preflight_and_kickoff(
|
|
310
312
|
run_root, project_root, parsed, plan_id, max_parallel,
|
|
311
313
|
active_branch, strict_targets, touched_siblings, reason=reason,
|
|
314
|
+
reuse_branch=reuse_branch or resume, # a resume's sibling branches exist
|
|
312
315
|
)
|
|
313
316
|
result = _execute_sprint(
|
|
314
317
|
run_root, plan_id, max_parallel, completed_tasks=completed,
|
|
315
|
-
target_repo=backlog_target,
|
|
316
|
-
per_task_target_repos=per_task_repos,
|
|
318
|
+
target_repo=backlog_target, per_task_target_repos=per_task_repos,
|
|
317
319
|
env_overrides=env_overrides, engage_branch=active_branch, # #469 P1 pin
|
|
320
|
+
telemetry_root=project_root, # #657: durable checkout, not run_root
|
|
318
321
|
)
|
|
319
322
|
if result.paused_task:
|
|
320
323
|
return _handle_pause(
|
|
@@ -20,6 +20,11 @@ from bpsai_pair.commands import engage_base
|
|
|
20
20
|
from bpsai_pair.commands.engage_branch import _fail_checkout, _validate_branch_name
|
|
21
21
|
from bpsai_pair.commands.engage_guards import _get_protected_branches
|
|
22
22
|
from bpsai_pair.commands.engage_pr import _detect_pr_base
|
|
23
|
+
from bpsai_pair.commands.engage_preflight import PreflightRefused
|
|
24
|
+
from bpsai_pair.commands.engage_sibling_setup import (
|
|
25
|
+
describe_sibling_residue,
|
|
26
|
+
resolve_sibling_cut_ref,
|
|
27
|
+
)
|
|
23
28
|
|
|
24
29
|
logger = logging.getLogger(__name__)
|
|
25
30
|
|
|
@@ -111,8 +116,10 @@ def restore_siblings_on_failure(
|
|
|
111
116
|
and surfaced, never raised, so one stranded sibling can't mask the original
|
|
112
117
|
sprint error); siblings with no captured prior branch are skipped (nothing
|
|
113
118
|
safe to restore to);
|
|
114
|
-
* LOUDLY surfaces (stderr)
|
|
115
|
-
|
|
119
|
+
* LOUDLY surfaces (stderr) what the sibling actually carries --
|
|
120
|
+
``describe_sibling_residue`` reads the repo rather than asserting the
|
|
121
|
+
branch was preserved, because a setup abort can land here having died
|
|
122
|
+
BEFORE the cut, with no such branch and no work to go looking for.
|
|
116
123
|
|
|
117
124
|
The engage ``branch`` is deliberately NOT deleted -- it may carry committed
|
|
118
125
|
driver work; deleting it would lose that work. Restoring the working tree +
|
|
@@ -135,13 +142,7 @@ def restore_siblings_on_failure(
|
|
|
135
142
|
"Could not restore %s to '%s' after sprint failure: %s",
|
|
136
143
|
repo, prior, restored.stderr.strip(),
|
|
137
144
|
)
|
|
138
|
-
typer.echo(
|
|
139
|
-
f" ! Sibling {repo} still carries engage branch '{branch}' "
|
|
140
|
-
f"(restored working tree to '{prior or 'UNKNOWN'}'). The branch was "
|
|
141
|
-
f"PRESERVED (it may hold committed driver work) -- review/clean it "
|
|
142
|
-
f"manually.",
|
|
143
|
-
err=True,
|
|
144
|
-
)
|
|
145
|
+
typer.echo(describe_sibling_residue(repo, branch, prior), err=True)
|
|
145
146
|
|
|
146
147
|
|
|
147
148
|
def compute_sibling_repos(parsed: Any, project_root: Path) -> list[Path]:
|
|
@@ -238,13 +239,13 @@ def compute_touched_repos(parsed: Any, project_root: Path) -> list[Path]:
|
|
|
238
239
|
def _assert_git_repo(repo: Path) -> None:
|
|
239
240
|
"""Fail loud if *repo* is not an existing git repository."""
|
|
240
241
|
if not repo.exists():
|
|
241
|
-
raise
|
|
242
|
+
raise PreflightRefused(
|
|
242
243
|
f"Engage target repo does not exist: {repo}. Cannot create the "
|
|
243
244
|
f"engage branch in a missing repo -- declare a valid **Target "
|
|
244
245
|
f"repo:** or create the sibling.",
|
|
245
246
|
)
|
|
246
247
|
if not (repo / ".git").exists():
|
|
247
|
-
raise
|
|
248
|
+
raise PreflightRefused(
|
|
248
249
|
f"Engage target repo is not a git repository (no .git): {repo}. "
|
|
249
250
|
f"The engage branch can only be created in a git repo.",
|
|
250
251
|
)
|
|
@@ -265,7 +266,7 @@ def _assert_clean_tree(repo: Path) -> None:
|
|
|
265
266
|
encoding="utf-8", errors="replace",
|
|
266
267
|
)
|
|
267
268
|
if status.stdout.strip():
|
|
268
|
-
raise
|
|
269
|
+
raise PreflightRefused(
|
|
269
270
|
f"Engage target repo has a dirty working tree: {repo}. The engage "
|
|
270
271
|
f"branch cannot be cut from uncommitted changes (cross-repo "
|
|
271
272
|
f"contamination risk) -- commit or stash the sibling's changes "
|
|
@@ -281,7 +282,7 @@ def _assert_not_protected(branch: str) -> None:
|
|
|
281
282
|
protected branch) in a sibling.
|
|
282
283
|
"""
|
|
283
284
|
if branch in _get_protected_branches(None):
|
|
284
|
-
raise
|
|
285
|
+
raise PreflightRefused(
|
|
285
286
|
f"Refusing to use protected branch '{branch}' as the engage "
|
|
286
287
|
f"working branch in a target repo. Use an 'engage/<sprint>' name.",
|
|
287
288
|
)
|
|
@@ -306,23 +307,25 @@ def _safe_checkout_engage_branch(
|
|
|
306
307
|
against the SAME base -- closing the gap where a declared ``dev`` on a
|
|
307
308
|
``main``-default sibling still cut and PR'd from ``main``. When ``None`` the
|
|
308
309
|
resolver's detected default is used (unchanged back-compat).
|
|
310
|
+
|
|
311
|
+
A DECLARED base is fetched into the sibling first and then resolved to a ref
|
|
312
|
+
that exists there (``resolve_sibling_cut_ref``): a fleet sibling is normally
|
|
313
|
+
a long-lived clone nobody fetches by hand, and a base living only on its
|
|
314
|
+
remote used to kill the whole dispatch at setup. The cut-from ref may
|
|
315
|
+
therefore be ``origin/<base>`` while the RECORDED branch-point stays the
|
|
316
|
+
logical ``<base>`` -- a remote-tracking ref is not something a later PR
|
|
317
|
+
should target.
|
|
309
318
|
"""
|
|
319
|
+
cut_ref = base
|
|
310
320
|
if base is None:
|
|
311
|
-
base = _detect_pr_base(repo)
|
|
321
|
+
cut_ref = base = _detect_pr_base(repo)
|
|
312
322
|
else:
|
|
313
|
-
|
|
314
|
-
# ref_exists-check the base because it comes from the RAW backlog header
|
|
315
|
-
# (untrusted, may name a ref this repo lacks). Here *base* has already
|
|
316
|
-
# been resolved per-repo by the #548 machinery (``engage_cross_base`` ->
|
|
317
|
-
# ``detect_repo_base``), which only returns a ref that exists in THIS
|
|
318
|
-
# repo -- so validate (option-injection guard) but do not re-check
|
|
319
|
-
# existence.
|
|
320
|
-
engage_base.validate_base_ref(base)
|
|
323
|
+
cut_ref = resolve_sibling_cut_ref(repo, branch, base)
|
|
321
324
|
created = subprocess.run(
|
|
322
325
|
# EH2.1: ``switch -c … -- <base>`` end-of-options guard so a flag-like
|
|
323
326
|
# base ref is never parsed as an option (the new branch name is safe as
|
|
324
327
|
# the ``-c`` argument). Mirrors the push/rev-list/gh hardening.
|
|
325
|
-
["git", "switch", "-c", branch, "--",
|
|
328
|
+
["git", "switch", "-c", branch, "--", cut_ref],
|
|
326
329
|
cwd=repo, capture_output=True, check=False,
|
|
327
330
|
encoding="utf-8", errors="replace",
|
|
328
331
|
)
|