code-coordinator 0.5.112__tar.gz → 0.5.113__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.112 → code_coordinator-0.5.113}/PKG-INFO +1 -1
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/_board_mapping.py +3 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/agent.py +104 -1
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/api/generated.ts +1 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/db.py +13 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/models.py +21 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notify.py +18 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/reconcile.py +47 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/serve_app.py +5 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/state.py +50 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent.py +74 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_zero_commit.py +200 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cargo_cache.py +18 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_serve.py +18 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_state.py +105 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/tests/fixtures/board_sample.json +3 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/.gitignore +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/CLAUDE.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/GOAL.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/LICENSE +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/MANIFEST.in +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/README.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/__init__.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/audit.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/block_log.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/board_service.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/brain.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/claim.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/cli.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/client.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/comments.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/config.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dao.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/deps.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/drive.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/events.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/filelock.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/freshness.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/gates.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/goal.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/context.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/models.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/render.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/health/units.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/hooks.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/interactive.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/network.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/openapi.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/parentage.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/plans.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/progress.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/release_window.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/reports.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/review.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/smoke.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/split_work.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/test_author.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/test_report.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/usage.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/install-agent.sh +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/pyproject.toml +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/setup.cfg +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/__init__.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/conftest.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_config.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_db.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_events.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_init.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_models.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_network.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_review.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_session.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_split.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.112 → code_coordinator-0.5.113}/tui/tests/cli.rs +0 -0
|
@@ -158,6 +158,9 @@ def row_to_assignment(row: object) -> Assignment:
|
|
|
158
158
|
# row predating this column and for a normally-parsed verdict.
|
|
159
159
|
verdict_source=d.get("verdict_source"),
|
|
160
160
|
verdict_source_reason=d.get("verdict_source_reason"),
|
|
161
|
+
# #2316: raw terminal stop_reason; None for rows predating this
|
|
162
|
+
# column or a worker whose log carried no such field.
|
|
163
|
+
stop_reason=d.get("stop_reason"),
|
|
161
164
|
)
|
|
162
165
|
|
|
163
166
|
|
|
@@ -232,6 +232,51 @@ def _looks_like_policy_refusal(text: str | None) -> bool:
|
|
|
232
232
|
return any(marker in lowered for marker in _POLICY_REFUSAL_MARKERS)
|
|
233
233
|
|
|
234
234
|
|
|
235
|
+
# #2316: `WorkerSummary.stop_reason` values that mean the model was CUT OFF
|
|
236
|
+
# by an output-token ceiling before it could finish — as opposed to a normal
|
|
237
|
+
# stop (`end_turn`/`stop_sequence`, see `coord.progress`'s identical "unusual
|
|
238
|
+
# stop" allowlist). `"length"` is opencode's `step_finish` reason
|
|
239
|
+
# (`coord.providers.opencode.OpenCodeProvider.parse_log`, gated on opencode's
|
|
240
|
+
# `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX`); `"max_tokens"` is Anthropic's own
|
|
241
|
+
# `stop_reason` for the same shape. Either one on a 0-commit clean exit means
|
|
242
|
+
# the worker never got a turn to write anything — the space-invaders#1
|
|
243
|
+
# incident (13 successful tool calls, then one reasoning block burned the
|
|
244
|
+
# entire 32k-token budget and exited 0 with nothing on disk) is exactly this:
|
|
245
|
+
# `exit_code == 0` looked like "worker exited cleanly but pushed 0 commits"
|
|
246
|
+
# (the #448 ADVISORY reading) when it was actually a truncation nobody could
|
|
247
|
+
# have acted on differently. See `_reap`, which checks this BEFORE the #448
|
|
248
|
+
# zero-commit downgrade.
|
|
249
|
+
_TRUNCATION_STOP_REASONS = frozenset({"length", "max_tokens"})
|
|
250
|
+
|
|
251
|
+
# #2321: the opencode-specific knob named in the GitHub comment so an
|
|
252
|
+
# operator reading "cut off at its output limit" doesn't have to go
|
|
253
|
+
# rediscover — as the #2316 investigation had to — that the ceiling is
|
|
254
|
+
# adjustable per provider definition.
|
|
255
|
+
_OPENCODE_OUTPUT_TOKEN_MAX_ENV = "OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX"
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
def _format_truncation_reason(stop_reason: str, provider_name: str | None) -> str:
|
|
259
|
+
"""#2316: human-readable diagnostic for a 0-commit run truncated by an
|
|
260
|
+
output-token ceiling — used for both `AgentAssignment.truncation_reason`
|
|
261
|
+
(persisted `failure_reason`) and `AgentAssignment.error` (the GitHub
|
|
262
|
+
completion comment's `error=` text, see `coord.notify`'s FAILED arms).
|
|
263
|
+
|
|
264
|
+
Deliberately says "cut off" rather than "exited cleanly" — `exit_code ==
|
|
265
|
+
0` is what a truncated run looks like, not evidence the worker finished.
|
|
266
|
+
Names :data:`_OPENCODE_OUTPUT_TOKEN_MAX_ENV` for an opencode worker
|
|
267
|
+
(#2321: the ceiling is raisable per provider definition) so an operator
|
|
268
|
+
doesn't have to rediscover that from scratch.
|
|
269
|
+
"""
|
|
270
|
+
base = "the model was cut off at its output limit before writing anything"
|
|
271
|
+
if provider_name == "opencode":
|
|
272
|
+
return (
|
|
273
|
+
f"{base} (stop_reason={stop_reason!r}; opencode's output-token "
|
|
274
|
+
f"ceiling is set by {_OPENCODE_OUTPUT_TOKEN_MAX_ENV} and is "
|
|
275
|
+
"raisable per provider definition — #2321)"
|
|
276
|
+
)
|
|
277
|
+
return f"{base} (stop_reason={stop_reason!r})"
|
|
278
|
+
|
|
279
|
+
|
|
235
280
|
# ── Reap tuning ───────────────────────────────────────────────────────────────
|
|
236
281
|
# claude-cli sometimes does not exit after emitting its final
|
|
237
282
|
# `{"type":"result"}` message — a child process (MCP server, tool subprocess)
|
|
@@ -2999,6 +3044,20 @@ class AgentAssignment:
|
|
|
2999
3044
|
# one of `analysis_deliverable`/`zero_commit_reason`/this field is ever
|
|
3000
3045
|
# set for a given assignment).
|
|
3001
3046
|
policy_refusal_reason: str | None = None
|
|
3047
|
+
# #2316: set when `_reap` classifies a clean (exit_code==0), 0-commit
|
|
3048
|
+
# exit as a TRUNCATION — the worker's last `result`/`step_finish` event
|
|
3049
|
+
# carries a `stop_reason` in `_TRUNCATION_STOP_REASONS` (opencode's
|
|
3050
|
+
# `"length"`, claude's `"max_tokens"`) — rather than the #448 ADVISORY
|
|
3051
|
+
# default. Formatted with `_format_truncation_reason`. Only ever set
|
|
3052
|
+
# alongside `status == FAILED` (never ADVISORY: a truncated run is not a
|
|
3053
|
+
# "worker looked and found nothing to do", it is a cut-off nobody chose),
|
|
3054
|
+
# and `None` on every other outcome — including a genuine clean-exit-no-
|
|
3055
|
+
# commits run (no truncation marker matched) and a truncated run that DID
|
|
3056
|
+
# push commits (`_ahead != 0` never reaches this check at all). Mutually
|
|
3057
|
+
# exclusive with `zero_commit_reason`/`analysis_deliverable`/
|
|
3058
|
+
# `policy_refusal_reason`: all four are decided in the SAME `_ahead == 0`
|
|
3059
|
+
# branch of `_reap`, and this one is checked first — see that method.
|
|
3060
|
+
truncation_reason: str | None = None
|
|
3002
3061
|
|
|
3003
3062
|
def to_dict(self) -> dict:
|
|
3004
3063
|
d = asdict(self)
|
|
@@ -7897,6 +7956,13 @@ class AgentServer:
|
|
|
7897
7956
|
# readings of "0 commits" can never disagree about which one applies
|
|
7898
7957
|
# to this assignment.
|
|
7899
7958
|
_policy_refusal_reason: str | None = None
|
|
7959
|
+
# #2316: checked FIRST in the `_ahead == 0` branch below, ahead of
|
|
7960
|
+
# `_analysis_deliverable`/`_policy_refusal_reason`/`_zero_commit_
|
|
7961
|
+
# reason` — a truncated run's `result_text` is whatever the model
|
|
7962
|
+
# managed to emit before the ceiling cut it off, not a considered
|
|
7963
|
+
# final message, so it must not be read as a positive "deliverable"
|
|
7964
|
+
# or "policy refusal" signal just because it happens to match one.
|
|
7965
|
+
_truncation_reason: str | None = None
|
|
7900
7966
|
if (exit_code == 0 and assignment is not None
|
|
7901
7967
|
and assignment.worktree_path
|
|
7902
7968
|
and assignment.spec.type in _ZERO_COMMIT_TYPES):
|
|
@@ -7905,7 +7971,28 @@ class AgentServer:
|
|
|
7905
7971
|
_base = assignment.spec.branch or "main"
|
|
7906
7972
|
_ahead = self._commits_ahead(_wt_advisory, _base)
|
|
7907
7973
|
if _ahead == 0:
|
|
7908
|
-
if
|
|
7974
|
+
if (_worker_summary is not None
|
|
7975
|
+
and _worker_summary.stop_reason in _TRUNCATION_STOP_REASONS):
|
|
7976
|
+
# #2316: the model was guillotined by its own
|
|
7977
|
+
# output-token ceiling before it could act — exit
|
|
7978
|
+
# code 0 here is what a truncated run looks like, NOT
|
|
7979
|
+
# evidence of a clean "nothing to do" finish. Must be
|
|
7980
|
+
# re-driven, not parked in the advisory bucket
|
|
7981
|
+
# nobody re-drives (space-invaders#1).
|
|
7982
|
+
_truncation_reason = _format_truncation_reason(
|
|
7983
|
+
_worker_summary.stop_reason, assignment.spec.provider
|
|
7984
|
+
)
|
|
7985
|
+
try:
|
|
7986
|
+
with open(assignment.log_path, "a") as reopen:
|
|
7987
|
+
reopen.write(
|
|
7988
|
+
"# reap: truncated — 0 commits ahead of "
|
|
7989
|
+
f"{_base}; stop_reason="
|
|
7990
|
+
f"{_worker_summary.stop_reason!r}, status "
|
|
7991
|
+
"set to failed (#2316)\n"
|
|
7992
|
+
)
|
|
7993
|
+
except OSError:
|
|
7994
|
+
pass
|
|
7995
|
+
elif DELIVERABLE_ANALYSIS_LABEL in (assignment.spec.issue_labels or []):
|
|
7909
7996
|
_analysis_deliverable = True
|
|
7910
7997
|
try:
|
|
7911
7998
|
with open(assignment.log_path, "a") as reopen:
|
|
@@ -8014,6 +8101,22 @@ class AgentServer:
|
|
|
8014
8101
|
# shrug.
|
|
8015
8102
|
assignment.status = FAILED
|
|
8016
8103
|
assignment.push_failure_reason = _push_failure_reason
|
|
8104
|
+
elif _truncation_reason is not None:
|
|
8105
|
+
# #2316: the worker's own output-token ceiling cut it
|
|
8106
|
+
# off before it committed anything — checked BEFORE
|
|
8107
|
+
# `_policy_refusal_reason`/`_zero_commit_reason` (the
|
|
8108
|
+
# `_reap` computation above already guarantees the
|
|
8109
|
+
# four are mutually exclusive; kept parallel here for
|
|
8110
|
+
# readability). FAILED, not ADVISORY: exit_code==0 is
|
|
8111
|
+
# not evidence of a clean finish for a truncated run,
|
|
8112
|
+
# and nobody re-drives an advisory. `error` is set
|
|
8113
|
+
# too (not just `truncation_reason`) so the existing
|
|
8114
|
+
# generic `entry.get("error")` fallback in
|
|
8115
|
+
# `coord.notify`'s FAILED comment arms carries this
|
|
8116
|
+
# text without needing its own dedicated wiring.
|
|
8117
|
+
assignment.status = FAILED
|
|
8118
|
+
assignment.truncation_reason = _truncation_reason
|
|
8119
|
+
assignment.error = _truncation_reason
|
|
8017
8120
|
elif _policy_refusal_reason is not None:
|
|
8018
8121
|
# #2234: clean exit, no commits, and the worker's own
|
|
8019
8122
|
# final message cites a standing repo-rule
|
|
@@ -896,6 +896,19 @@ def _migrate_add_columns(conn: sqlite3.Connection) -> None:
|
|
|
896
896
|
# own default and identical in effect to `attempts <= 0` (no backoff
|
|
897
897
|
# window active).
|
|
898
898
|
"ALTER TABLE drive_queue ADD COLUMN retry_backoff_at REAL",
|
|
899
|
+
# #2316: the worker's own terminal `stop_reason` (e.g. `"end_turn"`,
|
|
900
|
+
# opencode's `"length"`, claude's `"max_tokens"`) — see
|
|
901
|
+
# `coord.agent.AgentServer._reap`'s `/status` `completed` entry
|
|
902
|
+
# (already sent by every agent build) and `coord.reconcile._capture_
|
|
903
|
+
# stop_reason_best_effort`, which persists it here for EVERY terminal
|
|
904
|
+
# assignment, not just failed ones. Previously this value reached the
|
|
905
|
+
# agent's own `/status` response and nothing else — `coord gates`,
|
|
906
|
+
# `coord status` and the dashboard had no column to read it from and
|
|
907
|
+
# a truncated (`stop_reason == "length"`/`"max_tokens"`), 0-commit
|
|
908
|
+
# run was recorded `advisory` with no trace of WHY. NULL for every
|
|
909
|
+
# row predating this migration and for a non-stream-json / PTY
|
|
910
|
+
# worker whose log carries no such field.
|
|
911
|
+
"ALTER TABLE assignments ADD COLUMN stop_reason TEXT",
|
|
899
912
|
]
|
|
900
913
|
for sql in migrations:
|
|
901
914
|
try:
|
|
@@ -702,6 +702,27 @@ class Assignment:
|
|
|
702
702
|
# `coord/drive.py`'s work-stage `Action` sets on every `coord assign` it
|
|
703
703
|
# shells out to.
|
|
704
704
|
driven_by: str | None = None
|
|
705
|
+
# #2316: the worker's own terminal `stop_reason` (e.g. `"end_turn"`,
|
|
706
|
+
# opencode's `"length"`, claude's `"max_tokens"`) — persisted for EVERY
|
|
707
|
+
# terminal work-like assignment, not just failed ones, so `coord gates`/
|
|
708
|
+
# `coord status`/the dashboard can show it and a future gate can act on
|
|
709
|
+
# it. Captured from the agent's own `/status` `completed` entry (already
|
|
710
|
+
# sent by every agent build — `coord.agent.AgentServer.list_assignments`
|
|
711
|
+
# parses the worker's log and includes it there) by
|
|
712
|
+
# `coord.reconcile._capture_stop_reason_best_effort`. `None` for rows
|
|
713
|
+
# predating this column and for a non-stream-json / PTY worker whose log
|
|
714
|
+
# carries no such field.
|
|
715
|
+
#
|
|
716
|
+
# This is the raw diagnostic value, distinct from `failure_reason`: a
|
|
717
|
+
# truncated (`stop_reason` in `coord.agent._TRUNCATION_STOP_REASONS`),
|
|
718
|
+
# 0-commit run is separately classified FAILED by `AgentServer._reap`
|
|
719
|
+
# with a human-readable `failure_reason` naming the truncation — see
|
|
720
|
+
# `coord.agent.AgentAssignment.truncation_reason`. Before #2316 that same
|
|
721
|
+
# shape (space-invaders#1: the model spent its whole output budget on one
|
|
722
|
+
# reasoning block and hit opencode's 32k-token ceiling) landed on
|
|
723
|
+
# `advisory` — the same bucket as a worker that looked and correctly
|
|
724
|
+
# found nothing to do — so nobody re-drove it.
|
|
725
|
+
stop_reason: str | None = None
|
|
705
726
|
|
|
706
727
|
|
|
707
728
|
def effective_issue_number(assignment: "Assignment | dict") -> int:
|
|
@@ -2638,11 +2638,20 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
|
|
|
2638
2638
|
# says "spend ceiling" instead of leaving an operator to guess why a
|
|
2639
2639
|
# leg died mid-task. Mutually exclusive with the other three (see
|
|
2640
2640
|
# `coord.reconcile.reconcile_completed_assignments`).
|
|
2641
|
+
# #2316: `truncation_reason` is the same column again — the worker's
|
|
2642
|
+
# output-token ceiling cut it off before it committed anything. It
|
|
2643
|
+
# must reach `error=` below too, so the GitHub failure comment reads
|
|
2644
|
+
# "the model was cut off at its output limit before writing
|
|
2645
|
+
# anything" instead of the misleading "exited cleanly but pushed 0
|
|
2646
|
+
# commits" the #448 ADVISORY default would otherwise have produced.
|
|
2647
|
+
# Mutually exclusive with the other four (see
|
|
2648
|
+
# `coord.reconcile.reconcile_completed_assignments`).
|
|
2641
2649
|
_failure_reason = (
|
|
2642
2650
|
entry.get("usage_limit_reason")
|
|
2643
2651
|
or entry.get("api_error_reason")
|
|
2644
2652
|
or entry.get("push_failure_reason")
|
|
2645
2653
|
or entry.get("spend_ceiling_reason")
|
|
2654
|
+
or entry.get("truncation_reason")
|
|
2646
2655
|
)
|
|
2647
2656
|
post_failure(
|
|
2648
2657
|
exit_code=transition.exit_code,
|
|
@@ -2738,11 +2747,20 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
|
|
|
2738
2747
|
# says "spend ceiling" instead of leaving an operator to guess why a
|
|
2739
2748
|
# leg died mid-task. Mutually exclusive with the other three (see
|
|
2740
2749
|
# `coord.reconcile.reconcile_completed_assignments`).
|
|
2750
|
+
# #2316: `truncation_reason` is the same column again — the worker's
|
|
2751
|
+
# output-token ceiling cut it off before it committed anything. It
|
|
2752
|
+
# must reach `error=` below too, so the GitHub failure comment reads
|
|
2753
|
+
# "the model was cut off at its output limit before writing
|
|
2754
|
+
# anything" instead of the misleading "exited cleanly but pushed 0
|
|
2755
|
+
# commits" the #448 ADVISORY default would otherwise have produced.
|
|
2756
|
+
# Mutually exclusive with the other four (see
|
|
2757
|
+
# `coord.reconcile.reconcile_completed_assignments`).
|
|
2741
2758
|
_failure_reason = (
|
|
2742
2759
|
entry.get("usage_limit_reason")
|
|
2743
2760
|
or entry.get("api_error_reason")
|
|
2744
2761
|
or entry.get("push_failure_reason")
|
|
2745
2762
|
or entry.get("spend_ceiling_reason")
|
|
2763
|
+
or entry.get("truncation_reason")
|
|
2746
2764
|
)
|
|
2747
2765
|
post_failure(
|
|
2748
2766
|
exit_code=transition.exit_code,
|
|
@@ -429,11 +429,23 @@ def reconcile_completed_assignments(
|
|
|
429
429
|
# was killed for spending, not for hitting a usage limit. Stamping it
|
|
430
430
|
# here is what makes the kill distinguishable from a crash for
|
|
431
431
|
# `coord retry`, the auto-reassign skip below, and the escalation.
|
|
432
|
+
# #2316: `truncation_reason` is the SAME column again — stamped by
|
|
433
|
+
# `AgentServer._reap` when a 0-commit clean exit's `stop_reason`
|
|
434
|
+
# shows the worker was cut off by its output-token ceiling
|
|
435
|
+
# (`coord.agent._TRUNCATION_STOP_REASONS`) rather than genuinely
|
|
436
|
+
# finding nothing to do. Never coexists with the other three: it is
|
|
437
|
+
# only ever set on the SAME `_ahead == 0` branch as the #448 ADVISORY
|
|
438
|
+
# default (see `AgentServer._reap`'s `elif` chain), which the other
|
|
439
|
+
# three all preempt before that branch even runs. Without this, a
|
|
440
|
+
# truncated run lands FAILED with no `failure_reason` recorded —
|
|
441
|
+
# exactly the "advisory looks the same as this" gap #2316 exists to
|
|
442
|
+
# close.
|
|
432
443
|
_failure_reason = (
|
|
433
444
|
entry.get("usage_limit_reason")
|
|
434
445
|
or entry.get("api_error_reason")
|
|
435
446
|
or entry.get("push_failure_reason")
|
|
436
447
|
or entry.get("spend_ceiling_reason")
|
|
448
|
+
or entry.get("truncation_reason")
|
|
437
449
|
)
|
|
438
450
|
_escalate_spend_ceiling_best_effort(a, entry)
|
|
439
451
|
update_state_fn(
|
|
@@ -482,6 +494,14 @@ def reconcile_completed_assignments(
|
|
|
482
494
|
# failure is swallowed so it can't break the reconcile.
|
|
483
495
|
_capture_tokens_best_effort(aid, entry)
|
|
484
496
|
|
|
497
|
+
# #2316: capture the raw stop_reason from the /status entry for
|
|
498
|
+
# EVERY terminal assignment (not just failed ones) — the enabling
|
|
499
|
+
# persistence step; `_failure_reason` above already carries the
|
|
500
|
+
# human-readable classification for a truncated run specifically.
|
|
501
|
+
# Best-effort — any failure is swallowed so it can't break the
|
|
502
|
+
# reconcile.
|
|
503
|
+
_capture_stop_reason_best_effort(aid, entry)
|
|
504
|
+
|
|
485
505
|
reconciled.append(
|
|
486
506
|
{
|
|
487
507
|
"assignment_id": aid,
|
|
@@ -747,6 +767,29 @@ def _capture_tokens_best_effort(assignment_id: str, entry: dict) -> None:
|
|
|
747
767
|
pass
|
|
748
768
|
|
|
749
769
|
|
|
770
|
+
def _capture_stop_reason_best_effort(assignment_id: str, entry: dict) -> None:
|
|
771
|
+
"""#2316: persist the raw ``stop_reason`` from a /status completed entry.
|
|
772
|
+
|
|
773
|
+
The agent parses its own log and includes ``stop_reason`` on every
|
|
774
|
+
terminal ``completed`` entry (``coord.agent.AgentServer.list_assignments``
|
|
775
|
+
— this predates #2316, only the write path is new). Captured for EVERY
|
|
776
|
+
terminal assignment, not gated on status, so the column reflects the
|
|
777
|
+
worker's own last word (``"end_turn"``, ``"length"``, ``"max_tokens"``,
|
|
778
|
+
...) regardless of how ``_failure_reason``/the board's ``status``
|
|
779
|
+
classified the run. Best-effort — any failure is swallowed so it can't
|
|
780
|
+
break the reconcile.
|
|
781
|
+
"""
|
|
782
|
+
try:
|
|
783
|
+
stop_reason = entry.get("stop_reason")
|
|
784
|
+
if not stop_reason:
|
|
785
|
+
return
|
|
786
|
+
from coord.state import update_assignment_stop_reason # noqa: PLC0415
|
|
787
|
+
|
|
788
|
+
update_assignment_stop_reason(assignment_id, stop_reason)
|
|
789
|
+
except Exception: # noqa: BLE001 — never let this capture break the reconcile
|
|
790
|
+
pass
|
|
791
|
+
|
|
792
|
+
|
|
750
793
|
def _build_fix_round_retry_briefing(
|
|
751
794
|
failed: Assignment, board: Board, repo_cfg, max_review_iterations: int,
|
|
752
795
|
) -> str | None:
|
|
@@ -1407,6 +1450,10 @@ def _record_usage_limit_reason(assignment_id: str | None, entry: dict) -> None:
|
|
|
1407
1450
|
# mutual exclusivity as the three above (see the identical chain in
|
|
1408
1451
|
# `reconcile_completed_assignments`).
|
|
1409
1452
|
or entry.get("spend_ceiling_reason")
|
|
1453
|
+
# #2316: a truncated (output-token-ceiling) 0-commit run. Same
|
|
1454
|
+
# column, same mutual exclusivity — see the identical chain in
|
|
1455
|
+
# `reconcile_completed_assignments`.
|
|
1456
|
+
or entry.get("truncation_reason")
|
|
1410
1457
|
)
|
|
1411
1458
|
if not reason or not assignment_id:
|
|
1412
1459
|
return
|
|
@@ -2636,6 +2636,7 @@ def _openapi_spec() -> dict:
|
|
|
2636
2636
|
"items": {"type": "string"},
|
|
2637
2637
|
"nullable": True,
|
|
2638
2638
|
},
|
|
2639
|
+
"stop_reason": {"type": "string", "nullable": True},
|
|
2639
2640
|
},
|
|
2640
2641
|
"required": ["assignment_id"],
|
|
2641
2642
|
}
|
|
@@ -5257,6 +5258,10 @@ def build_app(store: CoordStore, config: Config, *, token: str | None = None) ->
|
|
|
5257
5258
|
state._update_assignment_smoke_tests_local(aid, body["smoke_tests"])
|
|
5258
5259
|
if "completion_summary" in body and body["completion_summary"]:
|
|
5259
5260
|
state._update_assignment_completion_summary_local(aid, body["completion_summary"])
|
|
5261
|
+
if body.get("stop_reason"):
|
|
5262
|
+
# #2316: same endpoint, same reason as the fields above —
|
|
5263
|
+
# one round-trip covers the diagnostic capture too.
|
|
5264
|
+
state._update_assignment_stop_reason_local(aid, body["stop_reason"])
|
|
5260
5265
|
except Exception as e: # noqa: BLE001
|
|
5261
5266
|
return JSONResponse(
|
|
5262
5267
|
{"error": "assignment-usage write failed", "detail": str(e)},
|
|
@@ -2811,6 +2811,56 @@ def _update_assignment_tokens_local(
|
|
|
2811
2811
|
pass
|
|
2812
2812
|
|
|
2813
2813
|
|
|
2814
|
+
def update_assignment_stop_reason(assignment_id: str, stop_reason: str) -> None:
|
|
2815
|
+
"""#2316: record the worker's terminal ``stop_reason`` — routes to the
|
|
2816
|
+
daemon when set.
|
|
2817
|
+
|
|
2818
|
+
Persisted for EVERY terminal work-like assignment (not just failed
|
|
2819
|
+
ones) so ``coord gates``/``coord status``/the dashboard have something
|
|
2820
|
+
to read — before this column existed, a truncated worker's ``/status``
|
|
2821
|
+
already carried ``stop_reason`` but the coordinator dropped it on
|
|
2822
|
+
receipt (see ``coord.agent.AgentServer.list_assignments``, which parses
|
|
2823
|
+
the log and includes it on every terminal ``completed`` entry).
|
|
2824
|
+
|
|
2825
|
+
Idempotent: the UPDATE only fires when the row's ``stop_reason`` is
|
|
2826
|
+
still NULL (first-writer-wins) — a terminal row's stop reason cannot
|
|
2827
|
+
change after the fact, so a later reconcile tick re-observing the same
|
|
2828
|
+
``/status`` entry is a no-op rather than a redundant write. Silently
|
|
2829
|
+
no-ops on a falsy *stop_reason* or a missing assignment row, and
|
|
2830
|
+
swallows ``OperationalError`` so a pre-migration DB (tests, an older
|
|
2831
|
+
install that hasn't restarted the coordinator yet) never crashes the
|
|
2832
|
+
reconcile/notify path this is called from.
|
|
2833
|
+
"""
|
|
2834
|
+
if not assignment_id or not stop_reason:
|
|
2835
|
+
return
|
|
2836
|
+
svc = _board_service()
|
|
2837
|
+
resp = _route_write(
|
|
2838
|
+
svc,
|
|
2839
|
+
"/assignment-usage",
|
|
2840
|
+
{"assignment_id": assignment_id, "stop_reason": stop_reason},
|
|
2841
|
+
)
|
|
2842
|
+
if resp is not None:
|
|
2843
|
+
return
|
|
2844
|
+
_update_assignment_stop_reason_local(assignment_id, stop_reason)
|
|
2845
|
+
|
|
2846
|
+
|
|
2847
|
+
def _update_assignment_stop_reason_local(assignment_id: str, stop_reason: str) -> None:
|
|
2848
|
+
"""Write ``stop_reason`` directly to the local DB. Called by the daemon endpoint."""
|
|
2849
|
+
if not assignment_id or not stop_reason:
|
|
2850
|
+
return
|
|
2851
|
+
conn = get_connection()
|
|
2852
|
+
try:
|
|
2853
|
+
conn.execute(
|
|
2854
|
+
"UPDATE assignments SET stop_reason=? WHERE assignment_id=? "
|
|
2855
|
+
"AND stop_reason IS NULL",
|
|
2856
|
+
(stop_reason, assignment_id),
|
|
2857
|
+
)
|
|
2858
|
+
conn.commit()
|
|
2859
|
+
except sqlite3.OperationalError:
|
|
2860
|
+
# Column may not exist yet (pre-migration DB or test fixtures).
|
|
2861
|
+
pass
|
|
2862
|
+
|
|
2863
|
+
|
|
2814
2864
|
def mark_assignment_interactive(assignment_id: str) -> None:
|
|
2815
2865
|
"""#546/#665: flag the row as interactive — routes to the daemon when set.
|
|
2816
2866
|
|
|
@@ -5028,6 +5028,80 @@ class TestListAssignmentsTokens:
|
|
|
5028
5028
|
assert entry.get("input_tokens", 0) == 0
|
|
5029
5029
|
|
|
5030
5030
|
|
|
5031
|
+
# ── #2316: stop_reason / truncation_reason reach /status ───────────────────────
|
|
5032
|
+
|
|
5033
|
+
|
|
5034
|
+
class TestStopReasonInCompletedEntry:
|
|
5035
|
+
"""`list_assignments()['completed']` must carry `stop_reason` (parsed
|
|
5036
|
+
fresh from the log on every /status call, same as `num_turns`/
|
|
5037
|
+
`total_cost_usd` above) so `coord.reconcile._capture_stop_reason_best_
|
|
5038
|
+
effort` has something to persist — this is the wire half of #2316's
|
|
5039
|
+
"the information is already there and is thrown away" gap."""
|
|
5040
|
+
|
|
5041
|
+
def _make_spec(self, repo_path: Path) -> AssignmentSpec:
|
|
5042
|
+
return AssignmentSpec(
|
|
5043
|
+
repo_name="api",
|
|
5044
|
+
repo_path=str(repo_path),
|
|
5045
|
+
issue_number=2316,
|
|
5046
|
+
issue_title="t",
|
|
5047
|
+
briefing="b",
|
|
5048
|
+
branch="main",
|
|
5049
|
+
)
|
|
5050
|
+
|
|
5051
|
+
def test_stop_reason_appears_in_completed_entry(self, tmp_path: Path) -> None:
|
|
5052
|
+
import json as _json
|
|
5053
|
+
|
|
5054
|
+
repo = _init_repo(tmp_path / "repo")
|
|
5055
|
+
server = _server(tmp_path, repo_path=repo)
|
|
5056
|
+
spec = self._make_spec(repo)
|
|
5057
|
+
|
|
5058
|
+
log_path = tmp_path / "trunc1.log"
|
|
5059
|
+
log_path.write_text(
|
|
5060
|
+
_json.dumps(
|
|
5061
|
+
{
|
|
5062
|
+
"type": "result",
|
|
5063
|
+
"subtype": "success",
|
|
5064
|
+
"is_error": False,
|
|
5065
|
+
"stop_reason": "max_tokens",
|
|
5066
|
+
"result": "",
|
|
5067
|
+
}
|
|
5068
|
+
)
|
|
5069
|
+
+ "\n",
|
|
5070
|
+
encoding="utf-8",
|
|
5071
|
+
)
|
|
5072
|
+
|
|
5073
|
+
a = AgentAssignment(
|
|
5074
|
+
id="trunc1",
|
|
5075
|
+
spec=spec,
|
|
5076
|
+
status=FAILED,
|
|
5077
|
+
finished_at=1.0,
|
|
5078
|
+
exit_code=0,
|
|
5079
|
+
log_path=str(log_path),
|
|
5080
|
+
truncation_reason=(
|
|
5081
|
+
"the model was cut off at its output limit before writing "
|
|
5082
|
+
"anything (stop_reason='max_tokens')"
|
|
5083
|
+
),
|
|
5084
|
+
error=(
|
|
5085
|
+
"the model was cut off at its output limit before writing "
|
|
5086
|
+
"anything (stop_reason='max_tokens')"
|
|
5087
|
+
),
|
|
5088
|
+
)
|
|
5089
|
+
server._assignments[a.id] = a
|
|
5090
|
+
|
|
5091
|
+
listing = server.list_assignments()
|
|
5092
|
+
completed = listing["completed"]
|
|
5093
|
+
assert len(completed) == 1
|
|
5094
|
+
entry = completed[0]
|
|
5095
|
+
# `stop_reason`: freshly parsed from the log on every /status call.
|
|
5096
|
+
assert entry.get("stop_reason") == "max_tokens"
|
|
5097
|
+
# `truncation_reason`/`error`: plain dataclass fields, already on the
|
|
5098
|
+
# assignment — `to_status_dict()`'s `asdict` carries them through
|
|
5099
|
+
# exactly like `usage_limit_reason`/`api_error_reason` do.
|
|
5100
|
+
assert entry.get("truncation_reason") is not None
|
|
5101
|
+
assert "cut off at its output limit" in entry["truncation_reason"]
|
|
5102
|
+
assert entry.get("error") == entry["truncation_reason"]
|
|
5103
|
+
|
|
5104
|
+
|
|
5031
5105
|
# ── #1492: agent-side clearing of terminal ADVISORY entries ────────────────────
|
|
5032
5106
|
|
|
5033
5107
|
|