The gateway no longer shares an image with the worker, so the
worker image needs to be pulled explicitly. Previously both used
claw-telegram:latest which was already present from the gateway.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove claw-profile-worker from Dockerfile (no longer built or shipped)
- Remove hardcoded entrypoint/cmd in docker_worker_manager.rs (let
the worker image's own CMD run)
- Clear entrypoint override in Unraid worker templates
- Point CLAW_GATEWAY_WORKER_IMAGE to claw-ts-worker:latest in both
XML templates and template manager test fixture
The gateway now launches claw-ts-worker containers instead of
claw-profile-worker. The TS worker uses @anthropic-ai/sdk directly
and speaks the same HTTP/SSE protocol.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Update Unraid XML templates and template manager to default
CLAW_GATEWAY_WORKER_IMAGE to git.wylab.me/wylab/claw-ts-worker:latest
instead of the old Rust worker image.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move all worker-facing record types (TaskListRecord, RuntimeTaskRecord,
TeamRecord, MailboxSummary, FeedItemRecord, LibraryAppRecord, etc.)
into protocol-owned mirrors in records.rs. The gateway and worker_client
now use these protocol types instead of importing from the runtime crate.
Add worker-protocol/ with OpenAPI spec and JSON schemas as the
language-neutral contract authority for the gateway-worker boundary.
This is the migration surface for the TS worker replacement.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Previewable files (HTML, MD, code, JSON, etc.) now open in
the Telegram Mini App instead of being uploaded as raw files.
Images and binaries still use Telegram upload.
- Add is_previewable() classifier for ~40 text/code extensions
- Add artifact registry with TTL-based expiry
- Add /miniapp/api/artifacts/:turn_id/:file_id proxy endpoint
- Add /miniapp/view/:turn_id/:file_id viewer with auto-auth
- Route previewable artifacts to "View in Mini App" web_app button
- Extract fetch_generated_file() for raw byte + content-type access
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The `home` crate v0.5.12 requires the edition2024 Cargo feature,
which was stabilized in Rust 1.85.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Publishes to git.wylab.me container registry on push to main/codex/**
branches. Includes Unraid DockerMan XML template with bot token, owner
ID, and Anthropic API key configuration.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add MCP structured degraded-startup classification (P2.10):
- classify MCP failures as startup/handshake/config/partial
- expose failed_servers + recovery_recommendations in tool output
- add mcp_degraded output field with server_name, failure_mode, recoverable
Canonical lane event schema (P2.7):
- add LaneEventName variants for all lifecycle states
- wire LaneEvent::new with full 3-arg signature (event, status, emitted_at)
- emit typed events for Started, Blocked, Failed, Finished
Fix let mut executor for search test binary
Fix lane_completion unused import warnings
Note: mcp_stdio::manager_discovery_report test has pre-existing failure on clean main, unrelated to this commit.
Workspace-wide verification now preflights the current branch against main so stale or diverged branches surface missing commits before broad cargo tests run. The lane failure taxonomy is also collapsed to the blocker classes the roadmap lane needs so automation can branch on a smaller, stable set of categories.
Constraint: Broad workspace tests should not run when main is ahead and would produce stale-branch noise
Rejected: Run workspace tests unconditionally | makes stale-branch failures indistinguishable from real regressions
Confidence: medium
Scope-risk: moderate
Reversibility: clean
Directive: Keep workspace-test preflight scoped to broad test commands until command classification grows more precise
Tested: cargo test -p runtime stale_branch -- --nocapture; cargo test -p tools lane_failure_taxonomy_normalizes_common_blockers -- --nocapture; cargo test -p tools bash_workspace_tests_are_blocked_when_branch_is_behind_main -- --nocapture; cargo test -p tools bash_targeted_tests_skip_branch_preflight -- --nocapture
Not-tested: clean worktree cargo test --workspace still fails on pre-existing rusty-claude-cli tests default_permission_mode_uses_project_config_when_env_is_unset and single_word_slash_command_names_return_guidance_instead_of_hitting_prompt_mode
Implement automatic lane completion detection:
- detect_lane_completion(): checks session-finished + tests-green + pushed
- evaluate_completed_lane(): triggers CloseoutLane + CleanupSession actions
- 6 tests covering all conditions
Bridges the gap where LaneContext::completed was a passive bool
that nothing automatically set. Now completion is auto-detected.
ROADMAP P1.3 marked done.