code-coordinator 0.5.48__tar.gz → 0.5.49__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.
- code_coordinator-0.5.49/.github/ISSUE_TEMPLATE/bug_report.md +42 -0
- {code_coordinator-0.5.48/code_coordinator.egg-info → code_coordinator-0.5.49}/PKG-INFO +1 -1
- {code_coordinator-0.5.48 → code_coordinator-0.5.49/code_coordinator.egg-info}/PKG-INFO +1 -1
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/code_coordinator.egg-info/SOURCES.txt +3 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/code_coordinator.egg-info/scm_file_list.json +3 -0
- code_coordinator-0.5.49/code_coordinator.egg-info/scm_version.json +8 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/acceptance.py +34 -0
- code_coordinator-0.5.49/coord/bug_intake.py +117 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/issues.py +56 -1
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/TEST_FIRST_BUG_LANE.md +134 -3
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_acceptance.py +41 -0
- code_coordinator-0.5.49/tests/test_bug_intake.py +93 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_issue_create_label.py +56 -0
- code_coordinator-0.5.48/code_coordinator.egg-info/scm_version.json +0 -8
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/.gitignore +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/CLAUDE.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/GOAL.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/LICENSE +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/MANIFEST.in +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/README.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/__init__.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/agent.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/audit.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/board_service.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/brain.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/claim.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/cli.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/client.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/comments.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/config.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dao.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/db.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/deps.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/drive.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/events.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/filelock.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/freshness.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/gates.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/goal.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/context.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/models.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/render.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/health/units.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/hooks.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/interactive.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/models.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/network.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/notify.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/openapi.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/parentage.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/plans.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/progress.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/release_window.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/reports.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/review.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/smoke.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/split_work.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/state.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/test_author.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/test_report.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/usage.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/install-agent.sh +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/pyproject.toml +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/setup.cfg +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/__init__.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/conftest.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_config.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_db.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_events.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_init.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_models.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_network.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_review.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_session.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_split.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_state.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.48 → code_coordinator-0.5.49}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug report
|
|
3
|
+
about: >-
|
|
4
|
+
Report broken behaviour for the test-first bug lane (docs/TEST_FIRST_BUG_LANE.md).
|
|
5
|
+
Fill in all four sections — a bug report missing any of them can't be turned
|
|
6
|
+
into a red test.
|
|
7
|
+
title: ''
|
|
8
|
+
labels: bug
|
|
9
|
+
assignees: ''
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
<!--
|
|
13
|
+
This is the test-first bug lane's intake contract (docs/TEST_FIRST_BUG_LANE.md
|
|
14
|
+
"The intake contract", #1964). All four sections below are required. They are
|
|
15
|
+
what a hand-authored (or agent-assisted) `contract.md` gets derived from — no
|
|
16
|
+
milestone, no UX mock, no Gate-A sign-off required.
|
|
17
|
+
|
|
18
|
+
`coord issue create --expected --actual --repro --evidence` renders this same
|
|
19
|
+
structure from the CLI (coord/bug_intake.py is the single source of truth for
|
|
20
|
+
the four headings — keep this file's headings in sync with it).
|
|
21
|
+
-->
|
|
22
|
+
|
|
23
|
+
## Expected behaviour
|
|
24
|
+
|
|
25
|
+
<!-- What should happen, in observable terms. -->
|
|
26
|
+
|
|
27
|
+
## Actual behaviour
|
|
28
|
+
|
|
29
|
+
<!-- What happens instead. -->
|
|
30
|
+
|
|
31
|
+
## Reproduction
|
|
32
|
+
|
|
33
|
+
<!-- The shortest path to see it: exact steps/commands, starting from a clean checkout. -->
|
|
34
|
+
|
|
35
|
+
## Evidence
|
|
36
|
+
|
|
37
|
+
<!--
|
|
38
|
+
Screenshot, wireframe, OR a reference implementation that behaves correctly
|
|
39
|
+
(a sibling backend, or a prior release). A reference implementation is the
|
|
40
|
+
highest-value form of evidence — it makes the expectation executable by
|
|
41
|
+
construction ("X should look like Y here" is a complete specification).
|
|
42
|
+
-->
|
|
@@ -14,6 +14,7 @@ pyproject.toml
|
|
|
14
14
|
.githooks/post-checkout
|
|
15
15
|
.githooks/post-commit
|
|
16
16
|
.githooks/post-merge
|
|
17
|
+
.github/ISSUE_TEMPLATE/bug_report.md
|
|
17
18
|
.github/workflows/auto-release.yml
|
|
18
19
|
.github/workflows/cargo-test.yml
|
|
19
20
|
.github/workflows/publish.yml
|
|
@@ -41,6 +42,7 @@ coord/board_service.py
|
|
|
41
42
|
coord/board_wire.py
|
|
42
43
|
coord/brain.py
|
|
43
44
|
coord/branch_model.py
|
|
45
|
+
coord/bug_intake.py
|
|
44
46
|
coord/cargo_cache.py
|
|
45
47
|
coord/ci_github.py
|
|
46
48
|
coord/ci_store.py
|
|
@@ -440,6 +442,7 @@ tests/test_board_state.py
|
|
|
440
442
|
tests/test_board_wire.py
|
|
441
443
|
tests/test_brain.py
|
|
442
444
|
tests/test_branch_model.py
|
|
445
|
+
tests/test_bug_intake.py
|
|
443
446
|
tests/test_build_worker_image_env_update.py
|
|
444
447
|
tests/test_cargo_cache.py
|
|
445
448
|
tests/test_ci_acceptance_gate_1950.py
|
{code_coordinator-0.5.48 → code_coordinator-0.5.49}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
".githooks/post-checkout",
|
|
8
8
|
".githooks/post-commit",
|
|
9
9
|
".githooks/post-merge",
|
|
10
|
+
".github/ISSUE_TEMPLATE/bug_report.md",
|
|
10
11
|
".github/workflows/auto-release.yml",
|
|
11
12
|
".github/workflows/cargo-test.yml",
|
|
12
13
|
".github/workflows/publish.yml",
|
|
@@ -35,6 +36,7 @@
|
|
|
35
36
|
"coord/board_wire.py",
|
|
36
37
|
"coord/brain.py",
|
|
37
38
|
"coord/branch_model.py",
|
|
39
|
+
"coord/bug_intake.py",
|
|
38
40
|
"coord/cargo_cache.py",
|
|
39
41
|
"coord/ci_github.py",
|
|
40
42
|
"coord/ci_store.py",
|
|
@@ -470,6 +472,7 @@
|
|
|
470
472
|
"tests/test_board_wire.py",
|
|
471
473
|
"tests/test_brain.py",
|
|
472
474
|
"tests/test_branch_model.py",
|
|
475
|
+
"tests/test_bug_intake.py",
|
|
473
476
|
"tests/test_build_worker_image_env_update.py",
|
|
474
477
|
"tests/test_cargo_cache.py",
|
|
475
478
|
"tests/test_ci_acceptance_gate_1950.py",
|
|
@@ -53,6 +53,40 @@ def _mocks_dir(milestone_number: int) -> str:
|
|
|
53
53
|
return f"{ACCEPTANCE_DIRNAME}/{ms_dirname(milestone_number)}/mocks"
|
|
54
54
|
|
|
55
55
|
|
|
56
|
+
def issue_dirname(issue_number: int) -> str:
|
|
57
|
+
"""The ``issue-NN`` directory name for a single-issue bug-lane contract
|
|
58
|
+
(docs/TEST_FIRST_BUG_LANE.md "The intake contract", #1964) — the bug
|
|
59
|
+
lane's counterpart to :func:`ms_dirname`, with no milestone in the name
|
|
60
|
+
because a bug has none.
|
|
61
|
+
|
|
62
|
+
This is purely a naming convention, not new plumbing: the manifest
|
|
63
|
+
scanner below (:func:`_manifest_paths`) globs ``*/manifest.*`` under
|
|
64
|
+
``tests/acceptance/`` regardless of what the directory is called, so an
|
|
65
|
+
``issue-NN/`` slice is discovered, run (``coord acceptance run --issue
|
|
66
|
+
N``), recorded (``coord acceptance record``), and injected into the
|
|
67
|
+
worker's briefing (:func:`oracle_loop_contract_block`) by the exact same
|
|
68
|
+
code path as an ``ms-NN/`` one — see ``TestOracleLoopContractBlock`` in
|
|
69
|
+
``tests/test_acceptance.py``, which already proves the block is built
|
|
70
|
+
from whatever the owning directory happens to be named. Pinning the name
|
|
71
|
+
here just keeps every bug-lane contract in the same shape.
|
|
72
|
+
"""
|
|
73
|
+
return f"issue-{issue_number}"
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def bug_contract_path(issue_number: int) -> str:
|
|
77
|
+
"""Repo-relative path to *issue_number*'s single-issue bug-lane contract
|
|
78
|
+
(docs/TEST_FIRST_BUG_LANE.md "The intake contract").
|
|
79
|
+
|
|
80
|
+
Unlike :func:`gate_a_contract_path`, nothing gates dispatch on this
|
|
81
|
+
existing — a bug issue has no milestone, so there is no Gate A to block
|
|
82
|
+
on it. It is hand-authored (or agent-assisted) directly from the four
|
|
83
|
+
intake fields (:mod:`coord.bug_intake`); once it — and a
|
|
84
|
+
``manifest.yml`` alongside it — exist, the issue behaves exactly like an
|
|
85
|
+
authored ``ms-NN`` slice to every downstream command.
|
|
86
|
+
"""
|
|
87
|
+
return f"{ACCEPTANCE_DIRNAME}/{issue_dirname(issue_number)}/contract.md"
|
|
88
|
+
|
|
89
|
+
|
|
56
90
|
# Mock-fixture file extension -> the driver ``kind`` it implies (the SAME
|
|
57
91
|
# rule each ``AcceptanceDriverConfig.mock`` glob already encodes in
|
|
58
92
|
# coordinator.yml / docs/ORACLE_LOOP.md: ``"*.screen"`` for ``tui-tuidriver``,
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"""The bug-lane intake contract (#1964, docs/TEST_FIRST_BUG_LANE.md "The
|
|
2
|
+
intake contract").
|
|
3
|
+
|
|
4
|
+
A bug entering the test-first bug lane carries four fields instead of the
|
|
5
|
+
feature lane's UX mock:
|
|
6
|
+
|
|
7
|
+
1. **Expected behaviour** — what should happen, in observable terms.
|
|
8
|
+
2. **Actual behaviour** — what happens instead.
|
|
9
|
+
3. **Reproduction** — the shortest path to see it.
|
|
10
|
+
4. **Evidence** — screenshot, wireframe, or a reference implementation that
|
|
11
|
+
behaves correctly (a sibling backend, or a prior release).
|
|
12
|
+
|
|
13
|
+
This module is the single source of truth for how those four fields are
|
|
14
|
+
rendered into an issue body and parsed back out of one, so the fields
|
|
15
|
+
survive as addressable sections rather than prose a later author (human or
|
|
16
|
+
agent) has to re-derive:
|
|
17
|
+
|
|
18
|
+
- ``coord issue create --expected/--actual/--repro/--evidence``
|
|
19
|
+
(:mod:`coord.commands.issues`) calls :func:`format_bug_report` to compose
|
|
20
|
+
the body.
|
|
21
|
+
- ``.github/ISSUE_TEMPLATE/bug_report.md`` renders the exact same four
|
|
22
|
+
headings for a human filing straight through the GitHub UI — a
|
|
23
|
+
hand-authored ``contract.md`` (docs/TEST_FIRST_BUG_LANE.md, #1964
|
|
24
|
+
Deliverable 2) is written by reading that issue directly, no parsing
|
|
25
|
+
required. :func:`parse_bug_report` exists for the agent-assisted path and
|
|
26
|
+
for tooling that wants the four fields back out programmatically (e.g. a
|
|
27
|
+
future bug-contract-author briefing) — it is not on the hand-authoring
|
|
28
|
+
critical path.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
from __future__ import annotations
|
|
32
|
+
|
|
33
|
+
import re
|
|
34
|
+
from dataclasses import dataclass
|
|
35
|
+
|
|
36
|
+
# Canonical section headings, in report order. `.github/ISSUE_TEMPLATE/
|
|
37
|
+
# bug_report.md` renders these same four strings as its Markdown headings —
|
|
38
|
+
# tests/test_bug_intake.py checks the template file against this module
|
|
39
|
+
# directly so the two can never drift apart silently.
|
|
40
|
+
EXPECTED_HEADING = "Expected behaviour"
|
|
41
|
+
ACTUAL_HEADING = "Actual behaviour"
|
|
42
|
+
REPRO_HEADING = "Reproduction"
|
|
43
|
+
EVIDENCE_HEADING = "Evidence"
|
|
44
|
+
|
|
45
|
+
#: Ordered (attribute name, heading text) pairs — single source of truth for
|
|
46
|
+
#: both the render order (:func:`format_bug_report`) and the parse targets
|
|
47
|
+
#: (:func:`parse_bug_report`).
|
|
48
|
+
FIELDS: tuple[tuple[str, str], ...] = (
|
|
49
|
+
("expected", EXPECTED_HEADING),
|
|
50
|
+
("actual", ACTUAL_HEADING),
|
|
51
|
+
("repro", REPRO_HEADING),
|
|
52
|
+
("evidence", EVIDENCE_HEADING),
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
@dataclass(frozen=True)
|
|
57
|
+
class BugReport:
|
|
58
|
+
"""The four intake fields, parsed out of (or destined for) an issue
|
|
59
|
+
body. See module docstring for what each field means."""
|
|
60
|
+
|
|
61
|
+
expected: str
|
|
62
|
+
actual: str
|
|
63
|
+
repro: str
|
|
64
|
+
evidence: str
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def format_bug_report(*, expected: str, actual: str, repro: str, evidence: str) -> str:
|
|
68
|
+
"""Render the four intake fields as a Markdown issue body, one
|
|
69
|
+
addressable ``## `` section per field, in report order.
|
|
70
|
+
|
|
71
|
+
Used by ``coord issue create --expected/--actual/--repro/--evidence`` so
|
|
72
|
+
the fields land in the issue as structured sections rather than a single
|
|
73
|
+
freeform paragraph. Round-trips through :func:`parse_bug_report`.
|
|
74
|
+
"""
|
|
75
|
+
values = {
|
|
76
|
+
"expected": expected, "actual": actual, "repro": repro, "evidence": evidence,
|
|
77
|
+
}
|
|
78
|
+
parts = [
|
|
79
|
+
f"## {heading}\n\n{values[attr].strip()}" for attr, heading in FIELDS
|
|
80
|
+
]
|
|
81
|
+
return "\n\n".join(parts) + "\n"
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def parse_bug_report(body: str) -> BugReport | None:
|
|
85
|
+
"""Extract the four intake fields back out of an issue body rendered by
|
|
86
|
+
:func:`format_bug_report`, or hand-written to the same four headings.
|
|
87
|
+
|
|
88
|
+
Tolerant of heading level (``#`` through ``######``) and of surrounding
|
|
89
|
+
prose before the first heading or after the last section's text, so a
|
|
90
|
+
human-edited issue (extra context added above/below the four sections)
|
|
91
|
+
still parses. Matching is on heading text only, case-insensitively.
|
|
92
|
+
|
|
93
|
+
Returns ``None`` when any of the four sections is missing or empty — a
|
|
94
|
+
partial bug report is not a bug report the lane can act on. Callers that
|
|
95
|
+
want a best-effort partial read should not use this function.
|
|
96
|
+
"""
|
|
97
|
+
heading_alts = "|".join(re.escape(heading) for _, heading in FIELDS)
|
|
98
|
+
pattern = re.compile(
|
|
99
|
+
rf"^#{{1,6}}\s*({heading_alts})\s*$", re.IGNORECASE | re.MULTILINE,
|
|
100
|
+
)
|
|
101
|
+
matches = list(pattern.finditer(body))
|
|
102
|
+
if not matches:
|
|
103
|
+
return None
|
|
104
|
+
|
|
105
|
+
by_heading: dict[str, str] = {}
|
|
106
|
+
for i, m in enumerate(matches):
|
|
107
|
+
start = m.end()
|
|
108
|
+
end = matches[i + 1].start() if i + 1 < len(matches) else len(body)
|
|
109
|
+
by_heading[m.group(1).strip().lower()] = body[start:end].strip()
|
|
110
|
+
|
|
111
|
+
kwargs: dict[str, str] = {}
|
|
112
|
+
for attr, heading in FIELDS:
|
|
113
|
+
value = by_heading.get(heading.lower())
|
|
114
|
+
if not value:
|
|
115
|
+
return None
|
|
116
|
+
kwargs[attr] = value
|
|
117
|
+
return BugReport(**kwargs)
|
|
@@ -213,7 +213,15 @@ def issue_reopen_cmd(
|
|
|
213
213
|
"number on success.\n\n"
|
|
214
214
|
"Use --body-file for long markdown bodies (avoids shell-quoting "
|
|
215
215
|
"issues). '-' reads from stdin. Routes through the daemon seam so "
|
|
216
|
-
"agents never need to call `gh issue create` directly
|
|
216
|
+
"agents never need to call `gh issue create` directly.\n\n"
|
|
217
|
+
"For a bug entering the test-first bug lane "
|
|
218
|
+
"(docs/TEST_FIRST_BUG_LANE.md, #1964), pass --expected/--actual/"
|
|
219
|
+
"--repro/--evidence instead of --body/--body-file — the four fields "
|
|
220
|
+
"land in the issue as addressable sections (coord.bug_intake) "
|
|
221
|
+
"instead of a single freeform paragraph, so a later contract.md "
|
|
222
|
+
"author (hand or agent) doesn't have to re-derive them from prose. "
|
|
223
|
+
"All four are required together, and mutually exclusive with "
|
|
224
|
+
"--body/--body-file."
|
|
217
225
|
),
|
|
218
226
|
)
|
|
219
227
|
@click.argument("repo")
|
|
@@ -231,6 +239,25 @@ def issue_reopen_cmd(
|
|
|
231
239
|
multiple=True,
|
|
232
240
|
help="Label to add (repeatable). The label must already exist in the repo.",
|
|
233
241
|
)
|
|
242
|
+
@click.option(
|
|
243
|
+
"--expected", default=None,
|
|
244
|
+
help="Bug-lane intake field: what should happen, in observable terms.",
|
|
245
|
+
)
|
|
246
|
+
@click.option(
|
|
247
|
+
"--actual", default=None,
|
|
248
|
+
help="Bug-lane intake field: what happens instead.",
|
|
249
|
+
)
|
|
250
|
+
@click.option(
|
|
251
|
+
"--repro", default=None,
|
|
252
|
+
help="Bug-lane intake field: the shortest path to see it.",
|
|
253
|
+
)
|
|
254
|
+
@click.option(
|
|
255
|
+
"--evidence", default=None,
|
|
256
|
+
help=(
|
|
257
|
+
"Bug-lane intake field: screenshot, wireframe, or a reference "
|
|
258
|
+
"implementation that behaves correctly."
|
|
259
|
+
),
|
|
260
|
+
)
|
|
234
261
|
@_CONFIG_OPTION
|
|
235
262
|
def issue_create_cmd(
|
|
236
263
|
repo: str,
|
|
@@ -238,8 +265,36 @@ def issue_create_cmd(
|
|
|
238
265
|
body: str | None,
|
|
239
266
|
body_file: Path | None,
|
|
240
267
|
labels: tuple[str, ...],
|
|
268
|
+
expected: str | None,
|
|
269
|
+
actual: str | None,
|
|
270
|
+
repro: str | None,
|
|
271
|
+
evidence: str | None,
|
|
241
272
|
config_path: Path,
|
|
242
273
|
) -> None:
|
|
274
|
+
bug_fields = {"expected": expected, "actual": actual, "repro": repro, "evidence": evidence}
|
|
275
|
+
given_bug_fields = {k: v for k, v in bug_fields.items() if v is not None}
|
|
276
|
+
if given_bug_fields:
|
|
277
|
+
if body is not None or body_file is not None:
|
|
278
|
+
click.echo(
|
|
279
|
+
"error: --expected/--actual/--repro/--evidence are mutually "
|
|
280
|
+
"exclusive with --body/--body-file",
|
|
281
|
+
err=True,
|
|
282
|
+
)
|
|
283
|
+
sys.exit(2)
|
|
284
|
+
missing = [k for k, v in bug_fields.items() if v is None]
|
|
285
|
+
if missing:
|
|
286
|
+
click.echo(
|
|
287
|
+
"error: --expected/--actual/--repro/--evidence must all be "
|
|
288
|
+
f"given together (missing: {', '.join(f'--{m}' for m in missing)})",
|
|
289
|
+
err=True,
|
|
290
|
+
)
|
|
291
|
+
sys.exit(2)
|
|
292
|
+
from coord.bug_intake import format_bug_report # noqa: PLC0415
|
|
293
|
+
|
|
294
|
+
body = format_bug_report(
|
|
295
|
+
expected=expected, actual=actual, repro=repro, evidence=evidence,
|
|
296
|
+
)
|
|
297
|
+
|
|
243
298
|
cfg = _load_config(config_path)
|
|
244
299
|
repo_entry = cfg.repo(repo)
|
|
245
300
|
slug = repo_entry.github if repo_entry else repo
|
|
@@ -147,9 +147,10 @@ quadraui#541 (a framework parity gap), vimcode#625's real root cause (a floating
|
|
|
147
147
|
path-dep silently restating every snapshot), and claude-coordinator#1950 (the cadence
|
|
148
148
|
hole) — three findings in three repos, from one bug.
|
|
149
149
|
|
|
150
|
-
## The intake contract
|
|
150
|
+
## The intake contract (#1964, shipped)
|
|
151
151
|
|
|
152
|
-
An issue entering this lane carries
|
|
152
|
+
An issue entering this lane carries four fields, instead of the feature lane's
|
|
153
|
+
milestone + UX mock:
|
|
153
154
|
|
|
154
155
|
1. **Expected behaviour** — what should happen, in observable terms.
|
|
155
156
|
2. **Actual behaviour** — what happens instead.
|
|
@@ -161,6 +162,79 @@ An issue entering this lane carries:
|
|
|
161
162
|
implementation* is worth more than a screenshot: it makes the expectation executable
|
|
162
163
|
by construction. "GTK should look like TUI here" is a complete specification.
|
|
163
164
|
|
|
165
|
+
**The fields survive as structured sections, not prose.** Two front doors, both
|
|
166
|
+
backed by the same four headings (`coord/bug_intake.py` is the single source of
|
|
167
|
+
truth, so they can never drift apart silently):
|
|
168
|
+
|
|
169
|
+
- `.github/ISSUE_TEMPLATE/bug_report.md` — a human filing straight through the
|
|
170
|
+
GitHub UI gets the four `##` sections pre-seeded.
|
|
171
|
+
- `coord issue create <repo> --title "…" --expected "…" --actual "…" --repro "…"
|
|
172
|
+
--evidence "…"` — the CLI/automation front door. All four are required together
|
|
173
|
+
and mutually exclusive with `--body`/`--body-file`; `coord.bug_intake.
|
|
174
|
+
format_bug_report` renders them as one `##`-headed section apiece so a later
|
|
175
|
+
contract author (hand or agent) reads them directly off the issue instead of
|
|
176
|
+
re-deriving them from a paragraph. `coord.bug_intake.parse_bug_report` is the
|
|
177
|
+
inverse, for the agent-assisted authoring path (below).
|
|
178
|
+
|
|
179
|
+
No milestone, no `coord acceptance mock`, no Gate-A sign-off happens at intake —
|
|
180
|
+
those are feature-lane machinery this issue deliberately does not touch.
|
|
181
|
+
|
|
182
|
+
## Single-issue contract authoring (#1964, shipped)
|
|
183
|
+
|
|
184
|
+
The feature lane's contract lives at `tests/acceptance/ms-NN/contract.md`, gated by
|
|
185
|
+
Gate A and keyed by a milestone number. A bug has neither. Its contract lives at:
|
|
186
|
+
|
|
187
|
+
```
|
|
188
|
+
tests/acceptance/issue-NN/contract.md # coord.acceptance.bug_contract_path(NN)
|
|
189
|
+
tests/acceptance/issue-NN/manifest.yml # tests: {<test-id>: NN}
|
|
190
|
+
tests/acceptance/issue-NN/<suite files> # sealed once authored, same as ms-NN
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
`coord.acceptance.issue_dirname(NN)` / `bug_contract_path(NN)` pin the convention;
|
|
194
|
+
**everything downstream already works with zero new code**, because the manifest
|
|
195
|
+
scanner (`coord.acceptance._manifest_paths`) globs `*/manifest.*` under
|
|
196
|
+
`tests/acceptance/` regardless of what the directory is called:
|
|
197
|
+
|
|
198
|
+
- `coord acceptance run --repo R --issue NN` / `coord acceptance record --repo R
|
|
199
|
+
--issue NN --sha SHA` — already took no milestone argument (this is what the
|
|
200
|
+
issue's own framing points at: "the runner and the trust gate are reusable
|
|
201
|
+
as-is").
|
|
202
|
+
- `coord.acceptance.oracle_loop_contract_block` — the "🔒 Oracle-loop acceptance
|
|
203
|
+
contract" block prepended to a Work briefing — is keyed by **issue number**, not
|
|
204
|
+
milestone, and fires whenever the repo has an acceptance driver configured and
|
|
205
|
+
`ms_dir_for_issue` finds a slice for that issue. An `issue-NN/` slice is
|
|
206
|
+
discovered by the exact same call as an `ms-NN/` one. This is why "briefing-
|
|
207
|
+
contract auto-injection" is explicitly out of scope for this issue's deliverable
|
|
208
|
+
list below: it isn't missing, it's already generic. See
|
|
209
|
+
`TestBugLaneNeedsNoMilestone` in `tests/test_acceptance.py` for the end-to-end
|
|
210
|
+
proof (a hand-authored `issue-NN/manifest.yml`, no `ms-*` directory anywhere,
|
|
211
|
+
resolves through `load_manifest` → `ms_dir_for_issue` →
|
|
212
|
+
`oracle_loop_contract_block` unmodified).
|
|
213
|
+
- **The four fields themselves already reach the Work briefing, verbatim, with no
|
|
214
|
+
bug-lane-specific code at all.** `coord assign`/`coord dispatch` (the headless
|
|
215
|
+
dispatch every auto-loop uses) auto-generates the briefing from the raw issue
|
|
216
|
+
body whenever no explicit `--briefing` is given
|
|
217
|
+
(`coord/commands/dispatch.py`: `briefing = f"Issue #{issue}: {issue_title}\n\n
|
|
218
|
+
{issue_body}"`) — this is completely generic, not something #1964 added. Because
|
|
219
|
+
`coord issue create --expected/--actual/--repro/--evidence` writes the four
|
|
220
|
+
fields into the issue body as literal `##` sections (Deliverable 1), they ride
|
|
221
|
+
along in that auto-generated briefing intact, underneath the oracle-contract
|
|
222
|
+
block pointing at `contract.md`. Nothing about "make the four fields reach the
|
|
223
|
+
briefing" needed building — it falls out of Deliverable 1 (structured sections,
|
|
224
|
+
not prose) plus machinery that already existed.
|
|
225
|
+
|
|
226
|
+
**Authoring is hand-first.** Read the issue's four fields directly (no parsing
|
|
227
|
+
needed — that's the point of shipping them as sections) and write `contract.md` by
|
|
228
|
+
hand, scoped to the **one behaviour** the bug describes — not a whole surface, not
|
|
229
|
+
a whole milestone. `JDonaghy/vimcode#622` already establishes this is workable by
|
|
230
|
+
hand. An agent-assisted authoring dispatch (mirroring `coord acceptance mock`'s
|
|
231
|
+
independent-agent shape, but keyed by issue number with no milestone lookup) is a
|
|
232
|
+
natural follow-up once hand-authoring has enough mileage to know what to automate
|
|
233
|
+
— not built by this issue. Explicitly out of scope here, same as the milestone
|
|
234
|
+
ceremony above: Gate-A sign-off, stall-protocol automation beyond what already
|
|
235
|
+
exists issue-number-keyed (`coord acceptance stall` already takes no milestone
|
|
236
|
+
argument either).
|
|
237
|
+
|
|
164
238
|
## Known-good worked example
|
|
165
239
|
|
|
166
240
|
The first pass through this loop should be the vimcode extensions-panel help popup,
|
|
@@ -168,12 +242,69 @@ found by operator smoke on 2026-08-07:
|
|
|
168
242
|
|
|
169
243
|
- **Expected**: full box border, title centred in the top border.
|
|
170
244
|
- **Actual**: side-bars only, title demoted to a content row.
|
|
245
|
+
- **Reproduction**: open vimcode, focus the extensions panel, press `?`.
|
|
171
246
|
- **Evidence**: screenshots of both, plus `develop` as a working reference.
|
|
172
247
|
- **Root cause**: already filed upstream as quadraui#541.
|
|
173
248
|
|
|
174
249
|
It is an ideal rehearsal because the expensive part — characterising the bug — is
|
|
175
250
|
already done, and it exercises every stage of the lane including the upstream-vs-local
|
|
176
|
-
fork.
|
|
251
|
+
fork. Walked through end to end, in the shape #1964 ships:
|
|
252
|
+
|
|
253
|
+
1. **Intake.**
|
|
254
|
+
```
|
|
255
|
+
coord issue create vimcode \
|
|
256
|
+
--title "Extensions-panel help popup: missing top/bottom border" \
|
|
257
|
+
--expected "Full box border, title centred in the top border segment." \
|
|
258
|
+
--actual "Side-bars only (left/right verticals); title demoted to a plain content row." \
|
|
259
|
+
--repro "Open vimcode, focus the extensions panel, press ? to open the help popup." \
|
|
260
|
+
--evidence "Screenshots of both states, plus develop (pre-regression) as a working reference — quadraui#541 has the upstream root cause."
|
|
261
|
+
```
|
|
262
|
+
This lands as vimcode issue #625, body already split into the four `##`
|
|
263
|
+
sections above — nothing left to re-derive.
|
|
264
|
+
|
|
265
|
+
2. **Contract authoring (hand, scoped to the one behaviour).** Read #625 directly
|
|
266
|
+
and write `tests/acceptance/issue-625/contract.md` in vimcode's checkout:
|
|
267
|
+
|
|
268
|
+
```markdown
|
|
269
|
+
# Bug-lane contract — issue #625: extensions-panel help popup border
|
|
270
|
+
|
|
271
|
+
## The one behaviour
|
|
272
|
+
`TuiDriver` renders the help popup as a bordered box:
|
|
273
|
+
- Row 0 (top border) is a full horizontal rule using the top-left/top-right
|
|
274
|
+
corner glyphs at both ends — `driver.find(top_left)` and
|
|
275
|
+
`driver.find(top_right)` both return `Some(..)` on the popup's top row.
|
|
276
|
+
- The popup's title text is found on that same top row, horizontally
|
|
277
|
+
centred — not on a separate content row below the border.
|
|
278
|
+
- Left/right columns render the vertical border glyph on every popup row
|
|
279
|
+
(this part already worked pre-regression; asserting it too catches a
|
|
280
|
+
half-fix that adds a top rule but drops the sides).
|
|
281
|
+
|
|
282
|
+
## Done condition (the red gate)
|
|
283
|
+
Before any fix, a test asserting the three bullets above must FAIL,
|
|
284
|
+
specifically on the title-row / top-border assertions. After the fix, the
|
|
285
|
+
same test — unmodified — goes green.
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
Then a matching `tests/acceptance/issue-625/manifest.yml`
|
|
289
|
+
(`tests: {help_popup_border::has_top_and_bottom_rule: 625, ...}`) and the
|
|
290
|
+
actual `TuiDriver` assertions, committed to vimcode's `tests/acceptance/`
|
|
291
|
+
the same way any `ms-NN` slice is.
|
|
292
|
+
|
|
293
|
+
3. **Red gate.** `coord acceptance run --repo vimcode --issue 625` must FAIL,
|
|
294
|
+
for the title/border reason above, before any fix lands — proves the test
|
|
295
|
+
exercises the reported bug rather than passing vacuously.
|
|
296
|
+
|
|
297
|
+
4. **Dispatch, fix, converge.** The issue dispatches as ordinary `work` (no
|
|
298
|
+
milestone, no Gate A to wait on). The worker briefing already carries the
|
|
299
|
+
"🔒 Oracle-loop acceptance contract" block pointing at
|
|
300
|
+
`tests/acceptance/issue-625/contract.md`, and iterates with
|
|
301
|
+
`coord acceptance run --repo vimcode --issue 625` until green, same loop as
|
|
302
|
+
the feature lane.
|
|
303
|
+
|
|
304
|
+
5. **Trust gate + cadence.** `coord acceptance record --repo vimcode --issue 625
|
|
305
|
+
--sha <pushed-sha>` re-runs the sealed slice externally. Because vimcode's real
|
|
306
|
+
test command runs the whole accumulated `tests/acceptance/` tree (#1950), this
|
|
307
|
+
slice re-runs on every later issue forever — coverage ratchets, it does not rot.
|
|
177
308
|
|
|
178
309
|
## What this program is *not*
|
|
179
310
|
|
|
@@ -14,8 +14,10 @@ from coord.acceptance import (
|
|
|
14
14
|
ManifestError,
|
|
15
15
|
acceptance_capability_gap,
|
|
16
16
|
build_verdict,
|
|
17
|
+
bug_contract_path,
|
|
17
18
|
dump_manifest_error_hint,
|
|
18
19
|
failure_summary,
|
|
20
|
+
issue_dirname,
|
|
19
21
|
load_manifest,
|
|
20
22
|
ms_dir_for_issue,
|
|
21
23
|
oracle_loop_contract_block,
|
|
@@ -247,6 +249,45 @@ class TestOracleLoopContractBlock:
|
|
|
247
249
|
assert "not the other way around" in block
|
|
248
250
|
|
|
249
251
|
|
|
252
|
+
class TestIssueDirnameAndBugContractPath:
|
|
253
|
+
"""#1964 (docs/TEST_FIRST_BUG_LANE.md): the bug lane's single-issue
|
|
254
|
+
counterpart to ms_dirname/gate_a_contract_path — no milestone number
|
|
255
|
+
anywhere in the name."""
|
|
256
|
+
|
|
257
|
+
def test_issue_dirname(self) -> None:
|
|
258
|
+
assert issue_dirname(1234) == "issue-1234"
|
|
259
|
+
|
|
260
|
+
def test_bug_contract_path(self) -> None:
|
|
261
|
+
assert bug_contract_path(1234) == "tests/acceptance/issue-1234/contract.md"
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
class TestBugLaneNeedsNoMilestone:
|
|
265
|
+
"""#1964: end-to-end proof that a hand-authored `issue-NN/` slice —
|
|
266
|
+
with no `ms-NN/` directory anywhere in the tree, and no milestone
|
|
267
|
+
involved at any step — is discovered, scoped, and injected into the
|
|
268
|
+
worker briefing by the exact same machinery an `ms-NN/` slice uses.
|
|
269
|
+
This is the acceptance bar for "no milestone ceremony required"."""
|
|
270
|
+
|
|
271
|
+
def test_manifest_and_contract_block_work_with_only_an_issue_dir(
|
|
272
|
+
self, tmp_path: Path
|
|
273
|
+
) -> None:
|
|
274
|
+
root = tmp_path / "tests" / "acceptance"
|
|
275
|
+
bug_dir = root / issue_dirname(1234)
|
|
276
|
+
bug_dir.mkdir(parents=True)
|
|
277
|
+
(bug_dir / "manifest.yml").write_text("tests:\n issue_1234::popup_border: 1234\n")
|
|
278
|
+
|
|
279
|
+
assert ms_dir_for_issue(root, 1234) == "issue-1234"
|
|
280
|
+
manifest = load_manifest(root)
|
|
281
|
+
assert manifest == {"issue_1234::popup_border": 1234}
|
|
282
|
+
|
|
283
|
+
block = oracle_loop_contract_block(root, "vimcode", 1234)
|
|
284
|
+
assert bug_contract_path(1234) in block
|
|
285
|
+
assert "coord acceptance run --repo vimcode --issue 1234" in block
|
|
286
|
+
# No ms-* dir exists anywhere — confirm the fixture itself proves the
|
|
287
|
+
# negative, not just that the assertions above happened to pass.
|
|
288
|
+
assert not list(root.glob("ms-*"))
|
|
289
|
+
|
|
290
|
+
|
|
250
291
|
class TestAcceptanceCapabilityGap:
|
|
251
292
|
"""#966: cheap detection mirroring `coord.smoke.pick_smoke_machine`'s
|
|
252
293
|
candidate filter — no remote-exec plumbing, just "is this the wrong
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"""Tests for coord/bug_intake.py — the bug-lane intake contract's four-field
|
|
2
|
+
format/parse round-trip (#1964, docs/TEST_FIRST_BUG_LANE.md)."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
from coord.bug_intake import BugReport, FIELDS, format_bug_report, parse_bug_report
|
|
9
|
+
|
|
10
|
+
REPO_ROOT = Path(__file__).resolve().parent.parent
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class TestFormatBugReport:
|
|
14
|
+
def test_renders_all_four_sections_in_order(self) -> None:
|
|
15
|
+
body = format_bug_report(
|
|
16
|
+
expected="full box border", actual="side-bars only",
|
|
17
|
+
repro="open the extensions panel help popup",
|
|
18
|
+
evidence="screenshots of both, plus develop as a reference",
|
|
19
|
+
)
|
|
20
|
+
assert body.index("## Expected behaviour") < body.index("## Actual behaviour")
|
|
21
|
+
assert body.index("## Actual behaviour") < body.index("## Reproduction")
|
|
22
|
+
assert body.index("## Reproduction") < body.index("## Evidence")
|
|
23
|
+
assert "full box border" in body
|
|
24
|
+
assert "side-bars only" in body
|
|
25
|
+
assert "open the extensions panel help popup" in body
|
|
26
|
+
assert "develop as a reference" in body
|
|
27
|
+
|
|
28
|
+
def test_strips_surrounding_whitespace_per_field(self) -> None:
|
|
29
|
+
body = format_bug_report(
|
|
30
|
+
expected=" a \n", actual="b", repro="c", evidence="d",
|
|
31
|
+
)
|
|
32
|
+
assert "## Expected behaviour\n\na" in body
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class TestParseBugReport:
|
|
36
|
+
def test_round_trips_through_format(self) -> None:
|
|
37
|
+
body = format_bug_report(
|
|
38
|
+
expected="a", actual="b", repro="c", evidence="d",
|
|
39
|
+
)
|
|
40
|
+
report = parse_bug_report(body)
|
|
41
|
+
assert report == BugReport(expected="a", actual="b", repro="c", evidence="d")
|
|
42
|
+
|
|
43
|
+
def test_none_when_no_headings_present(self) -> None:
|
|
44
|
+
assert parse_bug_report("just some freeform text, no structure") is None
|
|
45
|
+
|
|
46
|
+
def test_none_when_a_section_is_missing(self) -> None:
|
|
47
|
+
body = "## Expected behaviour\n\na\n\n## Actual behaviour\n\nb\n"
|
|
48
|
+
assert parse_bug_report(body) is None
|
|
49
|
+
|
|
50
|
+
def test_none_when_a_section_is_empty(self) -> None:
|
|
51
|
+
body = (
|
|
52
|
+
"## Expected behaviour\n\na\n\n"
|
|
53
|
+
"## Actual behaviour\n\nb\n\n"
|
|
54
|
+
"## Reproduction\n\n\n\n"
|
|
55
|
+
"## Evidence\n\nd\n"
|
|
56
|
+
)
|
|
57
|
+
assert parse_bug_report(body) is None
|
|
58
|
+
|
|
59
|
+
def test_tolerant_of_heading_level_and_case(self) -> None:
|
|
60
|
+
body = (
|
|
61
|
+
"# expected BEHAVIOUR\na\n"
|
|
62
|
+
"### actual behaviour\nb\n"
|
|
63
|
+
"## reproduction\nc\n"
|
|
64
|
+
"###### evidence\nd\n"
|
|
65
|
+
)
|
|
66
|
+
assert parse_bug_report(body) == BugReport(
|
|
67
|
+
expected="a", actual="b", repro="c", evidence="d",
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
def test_tolerant_of_prose_before_and_after(self) -> None:
|
|
71
|
+
body = (
|
|
72
|
+
"Some intro context an operator added.\n\n"
|
|
73
|
+
"## Expected behaviour\n\na\n\n"
|
|
74
|
+
"## Actual behaviour\n\nb\n\n"
|
|
75
|
+
"## Reproduction\n\nc\n\n"
|
|
76
|
+
"## Evidence\n\nd\n\n"
|
|
77
|
+
"Some trailing note.\n"
|
|
78
|
+
)
|
|
79
|
+
report = parse_bug_report(body)
|
|
80
|
+
assert report.expected == "a"
|
|
81
|
+
assert report.evidence == "d\n\nSome trailing note."
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
class TestIssueTemplateHeadingsMatchModule:
|
|
85
|
+
"""The GitHub-native template (.github/ISSUE_TEMPLATE/bug_report.md)
|
|
86
|
+
must render exactly the same four headings as this module, or a
|
|
87
|
+
hand-filed issue silently fails to `parse_bug_report` even though it
|
|
88
|
+
looks identical to a `coord issue create --expected ...`-authored one."""
|
|
89
|
+
|
|
90
|
+
def test_template_headings_match_and_parse(self) -> None:
|
|
91
|
+
template = (REPO_ROOT / ".github/ISSUE_TEMPLATE/bug_report.md").read_text()
|
|
92
|
+
for _, heading in FIELDS:
|
|
93
|
+
assert f"## {heading}" in template, f"missing heading: {heading!r}"
|