@bastani/atomic 0.9.14-alpha.6 → 0.9.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,73 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.9.14] - 2026-08-19
6
+
7
+ Cumulative release of the `0.9.14-alpha.1` – `0.9.14-alpha.5` prereleases. The summary below covers the user-visible outcome of that work; the per-change detail remains in the prerelease sections below.
8
+
9
+ ### Breaking Changes
10
+
11
+ - **The `workflow` parameter on bundled `web_search` is gone.** Models cannot select the curator per call. Persist `"workflow": "summary-review"` in web-search config or run `/curator on` to opt in.
12
+
13
+ ### Added
14
+
15
+ - Two new unbound viewport actions, `tui.altScreen.lineUp` and `tui.altScreen.lineDown`, scroll the transcript by a single line ([#2385](https://github.com/bastani-inc/atomic/issues/2385)).
16
+ - Added the `fullscreenExitOutput` setting with a `/settings` row beside **Fullscreen scrollbar**. `"transcript"` (the default) prints the final transcript and session resume hint when an interactive session exits; `"resume-hint"` restores the terminal's previous screen and prints only the resume hint.
17
+ - Added the `defaultTools` setting, which selects the built-in tools a session starts with — an empty array starts with none — while extension and SDK custom tools stay registered and active, so `workflow`, `subagent`, `intercom`, `mcp`, and `web_search` survive a narrow selection. Explicit `--tools`, `--no-tools`, `--no-builtin-tools`, and `--exclude-tools` keep their precedence, a project array replaces the global array, and an unreadable value reads as unset.
18
+ - Added `--use-theme <name[/name]>`, which selects the interactive theme for one run without writing settings. `atomic --use-theme light/dark` follows terminal appearance; choosing another theme later in `/settings` applies immediately and saves normally, and `/export`/`/share` render with the run's theme.
19
+ - Added `expandPromptTemplates` to `sendUserMessage()`. The default stays `false`, so extension-authored messages keep their literal-send meaning; `true` dispatches registered extension commands and expands skill commands and prompt templates, and an unknown command falls through to a literal send.
20
+ - Added opt-in strict JSON-schema constrained sampling for built-in tool definitions behind the existing experimental gate (`ATOMIC_EXPERIMENTAL=1` or legacy `PI_EXPERIMENTAL=1`). `read`, `bash`, `edit`, `write`, `find`, `search`, `ls`, `ask_user_question`, `todo`, and the harness tool wrapper declare `{ type: "json_schema", strict: "prefer" }` only while the gate is on.
21
+ - Added the Cloudflare AI Gateway Workers AI binding transport to the public surface: `createGatewayBindingFetch`, the `CLOUDFLARE_GATEWAY_BINDING_AUTH_SENTINEL` placeholder credential, and the binding types are re-exported from `@bastani/atomic`, and [Providers](docs/providers.md) documents the no-API-token path.
22
+ - Added the `SessionNameState` type and `getSessionNameState()` to the public SDK surface. `getSessionNameState()` reports whether a session was never named, named and then cleared, or currently holds a name — the distinction the session file already records — where `getLatestSessionName` returns only the name.
23
+ - Same-name skills stay independently selectable. `/skill:name` still uses the current project/user-over-package winner, and Atomic now keeps every distinct file as a source-qualified command such as `/skill:tdd@user` and `/skill:tdd@builtin`. Autocomplete, `pi.getCommands()`, RPC `get_commands`, the model-visible skill list, collision diagnostics, and in-process child `skills` selectors share those identities ([#2328](https://github.com/bastani-inc/atomic/issues/2328)).
24
+ - Added `sessionScopedExtensionState()` to the public surface: a host primitive for extension state that must survive `/reload`. Reloading file extensions re-evaluates their module graph, so module-scoped singletons are recreated while the session keeps running; the primitive returns the state already registered for that session's event bus under a caller-chosen key ([#2462](https://github.com/bastani-inc/atomic/issues/2462) by [@makgunay](https://github.com/makgunay)).
25
+ - `ctx.ui.custom()` accepts `reserveTranscriptRows` for bottom-anchored overlay mounts. A blocking dialog sets it to be height-bounded against the terminal and to have its covered transcript-bottom suffix added to the scroll extent. Reserving overlays require a bottom anchor and reject `row` or a nonzero `offsetY`.
26
+ - `OVERLAY_ACTIVE_ROW_MARKER` is exported for components mounted that way. Embed it in the line you most need kept — the selected row of a list — and the bound places what it keeps around that row instead of taking a fixed head. It is a zero-width APC sequence the host strips before painting.
27
+ - Added HumanLayer's bundled `show-me` skill for visual explanations, diagrams, code-shape sketches, and focused HTML artifacts. Sourced from https://github.com/humanlayer/skills and distributed under the MIT License.
28
+
29
+ ### Changed
30
+
31
+ - Adopted the pi 0.84.2 runtime across all six `@earendil-works/pi-*` dependencies ([#2385](https://github.com/bastani-inc/atomic/issues/2385)). Provider fixes arrive with `pi-ai`: OpenAI Responses namespace handling, DeepSeek `max_tokens` and case-insensitive base URLs, Bedrock empty tool-argument keys, Google length stops alongside tool calls, Codex `end_turn`, upstream buffer retry, Cloudflare strict-tools gating, and DeepSeek V4 Flash low effort. Renderer fixes arrive with `pi-tui`: full-width row painting, repaint after an idle focus loss, LaTeX control-space handling across line endings, focused-overlay wheel/viewport-key deferral, and generic SGR mouse release. Mistral models now stream over a native HTTP transport — the Mistral SDK is no longer installed — and `PI_TUI_ESC_TIMEOUT` (default `100` ms over SSH, `10` ms otherwise) tunes how long the renderer waits after a lone `ESC` before treating it as Escape.
32
+ - Bundled `web_search` no longer opens the curator confirmation UI by default. Persist `"workflow": "summary-review"` in web-search config or run `/curator on` to opt in.
33
+ - The exported `Theme` constructor's color maps now accept the optional `scrollbarThumb` token, with the same fallback encoded in the typebox and JSON theme schemas, so every user-authored theme keeps validating and rendering. Unused leftover `searchMatchBg` / `searchMatchText` keys remain accepted so older theme files still load.
34
+ - Automatic theme detection starts its colour-scheme and background probes concurrently instead of sequentially, halving the worst-case per-startup detection delay from 200 ms to 100 ms.
35
+ - Concurrent interactive model-catalog refreshes share one in-flight pass per runtime and effective network policy — keyed also on credential state and catalog content — so startup's refresh and the `/model` selector's refresh no longer start overlapping passes for the same catalog.
36
+ - Changed the built-in xAI default and the shipped xAI and OpenRouter workflow and subagent fallback chains from Grok 4.5 to Grok 4.6, documented those fallbacks as `xai/grok-4.6:xhigh` and `github-copilot/grok-4.6:xhigh`, and refreshed model-selection guidance from the latest DeepSWE v1.1 and Artificial Analysis v4.1.1 results.
37
+ - Optional DBOS durable execution now makes `/workflow resume` recovery idempotent, re-stamps `executor_id` on a successful step checkpoint, and keeps the SDK's internal admin server off by default.
38
+ - MCP OAuth browser launch now succeeds from WSL when the Linux working directory is not reachable from Windows.
39
+ - `ask_user_question` no longer submits an empty or whitespace-only **Type something.** answer. The readiness-gate tool can treat **Chat about this** as a plain option via `createAskUserQuestionToolDefinition({ chatAsOption: true })`.
40
+
41
+ ### Fixed
42
+
43
+ - **The whole transcript stays readable while the `ask_user_question` dialog is open** ([#2378](https://github.com/bastani-inc/atomic/issues/2378)). The dialog is now pinned to the bottom as an overlay, so the transcript keeps its full viewport height and full page step. The overlay is bounded so at least six transcript rows always survive on a short terminal, and the rows it covers are added back to the transcript's scroll extent. Transcript page, Home/End, and wheel input remain available while the questionnaire's Notes editor is active.
44
+ - **The active questionnaire row stays visible on a short terminal.** The dialog now keeps a window around every active row, including single- and multi-select choices, Next, Submit, Cancel, inline sentinels, and focused text inputs.
45
+ - The `ask_user_question` dialog no longer draws one preview row at the wrong horizontal offset. The active-row mark now terminates its APC string with ST as ECMA-48 requires instead of BEL, and both interactive renderers strip the mark centrally before painting.
46
+ - Interactive startup now exits quietly when Ctrl+C stops the engine during first-paint binding, without leaking expected in-flight RPC transport failures.
47
+ - Bare `/` and slash-command drafts typed while explicitly loaded extension and workflow packages finish loading now remain in the interactive editor until Enter is pressed.
48
+ - Queue-control RPC frames now remain reachable during long-running prompts. When all overlapping remote `clear_queue` calls fail, Atomic restores the pre-clear host queue only if no later `queue_update` has supplied engine truth, including an empty queue ([#2516](https://github.com/bastani-inc/atomic/issues/2516)).
49
+ - Parallel `edit` calls that share a `[path#TAG]` are now applied as one snapshot-anchored batch, so later siblings no longer fail with `file content changed before write` after the first write mints a new tag.
50
+ - PDF extraction no longer throws `TypeError: Math.sumPrecise is not a function` on Node runtimes without that builtin.
51
+ - Updated the Z.AI and Z.AI Coding Plan defaults to the catalog-valid `glm-5.3` model; direct GLM-5.3 chains use `:high`, while OpenRouter and Baseten remain documented provider-specific exceptions because their catalogs do not expose GLM-5.3 ([#2459](https://github.com/bastani-inc/atomic/issues/2459)).
52
+ - Hardened hashline edits against unsafe integer anchors and oversized numeric ranges (inclusive ranges are capped at 100,000 lines before expansion), preserved hunk-looking `+TEXT` rows as literal payloads with a parser warning, omitted the synthetic terminal-newline row consistently across whole-file, truncated, and selector reads for LF and CRLF text while retaining genuine blank lines, and kept copied read output's original terminal-newline state when writing it back.
53
+ - Codex fast mode now sends the real ChatGPT routing contract only when the final request body uses `service_tier: priority`. Final non-priority requests keep `originator: pi` with no routing hint, and routing changes close cached sockets before reuse.
54
+ - `message_update` events on the JSON and RPC wire now carry the cumulative provider-reported `usage` on every streaming update (upstream #7982) and — only when the provider reports one — `endTurn`. A non-assistant message on this event throws instead of emitting an invented zeroed usage.
55
+ - `triggerTurn: false` no longer steers an active run (upstream #8022). A custom message queued with the turn trigger disabled is appended and reaches the model on a later turn instead of being delivered into the running one.
56
+ - The system prompt ends with a newline after the working-directory line, in both the default and custom-prompt branches (upstream #7887).
57
+ - Extension tool output with no registered renderer collapses to a ten-line preview with Atomic's expand hint instead of printing the whole result (upstream #7979).
58
+ - Fullscreen drag-selection copy reports honest failure (upstream #8110). The copy routes through Atomic's clipboard path, so a host clipboard that never received the text flashes "Copy failed" instead of a false "Copied!".
59
+ - A mouse release reported with the generic SGR button code — the form some terminals send (upstream #7963) — ends a fullscreen drag selection.
60
+ - Fullscreen viewport keys keep their Atomic routing on pi-tui 0.84.2. A focused overlay is still offered viewport keys first and the transcript still receives what it declines — including behind the `ask_user_question` dialog.
61
+ - Managed-tool startup status (`fd`/`rg` readiness) reports through the transcript instead of writing to the console, whose output previously landed in and corrupted the fullscreen alternate screen.
62
+ - The `-e`/`--extension` source trust prompt names the product through its branding constant, so a rebranded distribution asks users to trust its own name rather than a hardcoded one.
63
+ - A session that was named and then cleared now reads as cleared rather than never-named. `getLatestSessionName` and the session-list reducer preserve the distinction the session file already records.
64
+ - Corrected the [custom provider](docs/custom-provider.md) reference list and documented the previously undocumented `ModelRuntime` model-catalog options in the [SDK](docs/sdk.md) guide.
65
+
66
+ ### Removed
67
+
68
+ - Removed the `workflow` parameter on bundled `web_search`. Models cannot select the curator per call.
69
+ - Removed fullscreen transcript search. `Ctrl+Shift+F` no longer opens a find box over the main transcript or an attached workflow stage chat; the four `tui.altScreen.search*` actions stay unbound and do nothing.
70
+ - Removed the bundled `@bastani/i-have-adhd` package and its default-on ADHD-friendly response mode. The `/i-have-adhd` command, `--no-adhd` flag, `.i-have-adhd-off` marker, the "ADHD Mode" status badge, and the `stop adhd mode` / `normal mode` control phrases no longer exist; responses now use Atomic's default style.
71
+
5
72
  ## [0.9.14-alpha.5] - 2026-08-19
6
73
 
7
74
  ### Added
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bastani/intercom",
3
- "version": "0.9.14-alpha.6",
3
+ "version": "0.9.14",
4
4
  "private": true,
5
5
  "description": "Atomic extension providing a private coordination channel between parent and child agent sessions. Fork of: https://github.com/nicobailon/pi-intercom",
6
6
  "contributors": [
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.9.14] - 2026-08-19
11
+
12
+ Cumulative release of the `0.9.14-alpha.3` prerelease. The summary below covers the user-visible outcome of that work; the per-change detail remains in the prerelease section below.
13
+
14
+ ### Changed
15
+
16
+ - MCP OAuth now opens the authorization URL from WSL when the Linux working directory is not reachable from Windows.
17
+
10
18
  ## [0.9.14-alpha.3] - 2026-08-17
11
19
 
12
20
  ### Changed
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bastani/mcp",
3
- "version": "0.9.14-alpha.6",
3
+ "version": "0.9.14",
4
4
  "private": true,
5
5
  "description": "Atomic extension that adapts MCP (Model Context Protocol) servers into the coding agent. Fork of: https://github.com/nicobailon/pi-mcp-adapter",
6
6
  "contributors": [
@@ -2,6 +2,27 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.9.14] - 2026-08-19
6
+
7
+ Cumulative release of the `0.9.14-alpha.2` – `0.9.14-alpha.5` prereleases. The summary below covers the user-visible outcome of that work; the per-change detail remains in the prerelease sections below.
8
+
9
+ ### Added
10
+
11
+ - Added pure progress-trend evidence and injected control score-series support that can raise wall-clock attention priority without creating failure states, suppressing signals, or scheduling model calls ([#2489](https://github.com/bastani-inc/atomic/issues/2489)).
12
+ - Agent frontmatter accepts YAML array-form `tools` — flow sequences (`tools: [read, bash]`) and block sequences (`tools:` followed by `- read` lines) — as well as the comma-separated string form, and both spellings produce the same tool set.
13
+ - Extra frontmatter fields round-trip losslessly through the YAML emitter when agent files are rewritten. Sequences now serialize as block collections with hostile keys quoted, so a rewritten file can no longer fail YAML parsing and silently disappear from later scans.
14
+ - In-process children resolve `skills` through the live loader catalog, so source-qualified selectors such as `tdd@builtin` inject the shadowed candidate instead of the precedence winner. Missing or ambiguous selectors are reported on the child result. The parent-only `subagent` orchestration skill remains unavailable, including qualified aliases such as `subagent@builtin` ([#2328](https://github.com/bastani-inc/atomic/issues/2328)).
15
+
16
+ ### Changed
17
+
18
+ - Raised every built-in subagent Grok 4.6 fallback from `xai/grok-4.6:high` to `xai/grok-4.6:xhigh` and added the matching `github-copilot/grok-4.6:xhigh` twin immediately after each xAI id.
19
+
20
+ ### Fixed
21
+
22
+ - A subagent that pins no model of its own now inherits the dispatching session's thinking level alongside its model, matching the parent's tool configuration inheritance. The agent's declared `thinking` and any candidate `:level` suffix still take precedence.
23
+ - In-process JSONL event artifacts now honor `includeJsonl: false` and enforce the existing 50 MiB cap when enabled, preventing unbounded artifact growth ([#2445](https://github.com/bastani-inc/atomic/issues/2445)).
24
+ - Migrated all built-in subagent GLM fallbacks to direct Z.AI `glm-5.3:high` entries, omitting unavailable OpenRouter GLM-5.3 fallbacks ([#2459](https://github.com/bastani-inc/atomic/issues/2459)).
25
+
5
26
  ## [0.9.14-alpha.5] - 2026-08-19
6
27
 
7
28
  ### Added
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bastani/subagents",
3
- "version": "0.9.14-alpha.6",
3
+ "version": "0.9.14",
4
4
  "private": true,
5
5
  "description": "Atomic extension for delegating tasks to subagents with parallel execution. Fork of: https://github.com/nicobailon/pi-subagents",
6
6
  "contributors": [
@@ -4,6 +4,22 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.9.14] - 2026-08-19
8
+
9
+ Cumulative release of the `0.9.14-alpha.3` – `0.9.14-alpha.4` prereleases. The summary below covers the user-visible outcome of that work; the per-change detail remains in the prerelease sections below.
10
+
11
+ ### Changed
12
+
13
+ - The interactive search curator is now opt-in. `web_search` returns raw results unless you set `"workflow": "summary-review"` in web-search config or run `/curator on`.
14
+
15
+ ### Fixed
16
+
17
+ - `fetch_content` PDF extraction no longer throws `TypeError: Math.sumPrecise is not a function` on Node runtimes without that builtin.
18
+
19
+ ### Removed
20
+
21
+ - The `workflow` parameter on `web_search`. The curator is no longer selectable per tool call; enable it with web-search config or `/curator`.
22
+
7
23
  ## [0.9.14-alpha.4] - 2026-08-18
8
24
 
9
25
  ### Changed
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bastani/web-access",
3
- "version": "0.9.14-alpha.6",
3
+ "version": "0.9.14",
4
4
  "private": true,
5
5
  "description": "Atomic extension for web search, URL fetching, GitHub repo cloning, PDF/video extraction. Fork of: https://github.com/nicobailon/pi-web-access",
6
6
  "contributors": [
@@ -6,6 +6,76 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.9.14] - 2026-08-19
10
+
11
+ Cumulative release of the `0.9.14-alpha.1` – `0.9.14-alpha.6` prereleases. The summary below covers the user-visible outcome of that work; the per-change detail remains in the prerelease sections below.
12
+
13
+ ### Breaking Changes
14
+
15
+ - `open-claude-design` removes the `max_refinements` input, the `approved_for_export` and `refinements_completed` outputs, and the `<artifact_dir>/feedback/` feedback artifact. A run now performs one `generate-1`, an optional live review, and export; callers must stop supplying, reading, or expecting those fields and artifacts ([#2401](https://github.com/bastani-inc/atomic/issues/2401)).
16
+ - `adversarial-verification` now accepts optional per-criterion `criteria`, `accept_mean`, and bounded `reask_limit` inputs, and returns deterministic graded mean/veto results through `mean_score` and `score_table_path`; callers must migrate from the removed `result`, `verifier_artifact_paths`, and `artifact_dir` outputs. Invalid verifier reports are recorded as invalid markers and re-asked instead of becoming fail votes ([#2487](https://github.com/bastani-inc/atomic/issues/2487)).
17
+ - Replaced `bracket_path`/`bracket.json` and the knockout tournament schedule with `comparisons_path`/`comparisons.json` on the soft-scored pivot-pairing schedule. Judge stages now use deterministic `judge-<a>-<b>-<criterion>-r<rep>` identities, and the reducer stage is named `comparisons-reducer` ([#2488](https://github.com/bastani-inc/atomic/issues/2488)).
18
+
19
+ ### Added
20
+
21
+ - Added `heartbeatIntervalMinutes` to the workflow authoring surface: an optional cadence in minutes that resolves to the `15`-minute default when omitted, treats `0` as an explicit disable, and rejects negative and non-finite values at authoring time. Every compiled definition carries the resolved value, and the default interval, heartbeat custom type, and heartbeat event types are exported from `@bastani/workflows` ([#1975](https://github.com/bastani-inc/atomic/issues/1975)).
22
+ - Added workflow heartbeat scheduling and queued parent delivery for `heartbeatIntervalMinutes`. While a top-level run is active, one heartbeat is raised per `startedAt + n × interval` boundary computed from the run's persisted start time. Delivery reuses the lifecycle-notice parent path under the distinct `workflows:workflow-heartbeat` custom type, at most one unread heartbeat is outstanding per run, paused runs emit nothing, nested child runs never heartbeat the parent chat, and a durable cadence-anchor keeps a resumed run on its launch cadence ([#1975](https://github.com/bastani-inc/atomic/issues/1975)).
23
+ - Added terminal heartbeat cleanup and restart recovery. Reaching any terminal status drops that run's cadence, queued heartbeats, and durable-anchor memos. A heartbeat whose run has since finished is excluded from the model's context and never steers the parent about a run that is over, while the transcript card remains as a record that the heartbeat was raised ([#1975](https://github.com/bastani-inc/atomic/issues/1975)).
24
+ - Every bundled builtin workflow now states its heartbeat cadence rather than inheriting it. The long autonomous workflows declare the `15`-minute default explicitly; `open-claude-design` sets `0` and runs quiet ([#1975](https://github.com/bastani-inc/atomic/issues/1975)).
25
+ - Added optional run-budget declarations on workflow config, authored definitions, and `workflow` tool runs or resumes. `maxDurationMs`, `maxTokens`, `maxCost`, and `warnAtPercent` resolve per field with run overrides taking precedence over definition and config values; `0` disables a dimension. Invalid declarations now fail validation, and `budget_exceeded` is reserved as a resumable returned blocked status ([#2212](https://github.com/bastani-inc/atomic/issues/2212)).
26
+ - Added duration enforcement for workflow budgets at stage and durable-tool boundaries. Runs emit one user-visible `budget_warning` lifecycle notice at the default 80% threshold or configured threshold, receive one wrap-up turn only when a frontier stage turn is already live, and stop on a resumable `budget_exceeded` blocked rail with a duration report. Paused time is excluded, elapsed time carries across resume, a raised resume budget continues prior spend, root duration scope is enforced inside child workflows, and child-scoped exhaustion returns to the parent without stopping it ([#2212](https://github.com/bastani-inc/atomic/issues/2212)).
27
+ - Added tree-wide token and cost budget metering across nested workflow runs and stage retries. Uncached input and output tokens feed `maxTokens`, cache reads and writes remain reported counters, `usage.cost` feeds `maxCost`, and persisted accounting baselines prevent duplicate charges across boundaries and resume ([#2212](https://github.com/bastani-inc/atomic/issues/2212)).
28
+ - Added optional per-attempt `timeoutMs` deadlines to `ctx.tool`. Expiry aborts the attempt signal, records a timeout-specific diagnostic, participates in retries, and follows the existing throwing or typed `failureMode: "return"` behavior ([#2424](https://github.com/bastani-inc/atomic/issues/2424)).
29
+ - Stage control registries expose `has(runId)` so a pruned registration map is distinguishable from an empty one after `clearDetached()` ([#2462](https://github.com/bastani-inc/atomic/issues/2462)).
30
+ - Refined `ctx.tool` graph inspection into one read-only agent-chat-style tool message block. Enter, click, or switcher selection opens it collapsed by default; the configured `app.tools.expand` action (`ctrl+o` by default) toggles the full bounded args, result/error, callback source, timing, and cached/replayed markers ([#2427](https://github.com/bastani-inc/atomic/issues/2427)).
31
+ - Added a shared `verification-criteria` module (`parse_rubric`, `normalize_criteria`, `select_criteria`, `VERIFICATION_SCALE`, `decide_verification`) so verification builtins can score one criterion at a time on an anchored 1–20 scale and accept only when a quorum mean clears the threshold with no veto finding ([#2487](https://github.com/bastani-inc/atomic/issues/2487)).
32
+ - Added prefix-cache-aware verification prompts with a byte-identical shared head, UTF-8 bounded candidate inlining with whole-family read fallback, and warm-first verifier fan-out scheduling ([#2493](https://github.com/bastani-inc/atomic/issues/2493)).
33
+ - `adversarial-verification` now fans out one schema-validated 1–20 score for every criterion/verifier pair, applies mean-plus-veto acceptance, bounds invalid-report re-asks, and consolidates confirmed findings into repair guidance ([#2487](https://github.com/bastani-inc/atomic/issues/2487)).
34
+ - Added pure, seeded selection math for probabilistic pivot tournaments: deterministic Hamiltonian ring and deduplicated pivot planning, criterion/repeat slot-swap jobs, normalized Bradley–Terry soft wins, count-normalized pivot selection, and complete candidate rankings ([#2488](https://github.com/bastani-inc/atomic/issues/2488)).
35
+ - Added tournament `n_evaluations`, `pivots`, `seed`, `criteria`, and heterogeneous `models` inputs, plus `ranking` and `seed` outputs and the auditable `comparisons.json` score ledger with invalid-report and budget records ([#2488](https://github.com/bastani-inc/atomic/issues/2488)).
36
+ - Added Goal and Ralph review-round re-verification for low-confidence, single-reviewer blocking findings, using fresh 1–20 scoring stages, two-tier demotion bars, and durable per-repeat audit evidence while leaving `stop_review_loop` authoritative.
37
+ - Added pure `fold_usage` accounting over every model attempt (including retries), returning `UsageTotals` with a derived cache-hit rate; tournament comparisons and adversarial verification round summaries now record per-phase and total usage blocks ([#2494](https://github.com/bastani-inc/atomic/issues/2494)).
38
+ - Added observation-grounded progress scoring with batched checkpoint repeats, null-safe invalid-repeat handling, and a pure hysteretic trend classifier that reports evidence without an action ([#2489](https://github.com/bastani-inc/atomic/issues/2489)).
39
+ - Added Goal and Ralph per-round convergence evidence series with V7 trend classification, folded usage totals, and escalation-only `needs_human` evidence that never approves or terminates a review loop ([#2490](https://github.com/bastani-inc/atomic/issues/2490)).
40
+ - Added reviewer calibration rules that prioritize observed output over agent narration, plus audit-only 1–20 `criterion_scores` in Goal and Ralph review decisions without changing the authoritative closure gate ([#2494](https://github.com/bastani-inc/atomic/issues/2494)).
41
+ - Added loop-until-done progress consumers that record per-iteration advisory score curves, final trends, and calibration disclaimers in completion and exhaustion reports without changing stop decisions ([#2489](https://github.com/bastani-inc/atomic/issues/2489)).
42
+ - Added HumanLayer's bundled `show-me` skill for visual explanations, diagrams, code-shape sketches, and focused HTML artifacts. Sourced from https://github.com/humanlayer/skills and distributed under the MIT License.
43
+ - Updated the bundled `create-spec` skill to choose context-driven Path A or clarify-first Path B, inspect local precedent before design decisions, compare materially different alternatives, and use show-me shape-first visuals. Working-method guidance is drawn from Dillon Mulroy's [tech-spec skill](https://github.com/dmmulroy/skills/blob/main/tech-spec/SKILL.md).
44
+
45
+ ### Changed
46
+
47
+ - Redesigned the `ctx.tool` inspection surface as a shaded host-style operator card: a `$` call header, a tail preview with an exact earlier-lines expand hint, `Took`/`Elapsed` timing, and a graph statusline that advertises the configured expand key. The forensic ARGS/RESULT/SOURCE/TIMING/MARKERS field table is gone from the operator surface.
48
+ - Synchronized the complete bundled `impeccable` skill tree from upstream `skill-v4.0.3` to `skill-v4.1.1`, adding persisted Live roots, framework-aware injection, prompt embedding, CSS acceptance checks, Svelte AST support, mount verification, UI-surface contracts, and the latest detector and design guidance ([#2382](https://github.com/bastani-inc/atomic/issues/2382)).
49
+ - Impeccable concept rolls now include platform, grain, register, and card-kind fields and use a bounded `impeccable.style` fallback when no local catalog exists. The OpenAI image fallback supports reference-image edits and generated images only when `OPENAI_API_KEY` is present ([#2382](https://github.com/bastani-inc/atomic/issues/2382)).
50
+ - Removed upstream Impeccable's outbound telemetry and update check from the bundled skill. The only request the concept roll can still make is the catalog `GET /api/roll` ([#2382](https://github.com/bastani-inc/atomic/issues/2382)).
51
+ - The `open-claude-design` live review session is now the final review boundary: ending it exports the design as it stands with no further round. The run-level gate retains `Start live review` and `Skip remaining review rounds and export as-is` ([#2401](https://github.com/bastani-inc/atomic/issues/2401), [#2382](https://github.com/bastani-inc/atomic/issues/2382)).
52
+ - Added model-visible workflow source-layout guidance: keep compact workflows in one entry file, and extract only cohesive prompt, schema/type, model-policy, deterministic-helper, or child-workflow concerns at meaningful boundaries ([#2451](https://github.com/bastani-inc/atomic/issues/2451)).
53
+ - Migrated the built-in Goal, Ralph, and open-claude-design model chains from active GLM-5.2 entries to direct Z.AI `zai/glm-5.3:high` and `zai-coding-cn/glm-5.3:high` fallbacks, and raised Grok 4.6 fallbacks from `:high` to `:xhigh` with a matching `github-copilot/grok-4.6:xhigh` twin ([#2459](https://github.com/bastani-inc/atomic/issues/2459)).
54
+
55
+ ### Fixed
56
+
57
+ - Fixed consumer TypeScript errors in `selection-math` when `noUncheckedIndexedAccess` is enabled ([#2543](https://github.com/bastani-inc/atomic/issues/2543)).
58
+ - Opened `ctx.tool` detail now matches the main-chat tool block: inner padding, a blank row under the `$` header, full-width alignment, host tool colors, a dim expand hint, and second-resolution timing.
59
+ - Tournament criteria now accepts every documented V1 shape, including markdown rubrics, records, string lists, and CriterionInput objects with optional ids and names.
60
+ - Criterion ids are preserved in the ledger while judge artifact filenames are sanitized, collision-free, and contained under the artifact directory.
61
+ - Corrected the planned comparison budget for oversized pivot counts and recorded each comparison row's own soft preference separately from pair aggregates.
62
+ - Readiness-gate **Type something.** now stays in the stage and sends the typed text as the next stage-chat turn. Empty or whitespace-only custom text cannot be submitted. **Chat about this** is a plain option on the gate.
63
+ - Fixed `ask_user_question` failing every workflow stage that called it while the graph viewer was attached. An overlay request now mounts on the stage chat's existing custom-UI slot instead of rejecting overlay mode in the graph viewer.
64
+ - Hardened the synced Impeccable executables against shell-based browser launch, remote browser URLs, project-root and symlink escapes, unsafe persisted roots and injection journals, non-atomic generated writes, untrusted live instructions, read failures reported as clean, and unbounded or malformed live protocol values ([#2382](https://github.com/bastani-inc/atomic/issues/2382)).
65
+ - Operator-card wrapping no longer drops a `/` or punctuation that could not fit on a truncated row.
66
+ - An unbound `app.tools.expand` no longer leaves a keyless `expand`/`collapse` label on the `ctx.tool` operator-card statusline.
67
+ - Workflow run-scoped singletons now survive `/reload`'s module re-evaluation. The replacement extension instance re-binds its store, stage-control registry, cancellation registry, tool-control registry, job tracker, and stage UI broker to the host session-scoped state ([#2462](https://github.com/bastani-inc/atomic/issues/2462) by [@makgunay](https://github.com/makgunay)).
68
+ - Process-preserving session boundaries (`/reload`, `/fork`, `/new`, `/resume`) no longer kill in-flight workflow runs or drop live executor stage handles. `/reload` reuses the host event bus so the replacement session can still list and control the run; `/new`, `/resume`, and `/fork` get fresh registries and do not list it ([#2462](https://github.com/bastani-inc/atomic/issues/2462), [#2247](https://github.com/bastani-inc/atomic/issues/2247) by [@makgunay](https://github.com/makgunay)).
69
+ - DBOS lifecycle state and the registered `atomicWorkflowHandle` / `atomicWorkflowCheckpoint` wrappers now live in a process-global `globalThis` slot, so a re-evaluated workflows bundle reuses the original registrations instead of colliding with the still-live SDK registry ([#2462](https://github.com/bastani-inc/atomic/issues/2462), [#2022](https://github.com/bastani-inc/atomic/issues/2022) by [@makgunay](https://github.com/makgunay)).
70
+ - A duplicate DBOS operation registration is no longer reported as a Postgres provisioning failure. The durability error and the non-durable fallback warning now name the registration conflict and no longer suggest changing `DBOS_SYSTEM_DATABASE_URL` ([#2462](https://github.com/bastani-inc/atomic/issues/2462), [#2022](https://github.com/bastani-inc/atomic/issues/2022) by [@makgunay](https://github.com/makgunay)).
71
+ - Fixed `workflow send` answers for primitive human-in-the-loop prompts. Confirm answers now preserve booleans and accept the documented yes/no labels, select answers resolve case-insensitive labels or 1-based indexes, and unusable answers remain pending ([#2417](https://github.com/bastani-inc/atomic/pull/2417) by [@makgunay](https://github.com/makgunay)).
72
+ - Separated schema-backed workflow result data from runner-owned output artifacts. When a stage configures both `schema` and `output`, the successful `structured_output` arguments remain the typed machine-readable result while ordinary text from that tool-call message becomes the human-readable artifact. Builtin `adversarial-verification`, `generate-and-filter`, `tournament`, and `loop-until-done` now persist their structured decisions themselves so their `*.json` inter-stage artifacts remain machine-readable ([#2198](https://github.com/bastani-inc/atomic/issues/2198)).
73
+
74
+ ### Removed
75
+
76
+ - Removed find-in-stage-chat. `Ctrl+Shift+F` in an attached workflow stage chat no longer opens a search box over that chat.
77
+ - Removed the live-review feedback module and all `<artifact_dir>/feedback/` artifacts, including the JSON record, `iteration-N.md` copy, and annotated-snapshot copies ([#2401](https://github.com/bastani-inc/atomic/issues/2401)).
78
+
9
79
  ## [0.9.14-alpha.6] - 2026-08-19
10
80
 
11
81
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bastani/workflows",
3
- "version": "0.9.14-alpha.6",
3
+ "version": "0.9.14",
4
4
  "private": true,
5
5
  "description": "Atomic extension for multi-stage workflow authoring and execution.",
6
6
  "contributors": [
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@bastani/atomic",
3
- "version": "0.9.14-alpha.6",
3
+ "version": "0.9.14",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@bastani/atomic",
9
- "version": "0.9.14-alpha.6",
9
+ "version": "0.9.14",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
- "@bastani/atomic-natives": "0.9.14-alpha.6",
12
+ "@bastani/atomic-natives": "0.9.14",
13
13
  "@dbos-inc/dbos-sdk": "4.25.14",
14
14
  "@earendil-works/pi-agent-core": "^0.84.2",
15
15
  "@earendil-works/pi-ai": "^0.84.2",
@@ -517,18 +517,18 @@
517
517
  }
518
518
  },
519
519
  "node_modules/@bastani/atomic-natives": {
520
- "version": "0.9.14-alpha.6",
521
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives/-/atomic-natives-0.9.14-alpha.6.tgz",
520
+ "version": "0.9.14",
521
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives/-/atomic-natives-0.9.14.tgz",
522
522
  "license": "MIT",
523
523
  "optionalDependencies": {
524
- "@bastani/atomic-natives-darwin-arm64": "0.9.14-alpha.6",
525
- "@bastani/atomic-natives-darwin-x64": "0.9.14-alpha.6",
526
- "@bastani/atomic-natives-linux-arm64-gnu": "0.9.14-alpha.6",
527
- "@bastani/atomic-natives-linux-arm64-musl": "0.9.14-alpha.6",
528
- "@bastani/atomic-natives-linux-x64-gnu": "0.9.14-alpha.6",
529
- "@bastani/atomic-natives-linux-x64-musl": "0.9.14-alpha.6",
530
- "@bastani/atomic-natives-win32-arm64-msvc": "0.9.14-alpha.6",
531
- "@bastani/atomic-natives-win32-x64-msvc": "0.9.14-alpha.6"
524
+ "@bastani/atomic-natives-darwin-arm64": "0.9.14",
525
+ "@bastani/atomic-natives-darwin-x64": "0.9.14",
526
+ "@bastani/atomic-natives-linux-arm64-gnu": "0.9.14",
527
+ "@bastani/atomic-natives-linux-arm64-musl": "0.9.14",
528
+ "@bastani/atomic-natives-linux-x64-gnu": "0.9.14",
529
+ "@bastani/atomic-natives-linux-x64-musl": "0.9.14",
530
+ "@bastani/atomic-natives-win32-arm64-msvc": "0.9.14",
531
+ "@bastani/atomic-natives-win32-x64-msvc": "0.9.14"
532
532
  },
533
533
  "engines": {
534
534
  "bun": ">=1.3.14",
@@ -536,8 +536,8 @@
536
536
  }
537
537
  },
538
538
  "node_modules/@bastani/atomic-natives-darwin-arm64": {
539
- "version": "0.9.14-alpha.6",
540
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-arm64/-/atomic-natives-darwin-arm64-0.9.14-alpha.6.tgz",
539
+ "version": "0.9.14",
540
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-arm64/-/atomic-natives-darwin-arm64-0.9.14.tgz",
541
541
  "license": "MIT",
542
542
  "os": [
543
543
  "darwin"
@@ -548,8 +548,8 @@
548
548
  "optional": true
549
549
  },
550
550
  "node_modules/@bastani/atomic-natives-darwin-x64": {
551
- "version": "0.9.14-alpha.6",
552
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-x64/-/atomic-natives-darwin-x64-0.9.14-alpha.6.tgz",
551
+ "version": "0.9.14",
552
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-x64/-/atomic-natives-darwin-x64-0.9.14.tgz",
553
553
  "license": "MIT",
554
554
  "os": [
555
555
  "darwin"
@@ -560,8 +560,8 @@
560
560
  "optional": true
561
561
  },
562
562
  "node_modules/@bastani/atomic-natives-linux-arm64-gnu": {
563
- "version": "0.9.14-alpha.6",
564
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-gnu/-/atomic-natives-linux-arm64-gnu-0.9.14-alpha.6.tgz",
563
+ "version": "0.9.14",
564
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-gnu/-/atomic-natives-linux-arm64-gnu-0.9.14.tgz",
565
565
  "license": "MIT",
566
566
  "os": [
567
567
  "linux"
@@ -575,8 +575,8 @@
575
575
  "optional": true
576
576
  },
577
577
  "node_modules/@bastani/atomic-natives-linux-arm64-musl": {
578
- "version": "0.9.14-alpha.6",
579
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-musl/-/atomic-natives-linux-arm64-musl-0.9.14-alpha.6.tgz",
578
+ "version": "0.9.14",
579
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-musl/-/atomic-natives-linux-arm64-musl-0.9.14.tgz",
580
580
  "license": "MIT",
581
581
  "os": [
582
582
  "linux"
@@ -590,8 +590,8 @@
590
590
  "optional": true
591
591
  },
592
592
  "node_modules/@bastani/atomic-natives-linux-x64-gnu": {
593
- "version": "0.9.14-alpha.6",
594
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-gnu/-/atomic-natives-linux-x64-gnu-0.9.14-alpha.6.tgz",
593
+ "version": "0.9.14",
594
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-gnu/-/atomic-natives-linux-x64-gnu-0.9.14.tgz",
595
595
  "license": "MIT",
596
596
  "os": [
597
597
  "linux"
@@ -605,8 +605,8 @@
605
605
  "optional": true
606
606
  },
607
607
  "node_modules/@bastani/atomic-natives-linux-x64-musl": {
608
- "version": "0.9.14-alpha.6",
609
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-musl/-/atomic-natives-linux-x64-musl-0.9.14-alpha.6.tgz",
608
+ "version": "0.9.14",
609
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-musl/-/atomic-natives-linux-x64-musl-0.9.14.tgz",
610
610
  "license": "MIT",
611
611
  "os": [
612
612
  "linux"
@@ -620,8 +620,8 @@
620
620
  "optional": true
621
621
  },
622
622
  "node_modules/@bastani/atomic-natives-win32-arm64-msvc": {
623
- "version": "0.9.14-alpha.6",
624
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-arm64-msvc/-/atomic-natives-win32-arm64-msvc-0.9.14-alpha.6.tgz",
623
+ "version": "0.9.14",
624
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-arm64-msvc/-/atomic-natives-win32-arm64-msvc-0.9.14.tgz",
625
625
  "license": "MIT",
626
626
  "os": [
627
627
  "win32"
@@ -632,8 +632,8 @@
632
632
  "optional": true
633
633
  },
634
634
  "node_modules/@bastani/atomic-natives-win32-x64-msvc": {
635
- "version": "0.9.14-alpha.6",
636
- "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-x64-msvc/-/atomic-natives-win32-x64-msvc-0.9.14-alpha.6.tgz",
635
+ "version": "0.9.14",
636
+ "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-x64-msvc/-/atomic-natives-win32-x64-msvc-0.9.14.tgz",
637
637
  "license": "MIT",
638
638
  "os": [
639
639
  "win32"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bastani/atomic",
3
- "version": "0.9.14-alpha.6",
3
+ "version": "0.9.14",
4
4
  "description": "Atomic coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "atomicConfig": {
@@ -83,7 +83,7 @@
83
83
  "prepublishOnly": "bun run clean && bun run build && bun run shrinkwrap"
84
84
  },
85
85
  "dependencies": {
86
- "@bastani/atomic-natives": "0.9.14-alpha.6",
86
+ "@bastani/atomic-natives": "0.9.14",
87
87
  "@dbos-inc/dbos-sdk": "4.25.14",
88
88
  "@earendil-works/pi-agent-core": "^0.84.2",
89
89
  "@earendil-works/pi-ai": "^0.84.2",