flutter_agent_harness 1.0.556
flutter_agent_harness: ^1.0.556 copied to clipboard
Cross-platform AI agent harness for Dart and Flutter: streaming provider adapters, agent loop with tools, session persistence, context compaction.
Changelog #
Older entries: CHANGELOG_ARCHIVE.md — moved out
on 2026-10-09 (gh-1452): pub.dev server-rejects a publish whose
CHANGELOG.md exceeds its 262144-byte content cap, so this file keeps a
bounded recent window and scripts/check_changelog_size.sh fails fast when the cap is
approached. Since gh-1522 this file is CURATED-ONLY: add new lines under
## Unreleased and the release folds them into the tag's section at
publish-staging time — the published artifact's changelog is generated
(and trimmed under the cap by stamp_staged_release.sh), and the
publish job only WARNS on this repo file, so this file's size can never
block a release again.
1.0.556 #
-
gh-1522: tag-sourced versions — the git tag is the single source of truth. The release-bot file bumps are retired: cutting a release = a tag + GitHub Release (zero commits to main, zero file mutations). Both pubspecs carry the fixed
0.0.0-devplaceholder (CI guards hand-bumps), the publish job stamps the staged pubspec + generated changelog section from the tag (scripts/stamp_staged_release.sh, staged version == tag guarded pre-upload), store builds stamp--build-name/--build-numberfrom the derived tag version (pubspec.lockstops churning across releases), andinstall_local.shstampsversion.txtfromgit describe. -
feat(usage): gh-1460 — the
fa-tokens:segment-close line carries the session's model id, so every token row the factory publishes is attributable to a model and therefore priceable. The fold now captures each segment's LAST-SEEN model id (the model that served the final request, the same string settings/UI display — mid-session fallback take-overs attribute the segment to the model that actually finished it; zero-filled fallbacks never clobber a seen model) and the pinned line shape grows an OPTIONAL"model":"<id>"key after"segment"— omitted when no model was observed, so legacy lines parse unchanged and the pinned regex (usageTokensLogPattern, gh-1241 AC7) keeps matching both shapes. usage.json's schema is untouched (the model is rebuildable from the chain, I6); old consumers using tolerant JSON ignore the new key, and the repo's single strict consumer (the pinned constant) is updated in the same change. -
fix(test): gh-1460 rework — the
wrap_ansi_line_perf_testgrowth-shape legs measure the doubling ratio with the MINIMUM over 9 runs instead of the median of 5 (CI run 38112524699, core shard 0/4: a scheduling pause inflated the doubled-size median — 12.09ms against a true ~7ms — and tripped the 3.2 bound at 3.65x on a genuinely linear wrap). Runner jitter only ever inflates a wall-clock sample, so the min converges on the true compute time; genuine superlinearity still trips the ratio (the gh-1496 quadratic candidates measure ~4x by min). The absolute- budget legs keep the median — their gh-1357 headroom already prices in jitter. A synthetic regression test pins the pause-proof property.
1.0.506 #
- fix(#1044): AIIN mobile/macOS add-provider — sign-in completes but the provider is never added (#1194)
- fix(ci): pass flutter-version explicitly — awf no longer defaults a toolchain (#1205)
1.0.507 #
- gh-1208 [BENCH] fix-git task image broken on CI runners — docker compose build fails in BOTH TBench-1 runs (unknown_agent_error, trial never starts) (#1218)
- gh-1206 WIP auto-save 2026-10-04T05-52-28 (#1216)
- gh-1209 [BENCH] usage fold skips failed trials — agent_timeout rows report 0/0 tokens though the session JSONL has full usage (#1123 follow-up) (#1215)
1.0.508 #
- fix(cli): gh-1459 — headless
fa -pno longer orphans live background shell jobs._awaitHeadlessBackgroundJobsdrained only in-flight subagent jobs, so a run whose model was still waiting on abash background:truecommand (gh-1440's full test suite) printed the detach summary and exited, killing the job with the container — the result it was explicitly waiting for never reached anyone. Live shell jobs now drain exactly like subagents: the settles ride the existing_onShellJobSettledfresh-turn path (steered into reaction runs the drain awaits, loop capped at 10 rounds), suppressed jobs (suppressSettleNotification— result already landed in-turn) are not awaited, and a settle landing outside a round still gets its reaction run awaited before exit. BOTH loops share ONE wall-clock ceiling, the newheadless:config section (shellJobDrainMs, default 30 min, strict parse;0restores the detach-immediately behavior) — a never-settling watch-loop detaches with an observable⏳ … drain ceiling … — detachingline instead of hanging headless, and the detach summary stays the documented degradation, never the default path. The drain prints a⏳ waiting: …line (#1055 parity) naming what the run stays alive for. While it waits, the drain also steers interim liveness notices (gh-1459 ask #4): everyheadless.shellJobQuietMs(default 5 min;0= off) of a still-running awaited shell job, ONE compact system-notice (job <id> running · <elapsed> elapsed · tail: …plus the bash_job output/stop escape hatch) keeps the model able to wait, inspect, or kill instead of blocking blindly to the ceiling; a crossing the model probed itself (bash_job status/outputbumps the entry's probe generation) is skipped, one steer budget per threshold, never a spam loop. - feat(providers): issue #1398 — stall-recovery tuning becomes per-provider
and data-driven. Registry entries (
customProviders:,models.custom:, roles chain entries,providersQueue:entries) accept optionalconnectTimeoutMs/streamIdleTimeoutMs(strict positive-int parsing); resolution is entry > theproviderTimeouts:section > the 180 s/300 s defaults, per field, and every seeded entry prints its effective values at boot. The wire seams (sendWatchedProviderRequestconnect watchdog,createSseIteratoridle watchdog) resolve per request URL, so all adapters inherit the tuning; runs without entries are byte-identical (AC6). Also: the retry backoff contract — a parseable delta-secondsRetry-Afterwins over the ladder for that attempt, hard-capped at the 60 s ceiling (the clamp names the advertised value;0counts as absent, malformed/HTTP-date headers fall back to the ladder with a trace note) — and the dual retry budgets (connection-class cap 4, stream-class cap 3, independent counters, the terminal story carries both). Trace lines pin the formatbudget=<connection|stream> attempt=<n>/<cap> delay=<ladder|server|clamp>; the tuning report prints per-model p50/p95 inter-chunk gap + watchdog-fire counts with thestreamIdleTimeoutMs ≈ 2× p95recipe (the production feeder lands with #1392's LatencyMeter). - feat(hosts): gh-1322 — the wireAgentCore host-adoption gaps: an embed
guide (
docs/embedding.md, with the explicit "hosts ride wireAgentCore, never adk_dart" rule), the host-facing key-slot resolver (AgentCoreServices.resolveKey+HostKeyResolver— the effective slot NAME, pinned-twin drift hints identical to the CLI's migration notes, registry-legknownSlotNames, injected env/store readers only), and lifecycle telemetry for in-process hosts (AgentCoreServices.telemetry: the pure interface + in-memory ring in core, the fa.log file sink behindlib/io.dart; requestStart/firstToken/turn/tool/run records with durations and the provider HTTP status). - chore(ci): document the sm-kicker head-completeness codeless-head crash
(upstream awf#15) — the factory job's
gh apicalls put--jqbefore--arg/--argjson, so a CODELESS branch head (2 parents, 0 changed files: a routine branch-sync merge with no content diff) crashes the job withaccepts 1 arg(s), received 4— even when CI is fully green on that head, and the job's own rescue dispatch can never heal exactly those heads. Workaround until the upstream fix: keep the branch head code-bearing. Live instance: run 37193754301 on head 1fe9b1232. - fix(messaging): gh-1180 —
schedule_messageself-chains no longer die silently at the agent-chatter wake cap. The idle inbox-wake gate (InboxWakePolicy, shared by the CLI and the app hosts) now exempts a delivered scheduled self-reminder ([scheduled]prefix, from == to) from the 10-consecutive-wake streak: a deliberate agent-chosen cadence (night watch, periodic sweep) wakes forever, while foreign agent-to-agent chatter stays capped (anti-storm REG) and user-kind mail always wakes. A 30s cadence floor bounds a zero-delay re-schedule spin (E5). Refused wakes are visible ([mail] wake refused, once per episode) and every lifecycle step is receipted to<messagesRoot>/_scheduled/receipts.jsonl(ScheduledReceiptLog): scheduled / delivered / delivery_failed / scan_failed / wake_attempted / turn_started / wake_refused. A failed scheduler scan (transientlistDirerror) now re-arms atfailureBackoffwith anonErrorlog instead of silently disarming the delivery heartbeat. - fix(messaging): gh-1180 review round — refusal receipts and the
visible refusal line are gated once per refusal EPISODE (the latch
lives in
InboxWakePolicynext to the streak and re-arms on the same resets), so a held gate no longer appends per-tickwake_attemptedrows (~43k duplicate lines/day) and a repeat episode after user input is announced and receipted again. The app host receipts its wake path (wake_attempted/turn_started/wake_refused) onto the same trail — AC4 is no longer CLI-only. A self-reminder adopted across a session-id change delivers FROM the live mailbox (from re-addressed alongside to), so the resumed chain stays self-shaped and exempt instead of falling back to the capped chatter lane. Plugin-only pending batches are explicitly classified as chatter (the contract is stated, not accidental), the wake cap is single-sourced fromInboxWakePolicy.defaultMaxInboxWakeStreak, and the policy file lost a stale copy-pastedignore_for_file.
1.0.509 #
- chore(pin): awf workflows track @main — always-latest policy (owner
directive 2026-10-04). All five machine-loop stubs (teammate, SM,
merge, sm-kicker, merge-trigger) flip from immutable SHA pins to
dmtools-agentic-workflows@main, so awf fixes (kicker real ticks awf#13, per-SHA concurrency awf#14, teammate defaults awf#12) go live on merge with no re-pin ceremony. Security trade-off (owner-accepted): a mutable ref executes whatever sits at the awf main head — mitigated by awf main being review-gated, bytest/machine_kit/factory_stub_ref_test.dartnow guarding ALL FIVEuses:refs resolve to exactlymain(never a stale SHA, never a random ref) in lockstep, and by the agents ENGINE pin staying an immutable 40-hex SHA viafactory_ref. Thesecrets:policy is settled per-callee in the same guard: teammate/sm/merge mapSOURCE_GITHUB_TOKENexplicitly (their factories declare it required), while merge-trigger keeps the factory-documentedsecrets: inheritPAT passthrough (factory-merge-trigger declares no secrets) and the kicker carries no secrets block. Stale immutable-SHA pin comments in ai-teammate.yml / machine-sm.yml rewritten to state the always-mainpolicy (#1222).
1.0.510 #
- gh-1226 [BUG] 1.0.505 (with #1190 aboard): mail-wake turn after /sessions restore still loses the provider/key binding — copilot-401 error on a z.ai session + fused guidance text (#1237)
- gh-1199 [GOAL] Deterministic-only Quality gate: mock LLM everywhere, live models move to supervised benches (#1229)
- feat(1101): Agent Wire Protocol v1 — web reference client (sdk/web), conformance runner, browser example (#1228)
- gh-1224 [BUG] iOS 1.0.504: all wasm interpreters (python/qjs/lua/sqlite3) dead — 'no lazy loader' in FOREGROUND bash _forJob() clone drops moduleLoader (regression suspect #1163) (#1225)
1.0.511 #
- gh-1164 [GOAL] built-in js-apps skill (promoted from app asset, decisive apps-vs-widget routing) + JS render/runtime errors reported back to the authoring agent as failures (blocked by #1151) (#1246)
- gh-1244 [FLAKE] PTY integration: secret_sheet_test «IT-mask: masked from the first keystroke» waits for exactly 5 bullets while typing races ahead (red main, run 37232401938) (#1245)
- gh-1241 [GOAL] Session token-usage ledger: resume-aware usage.json fold over the session chain (provider-reported, estimated marked) (#1243)
- ci(quarantine): skip scheduled_indicator_test.dart in the gate (flake, https://github.com/IstiN/flutter_agent_harness/issues/1252) (#1253)
- gh-1077 [GOAL] flutter_app compaction parity with CLI — mobile sessions never compact (roles/smol absent, wrong context window, silent failure, no over-window relief) (#1239)
- ci(quarantine): skip job_board_stability_pty_test.dart in the gate (flake, https://github.com/IstiN/flutter_agent_harness/issues/1250) (#1251)
- gh-1235 Wire jsr.openUrl + webView host into the app JS engine (js_widget_runtime = 0.4.154) (#1238)
- gh-1226 [BUG] 1.0.505 (with #1190 aboard): mail-wake turn after /sessions restore still loses the provider/key binding — copilot-401 error on a z.ai session + fused guidance text (#1237)
- gh-1199 [GOAL] Deterministic-only Quality gate: mock LLM everywhere, live models move to supervised benches (#1229)
- feat(1101): Agent Wire Protocol v1 — web reference client (sdk/web), conformance runner, browser example (#1228)
- gh-1224 [BUG] iOS 1.0.504: all wasm interpreters (python/qjs/lua/sqlite3) dead — 'no lazy loader' in FOREGROUND bash _forJob() clone drops moduleLoader (regression suspect #1163) (#1225)
1.0.513 #
- fix(1096): reseed fa-extension size floor for intentional js-apps skill growth (gh-1164) (#1258)
1.0.514 #
- fix(#1197): TUI frame pipeline self-heals a throwing view/render (gh-1197 AC3) — a mid-run render exception now logs loudly, invalidates the diff state (no stranded DEC 2026 BSU), and repaints instead of dying or freezing; PTY liveness regression test proving paced thinking + answer text + a long silent tool call paint continuously (AC1/AC2/AC4), via the scripted stream's new paced
chunks/pace_ms,thinking, andsleep_mssteps
1.0.515 #
- gh-1292 fa-tokens line must reach stdout in headless/CI runs (ledger emission invisible to the GH log) (#1295)
- gh-1296 [BUG] iOS build red in CocoaPods layer: package:sqlite3 build_hook fails — Podfile.lock drift (pods cache re-rolls weekly) never-again: ALL lockfiles committed + enforced (#1298)
- feat(1096): mac size diet — wasm_run_flutter.framework + never-loaded assets, ratcheted (#1227)
- chore(merge-trigger): track awf @main + map_pr_labels: true (#1285)
- ci(quarantine): skip secret_sheet_test.dart in the gate (flake, https://github.com/IstiN/flutter_agent_harness/issues/1283) (#1284)
- fix(1280): CLI arch matrix gates the merge; release binaries boot-smoked (#1282)
- gh-1276 [BUG] iOS: memory_search returns garbage + memory_list hides user-scope notes (agent fell back to memory_delete by exact text) (#1281)
- ci(quarantine): test/integration/theme_readability_pty_test.dart (flake) (#1255)
- gh-1274 [BUG] iOS sandbox bash: relative paths resolve to a nonexistent CWD — files written in the sandbox are invisible to relative-path commands (still broken on 1.0.512 after #1225) (#1279)
- gh-1266 [BUG] nightly red: macOS flutter_app suite — 5-test cluster around apps panel / open_app launcher / dynamic_message tiles (suspects #1139, #1173) (#1278)
- gh-1275 [BUG] Built-in skills (#1151) not packaged into the apps: iOS ships EMPTY skill dirs (create-goal/fa-self-config/js-apps exist, SKILL.md missing) — verify macOS/Android too (#1277)
- gh-1272 [BUG] [URGENT] 1.0.512 TestFlight (build 205): EVERY JS widget dead — engine eval error 'Unterminated regular expression literal /[ ⇥' on all widgets (source corruption in assembly/catalog path) (#1273)
- gh-1265 [BUG] nightly red 5 nights: native desktop builds broken by a TRANSITIVE flutter_inappwebview nobody declares — linux WPE missing + windows MSVC 14.51 STL1011 (lockfile not committed) (#1268)
- gh-1261 [BUG] Play listing deploy fails: clear_images! HTTP 400 — invalid image_type "images" for en-US/phoneScreenshots (daily-publish Play leg red) (#1264)
- feat(#1079): SDK slice 2 — live agent-stack wiring (wireAgentCore); CLI converts to the shared builder (#1230)
- gh-1197 [BUG] TUI fixes (recovered dev leg) (#1263)
- ci(quarantine): skip dap_wake_hang_test.dart in the gate (flake, https://github.com/IstiN/flutter_agent_harness/issues/1248) (#1249)
- gh-1073 Session JSONL grows unboundedly (12 GiB ledger records) → resume fails with 'Failed to read session' + heap-exhaustion crash (#1247)
- fix(1096): reseed fa-extension size floor for intentional js-apps skill growth (gh-1164) (#1258)
1.0.516 #
- gh-1299 [BUG] [URGENT] main red 13 legs: release commit v1.0.515 bumps version WITHOUT regenerating pubspec.lock — new --enforce-lockfile (#1268) hard-fails every leg (#1304)
1.0.517 #
- gh-1299 [BUG] [URGENT] main red 13 legs: release commit v1.0.515 bumps version WITHOUT regenerating pubspec.lock — new --enforce-lockfile (#1268) hard-fails every leg (#1304)
1.0.518 #
- gh-1307 [BUG] nightly macOS suite red: js_app_error_capture_test — load error NOT captured (empty list) regression from #1273's engine fix, merged green through the PR exclusion-zone hole (#1309)
- fix(918): omp_ref reference fixtures captured on PTY host + nerd-glyph parity wiring (#1231)
- gh-1310 [CI] Tag CI for v1.0.513 red — 4+ jobs fail (Android APK, web debug, Hostile ambient env, PTY screenshots) → release asset-less, legs fall back to v1.0.511 (#1312)
- gh-1303 [CI] Pages 'Build landing + web demo' red on main — '41 packages have newer versions incompatible with dependency constraints' (blocks publish + merge-trigger) (#1305)
- gh-1299 [BUG] [URGENT] main red 13 legs: release commit v1.0.515 bumps version WITHOUT regenerating pubspec.lock — new --enforce-lockfile (#1268) hard-fails every leg (#1304)
1.0.520 #
- fix(1250): assert frozen-row invariant, not an unsampleable mid-drain frame (#1286)
- gh-1300 [ENH] PTY integration tests: pay toolchain+boot ONCE per shard, not per test (~30s spawn overhead × N tests) — boot-once + reset between tests (owner design), FA_BIN AOT seam as the cheap first cut (#1306)
1.0.521 #
- fix(1248): dart_tui guard misfires ghost mail-wake turns — log-and-keep-running (#1289)
- gh-1257 [FLAKE] PTY integration: convert the 5 residual exact-bullet-count anchors (secret_sheet_residual_test / password_prompt_pty_test) to the gh-1244 property anchor (#1287)
1.0.522 #
- fix(ci): play edit-commit sets changesNotSentForReview (#1367)
- fix(1339): surface recovered trials, terminal failure modes, and model ids in the bench summary (#1351)
- feat(1331): iOS size diet — IPA dSYM strip + never-loaded fixture prune + ratchet (#1333)
1.0.523 #
- gh-1341 Bump js_widget_runtime pin to 9d57570 / ^0.4.156 — flutter_js hostCall/capture channel fix (fa-craft lag, voxel-sandbox spinner) (#1366)
- fix(1349): deny bare long foreground sleeps; enrich liveness reminders with the background hint (#1355)
- fix(1293): dap start exit-0 guarantees the dial credential is durably on disk (#1354)
1.0.524 #
- ci(quarantine): skip shell_job_countdown_pty_test.dart in the gate (flake, https://github.com/IstiN/flutter_agent_harness/issues/1365) (#1347)
- fix(1368): pub.dev publish — push-tag-only OIDC path, dart-only gate, verify waits instead of false-alarming (#1370)
- fix(1339): review hardening — session-archive traversal guard on every branch (#1369)
- fix(1323): live thinking streams in the TUI — reasoning deltas commit the transient-retry attempt (#1325)
1.0.525 #
- ci(quarantine): skip subagent_integration_test.dart in the gate (flake, https://github.com/IstiN/flutter_agent_harness/issues/1372) (#1373)
- fix(1254): quarantine dracula theme-flake + wait headroom for starved shard (#1288)
- fix(1234): whole-tree CRAP ratchet 12→8, loc-gate migration, all top offenders fixed (#1291)
- fix(1252): widen scheduled-indicator reminder window past loaded-runner pre-check (#1290)
1.0.526 #
- feat(1322): wireAgentCore host-adoption gaps — embed guide, host key resolver, lifecycle telemetry (#1327)
- fix(1319): route paging history notifies through the guarded bridge (follow-up to #1320) (#1324)
1.0.527 #
- gh-1393 [GOAL] Mobile agent parity: bash-identical sandbox shell (glob/grep/cd/dev-null) + first-class jsr widget testing (jsr.test.*, check_app) (#1401)
1.0.528 #
- feat(1379): Compaction 2.0 second tier — agent-initiated hide, LRU re-hide, per-segment pins (#1383)
- fix(1402): pre-flight Play listing language gate + edit-discard on commit failure (#1405)
- feat(1380): obligations ledger substrate — verbatim entries + level-0 context block (A1 slice 1) (#1382)
1.0.529 #
- feat(1377): auto_update tri-state flag — notify banner, autonomous verified self-update, /update (#1384)
1.0.531 #
- fix(1406): bench ConnTrace dark inside tmux — launch-line env + loud-empty guard (#1416)
1.0.532 #
- ci(quarantine): skip pty_resume_equivalence_test.dart in the gate (flake, https://github.com/IstiN/flutter_agent_harness/issues/1422) (#1423)
- ci(quarantine): skip composer_echo_pty_test.dart in the gate (flake, https://github.com/IstiN/flutter_agent_harness/issues/1413) (#1414)
1.0.533 #
- gh-1412 [GOAL] Near-miss elimination: FinalizeGate contract + TaskLedger — the agent verifies produced state against task text before declaring done (#1418)
- gh-1403 [daily-publish] testflight leg failed (#1424)
- feat(bench): per-task test-budget override table + planner fairness guard (gh-1407) (#1417)
1.0.534 #
- fix(1408): harness-induced bench failures — isolated job logs, redacted at rest, shape-only bash interceptor (AC1–AC3; AC4 documented) (#1410)
- gh-1415 [GOAL] Subagent status line-language: one compact live row per subagent in the CLI TUI (omp-density, ten named deltas) (#1420)
1.0.535 #
- gh-1426 [GOAL] Model capability negotiation (rework): the resolver's loud
notes now ride the built
Model(capabilityNotes) and render on the status surfaces —/model-editprints them next to the resolved triple, and the single-model boot prints them in the boot notice — so a gated pin (E3), an override-vs-endpoint divergence (E1), and a catalog-miss override (E4) are never silent. Also:applicationNote('models')says "applies live to the next model build" (the flow live-applies; "next boot" was wrong), the duplicate_capabilitySummaryForcollapsed onto_capabilitySummary, the two capability remove paths share one_removeCapabilityYamlbody, the omit-max-output menu row names its adapter scope ("openai-completions only"), the deadresolveModelRefCapabilitiesexport is dropped, and the resolver's ceiling-table lookup and documented wire field both read the same effective api (api ?? spec?.api). - Behavior change (gh-1426, deliberate — AC6): pre-existing
thinkingLevelpins (aroles:chain entry, theFA_PROVIDER_CONFIGpreconfig, or amodels.overridespin) now reach the wire for the first time on the openai-completions family (reasoning_effort) and google (thinkingConfig); onorigin/mainthey were carried but wire-silent there. Consequences: (1) REG-1's "no overrides → byte-identical payload" corpus holds only for sessions with NO thinking pin at all — a session with a bare roles pin changes payloads by design; (2) an endpoint that rejectsreasoning_effort(strict gateways, o-series rung spelling) can now 400 where it previously worked — unpin the level (/settings → Model capabilities → thinking level → off) or pinomitMaxOutputTokenswhere the max-output field is the problem. The boot note that claimed the openai-completions adapter "is not wired" to the config-carried level is corrected and now fires only for the genuinely unwired adapters (dial, copilot, chatgpt-codex).
1.0.537 #
- feat(1374): animated two-tone kaomoji thinking indicator — app + web TUI (#1419)
1.0.538 #
- gh-1433 [GOAL] Workflow log fidelity: non-interactive headless renders EVERYTHING the model says — thinking deltas AND assistant text, default-on (the post-hoc log IS the UI) (#1437)
- gh-1425 [GOAL] Resume loses structured-compaction folds — marathon session reopens at 143% of window make fold projection resume-equivalent and cap every detonation path (#1427)
- gh-1430 [GOAL] Headless stream-liveness: fa must heartbeat provably-alive reasoning streams, and the bench stall-gap must defer to fa's own watchdog (round-4 RCA: 13 tasks ≈ 16% killed mid-thinking) (#1436)
- chore(1431): reseed fa-extension size baseline for the 3.47.7 engine rev (#1432)
- gh-1409 [GOAL] Compaction-pinned skill operative lines — instructions must survive folding (image-carrier precedent) (#1428)
- feat(1374): animated two-tone kaomoji thinking indicator — app + web TUI (#1419)
1.0.539 #
- gh-1438 bash_job: resolve near-miss/stale job ids instead of 'unknown background job' dead-ends bound status output GC exited jobs (#1447)
1.0.540 #
- gh-1441 Voxel nodes render as the “Voxel world” placeholder — Fa app builds JsonWidgetRenderer without voxelWorld (fa-craft 0.2.18, voxel-sandbox 1.0.0) (#1445)
1.0.541 #
- feat(1079): SDK slice 6 — IT-5 record-level runtime parity for extension hosts (YoClip scenario) (#1456)
- gh-1449 [GOAL] Orphan-result notices: reported once, never a user turn, always identifies the call (#1451)
- gh-1439 [GOAL] Live-follow etiquette: scrolling up while the agent works never yanks the user back down (TUI + app + web: follow-mode contract + «jump to live» affordance) (#1443)
1.0.542 #
- gh-1450 [GOAL] SSO/OAuth login must always show the full authorization URL and allow opting out of the default browser (CodeMie/OpenRouter/ChatGPT family) (#1464)
1.0.543 #
- gh-1450 [GOAL] SSO/OAuth login must always show the full authorization URL and allow opting out of the default browser (CodeMie/OpenRouter/ChatGPT family) (#1464)
1.0.545 #
- ci(quarantine): skip header_badge_pty_test.dart in the gate (flake, https://github.com/IstiN/flutter_agent_harness/issues/1469) (#1470)
1.0.546 #
- chore(factory): flip engine pin to agents-rel-20261009-181034 (206a8c62) (#1474)
- gh-1477 [BUG] build-mobile Derive version: fetch-depth:0 checkout outgrew its own 10-min timeout — daily leg cancelled mid-fetch (time bomb, grows with every tag) (#1482)
- gh-1444 [GOAL] iOS sandbox ergonomics: skills resolve, networks fail loudly, secrets prove presence, timeouts tell the truth (#1453)
1.0.547 #
- gh-1446 [GOAL] TUI chrome diet: textless fold rule, running/lost-only jobs line, live activity animation in the reserved _ Fa brand slot (#1454)
- fix(1431): size gate survives Flutter rev-hash churn — normalize 20+hex rev dirs, vendored carve-out, exact-patch SDK pin (#1486)
- gh-1471 [GOAL] bench.yml: provider selection for tbench runs (zai-glm default, kimi-for-coding) with a dedicated bench key (#1475)
- gh-1452 Release blocked: CHANGELOG.md exceeds pub.dev 256 KiB cap (262 672 B on main) — v1.0.538 not on pub.dev trim + pre-flight guard needed (#1462)
1.0.548 #
- gh-1478 [ENH] daily-publish auto-filer: signal-first failure excerpts + cancelled-run digests + root-cause dedup (never-again for noise filings) (#1480)
1.0.549 #
- chore: pin factory_ref to agents-rel-20261010-170624 (fb32c3c8) — brings gh-843 ghost fix + gh-840 sweep to the fa tick; live: #1457 ghost #2 BLOCKED with green-on-head (previously cost ~2h) (#1513)
1.0.550 #
- chore: pin factory_ref to agents-rel-20261011-002034 (aa5ddd8bd78e64c9ce77a43b31bc63b40b0f8d7a) — minter fix (gh-848/#849): gh-748 never cancels pre-materialization; unblocks fa #1457/#1520 (ghost-seized) (#1527)
1.0.551 #
- gh-1459 [BUG] Headless exits with live background shell jobs (detached, results lost) — must drain+steer like subagents (gh-1440 run orphaned its full-suite job) (#1463)