Promote v0.16.0 to production#686
Merged
Merged
Conversation
#648) Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
…655) Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
…URL is set (#649) Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
…lic edge (#647) Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
…inishes (#658) Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
Prevent recent/pinned tasks from painting under the user menu by clipping the middle flex region, using padding instead of margin for height math, and giving the footer a solid card background. Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: Daniel Riccio <57051444+daniel-lxs@users.noreply.github.com>
… summary (#663) Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
…ng repos (#631) * fix: restore Docker worker public egress during workspace prep Stop blackholing the Docker bridge gateway as a host route. Drop only packets destined to the gateway so host hairpin stays blocked while git clone and other public HTTPS work again under control-network isolation. * fix: make egress helper script valid shell and grant NET_RAW for iptables-legacy The gateway-drop block was joined with spaces instead of newlines, which produced a shell syntax error and would have failed every control-network spawn inside the egress helper. Join the block with newlines and add a unit test that parses the generated script with `sh -n`. The helper also needs CAP_NET_RAW on top of CAP_NET_ADMIN: the worker image forces iptables-legacy, which opens a raw socket that NET_ADMIN alone does not permit. Both capabilities are in Docker's default set. The integration test checked the iptables rule via `docker exec` in the worker container, but the worker drops NET_ADMIN/NET_RAW and the test image has no iptables binary; check the rule through a helper container sharing the worker's network namespace instead. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix: heal stale gateway blackhole on upgrade and harden gateway drop Remove any gateway blackhole route left in a retained worker netns by a pre-upgrade controller, so standby workers heal on policy re-apply instead of requiring container recreation. Mirror the gateway drop in FORWARD to keep the forwarded-traffic coverage the route blackhole used to provide. Integration test now asserts real public egress (ip route get never sends a packet) and exercises the upgrade-healing path by injecting the legacy route and re-applying the policy. Document the iptables requirement for custom worker images in SELF_HOSTING.md. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Daniel Riccio <57051444+daniel-lxs@users.noreply.github.com> Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
…hannels (#662) * feat: add user-defined custom automations Allow admins to create scheduled agent runs with a prompt, cadence, required environment, and report destination channel. * fix: show custom automation name in task attribution Use the user-entered custom automation name from actorDisplayName instead of the generic "Custom Automation" label. * fix: custom automation schedule, claim race, Teams URL, tests - Apply the 3am local-hour gate only to daily/weekly cadences - Atomically claim launches via launchClaimedAt fencing - Resolve Teams service URLs before enqueue - Fix AutomationsSettings render mocks for custom automations * fix: fence custom automation finalize and label cost rows - Only clear launchClaimedAt / write lastLaunchedTaskId when the actor still owns the claim fencing token - Pass actorDisplayName on cost analytics rows so custom automations group by name --------- Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
* fix(bullmq): recover stale preparing task runs * test(bullmq): pin stale worker query status scope
Co-authored-by: Daniel Riccio <57051444+daniel-lxs@users.noreply.github.com>
…667) * feat: add Azure DevOps CI Failure Triage for default-branch builds Wire build.complete webhooks and Manual Run now into the shared launch core, ensure the project-scoped service hook, and document ADO support. * fix: inspect latest completed ADO build without failed-only filter Manual Run now can observe a newer green default-branch tip before deciding whether to launch triage; failed-result handling stays in the job. * fix(ci-triage): update badge test for ADO and prefer innermost failed timeline records The capability-badge test now expects two 'GitHub · GitLab · Azure DevOps only' badges since ci_failure_triage joins conflict_resolver. Failure evidence keeps failed Task records over cascaded Job/Stage/Phase wrappers so duplicate parent logs do not crowd the record cap. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * refactor(ado): surface credential rejections from build inspection getLatestAdoBuild now throws on 203/401/403 so manual Run now reports a credential problem in result.errors instead of logging the misleading 'latest build is not failed' skip; only 404 (unknown project/repository) maps to null. Rename the shared timeout to ADO_BUILD_INSPECTION_TIMEOUT_MS since it also bounds the latest-build lookup, and fold normalizeAdoDefaultBranch onto stripAdoGitRef. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix: keep independent ADO timeline failure leaves for evidence Select innermost failed records via parent links so a peer job-level failure is retained when another job already has a failed task. --------- Co-authored-by: Daniel Riccio <57051444+daniel-lxs@users.noreply.github.com> Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
…accept null timeline fields (#672) Live smoke testing against a real Azure DevOps org surfaced two gaps in the CI Failure Triage integration: - Subscriptions defaulted to resourceVersion 1.0, which delivers the legacy XAML build shape (status only — no result, sourceBranch, sourceVersion, repository, or project), so the build.complete handler skipped every real delivery as a non-failure. Pin the hook to 2.0, which sends the modern Build resource. Existing 1.0 subscriptions self-heal on the next repo sync because ensure PUT-refreshes them. - Real timeline records carry explicit "log": null / "issues": null on wrapper and pending records; the schema rejected them and the whole evidence fetch failed with a ZodError. Accept nullish values. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
* feat: allow Suggest Ideas to deliver via sticky Telegram topics Make Telegram a first-class Suggest Ideas destination that auto-creates and reuses a recurring forum topic, without a thread picker. * chore: fix knip unused exports after Suggest Ideas Telegram work * fix: keep Telegram suggester destinations off Slack metadata Only attach Slack channel fields for Slack destinations, and merge sticky Telegram topic ids when settings saves race first delivery. * feat: add Teams as a first-class Suggest Ideas destination Offer Teams · primary conversation alongside Slack, Discord, and Telegram so Suggest Ideas covers all chat surfaces and no longer shows a limited-comms badge. --------- Co-authored-by: Roomote <roomote@roomote.dev> Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
#670) Co-authored-by: Daniel Riccio <57051444+daniel-lxs@users.noreply.github.com>
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
* feat: add Bitbucket CI Failure Triage for default-branch pipelines * fix: ignore non-Pipeline Bitbucket commit statuses in CI triage * fix: mock Bitbucket commit-status handler in webhook router tests Importing the real handler pulls SDK/db graph into the router suite and fails-when @roomote/db/server is only partially mocked. * fix(bitbucket): mock commit-status handler in router tests, update badge test, surface scope rejections Review fixes for the Bitbucket CI Failure Triage PR: - Mock ../handleCommitStatus in the router tests so its import chain does not break the narrow @roomote/db/server mock, and add a routing test for repo:commit_status_updated. - The capability-badge test now expects one 'GitHub - GitLab - Azure DevOps only' badge (conflict_resolver) and one four-provider badge for ci_failure_triage. - Pipeline lookups throw on 401/403 with a pipeline-scope hint instead of returning null: every existing deployment's OAuth consumer predates the pipeline scope, and a missing scope must not read as 'no failed pipeline' (same treatment ADO got in #667). 404 still maps to null. - New pipeline/step schemas accept explicit nulls on nested objects; real provider APIs send them where mocks never do (the #672 timeline lesson). - Document the 20-pipeline scan cap in getBitbucketPipelineByBuildNumber. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix: require Bitbucket host on commit-status pipeline URLs Only extract a Pipelines identity when the status URL host matches the configured Bitbucket instance, so external CI URLs with a pipelines/results path cannot open triage for فص an unrelated Pipeline number. * fix(bitbucket): request step logs as application/octet-stream Bitbucket's pipeline step log endpoint responds 406 Not Acceptable to Accept: text/plain, which silently degraded every failure evidence block to "Log trace unavailable." Request the log as application/octet-stream (the content type Bitbucket actually serves) and make the test mock enforce the 406 behavior. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Daniel Riccio <57051444+daniel-lxs@users.noreply.github.com> Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…s run is active (#680)
…utomation report threads (#682)
…automation framing from reports (#683) * [Fix] Use the custom automation's name in the report footer and drop automation framing from reports The root-footer refresh resolved its label from the initiator key via the built-in automation registry, so custom automation threads rendered 'Created via the custom automation automation'; resolve the automation's own name from the run payload marker instead. The anchored prompt now also tells the agent to write the report as the result itself, without mentioning the automation or the request; the footer already carries the attribution. * [Fix] Resolve the custom automation footer label across sibling runs Resume runs do not copy customAutomationId into their payloads, so an arbitrary findFirst could return a resume row and leave the footer on the raw-key fallback. Scan the task's runs oldest first and take the marker from whichever payload carries it. --------- Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
Contributor
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.
Promote v0.16.0
Frozen at
63d49472fb8d25b66b4d1a947aacb6b2f275be5a— the commit where0.16.0was versioned. Commits merged todevelopafter that point ship in the next release.v0.16.0and triggers the existing GHCRv*image publish (latestchannel).release/v0.16.0branch can be deleted after this PR merges.Changelog
0.16.0 (2026-07-21)
Custom automations and wider CI triage coverage help teams automate more recurring work, with reliability improvements across task startup and integrations.
Highlights
Minor changes
Patch changes
list_issue_commentsandcreate_issue_commentfor GitHub and Gitea so agents cannot read or post PR discussion through the issue-only tool paths.