Recurring scheduled automations, Supporter licenses covering multi-repo workspace mode, anonymous CLI analytics, and pickup/sync/JSON robustness fixes.
Added
- Recurring scheduled automations:
.devintern-code/automations.toml(or[[automations]]in the workspace file) runs a prompt on an interval or cron through the normal task pipeline — markdown occurrence file → plan / implement /--create-pr/ review. Independent of any tracker, so an automation-only worker can run with no--query. Occurrence files land next to project state, or under the workspace home in fleet mode - Anonymous CLI usage analytics: one fire-and-forget
cli_runevent per invocation (CLI version, OS/arch, tracker type, run mode, task count, and feature flags only — never task content, code, repo names, or credentials). Opt out withDEVINTERN_TELEMETRY_DISABLED=1oranalytics.enabled: falsein.devintern-code/settings.json. A missingPOSTHOG_API_KEYat build time permanently disables analytics
Changed
- Workspace (multi-repo) mode no longer requires a Team subscription: any valid automation entitlement — including the Supporter one-time license (
solo-automation) — now runsdevintern workerin workspace mode, matching published pricing where Supporter covers automation across your own repos. The team-tier gate was removed after the existing automation license check; unlicensed and invalid-license runs still fail as before, and grace-window cached solo entitlements now qualify too
Fixed
- Jira and Azure DevOps worker pickup no longer sticks after the first attempt: the worker dedupes ready tasks by
(key, updated). Jira enhanced JQL search (GET /rest/api/3/search/jql) omittedfields, and Azure WIQL search batch-fetched titles withoutSystem.ChangedDate, so both recorded an empty stamp and never retried after a failed run — even when the ticket was edited. Jira search now requestsupdated(and the other issue fields used for routing); Azure search now fetchesSystem.ChangedDate. The worker also logs when every matching task is skipped as already processed, and warns when search results have no update stamp, so this is visible in the worker log instead of looking like the poller is idle - Failure comments say how to retrigger pickup: incomplete-implementation, crash/interrupt, and failed-feasibility comments on every hosted tracker (Jira, Linear, GitHub Issues, Azure DevOps, Asana, Trello) now tell the user to edit the description, post a comment, or delete the bot comment so the worker (or next
--queryrun) will pick the ticket up again. Markdown files do not receive tracker comments. The previous Jira incomplete text only said “update the description and retry.” - Mangled agent JSON is recovered instead of failing the run:
parseAgentJsonnow slices balanced{...}objects with a string-aware brace matcher, repairs raw control characters and unescaped quotes inside string values, and accepts a stray extra}or literal\nafter the last value — shapes grok and opencode actually emit - PR base-sync no longer skips conflicting PRs or loops forever: eligibility uses GitHub’s
mergeable_state(dirty/behind) instead of comparing against a stalebase.sha; the resolver merges the fetched base tip; three consecutive defers exhaust the event; hungresolve-conflictssubprocesses are killed afterWORKER_RESOLVE_TIMEOUT_SECONDS - Agent PRs on repos the worker no longer manages are unwatched: review polling is scoped to the detected GitHub slug (single-repo) or
workspace.tomlrepos (fleet). Foreignagent_prsrows are closed at startup and skipped on every tick, so a renamed/transferred repo cannot fail auth forever - Transient PR-creation failures retry, and GitHub create is idempotent:
fetchWithRetrytreats DNS/connect/fetch failedas transient;PRManager.createPullRequestretries transport failures; a GitHub 422 for an already-open PR on the head branch is treated as success so a blip after push no longer leaves the ticket In Progress with no PR - Scheduled automation task files resolve through project config-dir traversal: occurrence markdown is written into the nearest
.devintern-codewalking up from the run cwd (workspace automations use the workspace home), so a worker launched from a subfolder does not create a stray nested config directory