code-coordinator 0.5.173__tar.gz → 0.5.175__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.173 → code_coordinator-0.5.175}/PKG-INFO +1 -1
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/code_coordinator.egg-info/scm_file_list.json +1 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/ci_github.py +50 -17
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/ci_store.py +27 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/merge.py +55 -1
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/gate_snapshot.py +40 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/merge_queue.py +48 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-65/manifest.yml +155 -0
- code_coordinator-0.5.175/tests/acceptance/ms-65/tabs_persistence_2286.rs +1105 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_board_read_path.py +81 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_ci_store.py +69 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_merge.py +93 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_merge_queue.py +78 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/tests/acceptance.rs +1 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/.github/workflows/acceptance-web.yml +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/.gitignore +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/CLAUDE.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/GOAL.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/LICENSE +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/MANIFEST.in +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/README.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/__init__.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/agent.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/audit.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/block_log.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/board_service.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/brain.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/claim.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/cli.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/client.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/comments.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/config.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dao.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/db.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/deps.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/drive.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/events.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/filelock.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/freshness.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/gates.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/goal.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/context.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/models.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/render.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/health/units.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/hooks.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/interactive.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/models.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/network.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/notify.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/openapi.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/parentage.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/plans.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/progress.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/release_window.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/reports.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/review.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/self_health.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/smoke.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/split_work.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/state.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/test_author.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/test_report.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/usage.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/install-agent.sh +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/pyproject.toml +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/setup.cfg +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/__init__.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/conftest.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_config.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_db.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_events.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_init.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_models.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_network.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_review.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_session.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_split.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_state.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.173 → code_coordinator-0.5.175}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -810,6 +810,7 @@ tests/acceptance/ms-65/detail_substate_2285.rs
|
|
|
810
810
|
tests/acceptance/ms-65/manifest.yml
|
|
811
811
|
tests/acceptance/ms-65/pipeline_tabs_2284.rs
|
|
812
812
|
tests/acceptance/ms-65/tabs_discoverability_2287.rs
|
|
813
|
+
tests/acceptance/ms-65/tabs_persistence_2286.rs
|
|
813
814
|
tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen
|
|
814
815
|
tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen
|
|
815
816
|
tests/acceptance/ms-65/mocks/board-preview-tab.screen
|
{code_coordinator-0.5.173 → code_coordinator-0.5.175}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -456,6 +456,7 @@
|
|
|
456
456
|
"tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen",
|
|
457
457
|
"tests/acceptance/ms-65/pipeline_tabs_2284.rs",
|
|
458
458
|
"tests/acceptance/ms-65/tabs_discoverability_2287.rs",
|
|
459
|
+
"tests/acceptance/ms-65/tabs_persistence_2286.rs",
|
|
459
460
|
"tests/acceptance/ms-example/mocks/home-active.html",
|
|
460
461
|
"tests/conftest.py",
|
|
461
462
|
"tests/fixtures/board-pipeline-basic.json",
|
|
@@ -146,6 +146,49 @@ class GitHubCi:
|
|
|
146
146
|
return True
|
|
147
147
|
|
|
148
148
|
def list_checks_for_pr(self, repo: str, number: int) -> list[CheckRun]:
|
|
149
|
+
"""Checks the merge gate evaluates — narrowed to what GitHub's own
|
|
150
|
+
branch protection actually REQUIRES, when that's determinable
|
|
151
|
+
(#2388/#2446).
|
|
152
|
+
|
|
153
|
+
A repo can report far more `gh pr checks` entries than GitHub's
|
|
154
|
+
required-status-check list (this repo: 9 reported, 5 required), and
|
|
155
|
+
every merge-gate predicate downstream of this method
|
|
156
|
+
(`failed_checks`, `in_flight_checks`, `checks_are_stale`) otherwise
|
|
157
|
+
waits on advisory jobs GitHub itself doesn't — a hung/flaky ADVISORY
|
|
158
|
+
check (e.g. `Acceptance (web)`, or an unconditional Playwright/
|
|
159
|
+
Chromium install with no timeout) then blocks `coord merge`
|
|
160
|
+
indefinitely even though the PR is already `MERGEABLE`. Never
|
|
161
|
+
filters (returns everything :meth:`list_all_checks_for_pr` does)
|
|
162
|
+
when the required list can't be determined — #1525's bias: unknown
|
|
163
|
+
reads as "wait on everything reported", not as a free pass to stop
|
|
164
|
+
waiting on something that might matter.
|
|
165
|
+
|
|
166
|
+
#2446: this is deliberately the ONLY narrowed view — see
|
|
167
|
+
:meth:`list_all_checks_for_pr` for the full, unfiltered set that
|
|
168
|
+
feeds `coord merge --plan`'s CI summary, so a regressed advisory
|
|
169
|
+
check stays visible to an operator even though it can no longer gate
|
|
170
|
+
a merge attempt.
|
|
171
|
+
"""
|
|
172
|
+
checks = self._all_checks(repo, number)
|
|
173
|
+
required = self._required_contexts(repo)
|
|
174
|
+
if required:
|
|
175
|
+
return [c for c in checks if c.name in required]
|
|
176
|
+
return checks
|
|
177
|
+
|
|
178
|
+
def list_all_checks_for_pr(self, repo: str, number: int) -> list[CheckRun]:
|
|
179
|
+
"""Every check `gh pr checks` reports, required or advisory (#2446).
|
|
180
|
+
|
|
181
|
+
Purely a visibility view — `coord merge --plan`/the TUI's CI badges
|
|
182
|
+
read this so a regressed ADVISORY check (one GitHub's branch
|
|
183
|
+
protection doesn't require, and :meth:`list_checks_for_pr` therefore
|
|
184
|
+
no longer waits on) is still something an operator can see, per
|
|
185
|
+
#2446's suggested fix: "still visible ... but should never gate a
|
|
186
|
+
merge attempt." Shares :meth:`list_checks_for_pr`'s cached fetch —
|
|
187
|
+
one `gh pr checks` subprocess call backs both views, never two.
|
|
188
|
+
"""
|
|
189
|
+
return self._all_checks(repo, number)
|
|
190
|
+
|
|
191
|
+
def _all_checks(self, repo: str, number: int) -> list[CheckRun]:
|
|
149
192
|
key = (repo, number)
|
|
150
193
|
now = time.time()
|
|
151
194
|
cached = self._cache.get(key)
|
|
@@ -367,7 +410,13 @@ class GitHubCi:
|
|
|
367
410
|
return [_unreadable_check(repo, number, str(e))]
|
|
368
411
|
if not isinstance(raw, list):
|
|
369
412
|
return [_unreadable_check(repo, number, "gh pr checks returned non-list JSON")]
|
|
370
|
-
|
|
413
|
+
# #2446: `_all_checks` (this method's only caller) is the single
|
|
414
|
+
# unfiltered fetch shared by both `list_checks_for_pr` (narrowed to
|
|
415
|
+
# required contexts) and `list_all_checks_for_pr` (everything) — the
|
|
416
|
+
# required-contexts narrowing used to happen here, which meant an
|
|
417
|
+
# advisory check's regression was invisible everywhere, not just to
|
|
418
|
+
# the merge gate. See both methods' docstrings.
|
|
419
|
+
return [
|
|
371
420
|
CheckRun(
|
|
372
421
|
name=str(entry.get("name", "")),
|
|
373
422
|
status=_status_from_bucket(str(entry.get("bucket", ""))),
|
|
@@ -380,22 +429,6 @@ class GitHubCi:
|
|
|
380
429
|
for entry in raw
|
|
381
430
|
if isinstance(entry, dict)
|
|
382
431
|
]
|
|
383
|
-
# #2388: narrow to what branch protection actually REQUIRES, when
|
|
384
|
-
# that's determinable — a repo can report far more `gh pr checks`
|
|
385
|
-
# entries than GitHub's own required list (this repo: 9 reported, 5
|
|
386
|
-
# required), and every merge-gate predicate downstream of this
|
|
387
|
-
# method (`failed_checks`, `in_flight_checks`, `checks_are_stale`)
|
|
388
|
-
# otherwise waits on advisory jobs GitHub itself doesn't. A hung
|
|
389
|
-
# advisory job (e.g. an unconditional Playwright/Chromium install
|
|
390
|
-
# with no timeout) would then block `coord merge` indefinitely even
|
|
391
|
-
# though the PR is already `MERGEABLE`. `_required_contexts` returns
|
|
392
|
-
# `None` (never filters) when it can't determine the required list
|
|
393
|
-
# — #1525's bias: unknown reads as "wait on everything reported",
|
|
394
|
-
# not as a free pass to stop waiting on something that might matter.
|
|
395
|
-
required = self._required_contexts(repo)
|
|
396
|
-
if required:
|
|
397
|
-
checks = [c for c in checks if c.name in required]
|
|
398
|
-
return checks
|
|
399
432
|
|
|
400
433
|
def _required_contexts(self, repo: str) -> frozenset[str] | None:
|
|
401
434
|
now = time.time()
|
|
@@ -125,6 +125,28 @@ class CiStore(Protocol):
|
|
|
125
125
|
|
|
126
126
|
def list_checks_for_pr(self, repo: str, number: int) -> list[CheckRun]: ...
|
|
127
127
|
|
|
128
|
+
def list_all_checks_for_pr(self, repo: str, number: int) -> list[CheckRun]:
|
|
129
|
+
"""Every check reported for *repo*/*number*, required or advisory
|
|
130
|
+
(#2446) — the unfiltered counterpart to :meth:`list_checks_for_pr`,
|
|
131
|
+
which narrows to what branch protection actually requires so the
|
|
132
|
+
merge gate never blocks on a merely-advisory check (see that
|
|
133
|
+
method's docstring on :class:`coord.ci_github.GitHubCi`).
|
|
134
|
+
|
|
135
|
+
Purely a visibility view: `coord merge --plan`'s CI summary reads
|
|
136
|
+
this so a regressed advisory check is still visible to an operator
|
|
137
|
+
even though it can no longer gate a merge attempt — matching what
|
|
138
|
+
GitHub's own merge button already allows.
|
|
139
|
+
|
|
140
|
+
Optional/duck-typed like :meth:`rerun_failed_for_pr` — call sites
|
|
141
|
+
use ``getattr(ci_store, "list_all_checks_for_pr", None)`` and fall
|
|
142
|
+
back to :meth:`list_checks_for_pr` for a stand-in (a test stub, or
|
|
143
|
+
:class:`coord.gate_snapshot.GateSnapshot` when its own snapshot
|
|
144
|
+
wasn't refreshed with the unfiltered view) that predates this
|
|
145
|
+
capability — read as "no separate advisory view available", not an
|
|
146
|
+
error.
|
|
147
|
+
"""
|
|
148
|
+
...
|
|
149
|
+
|
|
128
150
|
@property
|
|
129
151
|
def is_available(self) -> bool: ...
|
|
130
152
|
|
|
@@ -232,6 +254,11 @@ class NoOpCi:
|
|
|
232
254
|
def list_checks_for_pr(self, repo: str, number: int) -> list[CheckRun]:
|
|
233
255
|
return []
|
|
234
256
|
|
|
257
|
+
def list_all_checks_for_pr(self, repo: str, number: int) -> list[CheckRun]:
|
|
258
|
+
"""No-op: CI gating is disabled entirely, so there is nothing to
|
|
259
|
+
show either the gate or an operator (#2446)."""
|
|
260
|
+
return []
|
|
261
|
+
|
|
235
262
|
@property
|
|
236
263
|
def is_available(self) -> bool:
|
|
237
264
|
return False
|
|
@@ -944,6 +944,60 @@ def _reconcile_via_daemon(svc, params: dict) -> None:
|
|
|
944
944
|
sys.exit(int(code))
|
|
945
945
|
|
|
946
946
|
|
|
947
|
+
def _ci_field(summary, name: str, default=0):
|
|
948
|
+
"""Read *name* off a CI rollup, tolerating both shapes ``p.ci_summary``/
|
|
949
|
+
``p.ci_summary_all`` can arrive in (#2446).
|
|
950
|
+
|
|
951
|
+
``coord.merge_queue.plan()`` (the local, in-process path) hands back
|
|
952
|
+
real :class:`~coord.ci_store.CiCheckSummary` instances. ``coord merge
|
|
953
|
+
--plan`` against a daemon instead reconstructs ``PlannedMerge`` from the
|
|
954
|
+
``/board`` JSON payload (``_show_plan_from_daemon`` below) — the server
|
|
955
|
+
side flattens each rollup with ``dataclasses.asdict`` and nothing
|
|
956
|
+
re-hydrates it, so on that path both fields arrive as plain ``dict``s
|
|
957
|
+
instead. ``summary`` is ``None`` on either path when there's nothing to
|
|
958
|
+
report (no PR yet, no ``ci_store``, …).
|
|
959
|
+
"""
|
|
960
|
+
if summary is None:
|
|
961
|
+
return default
|
|
962
|
+
if isinstance(summary, dict):
|
|
963
|
+
return summary.get(name, default)
|
|
964
|
+
return getattr(summary, name, default)
|
|
965
|
+
|
|
966
|
+
|
|
967
|
+
def _advisory_ci_note(p) -> str:
|
|
968
|
+
"""#2446: describe any check failing/still-running in the unfiltered
|
|
969
|
+
(required + advisory) CI rollup that the required-only rollup
|
|
970
|
+
(``p.ci_summary`` — the same view the merge gate itself evaluates)
|
|
971
|
+
doesn't already account for.
|
|
972
|
+
|
|
973
|
+
A regression here is on a check GitHub's own branch protection doesn't
|
|
974
|
+
require — `coord merge`'s gate correctly no longer blocks on it (see
|
|
975
|
+
``coord.ci_github.GitHubCi.list_checks_for_pr``'s docstring), but an
|
|
976
|
+
operator staring at a READY row while a real job is red/hung nearby
|
|
977
|
+
still deserves to see it. Returns ``""`` when there's nothing extra to
|
|
978
|
+
report (no ``ci_summary_all``, or it agrees with ``ci_summary``).
|
|
979
|
+
"""
|
|
980
|
+
if p.ci_summary_all is None:
|
|
981
|
+
return ""
|
|
982
|
+
req_failed = _ci_field(p.ci_summary, "failed")
|
|
983
|
+
req_running = _ci_field(p.ci_summary, "running")
|
|
984
|
+
req_failed_names = set(_ci_field(p.ci_summary, "failed_names", []) or [])
|
|
985
|
+
extra_failed = _ci_field(p.ci_summary_all, "failed") - req_failed
|
|
986
|
+
extra_running = _ci_field(p.ci_summary_all, "running") - req_running
|
|
987
|
+
if extra_failed <= 0 and extra_running <= 0:
|
|
988
|
+
return ""
|
|
989
|
+
all_failed_names = _ci_field(p.ci_summary_all, "failed_names", []) or []
|
|
990
|
+
advisory_failed_names = [n for n in all_failed_names if n not in req_failed_names]
|
|
991
|
+
bits = []
|
|
992
|
+
if advisory_failed_names:
|
|
993
|
+
bits.append("failing: " + ", ".join(advisory_failed_names))
|
|
994
|
+
elif extra_failed > 0:
|
|
995
|
+
bits.append(f"{extra_failed} failing")
|
|
996
|
+
if extra_running > 0:
|
|
997
|
+
bits.append(f"{extra_running} running")
|
|
998
|
+
return " [advisory CI, not blocking — " + "; ".join(bits) + "]"
|
|
999
|
+
|
|
1000
|
+
|
|
947
1001
|
def _print_merge_plan_entries(planned: list) -> None:
|
|
948
1002
|
"""Print a list of PlannedMerge entries grouped by repo → target_branch."""
|
|
949
1003
|
if not planned:
|
|
@@ -963,7 +1017,7 @@ def _print_merge_plan_entries(planned: list) -> None:
|
|
|
963
1017
|
_status_str = f"{_p.status} {_p.reason}"
|
|
964
1018
|
click.echo(
|
|
965
1019
|
f" {_p.rank}. #{_p.issue_number} {_size_str} "
|
|
966
|
-
f"{_status_str} {_p.issue_title}"
|
|
1020
|
+
f"{_status_str} {_p.issue_title}{_advisory_ci_note(_p)}"
|
|
967
1021
|
)
|
|
968
1022
|
|
|
969
1023
|
|
|
@@ -136,6 +136,16 @@ class GateSnapshot:
|
|
|
136
136
|
"""
|
|
137
137
|
|
|
138
138
|
checks: dict[tuple[str, int], list[CheckRun]] = field(default_factory=dict)
|
|
139
|
+
# #2446: the unfiltered counterpart to `checks` above — `checks` is
|
|
140
|
+
# already narrowed to branch-protection-required contexts (see
|
|
141
|
+
# `coord.ci_github.GitHubCi.list_checks_for_pr`'s docstring), so a
|
|
142
|
+
# regressed ADVISORY check (one GitHub's own merge button doesn't wait
|
|
143
|
+
# on either) would otherwise be invisible to `coord merge --plan`'s CI
|
|
144
|
+
# summary, not just to the merge gate. Populated from
|
|
145
|
+
# `list_all_checks_for_pr` when the inner `CiStore` offers it; falls
|
|
146
|
+
# back to the same (already-narrowed) data as `checks` for a backend
|
|
147
|
+
# that doesn't, same fail-open shape as `workflows_declared` below.
|
|
148
|
+
all_checks: dict[tuple[str, int], list[CheckRun]] = field(default_factory=dict)
|
|
139
149
|
commit_messages: dict[tuple[str, int], list[str]] = field(default_factory=dict)
|
|
140
150
|
epic_issues: dict[tuple[str, int], bool] = field(default_factory=dict)
|
|
141
151
|
# #1640: (repo, branch) -> HEAD SHA, and (repo, base, head) -> patch-id,
|
|
@@ -180,6 +190,19 @@ class GateSnapshot:
|
|
|
180
190
|
return [_stale_check(age)]
|
|
181
191
|
return self.checks.get((repo, number), [])
|
|
182
192
|
|
|
193
|
+
def list_all_checks_for_pr(self, repo: str, number: int) -> list[CheckRun]:
|
|
194
|
+
"""Unfiltered counterpart to :meth:`list_checks_for_pr` (#2446) —
|
|
195
|
+
same staleness handling, but keyed off ``all_checks`` so an
|
|
196
|
+
advisory check's regression stays visible to `coord merge --plan`
|
|
197
|
+
even though `list_checks_for_pr` (the gate's own view) no longer
|
|
198
|
+
waits on it.
|
|
199
|
+
"""
|
|
200
|
+
if self.ci_available:
|
|
201
|
+
age = None if self.refreshed_at is None else time.time() - self.refreshed_at
|
|
202
|
+
if age is None or age > STALE_AFTER_SECONDS:
|
|
203
|
+
return [_stale_check(age)]
|
|
204
|
+
return self.all_checks.get((repo, number), [])
|
|
205
|
+
|
|
183
206
|
def expects_checks(self, repo: str, number: int) -> bool:
|
|
184
207
|
# #1904: unlike `list_checks_for_pr`'s "unknown reads as failing"
|
|
185
208
|
# (#1525) posture, a repo this snapshot hasn't cached an answer for
|
|
@@ -286,6 +309,7 @@ class GateSnapshotRefresher:
|
|
|
286
309
|
entries = [e for e in pending if e.pr_number]
|
|
287
310
|
|
|
288
311
|
checks: dict[tuple[str, int], list[CheckRun]] = {}
|
|
312
|
+
all_checks: dict[tuple[str, int], list[CheckRun]] = {}
|
|
289
313
|
messages: dict[tuple[str, int], list[str]] = {}
|
|
290
314
|
epics: dict[tuple[str, int], bool] = {}
|
|
291
315
|
branch_shas: dict[tuple[str, str], str | None] = {}
|
|
@@ -342,6 +366,21 @@ class GateSnapshotRefresher:
|
|
|
342
366
|
checks[key] = inner.list_checks_for_pr(*key)
|
|
343
367
|
except Exception: # noqa: BLE001 — fail-open for this entry
|
|
344
368
|
checks[key] = []
|
|
369
|
+
# #2446: the unfiltered view backing `coord merge --plan`'s
|
|
370
|
+
# CI summary — see `GateSnapshot.all_checks`'s field
|
|
371
|
+
# comment. `list_all_checks_for_pr` is optional/duck-typed
|
|
372
|
+
# (a `CiStore` stand-in that predates #2446 doesn't offer
|
|
373
|
+
# it); falling back to the already-fetched `checks[key]`
|
|
374
|
+
# degrades to "advisory checks aren't shown separately",
|
|
375
|
+
# never to an extra `gh` call or a missing key.
|
|
376
|
+
list_all = getattr(inner, "list_all_checks_for_pr", None)
|
|
377
|
+
if list_all is not None:
|
|
378
|
+
try:
|
|
379
|
+
all_checks[key] = list_all(*key)
|
|
380
|
+
except Exception: # noqa: BLE001 — fail-open for this entry
|
|
381
|
+
all_checks[key] = checks[key]
|
|
382
|
+
else:
|
|
383
|
+
all_checks[key] = checks[key]
|
|
345
384
|
# #1904: repo-wide, so dedupe across every pending entry in
|
|
346
385
|
# the same repo — one `gh api .../actions/workflows` call
|
|
347
386
|
# per repo per tick, not one per PR. A failure here reads
|
|
@@ -372,6 +411,7 @@ class GateSnapshotRefresher:
|
|
|
372
411
|
|
|
373
412
|
snap = GateSnapshot(
|
|
374
413
|
checks=checks,
|
|
414
|
+
all_checks=all_checks,
|
|
375
415
|
commit_messages=messages,
|
|
376
416
|
epic_issues=epics,
|
|
377
417
|
branch_shas=branch_shas,
|
|
@@ -3984,6 +3984,20 @@ class PlannedMerge:
|
|
|
3984
3984
|
# when no PR is open yet, or `ci_store` has no checks for this PR.
|
|
3985
3985
|
pr_number: int | None = None
|
|
3986
3986
|
ci_summary: "CiCheckSummary | None" = None
|
|
3987
|
+
# #2446: the unfiltered (required + advisory) counterpart to
|
|
3988
|
+
# `ci_summary` above, which is narrowed to what GitHub's branch
|
|
3989
|
+
# protection actually requires — the same scope the merge gate itself
|
|
3990
|
+
# evaluates (see `_entry_gate_status`/`coord.ci_github.GitHubCi.
|
|
3991
|
+
# list_checks_for_pr`'s docstrings). A merely-advisory check regressing
|
|
3992
|
+
# (a flaky/hung job the branch's own protection rules don't wait on
|
|
3993
|
+
# either) must never gate a merge attempt, but it's still worth an
|
|
3994
|
+
# operator seeing — this is what `coord merge --plan` renders that from.
|
|
3995
|
+
# `None` under the same conditions as `ci_summary` (no PR yet, or no
|
|
3996
|
+
# `ci_store`); a `CiStore` that predates `list_all_checks_for_pr` yields
|
|
3997
|
+
# the same value as `ci_summary` rather than `None`, so a plan built
|
|
3998
|
+
# against an older store still shows *something* instead of silently
|
|
3999
|
+
# losing the badge.
|
|
4000
|
+
ci_summary_all: "CiCheckSummary | None" = None
|
|
3987
4001
|
# #2397: mirrors `config.merge.auto_drain` (default False) at plan-build
|
|
3988
4002
|
# time — read-only exposure, no gate-logic change. The TUI's per-issue
|
|
3989
4003
|
# Merge stage box needs this to tell "nothing retries until a human runs
|
|
@@ -4101,6 +4115,7 @@ def plan(
|
|
|
4101
4115
|
reason: str | None = None
|
|
4102
4116
|
|
|
4103
4117
|
ci_summary = None
|
|
4118
|
+
ci_summary_all = None
|
|
4104
4119
|
if entry.state == PENDING:
|
|
4105
4120
|
base_status, reason = _entry_gate_status(
|
|
4106
4121
|
entry, board, config, ci_store, gh_ops
|
|
@@ -4126,11 +4141,43 @@ def plan(
|
|
|
4126
4141
|
# only ever populates checks for entries that are PENDING at
|
|
4127
4142
|
# refresh time, so a MERGING/MERGED row never had real
|
|
4128
4143
|
# snapshot data to render in the first place.
|
|
4144
|
+
#
|
|
4145
|
+
# #2446: `ci_summary` MUST stay derived from the same
|
|
4146
|
+
# (already required-narrowed) `list_checks_for_pr` view
|
|
4147
|
+
# `_entry_gate_status` just consulted above — do not widen it
|
|
4148
|
+
# to the unfiltered check list. `coord.drive_queue
|
|
4149
|
+
# ._ci_rollup_all_clear` reads this exact field as positive
|
|
4150
|
+
# evidence that a frozen "CI running:" raw-row string has
|
|
4151
|
+
# gone stale, and that evidence is only valid when it is
|
|
4152
|
+
# counting the SAME checks the live gate decision is based
|
|
4153
|
+
# on (see that function's docstring); widening it here would
|
|
4154
|
+
# make a still-pending ADVISORY check block the #2158
|
|
4155
|
+
# park-recovery self-heal even though the gate itself (and
|
|
4156
|
+
# GitHub's own merge button) is already clear. Advisory
|
|
4157
|
+
# visibility is a genuinely separate concern — see
|
|
4158
|
+
# `ci_summary_all` below.
|
|
4129
4159
|
if ci_store is not None and ci_store.is_available and entry.pr_number:
|
|
4130
4160
|
checks = ci_store.list_checks_for_pr(entry.repo_github, entry.pr_number)
|
|
4131
4161
|
if checks:
|
|
4132
4162
|
ci_summary = summarize_counts(checks)
|
|
4133
4163
|
|
|
4164
|
+
# #2446: the unfiltered (required + advisory) rollup —
|
|
4165
|
+
# pure visibility, never consulted by any gate decision
|
|
4166
|
+
# or self-heal evidence. Lets `coord merge --plan`/the
|
|
4167
|
+
# TUI still show a regressed advisory check (e.g.
|
|
4168
|
+
# `Acceptance (web)`) even though it can no longer block
|
|
4169
|
+
# `_entry_gate_status` above or the #2158 recovery read
|
|
4170
|
+
# above. Falls back to `ci_summary` for a `CiStore`
|
|
4171
|
+
# stand-in that predates `list_all_checks_for_pr`.
|
|
4172
|
+
list_all = getattr(ci_store, "list_all_checks_for_pr", None)
|
|
4173
|
+
all_checks = (
|
|
4174
|
+
list_all(entry.repo_github, entry.pr_number)
|
|
4175
|
+
if list_all is not None
|
|
4176
|
+
else checks
|
|
4177
|
+
)
|
|
4178
|
+
if all_checks:
|
|
4179
|
+
ci_summary_all = summarize_counts(all_checks)
|
|
4180
|
+
|
|
4134
4181
|
result.append(PlannedMerge(
|
|
4135
4182
|
assignment_id=entry.assignment_id,
|
|
4136
4183
|
repo_name=entry.repo_name,
|
|
@@ -4145,6 +4192,7 @@ def plan(
|
|
|
4145
4192
|
reason=reason,
|
|
4146
4193
|
pr_number=entry.pr_number,
|
|
4147
4194
|
ci_summary=ci_summary,
|
|
4195
|
+
ci_summary_all=ci_summary_all,
|
|
4148
4196
|
enqueued_at=entry.enqueued_at,
|
|
4149
4197
|
last_attempt=entry.last_attempt,
|
|
4150
4198
|
milestone=milestones.get((entry.repo_name, entry.issue_number)),
|
|
@@ -186,6 +186,42 @@ tests:
|
|
|
186
186
|
# §8c — "hidden or inert" on an already-pinned tab, asserted through the
|
|
187
187
|
# outcome both readings share (see finding 17)
|
|
188
188
|
tabs_discoverability_2287::pin_tab_is_hidden_or_inert_on_an_already_pinned_tab: 2287
|
|
189
|
+
# ── #2286 (T-5) — persistence, `~/.coord/tabs.json` (contract §6) ─────────
|
|
190
|
+
# Slice: tabs_persistence_2286.rs · mocks: none of its own (§6 is explicitly
|
|
191
|
+
# mock-less: "No visual mock (this is a file-format contract, not a
|
|
192
|
+
# screen)"); its rendered halves lean on `board-baseline-no-tabs.screen`
|
|
193
|
+
# (the zero-tab state a missing/malformed file must produce) and
|
|
194
|
+
# `board-pinned-3-tabs.screen` (three restored tabs, §2c bracket included).
|
|
195
|
+
#
|
|
196
|
+
# §6 bullet 1 (save side) — 3 Board tabs are written as an ORDERED `tabs`
|
|
197
|
+
# list with `active` set and `preview` null
|
|
198
|
+
tabs_persistence_2286::three_board_tabs_are_saved_to_tabs_json_in_strip_order_with_the_active_tab: 2286
|
|
199
|
+
# §6 (`preview` is "the key of the one preview tab […] must also appear in
|
|
200
|
+
# `tabs`") — the file-level half of "restored as a preview, not promoted"
|
|
201
|
+
tabs_persistence_2286::a_preview_tab_is_saved_as_the_scopes_preview_slot: 2286
|
|
202
|
+
# §6 bullet 1 + #2286 AC 1 (Board half) — three Board tabs restored after a
|
|
203
|
+
# restart, persisted active tab preserved
|
|
204
|
+
tabs_persistence_2286::board_tabs_are_restored_from_tabs_json_after_a_restart: 2286
|
|
205
|
+
# §6 + #2286 AC 2 — a restored preview tab keeps §1's `∘ ` marker, i.e. is
|
|
206
|
+
# not promoted to pinned on load
|
|
207
|
+
tabs_persistence_2286::a_restored_preview_tab_is_still_a_preview_tab: 2286
|
|
208
|
+
# §6 bullet 1 + #2286 AC 1 (Pipeline half) — the same file restores two
|
|
209
|
+
# Pipeline tabs to the PIPELINE panel with its own active tab (see
|
|
210
|
+
# coordinator finding 15 for the live blocker on entering that panel)
|
|
211
|
+
tabs_persistence_2286::pipeline_tabs_are_restored_to_the_pipeline_panel_with_its_own_active_tab: 2286
|
|
212
|
+
# §6 bullet 2 + #2286 AC 3 — a document whose issue is gone from the board is
|
|
213
|
+
# dropped on load, never rendered, never round-tripped into a re-saved file
|
|
214
|
+
tabs_persistence_2286::a_document_whose_issue_is_absent_from_the_board_is_pruned_on_load: 2286
|
|
215
|
+
# §6 bullet 3 (first branch) — the active document being pruned activates a
|
|
216
|
+
# surviving neighbour (WHICH one is not pinned — see finding 16)
|
|
217
|
+
tabs_persistence_2286::pruning_the_active_document_activates_a_surviving_neighbour: 2286
|
|
218
|
+
# §6 bullet 3 (second branch) — nothing survives the prune → no tabs at all.
|
|
219
|
+
# THIS IS A GREEN RATCHET — see the `expected_red` block below.
|
|
220
|
+
tabs_persistence_2286::a_scope_whose_documents_are_all_pruned_starts_with_no_tabs: 2286
|
|
221
|
+
# §6 bullet 4 + #2286 AC 4 — missing / empty / malformed file all start
|
|
222
|
+
# clean, never a panic, never a partial parse.
|
|
223
|
+
# THIS IS THE GREEN CONTROL — see the `expected_red` block below.
|
|
224
|
+
tabs_persistence_2286::a_missing_empty_or_malformed_tabs_json_starts_with_no_tabs: 2286
|
|
189
225
|
|
|
190
226
|
# ── expected_red (#2164) ───────────────────────────────────────────────────
|
|
191
227
|
# Hand-derived from a REAL run of the sealed suite against origin/main at the
|
|
@@ -326,6 +362,41 @@ expected_red:
|
|
|
326
362
|
- tabs_discoverability_2287::close_menu_item_closes_the_right_clicked_tab_and_no_other
|
|
327
363
|
- tabs_discoverability_2287::pin_tab_promotes_a_preview_tab_without_changing_count_or_order
|
|
328
364
|
- tabs_discoverability_2287::pin_tab_is_hidden_or_inert_on_an_already_pinned_tab
|
|
365
|
+
# #2286 — OBSERVED, not intended. Taken from real runs of the sealed suite
|
|
366
|
+
# (`cd tui && RUSTC_BOOTSTRAP=1 cargo test --test acceptance --features
|
|
367
|
+
# test-support -- -Z unstable-options --format json`, the driver command in
|
|
368
|
+
# coordinator.yml) at authoring time: of this slice's 9 ids, the same 7
|
|
369
|
+
# FAILED and the same 2 passed on three consecutive full-suite runs and on
|
|
370
|
+
# three slice-filtered runs. Every one of the 7 died on a §6 clause — four on
|
|
371
|
+
# "nothing was restored" (no strip renders after seeding `tabs.json`), three
|
|
372
|
+
# on "no such file exists after opening tabs" — never on a harness
|
|
373
|
+
# precondition; verified by reading the panic line of every failure. The
|
|
374
|
+
# suite's other 6 failures (audit_1039, plans_detail_1122) are PRE-EXISTING:
|
|
375
|
+
# a `--skip tabs_persistence_2286` baseline run on the same commit reproduces
|
|
376
|
+
# exactly those 6, so this slice's sandboxed `HOME` (finding 14) is not
|
|
377
|
+
# destabilising them. The 2 that passed are deliberately ABSENT below:
|
|
378
|
+
#
|
|
379
|
+
# * `a_missing_empty_or_malformed_tabs_json_starts_with_no_tabs` — the
|
|
380
|
+
# CONTROL. Green today for the degenerate reason that nothing is ever
|
|
381
|
+
# loaded, and it must STAY green once loading lands: an implementation
|
|
382
|
+
# that `unwrap()`s the parse (panic) or best-effort restores the
|
|
383
|
+
# well-formed prefix of a truncated file breaks exactly this test, which
|
|
384
|
+
# is §6 bullet 4's whole point. Listing it would make its inevitable pass
|
|
385
|
+
# a HARD FAILURE.
|
|
386
|
+
# * `a_scope_whose_documents_are_all_pruned_starts_with_no_tabs` — a
|
|
387
|
+
# RATCHET, §6 bullet 3's second branch ("if none survive, start with no
|
|
388
|
+
# tabs"). Green today because nothing renders at all; it becomes a real
|
|
389
|
+
# constraint the moment restore lands, since an implementation that
|
|
390
|
+
# renders a dead tab, or keeps a pruned document active and paints its
|
|
391
|
+
# label, fails it.
|
|
392
|
+
2286:
|
|
393
|
+
- tabs_persistence_2286::three_board_tabs_are_saved_to_tabs_json_in_strip_order_with_the_active_tab
|
|
394
|
+
- tabs_persistence_2286::a_preview_tab_is_saved_as_the_scopes_preview_slot
|
|
395
|
+
- tabs_persistence_2286::board_tabs_are_restored_from_tabs_json_after_a_restart
|
|
396
|
+
- tabs_persistence_2286::a_restored_preview_tab_is_still_a_preview_tab
|
|
397
|
+
- tabs_persistence_2286::pipeline_tabs_are_restored_to_the_pipeline_panel_with_its_own_active_tab
|
|
398
|
+
- tabs_persistence_2286::a_document_whose_issue_is_absent_from_the_board_is_pruned_on_load
|
|
399
|
+
- tabs_persistence_2286::pruning_the_active_document_activates_a_surviving_neighbour
|
|
329
400
|
|
|
330
401
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
331
402
|
# FOR THE COORDINATOR — three findings from authoring this slice. None of them
|
|
@@ -669,3 +740,87 @@ expected_red:
|
|
|
669
740
|
# activating an open menu item; a left click on the item's own label is the
|
|
670
741
|
# only activation path any context menu in this app already documents, so that
|
|
671
742
|
# is what the slice sends.
|
|
743
|
+
# FOR THE COORDINATOR — findings from authoring the #2286 slice (contract §6).
|
|
744
|
+
# Independent of the #2282 / #2283 / #2284 / #2285 notes above; again, none is
|
|
745
|
+
# a worker's to fix by editing this suite, and none was resolved by editing the
|
|
746
|
+
# contract (a test-author may not amend one).
|
|
747
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
748
|
+
#
|
|
749
|
+
# 14. **A REAL CONSTRAINT ON #2286's IMPLEMENTATION, discovered while making §6
|
|
750
|
+
# observable: the restore must run on the FIXTURE construction path, and
|
|
751
|
+
# the coord-dir has no injectable seam.** Two facts force this:
|
|
752
|
+
#
|
|
753
|
+
# (a) The sealed suite's only way to build an app is #2281's
|
|
754
|
+
# `make_app_with_board_json` → `make_test_app`, which today sets
|
|
755
|
+
# `doc_tabs: DocTabs::default()` outright. `CoordApp::new()` is
|
|
756
|
+
# public but builds the real daemon-backed app with an EMPTY board,
|
|
757
|
+
# against which every persisted document would be pruned on load
|
|
758
|
+
# (§6: "drop any document whose issue is absent from the board") — so
|
|
759
|
+
# it structurally cannot witness a restore. If the load is wired only
|
|
760
|
+
# into real startup, the five restore/prune ids above stay red no
|
|
761
|
+
# matter how correct `doc_tabs.rs` is.
|
|
762
|
+
#
|
|
763
|
+
# (b) Every `~/.coord/…` path resolves through `std::env::var_os("HOME")`
|
|
764
|
+
# (`TuiSettings::path`, `Workspace::path`, `app::data::coord_dir`).
|
|
765
|
+
# There is no `COORD_HOME`-style override, so this slice sandboxes
|
|
766
|
+
# `HOME` to a temp dir (serialised behind a slice-global mutex,
|
|
767
|
+
# restored on drop including on panic) rather than clobbering the
|
|
768
|
+
# developer's real `~/.coord/tabs.json`. That window is
|
|
769
|
+
# process-global: while it is held, concurrently-running tests from
|
|
770
|
+
# OTHER slices see the sandboxed `HOME` too. Measured at authoring
|
|
771
|
+
# time it changes nothing — a `--skip tabs_persistence_2286` baseline
|
|
772
|
+
# reproduces exactly the same 6 pre-existing failures — but it is a
|
|
773
|
+
# latent cross-slice coupling, and it will get worse: once (a) lands,
|
|
774
|
+
# EVERY ms-65 slice's zero-tab control (`zero_doc_tabs_render_no_tab_strip`,
|
|
775
|
+
# `pipeline_with_zero_doc_tabs_renders_no_tab_strip`,
|
|
776
|
+
# `zero_tabs_render_no_close_or_overflow_glyphs`) will start reading
|
|
777
|
+
# the developer's REAL `~/.coord/tabs.json` and go red on any machine
|
|
778
|
+
# where a human has used the shipped feature.
|
|
779
|
+
#
|
|
780
|
+
# Both halves point at the same cheap fix, which is a coordinator call, not
|
|
781
|
+
# a worker's: give the coord-dir an injectable seam under
|
|
782
|
+
# `#[cfg(any(test, feature = "test-support"))]` (the exact widening this
|
|
783
|
+
# repo already applied to `resolve_board_service()` for #1039, and that
|
|
784
|
+
# finding 7 asks for on `start_data_load()`), and have the fixture path
|
|
785
|
+
# restore through it. Absent that, either the restore is untestable or the
|
|
786
|
+
# rest of ms-65's suite becomes machine-dependent.
|
|
787
|
+
#
|
|
788
|
+
# 15. Entering the Pipeline panel — finding 7's fixture-wipe blocker — did NOT
|
|
789
|
+
# bite this slice at authoring time, and the reason is worth recording:
|
|
790
|
+
# under the sandboxed `HOME` there is no `~/.coord/coord.db` to load, so
|
|
791
|
+
# `start_data_load` has nothing to overwrite the seeded board with.
|
|
792
|
+
# `pipeline_tabs_are_restored_to_the_pipeline_panel_with_its_own_active_tab`
|
|
793
|
+
# got cleanly past its `Overview` precondition and failed on its §6 clause
|
|
794
|
+
# on every run. That is a side effect of the sandbox, not a fix: finding 7
|
|
795
|
+
# stands for every other slice, and if #2286's worker moves the tab load
|
|
796
|
+
# off the `HOME` seam the protection disappears with it.
|
|
797
|
+
#
|
|
798
|
+
# 16. §6 bullet 3 says "a surviving neighbour in `tabs` (order preserved)
|
|
799
|
+
# becomes active" without pinning WHICH neighbour. §4 pins a left-neighbour
|
|
800
|
+
# rule, but that is #2283's `Ctrl-W` close gesture, and §6 does not extend
|
|
801
|
+
# it to this load-time prune. `pruning_the_active_document_activates_a_surviving_neighbour`
|
|
802
|
+
# therefore asserts only what is pinned — exactly one tab is bracketed
|
|
803
|
+
# (§2c) and it is one of the survivors — and deliberately does not pin left
|
|
804
|
+
# vs. right. Also a `TODO(test-author)` in the slice. If a specific rule was
|
|
805
|
+
# meant, it needs a contract amendment.
|
|
806
|
+
#
|
|
807
|
+
# 17. **Per-tab sub-state persistence is asserted by NOBODY.** §6's last bullet
|
|
808
|
+
# pins that the sub-tab selection is persisted ("as a string — yes") while
|
|
809
|
+
# scroll offsets may be dropped, but §6's pinned JSON shape carries no
|
|
810
|
+
# field for it: a document key is `{"repo": …, "issue": …}` and nothing
|
|
811
|
+
# more. There is therefore no pinned place to look for it in the file, and
|
|
812
|
+
# no pinned rule for what a restored tab's sub-tab is when the field is
|
|
813
|
+
# absent. Asserting it would have meant inventing a field name, so no test
|
|
814
|
+
# covers it. If it is meant to be gated by acceptance, §6's shape needs the
|
|
815
|
+
# field spelled out.
|
|
816
|
+
#
|
|
817
|
+
# Also worth knowing, not a contract problem: §6 pins that a restart restores,
|
|
818
|
+
# but not WHEN the file is written. `saved_tabs_json()` therefore reads
|
|
819
|
+
# `~/.coord/tabs.json` after the tab edits and, if it is not there yet, again
|
|
820
|
+
# after a `q` quit — so an implementation that flushes on tab mutation and one
|
|
821
|
+
# that flushes on exit both satisfy the two save-side tests; only a run that
|
|
822
|
+
# produces no file at all fails them. The file's field names (`tabs` /
|
|
823
|
+
# `active` / `preview`, and a key's `repo` / `issue`) ARE asserted as written,
|
|
824
|
+
# on §6 Note 5's own authority ("the shape above is what `coord acceptance
|
|
825
|
+
# author` will write fixtures against"; a deviation is "an amendment, not a
|
|
826
|
+
# silent implementation choice").
|