AkurAI Build
Menu

popagent

public

Latest change b85df09c6dd4bd4131bea57298a22ad411df82f6 - Slow transient task retries to a 15 s base; document Ornith for Simulation schedules by AkurAI Build

# Changelog

All notable released changes to Popagent are documented here.

## [1.0.52] - 2026-08-16

### Fixed

- Code-index warm-ups never completed on Titan: the indexer sent 8k-token
  chunks at concurrency 3 to the local CPU embedder, every request exceeded
  the 120 s budget, and each batch was written to the failed-batches file, so
  the index database stayed empty. The embedding config now sends 2k-token
  chunks one request at a time with a 600 s budget.
- Boot-time index warm-up now covers only the default workspace; warming all
  19 registered repositories serially kept the CPU embedder saturated for
  hours and starved 9Router (502 "fetch connect timeout") and CI. Other
  workspaces warm lazily on their first semantic lookup.
- Transient task retries start at 15 s instead of 1 s (still doubling, jittered,
  capped at 5 min). While 9Router was down a task cycled four attempts in two
  minutes and logged an upstream error for each; outages last minutes.

### Changed

- The five nightly Simulation schedules run on Titan-local Ornith
  (`titan/ornith-1.0-9b-mtp-q4_k_m`); cloud quota is reserved for report, mail
  security, and self-update work.

## [1.0.51] - 2026-08-16

### Fixed

- Researchers no longer stall on a cold code-intelligence index. Every
  `codeContext`/`symbolContext`/`changeImpact` call refreshed the index
  synchronously; on a fresh self-update checkout that meant a full build on the
  local CPU embedder, so the MCP call sat for its 240 s budget and returned
  "Request timed out" while the orphaned indexer kept running. The backend now
  warms an index in the background (one repository at a time, 45 min budget),
  remembers readiness across restarts, and answers a cold or warming lookup
  immediately with "index warming — use grep/read and retry", so a tool call
  never blocks the specialist budget. Warm-ups start at server boot for every
  registered workspace and in the self-update prepare phase for the checkout.
- The tool-free handoff synthesis added in 1.0.50 sent only the generated
  turns back to the specialist, so it saw a conversation without the original
  request ("the user turn consisted only of '.'"). The research prompt now leads
  the synthesis conversation.

### Changed

- Researcher `codebase-investigation` skill: query the warm semantic index
  first (natural-language `codeContext`, then `symbolContext`/`changeImpact`),
  read files only to confirm exact lines, never sweep AGENTS/CHANGELOG or
  directory listings per request, and reserve budget for the handoff. Seeded
  idempotently and applied to the running instance.

## [1.0.50] - 2026-08-16

### Fixed

- Failed tasks no longer wait on an operator after their remediation runs.
  A remediation for `2621dcb8` diagnosed a transient research-phase failure,
  concluded "the parent can be safely retried", and had no way to retry it
  (the sandbox has no `./popagent`), so the parent sat in Needs Attention as
  `failed`. The runtime now requeues the failed parent for one more attempt
  when its remediation completes, retries a repeat failure directly while
  `attempt_count < max_attempts` (only one remediation is ever created per
  task), and dead-letters the parent once attempts are exhausted. The
  remediation prompt tells the agent the retry is automatic and that the
  sandbox has no CLI or API access, instead of pointing it at `./popagent`.
- Stopped `/api/tasks` from returning every task's full `activity` transcript.
  The list response had grown to 15.8 MB across 100 tasks (15.1 MB of it
  activity) and took over 3 s to serve, while the work board polls it every
  2 s. Responses piled up faster than they drained and the board rendered no
  data. The list query now omits `activity`; the run drawer reads the single
  task it has open through `/api/tasks/:id` and refreshes that while the task
  is still running.
- Single-flighted the work board's task poll so a slow response can no longer
  queue behind the 2 s interval.
- Stopped a model result without a chunk stream from failing the whole task
  run. Live chunks refine `onIterationComplete` reporting rather than replace
  it, so an absent stream is now skipped instead of throwing.
- Stopped self-update workflow phases from failing with `JSON Parse error:
  Unexpected EOF` when a specialist spends its whole step budget on tool calls
  and never writes the structured handoff. The workflow now issues one
  tool-free structured synthesis call over the gathered evidence, the same
  guard ordinary tasks already had, before treating the handoff as malformed.

## [1.0.49] - 2026-08-16

### Changed

- Migrated every model reference from `no-think/cc/claude-sonnet-5` to
  `cc/claude-sonnet-5`. Titan now runs 9Router 0.5.50 natively (same build
  and provider fleet as midget) instead of the OmniRoute container, and that
  build does not expose the `no-think/` route, so the old id returned `404`
  for chat, model catalog, and every seeded agent profile.
- Repointed `FREE_MODEL_ROUTE` from `auto/coding:free` to the `free-scout`
  combo. The native gateway exposes no `auto/` routes, so selecting the
  OpenRouter-free model source was rejected.

## [1.0.48] - 2026-08-16

### Fixed

- `AgentSettingsStore.update` no longer rejects shared workspace tools on
  Build roles. The validator required every tool to appear in the Build
  allowlist, while the runtime (`configuredTools`, `src/agent.ts`) only caps
  Build-namespace tools, so the seeded `build-maintainer` profile carrying
  `codeContext`, `symbolContext`, and `changeImpact` could not be edited at
  all — including changing its model.

## [1.0.47] - 2026-08-16

### Fixed

- Task runs that exhaust their step budget mid-tool-call no longer complete
  with empty output. `createAgentTaskExecutor` (`src/agent-execution.ts`) now
  detects blank final text and issues one tool-free synthesis call
  (`toolChoice: "none"`, `maxSteps: 1`) over the evidence already gathered.
  The unresolved assistant tail is trimmed first
  (`conversationWithoutUnresolvedTail`) because replaying `tool_use` blocks
  with no matching `tool_result` is rejected by the provider. Previously a
  full 12-step founder-report run could burn its entire budget and deliver
  nothing to `#general`.

## [1.0.46] - 2026-08-16

### Fixed

- Restored `continue: false` in `createFinalResponseGuard`
  (`src/agent-autonomy.ts`), reversing the 1.0.44 change. Letting pending
  tool calls execute (1.0.44) fixed the assistant-prefill crash but removed
  the guaranteed text-only final iteration: the Orchistrator's founder
  report task (`766b35ff`) completed with an empty output because the
  model kept calling tools past the operator-configured step budget with
  no reserved turn to actually answer. `continue: false` now correctly
  reserves the final native iteration for a `feedback`-driven text
  response again; that reserved call's message list still ends on the
  unresolved assistant tool-call turn, but the 1.0.45
  `trimDanglingAssistantWireTail` wire-level guard now sanitizes that
  before every request instead of crashing, so both fixes combine
  correctly instead of trading one bug for another.

## [1.0.45] - 2026-08-16

### Fixed

- Added a provider-agnostic guard (`trimDanglingAssistantWireTail` in
  `src/models.ts`, wired into `normalizeChatRequest` for every 9Router
  request) that trims a trailing `assistant`-role message from the outgoing
  chat-completions request before it reaches the wire. The 1.0.44
  `createFinalResponseGuard` fix addressed one source of a dangling
  assistant tail but the `[400] This model does not support assistant
  message prefill` failure recurred on the Orchistrator's own run afterward
  (task `993b3558`), proving Mastra's internal continuation loop can
  produce a request ending on `assistant` through more than one path. This
  guard is the last checkpoint before serialization, so it closes every
  such path regardless of which internal step produced it; a request never
  legitimately ends on `assistant` in a completion call, so trimming is
  always safe.

## [1.0.44] - 2026-08-16

### Fixed

- `createFinalResponseGuard` (`src/agent-autonomy.ts`) no longer aborts an
  iteration with `continue: false` while the model has pending unresolved
  tool calls. Per Mastra's `IterationCompleteResult` contract, `continue:
  false` stops processing immediately, before those tool calls are ever
  resolved with results, leaving the conversation ending on a dangling
  assistant tool-call message; strict Claude-family models reject that as
  invalid prefill on the next call. The guard now only returns `feedback`,
  letting the pending tool calls execute and the conversation stay
  well-formed; the native `maxSteps` ceiling still forces a text-only final
  response on the following iteration. This was the actual root cause of
  the repeated `[400] This model does not support assistant message
  prefill` failures on the Orchistrator's own run (1.0.43 fixed a related
  but different bug in the delegated-subagent message filter).

## [1.0.43] - 2026-08-16

### Fixed

- Delegated subagent context (`messageFilter` in `src/hook-lifecycle.ts`) no
  longer ends on a dangling assistant-role message. The prior naive
  `messages.slice(-N)` tail slice could end on an unresolved assistant turn
  (e.g. a tool-use call cut off mid-window), which strict Claude-family
  models reject as invalid assistant-message prefill
  (`[400]: This model does not support assistant message prefill. The
  conversation must end with a user message.`). This recurred in production
  for `no-think/cc/claude-sonnet-5` delegation runs, including the
  founder-report task's delegation to a company staff persona.

## [1.0.42] - 2026-08-16

### Changed

- Task-run transcript now labels an `agent-communication` send call as
  "Delegated to `<agent-id>`" with its delivery outcome (`woken`, `delivered`,
  `queued`, `failed`) instead of a generic tool name, so a live specialist
  delegation is visible in the task detail modal instead of reading like an
  ordinary tool call.

## [1.0.41] - 2026-08-16

### Added

- `./popagent tasks-attention [workspace]` lists every task in the Needs
  attention bucket (`failed`, `cancelled`, `dead-letter`) without hand-filtering
  the full task collection.
- `./popagent task-requeue <task-id> [model]` resubmits a terminal task's
  original workspace and prompt as a fresh queued task once its cause is
  fixed, since automatic remediation-task creation only fires on a settled
  `failed` transition and never on `cancelled` tasks.

## [1.0.40] - 2026-08-16

### Fixed

- Enabled bounded conversation history instead of disabling message memory
  entirely.
- Released workspace sandboxes, LSP handles, and browser processes on
  shutdown via `mastra.shutdown()` and explicit runtime teardown instead of
  leaking them across restarts and repository updates.
- Replaced raw task and evolution-signal UUIDs in the channel and autonomy
  cards with a human-readable timestamp and resolved workspace name.
- Moved specialist agent profiles, self-update/build-maintenance models, and
  the seeded runtime default model off a rate-limited route onto Sonnet 5.

### Changed

- Centralized every isolated agent-clone call site behind one documented
  internal-API boundary in `agent.ts`.

## [1.0.39] - 2026-08-16

### Added

- Added deterministic agent configuration health through
  `GET /api/agents/health` and `popagent agent-health`.
- Added workspace-contained local code context, symbol relationship, and
  change-impact tools backed by pinned Tree-sitter, BM25, vector, and call-graph
  indexing, with matching workspace APIs and `popagent` CLI commands.

### Changed

- Removed duplicated generic `*-practice` skills while preserving
  domain-specific skills and company-persona delegation.

## [1.0.38] - 2026-08-16

### Fixed

- Prevented participant replies from waking acknowledgement loops and preserved
  successful task outcomes when a participant returns no reply text.
- Removed BifrOSt Navigator from default agent capabilities so ordinary browsing
  uses the contained headless browser unless an operator explicitly opts in.

### Changed

- Compacted overview task actions into per-card menus, made task titles open
  run details, and added relative activity times with exact timestamps on hover.

## [1.0.37] - 2026-08-16

### Fixed

- Kept the autonomous workflow mounted during background refreshes so its phase
  rail and evidence no longer blink every two seconds.
- Stopped cancelled structured-output phases from retrying an aborted stream and
  hid legacy abort-time JSON parse errors from cancelled phase details.

### Changed

- Simplified active task cards to show the responsible agent and a clear working
  state without internal progress text or step counts.
- Standardized every primary page on one full-width responsive gutter instead
  of page-specific width caps and padding.

## [1.0.36] - 2026-08-16

### Changed

- Replaced wall-clock triggering for autonomous system work with continuous
  idle-time execution. User-created schedules remain time-based.
- Stopped unchanged workflow-history polling from reloading the selected phase
  every two seconds, and reduced the history header to a compact Runs control.

## [1.0.35] - 2026-08-16

### Changed

- Made Schedules a global view with execution-workspace labels and removed the
  workspace selector's hidden filtering behavior.
- Removed the overview's promotional agent-architecture copy so task status and
  actions begin at the top of the page.

## [1.0.34] - 2026-08-16

### Fixed

- Prevented autonomous research from failing when model-generated evidence
  exceeds its persisted boundary, and made upstream response-header timeouts
  retryable instead of leaving remediation tasks in Needs attention.

## [1.0.33] - 2026-08-16

### Fixed

- Removed the duplicate department directory and repeated generated remit copy
  from Company; each staff agent now appears once in the portfolio.

## [1.0.32] - 2026-08-16

### Added

- Made every Company staff member an executable specialist agent with a
  role-specific, database-backed skill, contained workspace and browser access,
  editable runtime settings, and orchestrator delegation.

## [1.0.31] - 2026-08-16

### Changed

- Merged Agent settings into Company as a responsive team portfolio with
  substantially larger staff portraits, human roles, agent remits, clear
  availability, editable capabilities, and the wider department roster.

## [1.0.30] - 2026-08-16

### Fixed

- Added governed workflow skills for all three AkurAI Build specialists and
  aligned every seeded specialist model with `codex/gpt-5.6-luna-medium`.
- Removed workspace, browser, and secret tools when a persisted role lacks the
  corresponding access class.

## [1.0.29] - 2026-08-16

### Fixed

- Moved system-owned self-update and Build-maintenance execution from the
  Titan-local Ornith route to `codex/gpt-5.6-luna-medium`.

## [1.0.28] - 2026-08-16

### Fixed

- Replaced repetitive raw task-tool messages in `#general` with one live,
  structured work card showing the objective, status, model, progress, steps,
  attempts, output, and errors while preserving human agent handoffs.

## [1.0.27] - 2026-08-16

### Fixed

- Addressed agent messages now wake the recipient's own task-scoped Mastra run,
  wait for its settlement, and persist replies under the recipient identity.

## [1.0.26] - 2026-08-16

### Added

- Added task-scoped live agent coordination with honest delivery receipts,
  bounded mailboxes, replies and broadcast, durable `#general` history, live
  refresh events, and accessible sender/recipient Company identities.

## [1.0.25] - 2026-08-15

### Added

- Added assigned staff portraits and personal identity details to every governed execution agent in Settings.

## [1.0.24] - 2026-08-15

### Added

- Added a Company settings roster with nine departments, 32 recovered staff identities, generated Midget avatars, job titles, and internal mail links without creating additional LLM agents.

## [1.0.23] - 2026-08-15

### Fixed

- Raised autonomous Researcher runs from six iterations to the configured specialist limit and allowed a third retry for transient malformed structured handoffs.

## [1.0.22] - 2026-08-15

### Fixed

- Replaced the internal `mastra_workspace_read_file` name in overview task progress with `Reading File: <path>`.

## [1.0.21] - 2026-08-15

### Added

- Added privacy-bounded handoff lifecycle logs that distinguish agent streaming, structured-object resolution, text fallback, and retry failures for stalled autonomous workflow diagnosis.

## [1.0.20] - 2026-08-15

### Fixed

- Added an explicit governed workflow command for operator-requested repository changes so Researcher, Implementer, verification, Reviewer, and trusted commit evidence replace unsupported direct-Orchistrator completion claims.

## [1.0.19] - 2026-08-15

### Fixed

- Replaced autonomous workflow transcript spam in `#general` with one concise correlated task card while retaining detailed phase, tool, output, and failure evidence inside that task.

## [1.0.18] - 2026-08-15

### Fixed

- Required autonomous no-op decisions to cite inspected code, concrete candidates, deterministic evidence, and rejection reasons instead of treating a clean checkout as proof that no improvement exists.
- Reconciled repaired system-owned autonomous prompts into existing schedules without overwriting operator timing or enabled state.

## [1.0.17] - 2026-08-15

### Fixed

- Kept autonomous repository inspection inside five tool iterations while reserving a sixth iteration for the required structured handoff.
- Allowed read-only inspection of protected source and package metadata without permitting autonomous writes to those paths, preventing false containment failures from stranding tasks.

## [1.0.16] - 2026-08-15

### Fixed

- Capped autonomous Researcher inspection at five iterations so implementation, verification, and review remain with their dedicated agents.

## [1.0.15] - 2026-08-15

### Fixed

- Retried one provider structured-output parse failure when a specialist returns Markdown instead of the requested JSON handoff.

## [1.0.14] - 2026-08-15

### Changed

- Made Popagent Docs the canonical destination for Project Index updates across repository rules, agent instructions, the built-in Popagent CLI skill, and CLI help; AkurAI Notes remains a legacy import source only.

## [1.0.13] - 2026-08-15

### Fixed

- Serialized excess local Ornith generation requests in Popagent until an inference slot is available, while keeping shared-service chat verification independent of local queue occupancy.

## [1.0.12] - 2026-08-15

### Fixed

- Restored the deployed release timeline by parsing Bun's production HTML transformation of the bundled Markdown without discarding prior releases.

## [1.0.11] - 2026-08-15

### Fixed

- Added abort-aware FIFO admission for local Ornith calls so excess generations wait for one of its two inference slots instead of relying on downstream overload behavior.

## [1.0.10] - 2026-08-15

### Fixed

- Replaced duplicate full-task polling on Autonomy with one bounded autonomous-workflow feed and added the matching one-shot CLI command.

## [1.0.9] - 2026-08-15

### Fixed

- Streamed autonomous specialist thinking and tool activity into the task transcript instead of leaving it empty.

## [1.0.8] - 2026-08-15

### Fixed

- Allowed contained researchers to read repository skill instructions and rejected varied containment-denial evidence as failed inspection rather than a verified no-op.

## [1.0.7] - 2026-08-15

### Fixed

- Allowed contained autonomous researchers to read repository `AGENTS*.md` instructions while preserving write and secret-path denial.

## [1.0.6] - 2026-08-15

### Fixed

- Recovered Researcher handoffs that encode evidence as a keyed object instead of the requested array.

## [1.0.5] - 2026-08-15

### Added

- Added a persisted Runtime setting for switching new agent work between the configured model, Titan's local Ornith 9B model, and 9Router's OpenRouter-backed free coding route.

### Fixed

- Normalized contained autonomous workspace paths, rejected access-denied false no-ops, and distinguished verified no-op outcomes from accepted commits.
- Hardened autonomous structured handoffs with the persisted orchestrator model, bounded evidence, JSON stream recovery, and one transient phase retry.

## [1.0.4] - 2026-08-15

### Fixed

- Replaced the accumulated “Unreleased” feed with the actual deployed version history.

## [1.0.3] - 2026-08-15

### Fixed

- Deduplicated model IDs at the server catalog boundary so every model selector receives stable, unique React keys.

## [1.0.2] - 2026-08-15

### Fixed

- Added exact `popagent task <task-id>` evidence lookup and required explicit, verified resolution before remediation can mark a failed parent complete.

## [1.0.1] - 2026-08-15

### Fixed

- Deduplicated repeated 9Router model routes in the model picker.
- Recovered autonomous structured handoffs from valid streamed JSON when Mastra omits the structured object.
- Fixed deployment release gates to compare against the recorded production revision and require a meaningful changelog update plus an increasing semantic version.

## [1.0.0] - 2026-08-15

### Added

- Added operator-managed autonomous self-update and Build-maintenance schedules in Settings → Schedules, with editable cron timing and pause/resume controls.
- Added the responsive release timeline at `/changelog`.
- Added the deploy-managed semantic application version below the Popagent sidebar brand.
- Added `./popagent automation-reconcile` to reapply code-owned autonomous schedule models after deployment.
- Added governed `build-maintainer`, `build-release-manager`, and `community-steward` Mastra roles with persisted identity, model, access, delegation, and role-specific AkurAI Build tool allowlists.
- Added a bounded, abortable JSON-RPC MCP client and typed AkurAI Build repository, pipeline, worker, metrics, community, release, and promotion tools.
- Added governed idle Build-maintenance task and schedule lineage with contained reviewed branches, immutable deployment verification, and an explicit no-promote/no-deploy production boundary.

### Changed

- Deployment records phase timing, reuses only immutable CI verification for the exact release revision, and retains candidate and migration safety checks.

### Fixed

- Fixed managed pipeline branch validation and existing role, task-board, and Build-client contracts for valid `main` releases.