Menu
popagent
publicLatest change cdf1d4b8bab18c97cbff7aae6e7c259b98d7123d - Do not fail self-update research on a recovered containment denial by AkurAI Build
# Changelog
All notable released changes to Popagent are documented here.
## [1.0.61] - 2026-08-17
### Fixed
- Autonomous self-update no longer fails whenever the Researcher mentions a
containment denial. Denials are delivered to the agent as text, so a run that
hit one refused call (for example a `showHidden` listing), recovered, and
inspected the checkout anyway still narrated the denial — and a prose regex
failed the whole research phase on it, at a full 16-step budget. Inspection
now counts as blocked only when nothing was inspected (`relevantPaths` empty),
which is what "blocked" actually means.
## [1.0.60] - 2026-08-17
### Fixed
- Turning autonomy off no longer turns it off permanently. Deselecting every
workspace disables the system self-update schedules, but `upsert` never
rewrites `enabled` (so an operator's own pause survives), which meant
reselecting a workspace could not revive them: automation reported `active`
while nothing was scheduled. Reconciliation now re-enables the schedules its
own policy disabled, keeping each row's operator cron.
## [1.0.59] - 2026-08-17
### Fixed
- A task that runs out of steps is no longer learned from as a success. The
final-response guard now records that the run spent its whole budget, the
runtime carries it to the completion lifecycle, and such a turn is enqueued
as a `step-budget-exhausted` failure. Previously a task whose own output read
"I could not complete this task" still settled `completed`, produced a
`turn-success` signal, and had a durable fact retained from it — the loop
could not tell stopping from finishing.
- Daily maintenance refreshes every registered workspace checkout, not only the
ones a schedule happens to run against. Repositories with no schedule had not
been updated since July and were read by agents as current source.
## [1.0.58] - 2026-08-17
### Fixed
- Autonomous follow-up tasks now respect the autonomy pause. `createFollowUps`
refused nothing while automation was `paused`, so a scheduled report could
plan and queue new autonomous work even though the UI reported that no
autonomous work would start.
- A scheduled run fast-forwards its workspace checkout before reading it. The
registered clones were never refreshed, so the daily company report described
`workspace/popagent` at a two-day-old revision (1.0.49) as the current source
and concluded "no new commits". Only clean checkouts that track an upstream
are advanced; dirty, upstream-less, and locally-ahead checkouts are left
exactly as they were.
## [1.0.57] - 2026-08-17
### Fixed
- Model gateway requests that return no response headers within 90 s
(`POPAGENT_MODEL_FIRST_BYTE_TIMEOUT_MS`) now fail with a first-byte timeout
instead of hanging for the ~249 s a stale 9Router connection took to report
`fetch connect timeout`; the routing policy falls over to the next route
immediately. Streaming bodies are not bounded by this timeout.
- `companyStatus` marks the calling task as `current` and hides its previous
attempt's error, so a report no longer describes itself as "another run of
this cycle that is currently failing".
- Follow-up planning can target the workspace a finding belongs to (an
AkurAI-Mail report about an AkurAI-Monitor gap files the task in
AkurAI-Monitor), and it is shown every open or recent follow-up title across
workspaces so it does not re-file work that already exists on a branch.
## [1.0.56] - 2026-08-17
### Fixed
- Code intelligence no longer returns "Vector store structure mismatch:
vectors=549, ids=548, …" to agents: index sessions are serialized per
repository so one task's refresh cannot race another's query, a corrupt
store is discarded and rebuilt in the background with a clear message, and a
stale `indexing.lock` left by an indexer killed mid-run (which kept the
AkurAI-Build workspace permanently "cold" with `INDEX_BUSY … manual
verification is required`) is removed when its owner process is dead.
- `bifrostNavigator` explains that BifrOSt Navigator is not running instead of
surfacing `connect ENOENT …bifrost-navigator.sock`.
- Mastra's per-delegation "maxSteps exceeds sub-agent default, capping" no
longer floods the warning log (115 entries/day); it is expected behaviour and
is recorded at info.
## [1.0.55] - 2026-08-16
### Added
- Schedules can opt in to **autonomous follow-up tasks** ("Create follow-up
tasks from results" in Settings → Schedules, `followUps` on the schedule
API). When such a run completes, a bounded structured-output planner
extracts at most five concrete, agent-executable actions the report itself
recommends (never deploys, promotions, DNS, secrets, or outreach), skips
items whose title matches an open or week-old follow-up in the workspace,
queues them as tasks linked by `follow_up_of_task_id`, and posts a summary
to `#general`. Follow-up tasks themselves never spawn further follow-ups.
## [1.0.54] - 2026-08-16
### Fixed
- Live task text is no longer posted to `#general` as partial streamed
snapshots; progress lines now cover tool usage only and the completed report
is announced once. Popagent Docs' two Project Index pages are reconciled to
the deployed 1.0.53 revision.
- Model routing also falls back on upstream availability failures (5xx,
gateway/connect timeouts, overload) with a short cooldown, not only on rate
limits and unknown models; a 9Router Claude route that took 249 s to fail
with `[502]: fetch connect timeout` used to be retried on the same route.
- A task waiting on a slow gateway now shows "Waiting for first response from
<model> (Ns)" every 20 s instead of appearing idle.
## [1.0.53] - 2026-08-16
### Fixed
- Channel messages and task outputs render Markdown instead of raw `##`/`**`
text, and a completed task's report is posted to `#general` once instead of
twice (the final turn text and the "Task completed" announcement carried the
same body).
### Added
- **Model routing policy** (Settings → Runtime → Model routing): an ordered list
of routes, each a model plus reasoning effort (`default/low/medium/high`),
with `fallback` or `round-robin` strategy and a per-route cooldown. Selecting
the new `policy/routing` model anywhere a model is chosen resolves it per
attempt; a route that hits a rate limit or an unknown-model error leaves
rotation for the cooldown so the retry runs on the next route. Reasoning
effort travels as `model@effort` and is sent to 9Router as `reasoning_effort`.
`GET /api/models/routing` reports per-route health, shown as LEDs.
- `companyStatus` tool: a read-only, bounded snapshot of workspaces, tasks,
Needs attention, schedules, autonomy state, and signals for reporting agents,
granted to the Orchistrator; the sandbox cannot reach the CLI/API, and the
daily company report was burning its step budget finding that out.
- Settings → Browser has a **Browser provider** selector: keep the isolated
headless AgentBrowser, or select the native BifrOSt Navigator running on the
host. Under BifrOSt, every agent role with browser access receives the
`bifrostNavigator` bridge tool automatically (read-only roles remain limited
to non-mutating operations), no headless Chromium is launched, and the
provider health/test controls probe the BifrOSt MCP socket instead. Persisted
as `popagent_browser_settings.provider` (migration
`2026-08-16-browser-settings-v3-provider`, default `agent-browser`).
- Settings → Browser shows a green/red LED per browser: headless AgentBrowser
(Chromium build present) and BifrOSt Navigator (MCP socket answers
`tools/list` with exposed tools), re-checked every 15 s, with the selected
provider marked and a "Test selected browser" result line.
## [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.
- `searchDocumentation` no longer fails with "Connection terminated due to
connection timeout" when the host is busy: `PgVector` defaulted its pool to a
2 s connect timeout, which the local Postgres could not meet under load; the
documentation vector pool now allows 30 s to connect.
### 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.