code-coordinator 0.5.158__tar.gz → 0.5.163__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.158 → code_coordinator-0.5.163}/PKG-INFO +1 -1
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/code_coordinator.egg-info/scm_file_list.json +1 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/_board_mapping.py +6 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/api/generated.ts +1 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/db.py +8 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/drive.py +65 -7
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/models.py +32 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/state.py +77 -8
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-65/manifest.yml +163 -0
- code_coordinator-0.5.163/tests/acceptance/ms-65/tabs_discoverability_2287.rs +1040 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_drive.py +56 -22
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_state.py +157 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/data.rs +6 -1
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/dialogs.rs +138 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/doc_tabs.rs +299 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/events.rs +145 -11
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/fixtures.rs +6 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/milestone_dag.rs +1 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/mod.rs +236 -10
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/pipeline.rs +11 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/plans.rs +12 -1
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/render.rs +32 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/tests.rs +381 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/types.rs +37 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/tests/acceptance.rs +1 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/tests/fixtures/board_sample.json +3 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/.github/workflows/acceptance-web.yml +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/.gitignore +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/CLAUDE.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/GOAL.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/LICENSE +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/MANIFEST.in +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/README.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/__init__.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/agent.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/audit.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/block_log.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/board_service.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/brain.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/claim.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/cli.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/client.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/comments.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/config.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dao.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/deps.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/events.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/filelock.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/freshness.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/gates.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/goal.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/context.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/models.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/render.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/health/units.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/hooks.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/interactive.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/network.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/notify.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/openapi.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/parentage.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/plans.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/progress.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/release_window.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/reports.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/review.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/smoke.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/split_work.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/test_author.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/test_report.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/usage.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/install-agent.sh +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/pyproject.toml +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/setup.cfg +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/__init__.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/conftest.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_config.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_db.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_events.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_init.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_models.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_network.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_review.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_session.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_split.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.158 → code_coordinator-0.5.163}/tui/tests/cli.rs +0 -0
|
@@ -806,6 +806,7 @@ tests/acceptance/ms-65/contract.md
|
|
|
806
806
|
tests/acceptance/ms-65/detail_substate_2285.rs
|
|
807
807
|
tests/acceptance/ms-65/manifest.yml
|
|
808
808
|
tests/acceptance/ms-65/pipeline_tabs_2284.rs
|
|
809
|
+
tests/acceptance/ms-65/tabs_discoverability_2287.rs
|
|
809
810
|
tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen
|
|
810
811
|
tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen
|
|
811
812
|
tests/acceptance/ms-65/mocks/board-preview-tab.screen
|
{code_coordinator-0.5.158 → code_coordinator-0.5.163}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -454,6 +454,7 @@
|
|
|
454
454
|
"tests/acceptance/ms-65/mocks/board-tabs-overflow.screen",
|
|
455
455
|
"tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen",
|
|
456
456
|
"tests/acceptance/ms-65/pipeline_tabs_2284.rs",
|
|
457
|
+
"tests/acceptance/ms-65/tabs_discoverability_2287.rs",
|
|
457
458
|
"tests/acceptance/ms-example/mocks/home-active.html",
|
|
458
459
|
"tests/conftest.py",
|
|
459
460
|
"tests/fixtures/board-pipeline-basic.json",
|
|
@@ -161,6 +161,12 @@ def row_to_assignment(row: object) -> Assignment:
|
|
|
161
161
|
# #2316: raw terminal stop_reason; None for rows predating this
|
|
162
162
|
# column or a worker whose log carried no such field.
|
|
163
163
|
stop_reason=d.get("stop_reason"),
|
|
164
|
+
# #2417: the calling worker's own assignment id, when this row was
|
|
165
|
+
# dispatched from INSIDE another worker's turn (e.g. `coord
|
|
166
|
+
# acceptance author`/`coord fix` shelled out to from a `type="work"`
|
|
167
|
+
# session's own bash tool). None for a hand or coordinator/brain
|
|
168
|
+
# dispatch, and for rows predating this column.
|
|
169
|
+
dispatched_by_assignment_id=d.get("dispatched_by_assignment_id"),
|
|
164
170
|
)
|
|
165
171
|
|
|
166
172
|
|
|
@@ -926,6 +926,14 @@ def _migrate_add_columns(conn: sqlite3.Connection) -> None:
|
|
|
926
926
|
# submission with no preview queued yet, same as `open_question`'s
|
|
927
927
|
# own default.
|
|
928
928
|
"ALTER TABLE portal_submissions ADD COLUMN preview_url TEXT NOT NULL DEFAULT ''",
|
|
929
|
+
# #2417: the CALLING assignment's id when this row was dispatched by
|
|
930
|
+
# a `coord` subcommand run from INSIDE another worker's own turn
|
|
931
|
+
# (e.g. `coord acceptance author`/`coord fix` shelled out to from a
|
|
932
|
+
# `type="work"` session's own bash tool) rather than typed by a
|
|
933
|
+
# human — see `coord.models.Assignment.dispatched_by_assignment_id`.
|
|
934
|
+
# NULL for a hand dispatch, a coordinator/brain-proposed dispatch,
|
|
935
|
+
# and every row predating this column.
|
|
936
|
+
"ALTER TABLE assignments ADD COLUMN dispatched_by_assignment_id TEXT",
|
|
929
937
|
]
|
|
930
938
|
for sql in migrations:
|
|
931
939
|
try:
|
|
@@ -396,6 +396,22 @@ class DriveCounters:
|
|
|
396
396
|
# overwhelming majority of drives — non-oracle ones — never allocate it,
|
|
397
397
|
# and `--dry-run`'s counter snapshot stays unchanged for them.
|
|
398
398
|
acceptance: "DriveCounters | None" = None
|
|
399
|
+
# #2416: bounded retry for an ADVISORY work row whose branch carries zero
|
|
400
|
+
# commits — `_decide_advisory`'s dead-end signature. Before this, that
|
|
401
|
+
# branch went straight to `_die()` on every observation, so the only
|
|
402
|
+
# thing that could ever supersede the terminal row was a human running
|
|
403
|
+
# `coord retry <aid>` by hand (`coord diagnose --stage work --reset` is
|
|
404
|
+
# NOT the escape hatch here — it never sets `needs_reset` for this
|
|
405
|
+
# shape). `drive-queue`'s own automatic retry does not take that path
|
|
406
|
+
# either: it just relaunches a brand new `coord drive` process, which
|
|
407
|
+
# re-observes the SAME terminal row and dies again in seconds, burning a
|
|
408
|
+
# queue attempt+backoff cycle for nothing (coord-portal#119, drive-queue
|
|
409
|
+
# entry 432). Bounded the same way `work_retries` is (`opts.
|
|
410
|
+
# max_work_retries`) so a genuinely unactionable row (the issue's real
|
|
411
|
+
# resolution is a sibling task, not another attempt) still reaches a
|
|
412
|
+
# terminal `_die()` — never an unbounded loop — once the budget is
|
|
413
|
+
# spent.
|
|
414
|
+
advisory_retries: int = 0
|
|
399
415
|
|
|
400
416
|
def slice_budget(self) -> "DriveCounters":
|
|
401
417
|
"""This run's slice-landing budget, created on first use (#2079)."""
|
|
@@ -1603,8 +1619,15 @@ def decide(
|
|
|
1603
1619
|
if state.work_status == "done":
|
|
1604
1620
|
pass
|
|
1605
1621
|
elif state.work_status == "advisory":
|
|
1606
|
-
advisory = _decide_advisory(state, opts, machine, verifier)
|
|
1607
|
-
|
|
1622
|
+
advisory = _decide_advisory(state, opts, counters, machine, verifier)
|
|
1623
|
+
# #2416: `_decide_advisory` now returns a RUN action (a bounded
|
|
1624
|
+
# `coord retry` dispatch) for the zero-commit case, not only an EXIT
|
|
1625
|
+
# — `is_exit` alone would let a RUN action fall through to the
|
|
1626
|
+
# Test/Review/Merge logic below as though the row were validated
|
|
1627
|
+
# work. Only its "proceeding under --accept-advisory" branch returns
|
|
1628
|
+
# WAIT (with warnings to fold in); every other branch (EXIT or RUN)
|
|
1629
|
+
# is this poll's whole answer.
|
|
1630
|
+
if advisory.kind != WAIT:
|
|
1608
1631
|
return advisory
|
|
1609
1632
|
warnings = advisory.warnings
|
|
1610
1633
|
elif state.work_status == "refused_policy":
|
|
@@ -1825,6 +1848,7 @@ def _dispatch_work_stage(
|
|
|
1825
1848
|
def _decide_advisory(
|
|
1826
1849
|
state: IssueState,
|
|
1827
1850
|
opts: DriveOptions,
|
|
1851
|
+
counters: DriveCounters,
|
|
1828
1852
|
machine: str,
|
|
1829
1853
|
verifier: MergeVerifier,
|
|
1830
1854
|
) -> Action:
|
|
@@ -1835,13 +1859,47 @@ def _decide_advisory(
|
|
|
1835
1859
|
``tui/target/debug/coord-tui``, which a Python diff never produces, so
|
|
1836
1860
|
#1323's stash-miss check downgrades a perfectly good DONE. Ask git which
|
|
1837
1861
|
case this actually is rather than trusting the status.
|
|
1862
|
+
|
|
1863
|
+
#2416: a GENUINE zero-commit advisory (no branch, or a branch verified to
|
|
1864
|
+
carry no commits) used to be an immediate, unconditional `_die()` — the
|
|
1865
|
+
ONE thing that can actually change this row, `coord retry <aid>`'s
|
|
1866
|
+
zero-commit-advisory path (#1606: `ahead == 0` → reassign a fresh
|
|
1867
|
+
worker), was never invoked automatically. That made every automatic
|
|
1868
|
+
retry — `drive-queue`'s own included — a no-op: a brand new `coord
|
|
1869
|
+
drive` process just re-observes the identical terminal row and dies
|
|
1870
|
+
again in seconds, spending a queue attempt+backoff cycle for nothing.
|
|
1871
|
+
Mirrors the `work_status == "failed"` branch above: a bounded number of
|
|
1872
|
+
`coord retry` dispatches (`opts.max_work_retries`, via `counters.
|
|
1873
|
+
advisory_retries`) before finally giving up, so a row whose correct
|
|
1874
|
+
resolution really is "dispatch something else" still reaches a terminal
|
|
1875
|
+
`_die()` naming `coord retry` for a human — never an unbounded loop.
|
|
1838
1876
|
"""
|
|
1839
1877
|
if not state.work_branch or not verifier.branch_has_commits(state):
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1878
|
+
budget = opts.max_work_retries
|
|
1879
|
+
if counters.advisory_retries >= budget:
|
|
1880
|
+
return _die(
|
|
1881
|
+
f"work {state.work_aid} exited ADVISORY with no commits on its "
|
|
1882
|
+
f"branch {counters.advisory_retries} time(s) in a row (budget "
|
|
1883
|
+
f"{budget}, #2416) — nothing was pushed, so there is nothing to "
|
|
1884
|
+
"test, review, or merge, and retrying has not produced a "
|
|
1885
|
+
"different outcome.\n"
|
|
1886
|
+
f" inspect: coord log {state.work_aid} --machine "
|
|
1887
|
+
f"{state.work_machine or machine}\n"
|
|
1888
|
+
f" this needs an operator decision: `coord retry "
|
|
1889
|
+
f"{state.work_aid}` by hand once the underlying blocker is "
|
|
1890
|
+
"understood, or dispatch an independent follow-up issue if "
|
|
1891
|
+
"another attempt at this one is not the right fix."
|
|
1892
|
+
)
|
|
1893
|
+
counters.advisory_retries += 1
|
|
1894
|
+
return Action(
|
|
1895
|
+
kind=RUN,
|
|
1896
|
+
label=(
|
|
1897
|
+
f"WORK: {state.work_aid} exited ADVISORY with no commits → "
|
|
1898
|
+
f"coord retry {state.work_aid} (attempt "
|
|
1899
|
+
f"{counters.advisory_retries}/{budget}, #2416)"
|
|
1900
|
+
),
|
|
1901
|
+
command=("retry", state.work_aid),
|
|
1902
|
+
error_message=f"coord retry failed for {state.work_aid}",
|
|
1845
1903
|
)
|
|
1846
1904
|
if not opts.accept_advisory:
|
|
1847
1905
|
return _die(
|
|
@@ -723,6 +723,29 @@ class Assignment:
|
|
|
723
723
|
# `advisory` — the same bucket as a worker that looked and correctly
|
|
724
724
|
# found nothing to do — so nobody re-drove it.
|
|
725
725
|
stop_reason: str | None = None
|
|
726
|
+
# #2417: the CALLING assignment's id when this row was dispatched by a
|
|
727
|
+
# `coord` subcommand run from INSIDE another worker's own turn (e.g. a
|
|
728
|
+
# `type="work"` session shelling out to `coord acceptance author repo ms
|
|
729
|
+
# --issue N` or `coord fix <other-id>`), as opposed to a human typing the
|
|
730
|
+
# same command in their own shell. Populated centrally in
|
|
731
|
+
# `coord.state.record_dispatched`/`record_dispatched_assignment` from the
|
|
732
|
+
# `COORD_ASSIGNMENT_ID` env var (see `coord.agent._build_worker_env`'s
|
|
733
|
+
# #2217 note — every headless worker's subprocess environment carries its
|
|
734
|
+
# own assignment id, so a `coord` CLI the worker shells out to inherits
|
|
735
|
+
# it automatically; a human's own shell never has it set). `None` for a
|
|
736
|
+
# hand dispatch, a coordinator/brain-proposed dispatch, and rows
|
|
737
|
+
# predating this column.
|
|
738
|
+
#
|
|
739
|
+
# This is the missing link #2417 reported: before this field, the only
|
|
740
|
+
# way to discover that a work row had dispatched an independent sibling
|
|
741
|
+
# assignment (and whether that sibling then succeeded) was grepping the
|
|
742
|
+
# worker's raw `claude -p` transcript for the printed "Dispatched ... to
|
|
743
|
+
# ..." line and manually cross-referencing a second `coord log` by hand.
|
|
744
|
+
# With this field, the ORIGIN row can be found by any consumer (the
|
|
745
|
+
# board, `coord audit`, the TUI) via a reverse lookup: "which assignment
|
|
746
|
+
# has `dispatched_by_assignment_id == this row's id`?" — see
|
|
747
|
+
# `coord.state.find_dispatched_children`.
|
|
748
|
+
dispatched_by_assignment_id: str | None = None
|
|
726
749
|
|
|
727
750
|
|
|
728
751
|
def effective_issue_number(assignment: "Assignment | dict") -> int:
|
|
@@ -859,6 +882,15 @@ class Proposal:
|
|
|
859
882
|
# through) carries durable provenance. `None` for every other caller
|
|
860
883
|
# (brain-proposed, milestone dispatch, ...).
|
|
861
884
|
driven_by: str | None = None
|
|
885
|
+
# #2417: mirrors `Assignment.dispatched_by_assignment_id` — see that
|
|
886
|
+
# field's docstring. Set here (rather than left for the caller to
|
|
887
|
+
# populate) by `coord.state.record_dispatched` reading
|
|
888
|
+
# `COORD_ASSIGNMENT_ID` from the environment at record time, so every
|
|
889
|
+
# `Proposal`-based dispatch path (`coord fix`/`coord pr`/`coord review`
|
|
890
|
+
# follow-ups via `_dispatch_followup`, `coord assign`,
|
|
891
|
+
# `coord/dispatch_workers.py`, ...) gets this for free without each call
|
|
892
|
+
# site threading it through by hand.
|
|
893
|
+
dispatched_by_assignment_id: str | None = None
|
|
862
894
|
|
|
863
895
|
|
|
864
896
|
@dataclass
|
|
@@ -17,7 +17,7 @@ import os
|
|
|
17
17
|
import sqlite3
|
|
18
18
|
import time
|
|
19
19
|
import warnings
|
|
20
|
-
from dataclasses import asdict
|
|
20
|
+
from dataclasses import asdict, replace
|
|
21
21
|
from datetime import datetime, timezone
|
|
22
22
|
from pathlib import Path
|
|
23
23
|
from typing import TYPE_CHECKING
|
|
@@ -561,6 +561,10 @@ def _dispatched_dict_from_payload(a: dict) -> dict:
|
|
|
561
561
|
"provider_name": a.get("provider_name"),
|
|
562
562
|
# #1499: durable drive provenance; None for a hand `coord assign`.
|
|
563
563
|
"driven_by": a.get("driven_by"),
|
|
564
|
+
# #2417: the calling worker's own assignment id, when this row was
|
|
565
|
+
# dispatched from INSIDE another worker's turn. None for a hand or
|
|
566
|
+
# coordinator/brain dispatch.
|
|
567
|
+
"dispatched_by_assignment_id": a.get("dispatched_by_assignment_id"),
|
|
564
568
|
}
|
|
565
569
|
|
|
566
570
|
|
|
@@ -605,6 +609,10 @@ def _row_to_dispatched_dict(row: object) -> dict:
|
|
|
605
609
|
"provider_name": d.get("provider_name"),
|
|
606
610
|
# #1499: durable drive provenance; None for a hand `coord assign`.
|
|
607
611
|
"driven_by": d.get("driven_by"),
|
|
612
|
+
# #2417: the calling worker's own assignment id, when this row was
|
|
613
|
+
# dispatched from INSIDE another worker's turn. None for a hand or
|
|
614
|
+
# coordinator/brain dispatch.
|
|
615
|
+
"dispatched_by_assignment_id": d.get("dispatched_by_assignment_id"),
|
|
608
616
|
}
|
|
609
617
|
|
|
610
618
|
|
|
@@ -799,6 +807,21 @@ def _thin_client_local_board_guard(fn_name: str) -> None:
|
|
|
799
807
|
_log.warning(msg)
|
|
800
808
|
|
|
801
809
|
|
|
810
|
+
def _dispatched_by_from_env() -> str | None:
|
|
811
|
+
"""The calling worker's own assignment id, if this process is running
|
|
812
|
+
INSIDE a headless worker's turn (#2417).
|
|
813
|
+
|
|
814
|
+
`COORD_ASSIGNMENT_ID` is set on a worker subprocess's own environment by
|
|
815
|
+
`coord.agent._build_worker_env` (#2217) — so a `coord` CLI invocation
|
|
816
|
+
the worker shells out to (e.g. `coord acceptance author` dispatching an
|
|
817
|
+
independent test-author sibling, `coord fix <other-id>` escalating an
|
|
818
|
+
unrelated assignment) inherits it automatically. A human typing the same
|
|
819
|
+
command in their own shell never has it set, so this correctly returns
|
|
820
|
+
`None` for a hand/coordinator dispatch.
|
|
821
|
+
"""
|
|
822
|
+
return os.environ.get("COORD_ASSIGNMENT_ID") or None
|
|
823
|
+
|
|
824
|
+
|
|
802
825
|
def record_dispatched(
|
|
803
826
|
*,
|
|
804
827
|
assignment_id: str,
|
|
@@ -807,6 +830,15 @@ def record_dispatched(
|
|
|
807
830
|
provider_name: str | None = None,
|
|
808
831
|
) -> None:
|
|
809
832
|
"""Record a newly dispatched assignment — routes to the daemon when set."""
|
|
833
|
+
# #2417: stamp the calling worker's own assignment id (if any) BEFORE
|
|
834
|
+
# this crosses the HTTP boundary to a possibly-remote daemon — the env
|
|
835
|
+
# var only exists on the machine/process that is actually dispatching,
|
|
836
|
+
# never on the daemon host. Caller-supplied values (none of today's
|
|
837
|
+
# callers set one explicitly) are left alone.
|
|
838
|
+
if proposal.dispatched_by_assignment_id is None:
|
|
839
|
+
proposal = replace(
|
|
840
|
+
proposal, dispatched_by_assignment_id=_dispatched_by_from_env()
|
|
841
|
+
)
|
|
810
842
|
svc = _board_service()
|
|
811
843
|
resp = _route_write(
|
|
812
844
|
svc,
|
|
@@ -874,8 +906,8 @@ def _record_dispatched_local(
|
|
|
874
906
|
assignment_id, machine_name, repo_name, repo_github,
|
|
875
907
|
issue_number, issue_title, status, type, briefing,
|
|
876
908
|
files_allowed, model, dispatched_at, required_gates,
|
|
877
|
-
provider_name, branch, driven_by
|
|
878
|
-
) VALUES (?, ?, ?, ?, ?, ?, 'running', ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
909
|
+
provider_name, branch, driven_by, dispatched_by_assignment_id
|
|
910
|
+
) VALUES (?, ?, ?, ?, ?, ?, 'running', ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
879
911
|
ON CONFLICT(assignment_id) DO NOTHING""",
|
|
880
912
|
(
|
|
881
913
|
assignment_id,
|
|
@@ -893,6 +925,7 @@ def _record_dispatched_local(
|
|
|
893
925
|
provider_name,
|
|
894
926
|
branch,
|
|
895
927
|
proposal.driven_by,
|
|
928
|
+
proposal.dispatched_by_assignment_id,
|
|
896
929
|
),
|
|
897
930
|
)
|
|
898
931
|
conn.commit()
|
|
@@ -915,7 +948,16 @@ def _record_dispatched_local(
|
|
|
915
948
|
# the audit log alone, after the driver process has exited.
|
|
916
949
|
actor="drive" if proposal.driven_by else "coordinator",
|
|
917
950
|
summary=f"Dispatched {proposal.type} to {proposal.machine_name}: "
|
|
918
|
-
f"{proposal.repo_name}#{proposal.issue_number}"
|
|
951
|
+
f"{proposal.repo_name}#{proposal.issue_number}"
|
|
952
|
+
# #2417: make the sibling-dispatch link visible in the default
|
|
953
|
+
# (non-`--json`) `coord audit` table, not just in `details` —
|
|
954
|
+
# this is what let coord-portal#119's dispatch of a test-author
|
|
955
|
+
# sibling go unnoticed without grepping the raw worker transcript.
|
|
956
|
+
+ (
|
|
957
|
+
f" (dispatched by assignment {proposal.dispatched_by_assignment_id})"
|
|
958
|
+
if proposal.dispatched_by_assignment_id
|
|
959
|
+
else ""
|
|
960
|
+
),
|
|
919
961
|
repo=proposal.repo_name,
|
|
920
962
|
issue=proposal.issue_number,
|
|
921
963
|
assignment_id=assignment_id,
|
|
@@ -924,6 +966,11 @@ def _record_dispatched_local(
|
|
|
924
966
|
"type": proposal.type,
|
|
925
967
|
"branch": branch,
|
|
926
968
|
"driven_by": proposal.driven_by,
|
|
969
|
+
# #2417: surfaces "this was dispatched BY a worker's own
|
|
970
|
+
# turn" directly in `coord audit`, without cross-referencing
|
|
971
|
+
# the raw `claude -p` transcript for the printed "Dispatched
|
|
972
|
+
# ... to ..." line.
|
|
973
|
+
"dispatched_by_assignment_id": proposal.dispatched_by_assignment_id,
|
|
927
974
|
},
|
|
928
975
|
)
|
|
929
976
|
|
|
@@ -934,6 +981,12 @@ def record_dispatched_assignment(
|
|
|
934
981
|
repo_github: str,
|
|
935
982
|
) -> None:
|
|
936
983
|
"""Record a dispatched assignment — routes to the daemon when set."""
|
|
984
|
+
# #2417: see record_dispatched's matching comment — must be stamped here,
|
|
985
|
+
# on the dispatching process's own env, before the daemon HTTP hop.
|
|
986
|
+
if assignment.dispatched_by_assignment_id is None:
|
|
987
|
+
assignment = replace(
|
|
988
|
+
assignment, dispatched_by_assignment_id=_dispatched_by_from_env()
|
|
989
|
+
)
|
|
937
990
|
svc = _board_service()
|
|
938
991
|
resp = _route_write(
|
|
939
992
|
svc, "/dispatched", {"assignment": asdict(assignment), "repo_github": repo_github}
|
|
@@ -971,7 +1024,8 @@ def _record_dispatched_assignment_local(
|
|
|
971
1024
|
issue_number, issue_title, status, type, briefing,
|
|
972
1025
|
files_allowed, model, dispatched_at, review_of_assignment_id,
|
|
973
1026
|
review_target, required_gates, review_iteration,
|
|
974
|
-
provider_name, branch, for_issue_number, driven_by
|
|
1027
|
+
provider_name, branch, for_issue_number, driven_by,
|
|
1028
|
+
dispatched_by_assignment_id
|
|
975
1029
|
) VALUES (?, ?, ?, ?, ?, ?, 'running', ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
|
|
976
1030
|
-- #1553: a follow-up dispatched off another assignment (review,
|
|
977
1031
|
-- smoke, [fix-N], retry, pr-helper) inherits that parent's
|
|
@@ -989,7 +1043,7 @@ def _record_dispatched_assignment_local(
|
|
|
989
1043
|
SELECT p.for_issue_number FROM assignments p
|
|
990
1044
|
WHERE p.assignment_id = ?
|
|
991
1045
|
)),
|
|
992
|
-
?)
|
|
1046
|
+
?, ?)
|
|
993
1047
|
ON CONFLICT(assignment_id) DO UPDATE SET
|
|
994
1048
|
status = 'running',
|
|
995
1049
|
machine_name = excluded.machine_name,
|
|
@@ -1013,7 +1067,13 @@ def _record_dispatched_assignment_local(
|
|
|
1013
1067
|
for_issue_number = COALESCE(excluded.for_issue_number, for_issue_number),
|
|
1014
1068
|
-- #1499: COALESCE so a re-dispatch/reload doesn't clear the
|
|
1015
1069
|
-- drive provenance already recorded for this assignment.
|
|
1016
|
-
driven_by = COALESCE(excluded.driven_by, driven_by)
|
|
1070
|
+
driven_by = COALESCE(excluded.driven_by, driven_by),
|
|
1071
|
+
-- #2417: COALESCE so a re-dispatch/reload doesn't clear the
|
|
1072
|
+
-- calling-worker provenance already recorded for this
|
|
1073
|
+
-- assignment.
|
|
1074
|
+
dispatched_by_assignment_id = COALESCE(
|
|
1075
|
+
excluded.dispatched_by_assignment_id, dispatched_by_assignment_id
|
|
1076
|
+
)""",
|
|
1017
1077
|
(
|
|
1018
1078
|
assignment.assignment_id or "",
|
|
1019
1079
|
assignment.machine_name,
|
|
@@ -1039,6 +1099,7 @@ def _record_dispatched_assignment_local(
|
|
|
1039
1099
|
# positional).
|
|
1040
1100
|
assignment.review_of_assignment_id,
|
|
1041
1101
|
assignment.driven_by,
|
|
1102
|
+
assignment.dispatched_by_assignment_id,
|
|
1042
1103
|
),
|
|
1043
1104
|
)
|
|
1044
1105
|
conn.commit()
|
|
@@ -1051,7 +1112,13 @@ def _record_dispatched_assignment_local(
|
|
|
1051
1112
|
# to a human `coord assign` (the exact gap #1499 reported).
|
|
1052
1113
|
actor="drive" if assignment.driven_by else "coordinator",
|
|
1053
1114
|
summary=f"Dispatched {assignment.type} to {assignment.machine_name}: "
|
|
1054
|
-
f"{assignment.repo_name}#{assignment.issue_number}"
|
|
1115
|
+
f"{assignment.repo_name}#{assignment.issue_number}"
|
|
1116
|
+
# #2417: see the matching Proposal-path comment above.
|
|
1117
|
+
+ (
|
|
1118
|
+
f" (dispatched by assignment {assignment.dispatched_by_assignment_id})"
|
|
1119
|
+
if assignment.dispatched_by_assignment_id
|
|
1120
|
+
else ""
|
|
1121
|
+
),
|
|
1055
1122
|
repo=assignment.repo_name,
|
|
1056
1123
|
issue=assignment.issue_number,
|
|
1057
1124
|
assignment_id=assignment.assignment_id,
|
|
@@ -1062,6 +1129,8 @@ def _record_dispatched_assignment_local(
|
|
|
1062
1129
|
"review_target": assignment.review_target,
|
|
1063
1130
|
"review_iteration": assignment.review_iteration,
|
|
1064
1131
|
"driven_by": assignment.driven_by,
|
|
1132
|
+
# #2417: see record_dispatched's matching comment.
|
|
1133
|
+
"dispatched_by_assignment_id": assignment.dispatched_by_assignment_id,
|
|
1065
1134
|
},
|
|
1066
1135
|
)
|
|
1067
1136
|
|
|
@@ -143,6 +143,50 @@ tests:
|
|
|
143
143
|
# THIS IS A GREEN RATCHET — see the `expected_red` block below.
|
|
144
144
|
detail_substate_2285::a_single_open_tab_keeps_todays_sub_tab_and_scroll_behaviour: 2285
|
|
145
145
|
|
|
146
|
+
# ── #2287 (T-5) — discoverability: status bar / `?` help / right-click ────
|
|
147
|
+
# Slice: tabs_discoverability_2287.rs · mocks: board-tab-context-menu.screen,
|
|
148
|
+
# board-tabs-help-overlay.screen (plus board-preview-tab.screen and
|
|
149
|
+
# board-baseline-no-tabs.screen — §8a's own hint-present / hint-absent
|
|
150
|
+
# reference pair)
|
|
151
|
+
#
|
|
152
|
+
# §8a — with >=1 tab open the status bar advertises the tab gestures
|
|
153
|
+
tabs_discoverability_2287::status_bar_shows_the_tab_hints_while_a_tab_is_open: 2287
|
|
154
|
+
# §8a — …as the contract's pinned, verbatim substring (two spaces between
|
|
155
|
+
# segments). Split from the clause above so a spacing/ordering deviation
|
|
156
|
+
# reds exactly one id.
|
|
157
|
+
tabs_discoverability_2287::status_bar_tab_hint_is_the_contracts_verbatim_string: 2287
|
|
158
|
+
# §8a + #2287 AC — the dynamic half: the hint goes away again when the last
|
|
159
|
+
# tab closes (a latched hint passes the static control but fails this)
|
|
160
|
+
tabs_discoverability_2287::status_bar_tab_hints_disappear_when_the_last_tab_closes: 2287
|
|
161
|
+
# §8a — CONTROL: zero tabs => no tab hint, and the Board's own pre-ms-65
|
|
162
|
+
# hints survive. THIS IS THE GREEN CONTROL — see `expected_red` below.
|
|
163
|
+
tabs_discoverability_2287::zero_tabs_status_bar_keeps_the_boards_own_hints_and_shows_no_tab_hints: 2287
|
|
164
|
+
# §8b — `?` opens an overlay titled "Board — Help"
|
|
165
|
+
tabs_discoverability_2287::help_overlay_opens_on_question_mark_with_the_board_title: 2287
|
|
166
|
+
# §8b — …listing the four pinned key-binding phrases ("open preview tab",
|
|
167
|
+
# "pin tab", "close active tab", "cycle tabs")
|
|
168
|
+
tabs_discoverability_2287::help_overlay_lists_the_document_tab_key_bindings: 2287
|
|
169
|
+
# §8b — …and the two mouse gestures the status bar cannot advertise,
|
|
170
|
+
# under the "Document tabs" heading
|
|
171
|
+
tabs_discoverability_2287::help_overlay_lists_the_mouse_tab_gestures_under_a_document_tabs_heading: 2287
|
|
172
|
+
# §8b — ` Esc=close ` while open, and `Esc` closes it
|
|
173
|
+
tabs_discoverability_2287::help_overlay_advertises_and_honours_escape_to_close: 2287
|
|
174
|
+
# §8c — right-clicking a tab opens the four-item menu (Close checked as a
|
|
175
|
+
# standalone item, not as a prefix of its two longer siblings)
|
|
176
|
+
tabs_discoverability_2287::right_clicking_a_tab_opens_a_menu_with_close_close_others_close_all_and_pin_tab: 2287
|
|
177
|
+
# §8c — "Close others" leaves exactly the right-clicked (middle) tab
|
|
178
|
+
tabs_discoverability_2287::close_others_leaves_exactly_the_right_clicked_tab: 2287
|
|
179
|
+
# §8c — "Close all" leaves none and restores the zero-tab state
|
|
180
|
+
tabs_discoverability_2287::close_all_leaves_no_tabs_and_restores_the_zero_tab_state: 2287
|
|
181
|
+
# §8c — "Close" closes the right-clicked tab and no other (see finding 16)
|
|
182
|
+
tabs_discoverability_2287::close_menu_item_closes_the_right_clicked_tab_and_no_other: 2287
|
|
183
|
+
# §8c + #2287 AC — "Pin tab" promotes a preview tab (drops `∘ `) without
|
|
184
|
+
# changing count or order
|
|
185
|
+
tabs_discoverability_2287::pin_tab_promotes_a_preview_tab_without_changing_count_or_order: 2287
|
|
186
|
+
# §8c — "hidden or inert" on an already-pinned tab, asserted through the
|
|
187
|
+
# outcome both readings share (see finding 17)
|
|
188
|
+
tabs_discoverability_2287::pin_tab_is_hidden_or_inert_on_an_already_pinned_tab: 2287
|
|
189
|
+
|
|
146
190
|
# ── expected_red (#2164) ───────────────────────────────────────────────────
|
|
147
191
|
# Hand-derived from a REAL run of the sealed suite against origin/main at the
|
|
148
192
|
# time of authoring (`cd tui && cargo test --test acceptance --features
|
|
@@ -249,6 +293,40 @@ expected_red:
|
|
|
249
293
|
- detail_substate_2285::closing_a_tab_discards_its_sub_state_and_reopening_starts_from_the_defaults
|
|
250
294
|
- detail_substate_2285::terminal_sub_tab_selection_follows_its_own_tab
|
|
251
295
|
|
|
296
|
+
# #2287 — OBSERVED, not intended. Taken from two consecutive real runs of
|
|
297
|
+
# the sealed suite (`cd tui && RUSTC_BOOTSTRAP=1 cargo test --test acceptance
|
|
298
|
+
# --features test-support -- -Z unstable-options --format json`, the driver
|
|
299
|
+
# command in coordinator.yml) at authoring time: of this slice's 14 ids, the
|
|
300
|
+
# same 13 FAILED and the same 1 passed on both runs. Every one of the 13 died
|
|
301
|
+
# on a §8 clause, never on a §2/§4 precondition — verified by reading the
|
|
302
|
+
# panic line of each failure (the §8c ones all land in `assert_menu_item` /
|
|
303
|
+
# `click_menu_item`, i.e. "no such menu"; the §8a/§8b ones on the missing
|
|
304
|
+
# hint string and the missing overlay). The 1 that passed is deliberately
|
|
305
|
+
# ABSENT below:
|
|
306
|
+
#
|
|
307
|
+
# * `zero_tabs_status_bar_keeps_the_boards_own_hints_and_shows_no_tab_hints`
|
|
308
|
+
# — the CONTROL. Green today (nothing renders "click=preview", and the
|
|
309
|
+
# Board status bar already reads `… n=notify m=merge R=retry P=purge
|
|
310
|
+
# q=quit`) and it must STAY green after #2287 lands: an implementation
|
|
311
|
+
# that appends the tab hints unconditionally, or that replaces the
|
|
312
|
+
# Board's own hint set with them outright, passes every §8a test above
|
|
313
|
+
# and breaks exactly this one. Listing it would make its inevitable pass
|
|
314
|
+
# a HARD FAILURE.
|
|
315
|
+
2287:
|
|
316
|
+
- tabs_discoverability_2287::status_bar_shows_the_tab_hints_while_a_tab_is_open
|
|
317
|
+
- tabs_discoverability_2287::status_bar_tab_hint_is_the_contracts_verbatim_string
|
|
318
|
+
- tabs_discoverability_2287::status_bar_tab_hints_disappear_when_the_last_tab_closes
|
|
319
|
+
- tabs_discoverability_2287::help_overlay_opens_on_question_mark_with_the_board_title
|
|
320
|
+
- tabs_discoverability_2287::help_overlay_lists_the_document_tab_key_bindings
|
|
321
|
+
- tabs_discoverability_2287::help_overlay_lists_the_mouse_tab_gestures_under_a_document_tabs_heading
|
|
322
|
+
- tabs_discoverability_2287::help_overlay_advertises_and_honours_escape_to_close
|
|
323
|
+
- tabs_discoverability_2287::right_clicking_a_tab_opens_a_menu_with_close_close_others_close_all_and_pin_tab
|
|
324
|
+
- tabs_discoverability_2287::close_others_leaves_exactly_the_right_clicked_tab
|
|
325
|
+
- tabs_discoverability_2287::close_all_leaves_no_tabs_and_restores_the_zero_tab_state
|
|
326
|
+
- tabs_discoverability_2287::close_menu_item_closes_the_right_clicked_tab_and_no_other
|
|
327
|
+
- tabs_discoverability_2287::pin_tab_promotes_a_preview_tab_without_changing_count_or_order
|
|
328
|
+
- tabs_discoverability_2287::pin_tab_is_hidden_or_inert_on_an_already_pinned_tab
|
|
329
|
+
|
|
252
330
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
253
331
|
# FOR THE COORDINATOR — three findings from authoring this slice. None of them
|
|
254
332
|
# is a worker's to fix, and none was resolved by editing the contract (a
|
|
@@ -506,3 +584,88 @@ expected_red:
|
|
|
506
584
|
# And this slice deliberately does NOT assert the sub-tab-switch scroll reset
|
|
507
585
|
# the app performs today (`detail_scroll = 0` on a sub-tab click): no clause
|
|
508
586
|
# pins it either way, so pinning it could force a wrong implementation.
|
|
587
|
+
|
|
588
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
589
|
+
# FOR THE COORDINATOR — findings from authoring the #2287 slice (contract §8).
|
|
590
|
+
# Independent of the #2282 / #2283 / #2284 / #2285 notes above; again, none is
|
|
591
|
+
# a worker's to fix by editing this suite, and none was resolved by editing
|
|
592
|
+
# the contract (a test-author may not amend one).
|
|
593
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
594
|
+
#
|
|
595
|
+
# 14. §8b's `?` overlay has TWO sections and the second one is #2288's, not
|
|
596
|
+
# #2287's. §8b pins "Document tabs" AND "Split (§9's four keys)", and
|
|
597
|
+
# `mocks/board-tabs-help-overlay.screen` renders the four split rows
|
|
598
|
+
# (`Ctrl-W v split right`, `Ctrl-W s split down`, `Ctrl-W w next pane`,
|
|
599
|
+
# `Ctrl-W x close pane`). This slice asserts the Document-tabs section
|
|
600
|
+
# only. #2287's own acceptance criteria say just "`?` lists the tab key
|
|
601
|
+
# bindings"; the split keys belong to §9 (#2288), which the milestone's
|
|
602
|
+
# work order puts AFTER this issue, and §9 note 2 says `Ctrl-W s` is a
|
|
603
|
+
# reserved placeholder that does nothing in ms-65. Asserting those rows
|
|
604
|
+
# here would gate #2287's acceptance run on a later issue's surface — and,
|
|
605
|
+
# for `Ctrl-W s`, on a binding the contract says must NOT work yet. If the
|
|
606
|
+
# Split section is meant to be gated by acceptance, it wants an id in
|
|
607
|
+
# #2288's slice (the overlay is #2287's to build; the rows it lists for
|
|
608
|
+
# split are #2288's to justify). Flagged as a `TODO(test-author)` in the
|
|
609
|
+
# slice too.
|
|
610
|
+
#
|
|
611
|
+
# 15. §8a's hint is pinned "whenever the active panel owns a tab set", but the
|
|
612
|
+
# Pipeline half is not asserted. Pipeline owns its own set (§3), so the
|
|
613
|
+
# hint presumably applies there too, but the contract names no
|
|
614
|
+
# Pipeline hint-present mock and finding 7 above (the #2284 author's) is a
|
|
615
|
+
# live blocker: entering the Pipeline panel from this external test crate
|
|
616
|
+
# can wholesale-replace the seeded fixture, because `start_data_load()`'s
|
|
617
|
+
# deterministic short-circuit is gated `#[cfg(test)]` only. Rather than
|
|
618
|
+
# add a fourteenth id with a known race, this slice asserts §8a on the
|
|
619
|
+
# Board only — where both of §8a's own reference mocks live. If finding
|
|
620
|
+
# 7's one-line cfg widening lands, a Pipeline hint id is cheap to add.
|
|
621
|
+
#
|
|
622
|
+
# 16. §8c does not say what the menu's **"Close"** item does. The section
|
|
623
|
+
# spells out the effect of "Close others", "Close all" and "Pin tab" and
|
|
624
|
+
# is silent on the first item. `close_menu_item_closes_the_right_clicked_
|
|
625
|
+
# tab_and_no_other` takes the only reading the label admits, and the one
|
|
626
|
+
# §4 already pins for the `×` route: the RIGHT-CLICKED tab closes, the
|
|
627
|
+
# others survive. The fixture deliberately right-clicks a tab that is NOT
|
|
628
|
+
# the active one (#102 while #103 is active) so the two readings are
|
|
629
|
+
# distinguishable — if "Close" was meant to close the *active* tab, that
|
|
630
|
+
# needs a contract amendment, not a silent implementation choice.
|
|
631
|
+
# Flagged as a `TODO(test-author)` in the slice.
|
|
632
|
+
#
|
|
633
|
+
# 17. §8c's "hidden **or** inert" is permissive, so neither the presence nor
|
|
634
|
+
# the absence of "Pin tab" on an already-pinned tab is assertable on its
|
|
635
|
+
# own. `pin_tab_is_hidden_or_inert_on_an_already_pinned_tab` asserts the
|
|
636
|
+
# outcome BOTH readings share instead — the tab set is unchanged (count,
|
|
637
|
+
# order, and still no `∘ ` marker anywhere) — taking the item's branch
|
|
638
|
+
# when it renders and dismissing the menu when it does not. It is not
|
|
639
|
+
# vacuous: it first requires the menu to open on a pinned tab at all
|
|
640
|
+
# (§8c gates only the one item, not the menu), which is why it was RED at
|
|
641
|
+
# authoring time.
|
|
642
|
+
#
|
|
643
|
+
# 18. §8b's overlay is driven with ZERO tabs open, though
|
|
644
|
+
# `mocks/board-tabs-help-overlay.screen` depicts it over a 3-tab board.
|
|
645
|
+
# §8b's testable clause carries no tab precondition ("`driver.press('?')`
|
|
646
|
+
# while the Board panel is active"), and #2287's own rationale — the
|
|
647
|
+
# gestures are "undiscoverable by anyone who did not read the issue" — is
|
|
648
|
+
# at its strongest before the operator has opened anything. If the tab
|
|
649
|
+
# section of the overlay is meant to be conditional on an open tab set,
|
|
650
|
+
# that is a contract amendment; as written, four ids here would be red
|
|
651
|
+
# against such an implementation.
|
|
652
|
+
#
|
|
653
|
+
# Also worth knowing, not a contract problem: (a) the shipped Board status bar
|
|
654
|
+
# is a full row of segments — `coord-tui Board [Sidebar] ↻ 0s QUEUE: empty
|
|
655
|
+
# FLEET: OK (coord health n=notify m=merge R=retry P=purge q=quit` — and
|
|
656
|
+
# is already truncated at 120 columns, whereas §8a's own reference mock renders
|
|
657
|
+
# only ` click=preview dbl-click=pin ctrl-w=close ctrl-tab=next q=quit`.
|
|
658
|
+
# The control asserts the four Board hint segments (`n=notify`, `R=retry`,
|
|
659
|
+
# `P=purge`, `q=quit`) survive in the ZERO-tab state only, which is the only
|
|
660
|
+
# state §8a calls "unchanged"; it deliberately pins nothing about what the row
|
|
661
|
+
# looks like once the tab hints are in it, since the mock implies the left-hand
|
|
662
|
+
# segments give way. (b) `"Close"` is a prefix of both `"Close others"` and
|
|
663
|
+
# `"Close all"`, so a bare `screen_contains("Close")` would pass on a menu
|
|
664
|
+
# missing the item entirely; the slice's `menu_item_row()` rejects a match
|
|
665
|
+
# whose label is immediately followed by another item's continuation. It does
|
|
666
|
+
# NOT require the row to end after the label — §8c pins no accelerator column
|
|
667
|
+
# for this menu, but ms-38's menus do render one (`Refresh … r`), so an item
|
|
668
|
+
# carrying an accelerator must still count. (c) §8c pins no gesture for
|
|
669
|
+
# activating an open menu item; a left click on the item's own label is the
|
|
670
|
+
# only activation path any context menu in this app already documents, so that
|
|
671
|
+
# is what the slice sends.
|