Sync 4.1 onto main (rebase, force-push to apply) - #648
Draft
DKuleshov wants to merge 63 commits into
Draft
Conversation
Test-DotbotMcpReadiness set DOTBOT_PROJECT_ROOT to the worktree path when spawning the standalone preflight MCP process. On task retry the worktree's .control junction can be stale (teardown/re-create is not atomic), so the MCP server fails to resolve runtime.json and exits before the handshake begins — the 2-attempt retry loop from #479 cannot help because the process dies pre-handshake. This also bypassed #356: Resolve-ProjectRoot returns DOTBOT_PROJECT_ROOT verbatim when set, skipping git-common-dir detection entirely. Add an optional -ProjectRoot parameter to Test-DotbotMcpReadiness and pass the main project root at the call site. The main root always has a stable .control/ directory, so runtime.json resolution keeps working on retry. Backward compatible: callers that omit -ProjectRoot fall back to the worktree path. Closes #515
Test-TaskOutput counted only files produced during the current run (delta vs baseline). On resume-after-approval the worktree already holds the artifact from the prior run, so the agent calls task_set_status(done) without re-writing files — delta is 0 and validation failed with "produced 0 new file(s)", escalating a correctly-completed task to needs-input. For non-tasks/ outputs, fall back to the absolute file count when the delta is below min_output_count: if the required files already exist, pass. tasks/ outputs keep strict delta enforcement because manifest pre-creation makes the absolute count always look satisfied. Fixes #518
Closes #487 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Set Playwright retries to 2 when running in CI (process.env.CI ? 2 : 0) in tests/e2e/playwright.config.ts to reduce transient test flakiness on CI while keeping retries disabled locally.
…vent duplicate-worktree race
…ct-root fix(runtime): use main project root for MCP preflight on task retry (#515)
…scord fix(ci): use pull_request_target so fork PRs get Discord notification
…retries fix(tests): enable Playwright CI retries to reduce flaky E2E failures
…roducts fix(product-api): surface pending-review worktree artifacts on Products page
…-after-approval fix(workflow): pass output validation on resume-after-approval (#518)
…claim-worktree fix(worktree): claim non-prompt tasks before worktree creation to prevent duplicate-worktree race
…cleanup fix(worktree): prevent zombie worktree and map leak on partial cleanup failure
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Update README lifecycle documentation for single-session task execution. Closes #458
…w-task-inverted-priority fix(process): correct inverted priority sort in Get-NextWorkflowTask
* chore(release): bump version to v4.0.2 * docs: add Mothership & Fleet Layer PRD * revert: remove PRD added to wrong branch --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
docs: add release notes for v4.0.2
…tree (#637) Write-ProcessFile and Test-ProcessStopSignal resolved BotRoot via $PWD whenever no -BotRoot was passed. During task execution, Invoke-WorkflowProcess.ps1 Push-Location's into the task's worktree, whose .bot/.control is a junction back to the canonical .control dir. Worktree teardown (Complete-TaskWorktree, Reset-TaskWorktree, Remove-OrphanWorktrees) removes that junction before removing the worktree itself, so a heartbeat write racing the teardown resolves to a path that no longer exists and silently drops after exhausting retries. Pin every process-registry write inside the worktree-scoped execution window to $botRoot, the canonical root captured once at process start and never reassigned. Thread the same canonical root through Invoke-TaskClarificationLoopIfPresent via a new -ProcessBotRoot parameter, kept separate from its existing worktree-scoped -BotRoot (used for the answers-file path). Also add a processes/ directory guard to Write-ProcessFile, mirroring Write-ProcessActivity, so a missing directory self-heals instead of failing outright. Closes #612
Collaborator
Author
|
@carlospedreira please review sync approach, we can do that exercise regularly, so that 4.1 branch is up to date with bug fixes from main. CC: @aselim31 |
Collaborator
Author
|
@carlospedreira kind reminder. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Sync releases/4.1.0 onto main (rebase)
Rebases
releases/4.1.0ontomainto pull in stabilization fixes and keep the release branch current. Dry-run rebase was conflict-free (16 commits replayed clean). Result: current main + 4.1's features, linear history.This PR is for review only. Do NOT use GitHub "Merge" - that makes a merge commit and loses the linear history. To apply, force-push after approval:
After the force-push, everyone with a branch off
releases/4.1.0must re-rebase onto the new tip.What this brings into 4.1 (47 commits)
Runtime / workflow / worktree fixes
DOTBOT_STATE_ROOT.questions_resolved).doneescalates toneeds-input.CI / release
Docs