drydock-cli 2.6.146__tar.gz → 2.6.147__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.
- drydock_cli-2.6.147/.auto_release.lock +1 -0
- drydock_cli-2.6.147/OVERNIGHT_PROGRESS.md +159 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/PKG-INFO +1 -1
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/pyproject.toml +1 -1
- drydock_cli-2.6.147/research/config_base.toml +209 -0
- drydock_cli-2.6.147/research/domain_spec.md +265 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/research/experimenter.py +75 -8
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/research/kernel.py +107 -0
- drydock_cli-2.6.147/research/proposer.py +373 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/stress_babysitter.sh +1 -1
- drydock_cli-2.6.146/.auto_release.lock +0 -1
- drydock_cli-2.6.146/research/config_base.toml +0 -93
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/.claude/scheduled_tasks.lock +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/.github/CODEOWNERS +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/.github/workflows/build-and-upload.yml +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/.github/workflows/ci.yml +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/.github/workflows/issue-labeler.yml +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/.github/workflows/release.yml +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/.gitignore +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/.pre-commit-config.yaml +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/.python-version +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/.typos.toml +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/.vscode/extensions.json +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/.vscode/launch.json +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/.vscode/settings.json +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/AGENTS.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/Admiral.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/BASELINE_412.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/CHANGELOG.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/CLAUDE.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/CONTRIBUTING.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/DEPLOYMENT.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/Drydock_rebrand.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/LICENSE +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/MODEL_SHORTCOMINGS.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/NOTICE +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/OVERNIGHT_REPORT_2026_04_13.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/PRD.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/README.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/action.yml +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/baseline_history/README.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/baseline_history/results1.tsv +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/baseline_history/results13.tsv +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/baseline_history/results14.tsv +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/baseline_history/results15.tsv +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/baseline_history/results16.tsv +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/baseline_history/results17.tsv +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/baseline_history/results18.tsv +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/baseline_history/results19.tsv +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/baseline_history/results2.tsv +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/baseline_history/results20.tsv +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/baseline_history/results3.tsv +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/baseline_history/results4.tsv +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/baseline_history/results5.tsv +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/baseline_history/results6.tsv +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/baseline_history/results7.tsv +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/baseline_history/results8.tsv +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/baseline_history/results9.tsv +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/baseline_history/results_evolved_v1.tsv +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/distribution/zed/LICENSE +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/distribution/zed/extension.toml +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/distribution/zed/icons/mistral_vibe.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/docs/README.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/docs/acp-setup.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/docs/proxy-setup.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/acp/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/acp/acp_agent_loop.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/acp/acp_logger.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/acp/entrypoint.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/acp/tools/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/acp/tools/base.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/acp/tools/builtins/bash.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/acp/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/acp/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/acp/tools/builtins/todo.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/acp/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/acp/tools/session_update.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/acp/utils.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/admiral/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/admiral/detectors.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/admiral/history.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/admiral/interventions.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/admiral/llm_analyzer.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/admiral/metrics.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/admiral/opus_escalator.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/admiral/persistence.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/admiral/policy.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/admiral/proposer.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/admiral/stager.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/admiral/task_classifier.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/admiral/tuning.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/admiral/validator.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/admiral/worker.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/autocompletion/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/autocompletion/base.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/autocompletion/path_completion.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/autocompletion/slash_command.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/cli.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/clipboard.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/commands.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/entrypoint.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/history_manager.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/plan_offer/adapters/http_whoami_gateway.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/plan_offer/decide_plan_offer.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/plan_offer/ports/whoami_gateway.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/terminal_setup.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/ansi_markdown.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/app.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/app.tcss +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/external_editor.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/handlers/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/handlers/event_handler.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/notifications/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/notifications/adapters/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/notifications/adapters/textual_notification_adapter.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/notifications/ports/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/notifications/ports/notification_port.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/approval_app.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/banner/banner.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/banner/petit_chat.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/braille_renderer.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/chat_input/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/chat_input/body.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/chat_input/completion_manager.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/chat_input/completion_popup.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/chat_input/container.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/chat_input/text_area.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/checkpoint_picker.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/compact.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/config_app.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/context_progress.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/load_more.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/loading.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/messages.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/no_markup_static.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/path_display.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/proxy_setup_app.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/question_app.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/session_picker.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/spinner.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/status_message.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/teleport_message.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/tool_widgets.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/tools.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/widgets/vscode_compat.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/windowing/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/windowing/history.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/windowing/history_windowing.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/textual_ui/windowing/state.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/update_notifier/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/update_notifier/adapters/filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/update_notifier/adapters/github_update_gateway.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/update_notifier/adapters/pypi_update_gateway.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/update_notifier/ports/update_cache_repository.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/update_notifier/ports/update_gateway.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/update_notifier/update.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/cli/update_notifier/whats_new.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/agent_loop.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/agents/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/agents/manager.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/agents/models.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/auth/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/auth/crypto.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/auth/github.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/autocompletion/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/autocompletion/completers.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/autocompletion/file_indexer/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/autocompletion/file_indexer/ignore_rules.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/autocompletion/file_indexer/indexer.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/autocompletion/file_indexer/store.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/autocompletion/file_indexer/watcher.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/autocompletion/fuzzy.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/autocompletion/path_prompt.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/autocompletion/path_prompt_adapter.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/build_orchestrator.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/checkpoint.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/config/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/config/_settings.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/config/doctor.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/config/harness_files/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/config/harness_files/_harness_manager.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/config/harness_files/_paths.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/consultant.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/drydock_states.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/hooks.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/llm/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/llm/backend/anthropic.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/llm/backend/base.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/llm/backend/factory.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/llm/backend/generic.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/llm/backend/mistral.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/llm/backend/reasoning_adapter.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/llm/backend/vertex.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/llm/exceptions.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/llm/format.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/llm/message_utils.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/llm/types.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/logger.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/middleware.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/output_formatters.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/paths/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/paths/_drydock_home.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/paths/_local_config_walk.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/paths/conventions.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/plan_session.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/plugins.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/programmatic.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/prompts/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/prompts/builder.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/prompts/cli.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/prompts/compact.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/prompts/dangerous_directory.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/prompts/diagnostic.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/prompts/explore.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/prompts/gemma4.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/prompts/planner.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/prompts/project_context.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/prompts/tests.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/proxy_setup.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/session/agent_memory.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/session/checkpoints.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/session/session_loader.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/session/session_logger.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/session/session_migration.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/session/state_file.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/session_checker.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/skills/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/skills/manager.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/skills/models.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/skills/parser.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/slug.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/system_prompt.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/telemetry/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/telemetry/send.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/teleport/errors.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/teleport/git.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/teleport/nuage.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/teleport/teleport.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/teleport/types.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/base.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/_task_manager.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/ask_user_question.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/bash.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/cron.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/exit_plan_mode.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/glob_tool.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/grep.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/invoke_skill.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/lsp.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/mcp_resources.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/notebook_edit.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/powershell.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/ask_user_question.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/bash.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/cron.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/glob.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/grep.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/invoke_skill.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/lsp.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/mcp_resources.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/notebook_edit.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/powershell.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/read_file.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/search_replace.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/swe_bench.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/task.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/task_manager.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/todo.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/tool_search.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/webfetch.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/websearch.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/worktree.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/prompts/write_file.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/read_file.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/search_replace.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/task.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/todo.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/tool_search.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/webfetch.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/websearch.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/worktree.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/builtins/write_file.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/injection_guard.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/manager.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/mcp/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/mcp/registry.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/mcp/tools.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/mcp_sampling.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/ui.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/tools/utils.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/trusted_folders.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/types.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/core/utils.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/setup/onboarding/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/setup/onboarding/base.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/setup/onboarding/onboarding.tcss +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/setup/onboarding/screens/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/setup/onboarding/screens/api_key.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/setup/onboarding/screens/choice.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/setup/onboarding/screens/local_model.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/setup/onboarding/screens/welcome.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/setup/trusted_folders/trust_folder_dialog.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/setup/trusted_folders/trust_folder_dialog.tcss +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/api-design/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/audit-tests/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/batch/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/commit-code/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/context-summary/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/create-presentation/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/deep-research/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/deploy/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/diff-review/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/doc-gen/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/explain-code/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/explore-code/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/fix-issue/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/git-ops/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/init-project/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/investigate/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/loop/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/migrate/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/perf-analyze/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/plan-impl/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/pr-review/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/refactor/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/regex-help/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/review/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/security-review/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/ship/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/simplify/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/strong-tests/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/skills/test-verify/SKILL.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock/whats_new.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock-acp.spec +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/drydock_terms.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/flake.lock +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/flake.nix +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/research/README.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/research/mini_prd.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/research/mini_prompts.txt +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/research/results.tsv +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/README.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/admiral_probe.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/audit_sampler.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/auto_generate_tests.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/auto_release.sh +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/auto_test_loop.sh +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/backup.sh +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/bump_version.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/comprehensive_loop.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/deploy_to_github.sh +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/discover_cli_tools.sh +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/evolve_tests.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/gen_2000_prompts.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/install.sh +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/llm_balancer.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/mega_loop.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/meta_ralph_loop.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/monitor_swebench.sh +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/monitor_test_battery.sh +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/notify_release.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/oss_task_harness.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/overnight_agents_test.sh +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/poll_issues.sh +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/port_task.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/prepare_release.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/publish_to_pypi.sh +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/ralph_loop.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/session_loop_audit.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/shakedown.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/shakedown_interactive.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/shakedown_regression.sh +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/shakedown_suite.sh +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/shakedown_variance.sh +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/stress_prompts_50.txt +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/stress_prompts_realuser.txt +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/stress_prompts_tool_agent.txt +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/stress_prompts_tool_agent_2000.txt +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/stress_shakedown.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/stress_telegram_status.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/stress_watcher.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/telegram_bot.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/test_bank.sh +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/test_full.sh +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/test_smoke.sh +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/test_tui_path.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/tui_test.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/scripts/vllm_failover.sh +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/acp/conftest.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/acp/test_acp.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/acp/test_agent_thought.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/acp/test_bash.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/acp/test_compact_session_updates.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/acp/test_content.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/acp/test_initialize.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/acp/test_list_sessions.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/acp/test_load_session.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/acp/test_multi_session.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/acp/test_new_session.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/acp/test_proxy_setup_acp.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/acp/test_read_file.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/acp/test_search_replace.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/acp/test_set_config_option.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/acp/test_set_mode.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/acp/test_set_model.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/acp/test_tool_call_session_update.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/acp/test_utils.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/acp/test_write_file.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/autocompletion/test_file_indexer.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/autocompletion/test_fuzzy.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/autocompletion/test_path_completer_fuzzy.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/autocompletion/test_path_completer_recursive.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/autocompletion/test_path_completion_controller.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/autocompletion/test_path_prompt_transformer.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/autocompletion/test_slash_command_controller.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/autocompletion/test_ui_chat_autocompletion.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/backend/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/backend/data/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/backend/data/fireworks.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/backend/data/mistral.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/backend/test_anthropic_adapter.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/backend/test_backend.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/backend/test_reasoning_adapter.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/backend/test_vertex_anthropic_adapter.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/cli/plan_offer/adapters/fake_whoami_gateway.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/cli/plan_offer/test_decide_plan_offer.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/cli/plan_offer/test_http_whoami_gateway.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/cli/test_bell_notifications.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/cli/test_braille_renderer.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/cli/test_clipboard.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/cli/test_commands.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/cli/test_copy_shortcuts.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/cli/test_external_editor.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/cli/test_no_markup_static.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/cli/test_question_app.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/cli/test_spinner.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/cli/test_switching_mode.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/cli/test_ui_clipboard_notifications.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/cli/test_ui_session_incremental_renderer.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/cli/test_ui_session_resume.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/cli/test_ui_skill_dispatch.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/cli/textual_ui/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/cli/textual_ui/test_session_picker.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/conftest.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/core/test_agents.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/core/test_auth_crypto.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/core/test_auth_github.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/core/test_config_load_dotenv.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/core/test_config_paths.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/core/test_config_resolution.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/core/test_file_logging.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/core/test_plan_session.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/core/test_proxy_setup.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/core/test_slug.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/core/test_telemetry_send.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/core/test_teleport_git.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/core/test_teleport_nuage.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/core/test_teleport_service.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/core/test_trusted_folders.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/core/test_utils.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/e2e/common.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/e2e/conftest.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/e2e/mock_server.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/e2e/test_cli_tui_onboarding.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/e2e/test_cli_tui_streaming.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/e2e/test_cli_tui_tool_approval.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/fixtures/doc_qa_system_prd.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/mock/__init__.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/mock/mock_backend_factory.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/mock/mock_entrypoint.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/mock/utils.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/onboarding/test_run_onboarding.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/onboarding/test_ui_onboarding.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/session/test_session_loader.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/session/test_session_logger.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/session/test_session_migration.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/skills/conftest.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/skills/test_manager.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/skills/test_models.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/skills/test_parser.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_collapsed.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_ask_user_question/test_snapshot_ask_user_question_expanded.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_basic_conversation/test_snapshot_shows_basic_conversation.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_code_block_horizontal_scrolling/test_snapshot_allows_horizontal_scrolling_for_long_code_blocks.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_empty_assistant_before_reasoning/test_snapshot_empty_assistant_removed_when_reasoning_starts.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_accept_edits_mode.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_auto_approve_mode.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_to_plan_mode.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_cycle_wraps_to_default.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_modes/test_snapshot_default_mode.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_pending.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_parallel_tool_calls/test_snapshot_parallel_tool_calls_resolved.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_cancel_discards_changes.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_edit_existing_values.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_empty.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_initial_with_values.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_error.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_proxy_setup/test_snapshot_proxy_setup_save_new_values.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_answer_first_advance.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_first_answered_checkmark.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_initial.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_left_wraps.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_navigate_right.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_question_tab_to_second.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_initial.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_mixed_selection.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_navigate_to_submit.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_other_with_text.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_first.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_toggle_multiple.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_multi_select_untoggle.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_initial.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_down.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_other.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_to_third_option.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_navigate_up_wraps.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_question_app/test_snapshot_question_app_other_typing.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_buffered_reasoning_yields_before_content.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_interleaved_reasoning.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_reasoning_content/test_snapshot_shows_reasoning_content_expanded.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_release_update_notification/test_snapshot_shows_release_update_notification.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_session_resume/test_snapshot_shows_resumed_session_messages.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_partial.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_streaming_tool_call/test_snapshot_tool_call_updated.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_cancel_selected.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_multiple_commits.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_push_confirmation_single_commit.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_complete.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_auth_required.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_checking_git.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_complete.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_error.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_pushing.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_sending_token.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_teleport/test_snapshot_teleport_status_starting_workflow.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_no_plan_message.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_switch_message.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_upgrade_message.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/__snapshots__/test_ui_snapshot_whats_new/test_snapshot_shows_whats_new_message.svg +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/base_snapshot_test_app.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/conftest.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/snap_compare.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_ask_user_question.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_basic_conversation.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_code_block_horizontal_scrolling.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_empty_assistant_before_reasoning.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_modes.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_parallel_tool_calls.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_proxy_setup.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_question_app.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_reasoning_content.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_release_update_notification.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_session_resume.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_streaming_tool_call.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_teleport.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/snapshots/test_ui_snapshot_whats_new.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/stubs/fake_backend.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/stubs/fake_client.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/stubs/fake_tool.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_admiral.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_admiral_phase3.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_agent_auto_compact.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_agent_backend.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_agent_observer_streaming.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_agent_stats.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_agent_tasks.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_agent_tool_call.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_agents.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_bank_build.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_bank_debug.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_bank_multiagent.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_bank_prd.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_bank_prd_extended.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_bank_tools.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_bank_update.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_build_projects.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_checkpoint.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_cli_programmatic_preload.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_current_bugs.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_drydock_regression.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_drydock_tasks.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_full_regression.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_history_manager.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_integration.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_issue_fixes.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_loop_detection.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_message_id.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_message_merging.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_middleware.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_multi_agent.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_real_failures.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_real_issues.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_real_workflow.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_reasoning_content.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_smoke.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_system_prompt.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_tagged_text.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_tool_args.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_ui_external_editor.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_ui_input_history.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_user_issues.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/test_workloads.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/testbank_helpers.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/tools/test_ask_user_question.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/tools/test_bash.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/tools/test_exit_plan_mode.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/tools/test_grep.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/tools/test_invoke_context.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/tools/test_manager_get_tool_config.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/tools/test_mcp.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/tools/test_mcp_sampling.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/tools/test_task.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/tools/test_ui_bash_execution.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/tools/test_webfetch.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/tools/test_websearch.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/update_notifier/adapters/fake_update_cache_repository.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/update_notifier/adapters/fake_update_gateway.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/update_notifier/test_do_update.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/update_notifier/test_filesystem_update_cache_repository.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/update_notifier/test_github_update_gateway.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/update_notifier/test_pypi_update_gateway.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/update_notifier/test_ui_update_notification.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/update_notifier/test_update_use_case.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/tests/update_notifier/test_whats_new.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/uv.lock +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/worked_examples/README.md +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/worked_examples/cli_subcommand_dispatch.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/worked_examples/lookup.json +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/worked_examples/sql_parser.py +0 -0
- {drydock_cli-2.6.146 → drydock_cli-2.6.147}/worked_examples/tree_walking_interpreter.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2652274
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Overnight Progress — 2026-04-20 → 2026-04-21
|
|
2
|
+
|
|
3
|
+
Drop-in status doc so a fresh Claude session (after disconnect) can
|
|
4
|
+
resume without relearning the last 24 hours. **Read this first, then
|
|
5
|
+
`git log --oneline -20` + `TaskList` for full picture.**
|
|
6
|
+
|
|
7
|
+
## What landed today (in order)
|
|
8
|
+
|
|
9
|
+
| Commit | What | Where it lives |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| 3cb957e | pexpect-buffer trim, banner detect, ESC+/clear, force-reset, checkpoint filter | scripts/ |
|
|
12
|
+
| f363ae1 | `DRYDOCK_AUTO_CONTINUE_DISABLE` env gate for agent_loop auto-Continue | drydock/core/agent_loop.py |
|
|
13
|
+
| 2e0431e | Admiral actuator via SIGUSR1 — watcher asks harness to recycle TUI | scripts/stress_watcher.py + stress_shakedown.py |
|
|
14
|
+
| 5c76801 | Wipe cwd down to fixtures on fresh stress start | scripts/stress_shakedown.py |
|
|
15
|
+
| aafa090 | **should_break_loop dead-code fix** — user turns actually end on text responses | drydock/core/agent_loop.py:876 |
|
|
16
|
+
| 1508c1b | SessionWatcher reads drydock's configured save_dir (was hardcoded ~/.drydock) | scripts/shakedown_interactive.py |
|
|
17
|
+
| c77c2e0 | Hourly stress_babysitter cron | scripts/stress_babysitter.sh + crontab |
|
|
18
|
+
| 0ae9d07 | Karpathy-autoresearch scaffold | research/ (kernel.py, experimenter.py, config_base.toml, mini_*) |
|
|
19
|
+
| 11cfe89 | Todo loop fix (#10) + Check 0 empty-result detector + realuser prompts + raw-md detector | drydock/core/tools/builtins/todo.py, agent_loop.py, scripts/ |
|
|
20
|
+
| fd7a160 | v2.6.145 release | PyPI + GitHub |
|
|
21
|
+
| aad7ac6 | Admiral sees raw-markdown leakage; DEPLOYMENT.md baseline | scripts/stress_watcher.py, DEPLOYMENT.md, README.md |
|
|
22
|
+
| 553926a | v2.6.146 release | PyPI + GitHub |
|
|
23
|
+
|
|
24
|
+
## Long-running processes (DO NOT KILL without checking)
|
|
25
|
+
|
|
26
|
+
| PID | Process | Notes |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| 2625579 | stress_shakedown (v10 restart #1) | auto-restarted by babysitter at 02:00 UTC after original died. Resuming from step 866. |
|
|
29
|
+
| child of 2625579 | drydock TUI | Recycled periodically by admiral actuator |
|
|
30
|
+
| 2366908 or newer | stress_watcher (v10) | Paired with current stress PID |
|
|
31
|
+
| 2251231 | admiral_probe on :8878 | Read-only dashboard endpoint |
|
|
32
|
+
| 1230765 | llm_balancer on :8001 | DO NOT KILL — proxies to vLLM, shared |
|
|
33
|
+
| cron | stress_babysitter.sh hourly | Auto-restarts stress if PID dies |
|
|
34
|
+
|
|
35
|
+
**v10 progress summary** (as of ~03:00 UTC 2026-04-21):
|
|
36
|
+
- Original run: reached idx 972/1658 (59%) with done=866, skip=105, recycle=72 — died at ~21:00 UTC
|
|
37
|
+
- Restart #1: resumed from step 866, currently at idx ~921, done=50, skip=5, recycle=3
|
|
38
|
+
- Net cumulative: ~920/1658, acceptance rate still ~95%
|
|
39
|
+
- Babysitter fired once (telegram sent), admiral actuator firing per run
|
|
40
|
+
|
|
41
|
+
## Meta-Harness integration — in progress
|
|
42
|
+
|
|
43
|
+
User approved the scope at ~03:00 local and asked for overnight build.
|
|
44
|
+
See `research/domain_spec.md` for the full design (just written).
|
|
45
|
+
|
|
46
|
+
**Approved mutation surface:**
|
|
47
|
+
- `drydock/core/prompts/gemma4.md` (system prompt)
|
|
48
|
+
- `drydock/core/prompts/cli.md` (alternate prompt)
|
|
49
|
+
- admiral knob TOML (existing 7 numerics in `config_base.toml`)
|
|
50
|
+
- `scripts/stress_shakedown.py` threshold constants
|
|
51
|
+
(MAX_CONSECUTIVE_SKIPS_BEFORE_RESET, SESSION_RESET_EVERY, retry windows)
|
|
52
|
+
- `drydock/admiral/detectors.py` thresholds + patterns
|
|
53
|
+
|
|
54
|
+
**Approved frozen:**
|
|
55
|
+
- `drydock/core/agent_loop.py` (just stabilized, too risky)
|
|
56
|
+
- Tool implementations
|
|
57
|
+
- Provider config
|
|
58
|
+
- Core stress harness flow (pexpect loop, session tracking)
|
|
59
|
+
|
|
60
|
+
**Approved budget:**
|
|
61
|
+
- Per candidate: 20-min mini-stress (50 prompts) as search-set, 5-min kernel as held-out smoke
|
|
62
|
+
- Per 24 hr: up to ~30 candidates
|
|
63
|
+
- Full 1658-prompt stress is quarterly regression only
|
|
64
|
+
|
|
65
|
+
**Remaining overnight tasks:**
|
|
66
|
+
1. [in progress] Expand `config_base.toml` mutation surface (tasks #16)
|
|
67
|
+
2. [pending] Trace capture in `kernel.py` — save per-run artifacts to `research/traces/<exp_id>/` (task #17)
|
|
68
|
+
3. [pending] `research/proposer.py` — Opus-backed proposer (task #18)
|
|
69
|
+
4. [pending] `--proposer opus` flag in `experimenter.py` (task #19)
|
|
70
|
+
5. [pending] Commit + let auto_release ship (task #20)
|
|
71
|
+
|
|
72
|
+
**NOT running the experimenter overnight** — it would share vLLM with
|
|
73
|
+
v10 stress and starve both. Scaffolded ready-to-launch.
|
|
74
|
+
|
|
75
|
+
## Known issues to investigate (user-reported, not yet fixed)
|
|
76
|
+
|
|
77
|
+
### 2026-04-21 03:xx user reports drydock crash with 15+ API errors
|
|
78
|
+
|
|
79
|
+
User's quote:
|
|
80
|
+
```
|
|
81
|
+
✓ Read 0 line from prepare.py (truncated)
|
|
82
|
+
✓ Read 66 lines from prepare.py
|
|
83
|
+
✓ Read 66 lines from prepare.py
|
|
84
|
+
✓ Read 630 lines from train.py
|
|
85
|
+
✓ Read 19 lines from AGENTS.md
|
|
86
|
+
|
|
87
|
+
[6 consecutive API errors (round 1/3). Compacting and retrying. Last error: API error
|
|
88
|
+
from vllm (model: gemma4): LLM backend error [vllm]
|
|
89
|
+
status: 400 Bad Request
|
|
90
|
+
...]
|
|
91
|
+
|
|
92
|
+
[Stopping: 15+ API errors. The model cannot process this request.]
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Plus drydock self-diagnoses: "You've written prepare.py 4 times this session.
|
|
96
|
+
If the file is oscillating Fix this before moving to the next file."
|
|
97
|
+
|
|
98
|
+
**This is the production version of the exact wedge pattern the stress
|
|
99
|
+
harness fixes.** Production drydock hits 400s, auto-compacts 2-3 times,
|
|
100
|
+
then gives up at 15+ errors. It DOES have recovery — the compaction
|
|
101
|
+
fires — but 15 errors in a row means compaction isn't finding enough
|
|
102
|
+
context to shrink.
|
|
103
|
+
|
|
104
|
+
**Root cause hypothesis:**
|
|
105
|
+
- User's session accumulated large read_file results (train.py 630 lines
|
|
106
|
+
is substantial), plus prepare.py written 4 times = 4 copies of the file
|
|
107
|
+
content in history.
|
|
108
|
+
- Auto-compact at 120000 tokens doesn't fire because the issue isn't
|
|
109
|
+
raw token count, it's a single turn's payload exceeding vLLM's 131K
|
|
110
|
+
context limit.
|
|
111
|
+
- Compaction per-attempt only truncates old tool results; doesn't
|
|
112
|
+
dedupe repeat writes to the same file.
|
|
113
|
+
|
|
114
|
+
**Fix hypothesis (for tomorrow's session):**
|
|
115
|
+
- `_prune_duplicate_writes` already exists in `drydock/core/agent_loop.py`
|
|
116
|
+
but only fires when the hard-block trips on a write_file call. Extend
|
|
117
|
+
it to fire on ANY `write_file` call where the target already has ≥3
|
|
118
|
+
prior write_file entries in history.
|
|
119
|
+
- Lower emergency-compact aggressiveness: when a 400 arrives, drop
|
|
120
|
+
middle-of-history message runs even if recent, not just oldest
|
|
121
|
+
truncation. The "keep first user + last 5" fallback is already there
|
|
122
|
+
(lines 834-846 of agent_loop.py).
|
|
123
|
+
- Consider: hard-cap read_file results at 32KB per call regardless of
|
|
124
|
+
`max_read_bytes` config when the session has had >50k tokens of
|
|
125
|
+
tool results already.
|
|
126
|
+
|
|
127
|
+
**NOT fixing overnight** — this is in `agent_loop.py` which is marked
|
|
128
|
+
frozen for the meta-harness integration AND just got stabilized
|
|
129
|
+
yesterday. Investigate + propose fix in morning session.
|
|
130
|
+
|
|
131
|
+
## Auto-release state
|
|
132
|
+
|
|
133
|
+
**Paused flag:** NOT set. Auto-release cron fires at 0/6/12/18 UTC.
|
|
134
|
+
Next fire: 06:00 UTC (~03:00 local). Any commits before then ship in
|
|
135
|
+
v2.6.147.
|
|
136
|
+
|
|
137
|
+
**Version:** local == v2.6.146 (tagged fd7a160, aad7ac6 shipped).
|
|
138
|
+
|
|
139
|
+
## Monitoring for connection loss
|
|
140
|
+
|
|
141
|
+
If this Claude session disconnects:
|
|
142
|
+
|
|
143
|
+
1. **v10 stress continues** — babysitter cron handles restarts. Check
|
|
144
|
+
`/tmp/stress_babysitter.log` and `~/.drydock/logs/admiral_history.log`.
|
|
145
|
+
2. **Meta-harness files** are committed incrementally. `git log --oneline`
|
|
146
|
+
shows progress. Any staged-but-uncommitted changes are lost, but the
|
|
147
|
+
`domain_spec.md` alone is enough to resume.
|
|
148
|
+
3. **No orphan processes** — all long-running jobs are daemonized via
|
|
149
|
+
`nohup + disown`, they survive my death.
|
|
150
|
+
|
|
151
|
+
## For the next session (morning handoff)
|
|
152
|
+
|
|
153
|
+
- Read `research/domain_spec.md` for the full design.
|
|
154
|
+
- `git log --oneline fd7a160..HEAD` for commits since v2.6.145.
|
|
155
|
+
- Check v10 state: `tail /tmp/stress_babysitter.log`.
|
|
156
|
+
- Check meta-harness progress: `ls research/`, look for `proposer.py`
|
|
157
|
+
and `traces/` — if both exist, the overnight build finished.
|
|
158
|
+
- **Priority for morning:** investigate the prepare.py-loop / 400-error
|
|
159
|
+
wedge the user reported. Hypothesized fixes above.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drydock-cli
|
|
3
|
-
Version: 2.6.
|
|
3
|
+
Version: 2.6.147
|
|
4
4
|
Summary: Local-first CLI coding agent — tested with Gemma 4 26B via vLLM
|
|
5
5
|
Project-URL: Homepage, https://github.com/fbobe321/drydock
|
|
6
6
|
Project-URL: Repository, https://github.com/fbobe321/drydock
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# Baseline for the research experimenter.
|
|
2
|
+
#
|
|
3
|
+
# The knob array defines which admiral tunables the experimenter is
|
|
4
|
+
# allowed to mutate. Bounds mirror drydock/admiral/tuning.py::KNOB_BOUNDS
|
|
5
|
+
# exactly — if that file changes, mirror the change here. The kernel
|
|
6
|
+
# validates bounds before writing admiral_tuning.json, so malformed
|
|
7
|
+
# mutations fail fast rather than silently hitting admiral's clip.
|
|
8
|
+
#
|
|
9
|
+
# The experimenter NEVER edits this file. It writes to
|
|
10
|
+
# research/config_best.toml on improvement. Swap this file's values
|
|
11
|
+
# manually when you want to re-seed the search from a new baseline.
|
|
12
|
+
#
|
|
13
|
+
# FROZEN (NOT mutable — verified by experimenter before apply):
|
|
14
|
+
# - drydock/core/agent_loop.py (just stabilized 2026-04-19; untouchable)
|
|
15
|
+
# - Tool implementations (drydock/core/tools/)
|
|
16
|
+
# - Provider config
|
|
17
|
+
# - Core stress harness flow (scripts/stress_shakedown.py::run main loop)
|
|
18
|
+
#
|
|
19
|
+
# MUTABLE surface (what the Opus proposer may change):
|
|
20
|
+
# - Admiral knobs (the [[knob]] array below)
|
|
21
|
+
# - Env flags (the [env_flags] section below)
|
|
22
|
+
# - Stress harness thresholds (the [harness_thresholds] section below)
|
|
23
|
+
# - Admiral detector thresholds (the [admiral_detectors] section below)
|
|
24
|
+
# - System prompts (the [prompts] section below — paths to override files)
|
|
25
|
+
#
|
|
26
|
+
# The experimenter writes prompt overrides to:
|
|
27
|
+
# research/candidates/<exp_id>/prompts/<name>.md
|
|
28
|
+
# and the kernel mounts them under the isolated HOME's prompt dir.
|
|
29
|
+
|
|
30
|
+
[target]
|
|
31
|
+
# admiral_tuning.json keys off (model, task). The kernel writes an entry
|
|
32
|
+
# under this tuple when spawning drydock. Pick values that match what
|
|
33
|
+
# admiral will classify stress-harness runs as.
|
|
34
|
+
model = "mistral-vibe-cli-latest"
|
|
35
|
+
task = "unknown"
|
|
36
|
+
|
|
37
|
+
# -----------------------------------------------------------------
|
|
38
|
+
# Admiral knobs — bounded numeric tunables that affect agent_loop.
|
|
39
|
+
# -----------------------------------------------------------------
|
|
40
|
+
|
|
41
|
+
[[knob]]
|
|
42
|
+
name = "per_prompt_budget_sec"
|
|
43
|
+
default = 300
|
|
44
|
+
min = 300
|
|
45
|
+
max = 3600
|
|
46
|
+
mutable = true
|
|
47
|
+
why = "Hard ceiling on a single user turn. Too low wastes work; too high lets loops run wild."
|
|
48
|
+
|
|
49
|
+
[[knob]]
|
|
50
|
+
name = "hard_stop_tool_calls"
|
|
51
|
+
default = 100
|
|
52
|
+
min = 30
|
|
53
|
+
max = 250
|
|
54
|
+
mutable = true
|
|
55
|
+
why = "HARD_STOP_CALLS in agent_loop. Cap on tool-call depth per user turn."
|
|
56
|
+
|
|
57
|
+
[[knob]]
|
|
58
|
+
name = "wrap_up_warn_at"
|
|
59
|
+
default = 40
|
|
60
|
+
min = 10
|
|
61
|
+
max = 100
|
|
62
|
+
mutable = true
|
|
63
|
+
why = "First progressive nudge. Earlier = tighter turns, may lose quality."
|
|
64
|
+
|
|
65
|
+
[[knob]]
|
|
66
|
+
name = "stop_now_warn_at"
|
|
67
|
+
default = 60
|
|
68
|
+
min = 20
|
|
69
|
+
max = 150
|
|
70
|
+
mutable = true
|
|
71
|
+
why = "Second progressive nudge. Gemma often ignores the wrap-up; this is the harder prod."
|
|
72
|
+
|
|
73
|
+
[[knob]]
|
|
74
|
+
name = "temperature"
|
|
75
|
+
default = 0.3
|
|
76
|
+
min = 0.0
|
|
77
|
+
max = 0.9
|
|
78
|
+
mutable = true
|
|
79
|
+
why = "Sampling temperature. Lower = more deterministic; higher = more exploration."
|
|
80
|
+
|
|
81
|
+
[[knob]]
|
|
82
|
+
name = "loop_detector_window"
|
|
83
|
+
default = 3
|
|
84
|
+
min = 2
|
|
85
|
+
max = 6
|
|
86
|
+
mutable = true
|
|
87
|
+
why = "How many consecutive identical tool calls trigger the loop advisor."
|
|
88
|
+
|
|
89
|
+
[[knob]]
|
|
90
|
+
name = "struggle_threshold"
|
|
91
|
+
default = 20
|
|
92
|
+
min = 10
|
|
93
|
+
max = 40
|
|
94
|
+
mutable = true
|
|
95
|
+
why = "Reads-without-a-write before admiral fires the struggle directive."
|
|
96
|
+
|
|
97
|
+
# -----------------------------------------------------------------
|
|
98
|
+
# Environment flags — binary toggles the kernel sets in the TUI env.
|
|
99
|
+
# -----------------------------------------------------------------
|
|
100
|
+
|
|
101
|
+
[env_flags]
|
|
102
|
+
DRYDOCK_AUTO_CONTINUE_DISABLE = "1" # options: "0", "1"
|
|
103
|
+
|
|
104
|
+
# -----------------------------------------------------------------
|
|
105
|
+
# System prompt overrides. When `source_path` is set, the kernel
|
|
106
|
+
# copies that file into the isolated HOME's prompt dir. When the
|
|
107
|
+
# proposer mutates a prompt it writes to
|
|
108
|
+
# research/candidates/<exp_id>/prompts/<name>.md
|
|
109
|
+
# and points the corresponding source_path here.
|
|
110
|
+
# -----------------------------------------------------------------
|
|
111
|
+
|
|
112
|
+
[prompts.gemma4]
|
|
113
|
+
# Leave source_path empty to use the production gemma4.md shipped in
|
|
114
|
+
# the installed drydock package. Opus proposer may replace this with
|
|
115
|
+
# a candidate-local path.
|
|
116
|
+
source_path = ""
|
|
117
|
+
mutable = true
|
|
118
|
+
why = "Single highest-leverage mutable target. Governs how Gemma 4 interprets every turn."
|
|
119
|
+
|
|
120
|
+
[prompts.cli]
|
|
121
|
+
source_path = ""
|
|
122
|
+
mutable = true
|
|
123
|
+
why = "Alternate non-Gemma system prompt. Rarely the right target but available for cross-model experiments."
|
|
124
|
+
|
|
125
|
+
# -----------------------------------------------------------------
|
|
126
|
+
# Stress harness threshold constants. These are hardcoded in
|
|
127
|
+
# scripts/stress_shakedown.py today. The kernel reads them from here
|
|
128
|
+
# via env overrides (DRYDOCK_STRESS_*) and the harness respects the
|
|
129
|
+
# overrides if set, falling back to the source defaults otherwise.
|
|
130
|
+
# -----------------------------------------------------------------
|
|
131
|
+
|
|
132
|
+
[[harness_threshold]]
|
|
133
|
+
name = "MAX_CONSECUTIVE_SKIPS_BEFORE_RESET"
|
|
134
|
+
default = 2
|
|
135
|
+
min = 1
|
|
136
|
+
max = 5
|
|
137
|
+
mutable = true
|
|
138
|
+
why = "Force ESC+/clear after N consecutive SKIPs. Lower = aggressive recycling; higher = tolerant of transient wedges."
|
|
139
|
+
|
|
140
|
+
[[harness_threshold]]
|
|
141
|
+
name = "SESSION_RESET_EVERY"
|
|
142
|
+
default = 15
|
|
143
|
+
min = 5
|
|
144
|
+
max = 50
|
|
145
|
+
mutable = true
|
|
146
|
+
why = "Periodic /clear cadence in prompts. Tight cadence bounds context but costs reset overhead every N prompts."
|
|
147
|
+
|
|
148
|
+
[[harness_threshold]]
|
|
149
|
+
name = "SEND_PROMPT_RETRY_COUNT"
|
|
150
|
+
default = 3
|
|
151
|
+
min = 1
|
|
152
|
+
max = 6
|
|
153
|
+
mutable = true
|
|
154
|
+
why = "How many times send_prompt_and_confirm re-types before marking SKIP. Each retry is ~120s."
|
|
155
|
+
|
|
156
|
+
[[harness_threshold]]
|
|
157
|
+
name = "SEND_PROMPT_WAIT_PER_RETRY_SEC"
|
|
158
|
+
default = 120
|
|
159
|
+
min = 30
|
|
160
|
+
max = 300
|
|
161
|
+
mutable = true
|
|
162
|
+
why = "Seconds to wait for user-msg confirmation before retyping. Tighter = faster SKIP, may miss slow prompts."
|
|
163
|
+
|
|
164
|
+
# -----------------------------------------------------------------
|
|
165
|
+
# Admiral detector thresholds. Currently hardcoded in
|
|
166
|
+
# drydock/core/agent_loop.py and drydock/admiral/detectors.py.
|
|
167
|
+
# Surface as env vars (DRYDOCK_ADMIRAL_*) that the detectors check
|
|
168
|
+
# at init.
|
|
169
|
+
# -----------------------------------------------------------------
|
|
170
|
+
|
|
171
|
+
[[admiral_detector]]
|
|
172
|
+
name = "REPEAT_WARNING_THRESHOLD"
|
|
173
|
+
default = 4
|
|
174
|
+
min = 2
|
|
175
|
+
max = 8
|
|
176
|
+
mutable = true
|
|
177
|
+
why = "Consecutive identical tool calls before a WARNING. Lower = early nudge; higher = tolerant of legit repetition."
|
|
178
|
+
|
|
179
|
+
[[admiral_detector]]
|
|
180
|
+
name = "REPEAT_FORCE_STOP_THRESHOLD"
|
|
181
|
+
default = 8
|
|
182
|
+
min = 4
|
|
183
|
+
max = 20
|
|
184
|
+
mutable = true
|
|
185
|
+
why = "Consecutive identical tool calls before FORCE_STOP. Must be >= REPEAT_WARNING_THRESHOLD."
|
|
186
|
+
|
|
187
|
+
[[admiral_detector]]
|
|
188
|
+
name = "EMPTY_RESULT_THRESHOLD"
|
|
189
|
+
default = 3
|
|
190
|
+
min = 2
|
|
191
|
+
max = 6
|
|
192
|
+
mutable = true
|
|
193
|
+
why = "Check 0 (empty-result loop). Fire FORCE_STOP after N identical-call + empty-result in a row."
|
|
194
|
+
|
|
195
|
+
[[admiral_detector]]
|
|
196
|
+
name = "SAME_TOOL_NAME_REPEAT_LIMIT_BASH"
|
|
197
|
+
default = 5
|
|
198
|
+
min = 3
|
|
199
|
+
max = 10
|
|
200
|
+
mutable = true
|
|
201
|
+
why = "Same-tool repetition limit for bash. Different from read/grep which need more headroom."
|
|
202
|
+
|
|
203
|
+
[[admiral_detector]]
|
|
204
|
+
name = "SAME_TOOL_NAME_REPEAT_LIMIT_READ"
|
|
205
|
+
default = 7
|
|
206
|
+
min = 4
|
|
207
|
+
max = 12
|
|
208
|
+
mutable = true
|
|
209
|
+
why = "Same-tool repetition limit for read_file + grep. Investigation tools legitimately repeat more."
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
# Domain Spec: drydock stress harness
|
|
2
|
+
|
|
3
|
+
Produced per stanford-iris-lab/meta-harness ONBOARDING.md template.
|
|
4
|
+
First-cut spec; refine as the proposer exposes failure modes the
|
|
5
|
+
current evaluation set doesn't distinguish.
|
|
6
|
+
|
|
7
|
+
## Domain Summary
|
|
8
|
+
|
|
9
|
+
**What the user is trying to improve:** drydock's acceptance rate,
|
|
10
|
+
throughput, and user-visible reliability on stress workloads. Stable
|
|
11
|
+
measurable symptoms from today's feedback session include todo-loops,
|
|
12
|
+
text-only turns that don't close, unrendered markdown blobs, and
|
|
13
|
+
skip-clusters on heavy prompts.
|
|
14
|
+
|
|
15
|
+
**Unit of evaluation:** one stress run of 50 prompts against a
|
|
16
|
+
pre-bootstrapped `tool_agent` package, hard-capped at 20 minutes. The
|
|
17
|
+
kernel-5min variant (25 prompts, 5 min cap) is the held-out smoke
|
|
18
|
+
test — fast signal, higher variance.
|
|
19
|
+
|
|
20
|
+
**Fixed components:**
|
|
21
|
+
- Base model: Gemma 4 26B-A4B-it-AWQ-4bit (served by vLLM on
|
|
22
|
+
`localhost:8000/v1`, `tool-call-parser gemma4`,
|
|
23
|
+
`enable-auto-tool-choice`, temperature 0.2, thinking high).
|
|
24
|
+
- drydock core: `drydock/core/agent_loop.py` (stabilized 2026-04-19
|
|
25
|
+
after dead-code `should_break_loop` fix), tool implementations,
|
|
26
|
+
provider layer, `_check_tool_call_repetition` flow.
|
|
27
|
+
- Stress infrastructure: `research/kernel.py`, `research/mini_prd.md`,
|
|
28
|
+
`research/mini_prompts.txt`, `scripts/stress_shakedown.py`'s
|
|
29
|
+
core loop (pexpect spawn / send / confirm / idle-wait).
|
|
30
|
+
|
|
31
|
+
**Allowed to change (mutation surface):**
|
|
32
|
+
- `drydock/core/prompts/gemma4.md` (Gemma-tuned system prompt —
|
|
33
|
+
currently the single highest-leverage mutable target).
|
|
34
|
+
- `drydock/core/prompts/cli.md` (alternate prompt).
|
|
35
|
+
- `research/config_best.toml` admiral knobs (7 bounded numerics:
|
|
36
|
+
per_prompt_budget_sec, hard_stop_tool_calls, wrap_up_warn_at,
|
|
37
|
+
stop_now_warn_at, temperature, loop_detector_window,
|
|
38
|
+
struggle_threshold).
|
|
39
|
+
- `scripts/stress_shakedown.py` threshold constants
|
|
40
|
+
(MAX_CONSECUTIVE_SKIPS_BEFORE_RESET, SESSION_RESET_EVERY,
|
|
41
|
+
retry windows). NOT the main pexpect loop.
|
|
42
|
+
- `drydock/admiral/detectors.py` thresholds + patterns (Check 0
|
|
43
|
+
empty-result match list, consecutive-empty-read escalation).
|
|
44
|
+
|
|
45
|
+
**Budget:**
|
|
46
|
+
- Per candidate: ~20 min (mini-stress 50 prompts) for search-set
|
|
47
|
+
evaluation; 5 min kernel for held-out smoke.
|
|
48
|
+
- Per 24 hr: up to ~30 candidates. Overnight ceiling prevents
|
|
49
|
+
vLLM starvation when v10-class long stress runs are active.
|
|
50
|
+
- Full 1658-prompt stress used only for quarterly regression. Not
|
|
51
|
+
a per-candidate metric.
|
|
52
|
+
|
|
53
|
+
## Harness and Search Plan
|
|
54
|
+
|
|
55
|
+
**Candidate harness interface:** A candidate is expressed as a
|
|
56
|
+
`research/candidates/<exp_id>/` directory holding:
|
|
57
|
+
- a `config.toml` (admiral knobs in the format
|
|
58
|
+
`research/config_base.toml` already defines),
|
|
59
|
+
- optional `gemma4.md` / `cli.md` override files,
|
|
60
|
+
- optional `stress_shakedown.patch` (unified diff against the
|
|
61
|
+
frozen main branch's `scripts/stress_shakedown.py` — applied
|
|
62
|
+
only to the kernel's isolated copy, never to source).
|
|
63
|
+
|
|
64
|
+
The kernel spawns drydock with `HOME=<tmpdir>/home/` so admiral
|
|
65
|
+
tuning + config isolation Just Works. Prompt overrides mount over
|
|
66
|
+
`$HOME/.drydock/prompts/`.
|
|
67
|
+
|
|
68
|
+
Interface compliance test: a candidate passes the interface check
|
|
69
|
+
iff `kernel.py --config <candidate>/config.toml --validate-only`
|
|
70
|
+
loads clean.
|
|
71
|
+
|
|
72
|
+
**Useful helpers that should exist from the start:**
|
|
73
|
+
- `research/proposer.py` — Opus/Claude API client that reads source +
|
|
74
|
+
recent traces + results.tsv, proposes mutations.
|
|
75
|
+
- `research/kernel.py` — already in place; needs trace capture
|
|
76
|
+
extension (this task).
|
|
77
|
+
- `research/experimenter.py` — already in place; needs `--proposer
|
|
78
|
+
opus` mode (this task).
|
|
79
|
+
- `research/query_traces.py` — small CLI for inspecting prior
|
|
80
|
+
candidates ("show best by metric", "diff candidate A vs B",
|
|
81
|
+
"show failures with >N timeouts").
|
|
82
|
+
|
|
83
|
+
**First search loop:**
|
|
84
|
+
1. Warm-start: seed `config_best.toml` with current production
|
|
85
|
+
config (admiral knobs that `~/.drydock/config.toml` + admiral
|
|
86
|
+
defaults use).
|
|
87
|
+
2. Run 5 random-search candidates to sanity-check the kernel
|
|
88
|
+
produces stable metrics.
|
|
89
|
+
3. Switch experimenter to `--proposer opus`. First pass: contrast
|
|
90
|
+
top-3 vs bottom-3 results, propose one diff per round.
|
|
91
|
+
4. Continue until random ceiling is clearly exceeded.
|
|
92
|
+
|
|
93
|
+
## Evaluation Plan
|
|
94
|
+
|
|
95
|
+
**Search set:** `scripts/stress_prompts_tool_agent_2000.txt` head-50
|
|
96
|
+
and `scripts/stress_prompts_realuser.txt` head-50. Combined into a
|
|
97
|
+
fixed `research/search_prompts_50.txt` to keep comparability.
|
|
98
|
+
|
|
99
|
+
**Held-out test:** Tail-50 prompts from each file, never shown to
|
|
100
|
+
the proposer during search. Only used for final validation of the
|
|
101
|
+
promoted winner before shipping to `~/.drydock/config.toml` or
|
|
102
|
+
`gemma4.md`. `research/holdout_prompts_50.txt`.
|
|
103
|
+
|
|
104
|
+
**Primary metric:**
|
|
105
|
+
```
|
|
106
|
+
effective_rate = done_per_minute with cliff at >50% skip+timeout rate
|
|
107
|
+
```
|
|
108
|
+
(already defined in `kernel.py::run_kernel`). Higher is better.
|
|
109
|
+
|
|
110
|
+
**Secondary metrics:**
|
|
111
|
+
- `recycles_per_100_prompts` — how often admiral had to force-recycle
|
|
112
|
+
the TUI. Lower is better.
|
|
113
|
+
- `rss_peak_mb` — pexpect buffer health proxy.
|
|
114
|
+
- `raw_markdown_hits` — from the rec-check diagnostic; non-zero
|
|
115
|
+
means TUI rendering leaked.
|
|
116
|
+
- `avg_assistant_ratio` — `assistant_msgs / user_msgs` in session
|
|
117
|
+
log. Healthy range 1.5–3.5; high ratios indicate Continue-loops
|
|
118
|
+
or multi-turn runaway.
|
|
119
|
+
|
|
120
|
+
**Noise:** moderate. vLLM latency varies by GPU load, Gemma 4
|
|
121
|
+
sampling has temperature-variance. **Replicate winners N=3 times**
|
|
122
|
+
before promoting — see ONBOARDING.md's "how noisy" question. Single
|
|
123
|
+
sample gates an experiment into a "short-list"; a median-of-3 gate
|
|
124
|
+
is required to overwrite `config_best.toml`.
|
|
125
|
+
|
|
126
|
+
**Per-candidate runtime:** 20 min mini-stress, hard-capped. Plus
|
|
127
|
+
~10 s experimenter overhead. ~20.5 min/candidate round-trip.
|
|
128
|
+
|
|
129
|
+
**Leakage / contamination risks:**
|
|
130
|
+
- Prompts in the search set will be seen by the proposer via
|
|
131
|
+
traces. Prompts in the held-out set will NOT. Proposer context
|
|
132
|
+
filter enforces this.
|
|
133
|
+
- The mini_prd.md package bootstrap happens once; repeated runs
|
|
134
|
+
against the same pre-built package are fine because admiral
|
|
135
|
+
knobs + prompts don't depend on file contents.
|
|
136
|
+
- `drydock/admiral/persistence.py` caches tuning across runs; the
|
|
137
|
+
kernel's isolated HOME already addresses this (each run writes
|
|
138
|
+
its own `admiral_tuning.json`).
|
|
139
|
+
|
|
140
|
+
## Baselines
|
|
141
|
+
|
|
142
|
+
**Obvious hand-written baselines:**
|
|
143
|
+
1. **Current production config:** `~/.drydock/config.toml` as checked
|
|
144
|
+
into `DEPLOYMENT.md` (2026-04-20). System prompt `ralph`, temp 0.2,
|
|
145
|
+
thinking high, per_prompt_budget_sec 300, hard_stop 100,
|
|
146
|
+
wrap_up_warn_at 40, stop_now_warn_at 60.
|
|
147
|
+
2. **`research/config_base.toml` defaults:** the explicit mutation
|
|
148
|
+
surface's defaults. Matches production within a point or two.
|
|
149
|
+
3. **"Continue-loop disabled":** flip `DRYDOCK_AUTO_CONTINUE_DISABLE=1`
|
|
150
|
+
for comparison. Known to help text-only prompts.
|
|
151
|
+
4. **"Lower temperature":** temperature 0.1. Gemma 4's tool-call
|
|
152
|
+
reliability improves at low temp; hypothesis worth baselining.
|
|
153
|
+
|
|
154
|
+
**Strongest current harness:** Production config + 2026-04-20 fixes
|
|
155
|
+
(aafa090 should_break_loop, 11cfe89 empty-result detector, todo tool
|
|
156
|
+
escalation). This is the beat-target.
|
|
157
|
+
|
|
158
|
+
**Reusable helper functions available from the start:**
|
|
159
|
+
- `research/kernel.py::run_kernel` — isolated-HOME stress runner.
|
|
160
|
+
- `research/kernel.py::_looks_empty` (Check 0 in admiral) — empty-
|
|
161
|
+
pattern matcher.
|
|
162
|
+
- `scripts/stress_shakedown.py::_count_raw_markdown_leakage` — TUI
|
|
163
|
+
rendering health check.
|
|
164
|
+
- `drydock/admiral/persistence.py::TUNING_PATH` — admiral knob
|
|
165
|
+
store (isolated per kernel via HOME override).
|
|
166
|
+
|
|
167
|
+
## Experience and Logging
|
|
168
|
+
|
|
169
|
+
**Offline warm-start experience:**
|
|
170
|
+
- `~/.vibe/logs/session/session_*/messages.jsonl` — every real
|
|
171
|
+
drydock session from 2026-03 onward. ~9300 sessions. Used by the
|
|
172
|
+
proposer to ground "what failure modes actually occur" context.
|
|
173
|
+
- `~/.drydock/logs/admiral_history.log` — admiral intervention
|
|
174
|
+
history. Long-form trace of every stress-alert + stress-action.
|
|
175
|
+
- `/tmp/stress_2000_v10*.log` — recent stress harness logs with
|
|
176
|
+
~800 prompts of first-run progress + hourly babysitter restart
|
|
177
|
+
data.
|
|
178
|
+
- `CLAUDE.md` — this project's design-decision log; proposer
|
|
179
|
+
should read it before proposing anything destabilizing. Already
|
|
180
|
+
describes why `agent_loop.py` is frozen, why thinking is
|
|
181
|
+
adaptive, why non-streaming for Gemma 4, etc.
|
|
182
|
+
|
|
183
|
+
**Encoded references for proposer context:**
|
|
184
|
+
- `DEPLOYMENT.md` — known-working config baseline.
|
|
185
|
+
- `research/domain_spec.md` — this file.
|
|
186
|
+
- `drydock/core/agent_loop.py` (read-only) — the proposer must know
|
|
187
|
+
the loop structure to avoid proposing mutations that would trip
|
|
188
|
+
invariants.
|
|
189
|
+
|
|
190
|
+
**Per-candidate online experience:**
|
|
191
|
+
- `research/traces/<exp_id>/messages.jsonl` — session log
|
|
192
|
+
copy at run end.
|
|
193
|
+
- `research/traces/<exp_id>/tui.log` — pexpect PTY output.
|
|
194
|
+
- `research/traces/<exp_id>/rec_check.jsonl` — extracted rec-check
|
|
195
|
+
lines + raw_md counts.
|
|
196
|
+
- `research/traces/<exp_id>/summary.json` — metric, counts, config
|
|
197
|
+
hash, git commit, elapsed, note.
|
|
198
|
+
|
|
199
|
+
**Metadata preserved:**
|
|
200
|
+
- Full mutation diff from `config_best.toml`.
|
|
201
|
+
- Git commit of drydock tree at kernel-invoke time.
|
|
202
|
+
- Wall-clock start/end timestamps.
|
|
203
|
+
- vLLM reachability ping before and after.
|
|
204
|
+
|
|
205
|
+
**Directory structure:**
|
|
206
|
+
```
|
|
207
|
+
research/
|
|
208
|
+
├── README.md
|
|
209
|
+
├── domain_spec.md ← this file
|
|
210
|
+
├── config_base.toml ← frozen baseline + mutation surface
|
|
211
|
+
├── config_best.toml ← current best, experimenter-managed
|
|
212
|
+
├── results.tsv ← append-only experiment log
|
|
213
|
+
├── kernel.py ← fixed 5-min runner
|
|
214
|
+
├── experimenter.py ← search orchestrator
|
|
215
|
+
├── proposer.py ← NEW: Opus-backed proposer
|
|
216
|
+
├── query_traces.py ← NEW: trace inspection CLI
|
|
217
|
+
├── mini_prd.md
|
|
218
|
+
├── mini_prompts.txt
|
|
219
|
+
├── search_prompts_50.txt ← NEW: search-set
|
|
220
|
+
├── holdout_prompts_50.txt ← NEW: held-out
|
|
221
|
+
├── candidates/ ← NEW: promoted variants archive
|
|
222
|
+
│ └── <exp_id>/
|
|
223
|
+
│ ├── config.toml
|
|
224
|
+
│ ├── gemma4.md (if mutated)
|
|
225
|
+
│ └── summary.json
|
|
226
|
+
├── staged/ ← in-flight variants (experimenter writes)
|
|
227
|
+
└── traces/ ← per-run artifacts
|
|
228
|
+
└── <exp_id>/
|
|
229
|
+
├── messages.jsonl
|
|
230
|
+
├── tui.log
|
|
231
|
+
├── rec_check.jsonl
|
|
232
|
+
└── summary.json
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
**Query CLI (`query_traces.py`) — planned commands:**
|
|
236
|
+
- `best` — show top-5 candidates by metric
|
|
237
|
+
- `diff <exp_id_a> <exp_id_b>` — show config + mutation diff
|
|
238
|
+
- `failures --min-timeouts 3` — list runs with >N timeouts
|
|
239
|
+
- `context --top 3 --bottom 3` — produce proposer context bundle
|
|
240
|
+
|
|
241
|
+
## Open Questions and Unknowns
|
|
242
|
+
|
|
243
|
+
- **Opus API budget.** We haven't measured per-proposal token cost.
|
|
244
|
+
Estimate: ~40k input (source + traces) + ~2k output. At Opus
|
|
245
|
+
pricing that's ~$0.75/proposal. 30 candidates/day → ~$22.50/day.
|
|
246
|
+
Should we cap at $10/day? (Easy to add.)
|
|
247
|
+
- **Replication strategy for the cliff.** Current metric has a binary
|
|
248
|
+
cliff at 50% failure. Replicating a near-cliff candidate 3 times
|
|
249
|
+
can produce high variance. May need a continuous-decay penalty
|
|
250
|
+
instead of a hard cliff. Revisit after first 20 candidates.
|
|
251
|
+
- **Held-out leakage via the proposer's own context.** If the
|
|
252
|
+
proposer reads `CLAUDE.md` and `CLAUDE.md` indirectly describes
|
|
253
|
+
the held-out prompts (it currently doesn't, but future edits
|
|
254
|
+
might), leakage risk emerges. Policy: held-out prompts never
|
|
255
|
+
appear in any file the proposer reads.
|
|
256
|
+
- **Unfreezing `scripts/stress_shakedown.py` fully.** Currently only
|
|
257
|
+
threshold constants are mutable. If the proposer argues for a
|
|
258
|
+
deeper change (e.g., a new recovery primitive), do we allow it?
|
|
259
|
+
Default: no; require human review + manual merge. `unknown` for
|
|
260
|
+
now.
|
|
261
|
+
- **What happens to `config_best.toml` if the proposer proposes a
|
|
262
|
+
diff that doesn't apply cleanly.** Default: drop the proposal,
|
|
263
|
+
log rejection, don't penalize the proposer's "score." `unknown`
|
|
264
|
+
whether we want to feed rejection back to the proposer as a
|
|
265
|
+
learning signal.
|