Skip to content

Sync 4.1 onto main (rebase, force-push to apply) - #648

Draft
DKuleshov wants to merge 63 commits into
releases/4.1.0from
sync/4.1-onto-main
Draft

Sync 4.1 onto main (rebase, force-push to apply)#648
DKuleshov wants to merge 63 commits into
releases/4.1.0from
sync/4.1-onto-main

Conversation

@DKuleshov

Copy link
Copy Markdown
Collaborator

Sync releases/4.1.0 onto main (rebase)

Rebases releases/4.1.0 onto main to 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:

git push --force-with-lease origin sync/4.1-onto-main:releases/4.1.0

After the force-push, everyone with a branch off releases/4.1.0 must re-rebase onto the new tip.

What this brings into 4.1 (47 commits)

Runtime / workflow / worktree fixes

CI / release

Docs

kabaogluemre and others added 30 commits June 22, 2026 13:20
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.
…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
carlospedreira and others added 23 commits July 8, 2026 14:29
…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>
…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
…604) (#615)

* feat(ui): add v4 navigation shell stylesheet + review harness

* feat(ui): serve shared CSS from Outpost and Mothership

* refactor(server): source _Layout tokens from shared stylesheet

* ci: watch shared CSS and release branches in studio-ui workflow
@DKuleshov

Copy link
Copy Markdown
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

@DKuleshov

Copy link
Copy Markdown
Collaborator Author

@carlospedreira kind reminder.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Inbox

Development

Successfully merging this pull request may close these issues.

8 participants