Commit Graph

285 Commits

Author SHA1 Message Date
CodeWhale Bot 05efea2109 fix(tui): gate POSIX-only bash stream test to unix; bump source budget
lowercase_bash_returns_one_ordered_stream uses printf/redirection
syntax that Windows cmd cannot execute; it ran on Windows CI only
after the pi_output compile gap was fixed and failed deterministically.
Gate it to unix like its neighbor. The approval-test failure on
Windows is being rerun to separate a flake from a real defect.
Source budget follows the added lines (687594).
2026-08-11 21:36:18 -07:00
CodeWhale Bot b28d66e98b fix(tui): make catalog pinning tests hermetic to host tool availability
The exact-surface tests hardcoded tools whose registration is gated on
local backends: image_ocr (tesseract/native OCR) and pandoc_convert
(pandoc binary). CI runners and Linux containers lack those, so the
pinned catalogs drifted and CI has been red for these tests all day.
Expected sets now follow ocr_available()/resolve_pandoc(), and the
image_ocr allowed-tool assert is conditional the same way.

Verified in both directions: macOS host (tesseract + pandoc present)
and rust:1.97.1 Linux container (neither) — all four tests pass.
Also raises the source-structure budget by 4 lines for the rename.
2026-08-11 20:34:06 -07:00
CodeWhale Bot bf6def00d7 fix(tui): keep progress and shell work reachable 2026-08-11 18:21:09 -07:00
CodeWhale Bot 1ed798db56 fix(release): honor SOURCE_DATE_EPOCH in bundles (#5312)
Derive archive mtimes from the pinned source commit in release artifacts, retain reproducible archive bytes and executable modes, and cover metadata plus input validation.
2026-08-11 15:02:30 -07:00
CodeWhale Bot 2d6fe4fde6 feat(tui): finish the v0.9.6 runtime contract
Adopt the six-tool lowercase surface, keep To-do state out of repeated provider prompts, and store Codex-style compaction checkpoints in ordinary history. Preserve provider-specific reasoning continuity, typed image tool results, role capability boundaries, ACP tool turns, and exact regression coverage across the runtime.
2026-08-11 06:16:13 -07:00
CodeWhale Bot f62d113166 chore(gates): record the promoted v0.9.6 source budget 2026-08-10 18:17:06 -07:00
CodeWhale Bot ddc4e231a2 chore(release): drop the unreferenced verify-workspace-version gate
`scripts/release/verify-workspace-version.sh` had zero references anywhere:
no workflow under `.github/workflows/`, no `.cnb.yml` job, no runbook
(`docs/RELEASE_RUNBOOK.md`, `docs/RELEASE_CHECKLIST.md`), no other script,
and no entry in the private ops repo. A repo-wide ripgrep across all file
types (hidden files included, `target/` excluded) matched only the file's
own path.

Its job is fully subsumed by two gates that are wired in:
- `require-release-tag-checkout.sh:9-30` refuses to publish unless HEAD is
  exactly `refs/tags/v<workspace_version>` on a clean tree, which is the
  tag-vs-workspace agreement this script re-derived from `GITHUB_REF`.
- `check-versions.sh` check #1 forbids literal per-crate `version =` values,
  so `cargo metadata` versions cannot diverge from the workspace version in
  the first place.

Proof: `bash scripts/release/check-versions.sh && bash scripts/release/require-release-tag-checkout.test.sh`
Result: pass — "Version state OK: workspace=0.9.6, npm=0.9.6, lockfile in
sync." then "Release checkout gate OK: clean v0.9.6 at 3815bd705." and
"require-release-tag-checkout tests passed" (exit 0).

Implemented with Claude Code agent assistance.
2026-08-10 15:30:09 -07:00
CodeWhale Bot add98ef1c6 test(gates): add the v0.9.6 runtime continuity suite runner
One command for the provider-neutral invariants the v0.9.6 release repaired:
parent-request compaction pressure, replace-not-stack summaries, the stable
cache prefix, queue-behind-turn manual compaction, durable compaction
receipts, truthful reasoning display, and live shell-wait progress.

Verified: ./scripts/continuity-suite.sh — all three gates PASS.

Implemented with Claude Code agent assistance.
2026-08-10 13:06:08 -07:00
CodeWhale Bot 59882c9f27 chore(gates): record the post-fix source budget for 0.9.6
Advance the aggregate owned-Rust ceiling from 684375 to the measured
685062 lines after the post-review fix set (rail/todo visibility, ⌥V
row details, telemetry notice rewording, screencapture stabilization,
fleet read-only web parity, and their regression tests). Module and
large-module ceilings are unchanged; the structure gate passes at the
recorded values.
2026-08-10 03:16:53 -07:00
CodeWhale Bot e81ed33fcc fix(release): finish the v0.9.6 candidate
Move first-run usage disclosure into the native TUI, keep telemetry unarmed until the decision, and order all telemetry writes and delivery against persistent opt-out with fail-closed setup-state handling.

Replace the narrow wide-terminal rail with a responsive full-screen ocean canvas, preserve readable prose measure, and remove per-call padding inside grouped tool activity.

Verified with formatting, clippy, locale/version/budget gates, the 10,120-test TUI library suite, telemetry/config suites, focused UI/PTy coverage, and independent release/UI review. The sandbox-only loopback acceptance rerun remains explicitly environmental.

Agent assistance: Claude and Codex were used for implementation analysis and verification.
2026-08-09 22:41:53 -07:00
CodeWhale Bot 12d4f7b845 chore(gates): record the reconciled 0.9.6 source budget
Advance the explicit maximum-module and aggregate Rust ceilings to the measured release-candidate tree after the v0.9.6 lane reconciliation. The structure gate remains one-way and passes at the recorded values.
2026-08-09 19:11:08 -07:00
CodeWhale Bot be5c8f8bfd chore(release): prepare 0.9.6
Bump the workspace, every published crate, the npm CLI package and its
codewhaleBinaryVersion, the runtime SDK, and the VS Code extension to 0.9.6 —
the four version sources the release workflow cross-checks before it will
tag.

The changelog entry describes v0.9.6 as what it is: a subtractive release.
The guards that interrupted live work, the per-mode prompt doctrine, and the
deterministic second compaction system are gone; a truncated provider
response can no longer be recorded as a finished answer. Most of these were
found by running v0.9.5 against Terminal-Bench 2.1 beside Pi 0.8.41 on the
same model, effort, endpoint, and task digests, then reading the trials
Codewhale lost — so the entry names those trials rather than describing the
fixes in the abstract.

Mistral AI ships in this release; Xavier Pestel (@xavierpestel-ai) is
credited in the contributors section for #5295.
2026-08-09 01:02:51 -07:00
CodeWhale Bot 5798de8b39 build(release): native musl for Linux ARM64, and reconciled copy
Three v0.9.5 benchmark tasks could not launch Codewhale at all:
mteb-leaderboard, mteb-retrieve, and pytorch-model-recovery run older ARM64
images, and the aarch64-unknown-linux-gnu artifact built on ubuntu-24.04-arm
requires GLIBC_2.39.

Release and nightly now build aarch64-unknown-linux-musl on the native ARM
runner, alongside the x64 musl build that has shipped since v0.8.65. Both
gain a static check (no ELF INTERP) plus a launch smoke on the matching
native runner, so a dynamically linked or non-starting binary fails the
build rather than the user's install. docs/INSTALL.md drops the arm64 glibc
floor section and describes the v0.9.6 matrix.

Also reconciles the copy the earlier commits invalidated: setup ratification
text and all 15 locales stop attributing execution doctrine to "mode
prompts", docs/MODES.md states Auto-Review's actual deterministic
allow/deny behavior, and the source-structure, dead-code, and
runtime-contract budgets are re-measured — the last locking down 25
decreased ceilings and the new mode-agnostic prompt-stage digests.
2026-08-09 00:52:42 -07:00
CodeWhale Bot 5763000c92 test(release): cover invalid crate inventories
Signed-off-by: CodeWhale Bot <bot@codewhale.net>
2026-08-08 18:06:07 -07:00
CodeWhale Bot 4a6933754e fix(release): validate crate publication order
Signed-off-by: CodeWhale Bot <bot@codewhale.net>
2026-08-08 17:58:32 -07:00
CodeWhale Bot 519c42f050 chore(gates): record final release fixes
Reconcile the aggregate Rust ledger at 685165 lines after the release-gate repairs for session persistence, Scout authority, compact layout, provider-test isolation, and fetched relative links. Package, binary, large-module count, and largest-module ceilings do not grow.

Verified with the source-structure checker and JSON parsing through the checker.
2026-08-08 03:09:17 -07:00
CodeWhale Bot 7f60a6a200 chore(gates): record final 0.9.5 ownership
Rebaseline the paused persistence receipt after eliminating duplicate queued history: retained payload drops from 16,924,032 bytes in the broken candidate to roughly 8,528,000 bytes. The ceiling is under 0.5% above the pre-journal schema and includes 0.015% headroom over the largest of repeated clean samples.

Record the final net source delta at 86 lines above the prior review ceiling with no new package, binary, or thousand-line module. Verified with both budget checker suites, repeated clean measurements, JSON validation, and the source-structure gate.
2026-08-08 02:39:10 -07:00
CodeWhale Bot ef6104957d fix(release): close consolidated runtime contract gaps
Keep provider-neutral auto selection in the provider-aware TUI and launch workflow lanes from the exact running executable. Repair CNB and installer alias contracts, refresh legacy website-installed TUI bytes during upgrades, and make account pull reject an unimplemented local import truthfully.\n\nVerified with focused CLI/config tests, strict Clippy, workflow contracts, shell syntax checks, and hermetic web installer tests.
2026-08-08 02:24:47 -07:00
CodeWhale Bot 001921d056 fix(ci): target persistence measurement library test
Run the ignored persistence backlog receipt test from the TUI library after the integration target move. Pin the exact Cargo command in a hermetic harness test and reject successful zero-test or missing-receipt runs so future test relocations fail clearly.
2026-08-08 01:56:19 -07:00
CodeWhale Bot a701490dde fix(release): smoke the two published commands
The npm wrapper exposes codewhale and codew, while v0.9.5 keeps codewhale-tui only as legacy asset filenames for old updater compatibility. Stop npx from resolving a nonexistent codewhale-tui package during the release smoke and make the runbook describe the single compiled runtime accurately.

Verified with the full local npm wrapper smoke against the exact 0.9.5 release binary, node syntax checking, and the website documentation contract.
2026-08-08 01:20:37 -07:00
CodeWhale Bot de256a794a chore(gates): reconcile the Scout evidence boundary
Record the measured 684,975-line production source boundary for the shared normal/headless Scout authority contract. The same update locks in the existing largest-module improvement from 17,700 to 17,680 lines and removes main.rs from the thousand-line allowlist.

No package, binary, or large-module count is added. Verified with scripts/check-source-structure-budget.py.
2026-08-08 01:12:50 -07:00
CodeWhale Bot e54b8043df fix(gates): measure the library runtime contract
Run each ignored receipt test against its exact library path and reject Cargo's successful zero-test result explicitly. Keep the standalone tool-catalog measurement and current verification guidance on the same target, with hermetic command and failure regressions wired into CI.

The repaired measurement exposed a real duplicate AGENTS.md injection from the bounded fragment importer. Keep canonical project-context sources single-owned while still importing additional rule formats through the typed, capped fragment boundary; this restores the checked-in prompt identity without raising the budget.

Verified with the full 55-metric runtime-contract checker, focused core and TUI regressions, both Python harness suites, cargo fmt, and all-target clippy for codewhale-core and codewhale-tui.
2026-08-07 21:56:00 -07:00
CodeWhale Bot dd84af2297 chore(release): prepare 0.9.5 candidate
Bump every tagged package and internal dependency pin to 0.9.5, refresh Cargo and npm lock records, regenerate the packaged changelog and web facts, and record the user-visible candidate contract. The changelog deliberately remains marked Unreleased candidate until the rebuilt binary is dogfooded and publication is explicitly approved.
2026-08-07 21:47:47 -07:00
CodeWhale Bot 2f5a824c19 fix(release): bump every tagged package
Release preparation now updates the runtime SDK and VS Code extension manifests and locks alongside the Rust and npm wrapper versions. The normal version gate checks the same records that the tag workflow requires, and the transactional fixture proves the expanded bump and rollback set.
2026-08-07 21:44:24 -07:00
CodeWhale Bot e291350b4c fix(release): bridge the 0.9.5 single runtime
Build codewhale once, expose the verified bytes as codew across release channels, and retain seven TUI-named release aliases solely so shipped v0.9.4 clients can discover and cross the transition. Current installers and containers expose only codewhale and codew.\n\nVerified with the npm asset suite, exact 34-asset assembly, workflow contract, Homebrew renderer, release-body, dogfood installer, and shell syntax tests.\n\nRefs #5259
2026-08-07 21:36:17 -07:00
CodeWhale Bot 23be47ab6b chore(budget): bump aggregate ceiling for session-tree 5262 (683000 -> 684000) 2026-08-07 06:29:29 -07:00
CodeWhale Bot cae5626e6c feat(session-tree): append-only entry journal + /tree /branch /fork /resume (#5262)
- Every session entry carries id + parentId, leafId tracks active position,
  in-memory tree projects from journal, context rebuilds root->leaf.
- Tree operations as commands: /tree (render), /branch (move leaf only,
  never rewrites history), /fork (new session from any node, interactive
  picker per #576 via /fork picker), /resume (picker + foreign-session
  import/export container).
- branch_summary and compaction entries are first-class SessionEntryKind
  variants (data shape lands now, strategies deferred).
- Spawn-depth tracking on SessionMetadata and Journal; fork increments.
- Foreign-session import/export via SessionImportContainer so /resume can
  ingest sessions from other agents.
- SavedSession journal migration: old linear messages -> journal entries
  with linked parent chain, leaf = last; new sessions write both journal
  and derived messages for compat. Atomic write/fsync/crash-checkpoint
  and MAX_SESSIONS=50 preserved.
- Shares entry shape with compaction (same SessionEntry envelope).

Co-depends on #5261 engine split (core journal placeholder already
landed in parallel work on same branch).
2026-08-07 06:29:10 -07:00
CodeWhale Bot 0918686b19 feat(rc): /rc remote control + managed login (5265)
Implement end-to-end dogfood for the account-owned web remote control
in the single-binary TUI consolidated by 5259, plus the managed login
account layer twin (Hmbown/cwc 187).

Remote control (crates/tui/src/remote_control.rs):
- Survives token TTL: proactive JWT 60s refresh plus single 401 retry
  with refresh then reconnect, no 401 loop (cwc 140 pattern). On revoked
  re-enrolls via device flow. Heartbeat 25s, sync 1.2s, typed relay
  Prompt/Approval/Control, bounded validation, ownership-restore.
- Enrollment persisted in global 0600 OS keyring/file store (not repo
  local), validated absolute control-plane base.

Managed login (crates/cli/src/cloud.rs, crates/secrets/src/account.rs):
- codewhale cloud login device flow, status, logout, keys (BYOK vault)
  persists refreshable account session in durable global secret storage
  (OS keyring, CODEWHALE_CLOUD_ALLOW_FILE_SESSION_STORE opt-in file).
  CODEWHALE_CLOUD_API_BASE origin validation (HTTPS except loopback for
  staging dogfood 5062) and verification URL trust.
- Bearer custody: never in config.toml (5226). OS keyring slot
  codewhale-cloud-auth-v1-sha256(profile+api_base) with token-free
  RuntimeAccountInfo in runtime_api.rs.
- Cloud settings pull/push --dry-run: explicit only, never automatic,
  field-level last-writer-wins via GET /api/me and PATCH If-Match 412,
  offline stays file-only. Hydrates shared settings document (5226).

Blockers:
- 5047: reject relative CODEWHALE_HOME/CONFIG_PATH at path authority,
  unify read/write, loud plaintext fallback refusal (already on lane).
- 5243: adopt minted OAuth token without second picker trip (011b9a986).
- 2984: Codex OAuth route via Responses wire protocol, UsageMeter.
- 5062: loopback staging dogfood ready.

Budget: cloud.rs 995 -> 1060 newly allowed large module, 178 -> 179,
max 17652 -> 17700, aggregate 680000 -> 683000.

Fixes #5265
Refs #5062 #5226 #5047 #5243 #2984 #5259
2026-08-07 06:19:20 -07:00
CodeWhale Bot be676502df feat(release): single-binary packaging follow-ups (5259/5260)
Complete 5259 single-binary sweep for packaging/docs: remove
codewhale-tui from .cnb.yml, nix, npm bin, installer, bundles,
locales, and docs/INSTALL matrix; add .winget + packaging/ manifests
(single-binary 27-asset inventory, FreeBSD source-build note) and
update release-artifacts comments from 34 to 27 assets. 27-asset
inventory verified via assemble-release-assets --verify.

Co-Authored-By: internal-model
2026-08-07 06:14:45 -07:00
CodeWhale Bot 6d7add26c9 chore(budget): tighten single-binary ceilings (5259) 2026-08-07 06:04:02 -07:00
CodeWhale Bot 4b728a1d84 feat(release): single-binary install.sh + Dockerfile (5260)
install.sh: copy codewhale + codew only, build hint cargo install codewhale. Dockerfile: build -p codewhale-cli only, ship codewhale + codew (no codewhale-tui), update header. Completes 5260 packaging sweep for shell + Docker.
2026-08-07 06:03:22 -07:00
CodeWhale Bot 1b77edd814 feat(single-binary): consolidate cli + tui into one codewhale (5259)
- add [lib] to crates/tui exposing codewhale_tui::run(args) -> ExitCode
- thin crates/tui/src/main.rs to call library
- remove codew second binary, add argv0 dispatch in crates/cli/src/main.rs
- replace delegate_to_tui/build_tui_command* /tui_spawn_error/locate_sibling/xAI bail and every Command::new(&tui) site with in-process codewhale_tui::run
- sweep two-process assumptions (path resolution, env-forwarding, session-file handoff) while keeping persistence_actor
- update default-members to single binary and budgets
- fix syntect load_defaults_newlines for 5.3
2026-08-07 05:38:44 -07:00
CodeWhale Bot a6fd150bda chore(budget): bump for 5243 OAuth wip (+200) — 5243 adds 128 lines, keep PASS 2026-08-07 04:45:00 -07:00
CodeWhale Bot 4862176f09 chore(budget): re-baseline for 0.9.5 PR stack
Aggregate 678400 -> 680500 (+2100) for stacked PRs #5258, #5205, #5256, #5257, #5255 plus copilot runtime APIs (goal, verifier, memory with native_memory.rs new 1017 large, mcp, skill). Large 177->178.

Passes check-source-structure-budget.
2026-08-07 04:35:47 -07:00
Paulo Aboim Pinto 301b2ca1d9 chore(budget): re-baseline source-structure ceiling for Layer 5.3 acceptance harness
FEAT-012 adds the shared discovery-shadowing contract (discovery.rs, 235
lines) and the Gherkin acceptance harness (epic_discovery_acceptance.rs,
750 lines) mirroring the accepted FEAT-011 pattern. Aggregate owned Rust
source 673375 -> 674554 (+1179 lines). No new 1000-line modules.

Pay down in v0.9.5 per the existing budget TODO notes.
2026-08-07 04:34:32 -07:00
Sun Zhenyuan eed131721f feat(mcp): background incremental registry sync
registry_sync now returns instantly from the local snapshot and
refreshes it in the background: incremental via updated_since, with a
full pagination only when the snapshot is missing or older than a
month, and atomic cache replacement.
2026-08-07 04:33:46 -07:00
CodeWhale Bot 18769cdbe8 fix(release): 0.9.4 stall, budget, and UI polish for session-title fix
- runtime-contract: regenerate tool_catalog for todo_write sole surface (plan/act/operate full/active now list todo_write, not work_update); bumps bytes/sha + prompt stages (agent plugins work)
- web: public-surface-contract expects todo_write (matches docs/RUNTIME_SIMPLIFICATION_DESIGN already)
- source-structure: 676325 -> 676652 (+327) — 321 for bf69e7ff5 session-title fix plus 6 for stall/UI tweaks; durable test asset
- engine: raise no_user_input_continues 12 -> 20 (6 sites) to stop false 'hit (12)' stops on long todo_write loops; preserves anti-runaway
- subagent: GENERAL/PLAN intros now say todo_write, not work_update (child priming fix)
- palette: WHALE_TEXT_HINT #8491AA -> #8A99B3 (+0.4 contrast)
- tui: add BehavioralTipTodoWrite + 15 locale keys (hint: track with todo_write)
- subagent tests: fmt fixes for isolated_fleet_roster_with + assert! expansion

Refs: efcf47a1d, 21ed173cf, ec5747f7d, #5258
2026-08-07 04:32:55 -07:00
CodeWhale Bot 21ed173cf1 fix(tui): pre-release repair batch for 0.9.4 — stall honesty, idle wakes, truncation recovery, wait ergonomics
- turn_loop: a mid-stream chunk-timeout now counts toward the stream-error
  budget (stall with nothing streamed retries transparently; an exhausted
  budget fails the turn with the real reason instead of ending Completed
  over a frozen block).
- idle engine: a finished background shell task wakes and starts an ordinary
  runtime turn even without an active goal; a dead provider route claims the
  completion once and reports where the output lives.
- subagent: over-budget final reports spill to a session artifact and the
  truncation footer names the retrieve_tool_result ref; write failures
  degrade to the honest no-ref footer. Test-only wrappers marked cfg(test).
- waits: agents/wait and agent action=wait default to 30 s and cap at 120 s
  (blocked waits deafen the session; settled children report back as
  sentinels). Bash action=wait honors timeout_secs/timeout aliases and
  block; result metadata reports the real wait_timeout_ms.
- todo_write canonical naming: constructor is new(); work_update/TodoWrite/
  todo stay hidden compat aliases; user-visible copy and docs updated.
- behavioral tips: DurableStateWritten fires on successful remember calls;
  enum allow removed. voice.rs and work_surface model use let-chains.
- test: Windows path-separator tolerant artifact footer assertion.
- changelog: 0.9.4 additions (Agent Plugins v1.0.0, send_later, /advisor,
  quiet mode, automation forms, resume_from, transport resilience,
  durability, zh-Hant, update chip, RLM groundwork, stall/wake/truncation/
  wait fixes). Dead-code budget re-baselined to 452.
2026-08-07 02:45:59 -07:00
CodeWhale Bot b6585ea990 WIP: 0.9.4 fence, turn liveness, model picker, budget, and contributor credit
- fix rlm/turn.rs build (build_metadata_message) and honest/empty guard
- fold Unreleased� 0.9.4 dated 2026-08-07 and sync changelog
- fix Meta facts (  (3 and,�, contrib) and provider picker fallback
- tighten prompts (backticks for work_update)
- stick guard: Warn/Stop across flav...
2026-08-06 18:30:13 -07:00
CodeWhale Bot 7242381022 docs: move internal planning out of the public repo
The public repo carried maintainer process that is not contributor-facing
contract: perishable lane state, the release queue, the issue-triage
standard, dated audits and state matrices, per-release completion ledgers,
QA evidence, and design specs. All of it moves to the private
`codewhale-ops` repo, which already holds this class of document.

Moved: docs/ops/CURRENT.md, RELEASE_QUEUE.md, AGENT_READY_ISSUES.md,
MODEL_PROVIDER_AUDIT.md, CONSTITUTIONAL_KERNEL_AUDIT.md, the dated
TUI_DOG_008 state matrix, TUI_METAMORPHOSIS.md,
RECURSIVE_SELF_IMPROVEMENT.md, TTC_DESIGN.md, and the docs/releases/,
docs/evidence/, and docs/superpowers/ trees.

Two were moved and put back. `PREVIEW_REQUEST.md` is cited from
request_manifest.rs, client.rs, and engine/preview.rs, and
`RUNTIME_SIMPLIFICATION_DESIGN.md` is listed in
docs/public-surface-facts.json, which the web vocabulary tests pin. Those
are load-bearing references, not planning notes.

Every surviving link was repointed rather than left dangling: AGENTS.md,
crates/tui/AGENTS.md, CONTRIBUTING.md, docs/ISSUE_TRIAGE.md,
docs/CATALOG_REFRESH.md, docs/AGENT_RUNTIME.md. `npm run check:docs`
passes.

Also re-baselines the source-structure budget for the [Unreleased] work
merged this session (673375 -> 676325 aggregate, 17596 -> 17631 max
module, 175 -> 176 large modules) and declares plugins/agent_plugin.rs as
an allowed thousand-line module. Unrelated to the doc move; the gate simply
had not been re-run since Agent Plugins landed.
2026-08-06 17:24:27 -07:00
CodeWhale Bot 70d34e1f22 chore(budget): re-baseline aggregate Rust ceiling for the Windows lane repair
673296 -> 673375 (+79 lines), the cost of the test-lane fixes that unblock
the v0.9.4 ship.

The growth is a pinned sandbox backend in the underwater test fixture and
one new test covering the "(unenforced)" rendering the fixture no longer
exercises, plus the rooted-mention and native-separator fixes in
file_mention and their comments. No new packages, binaries, or
thousand-line modules; the max module and large-module count are
unchanged.

The budget's standing note asks that v0.9.4 stop treating aggregate growth
as normal and pay it back in v0.9.5. This bump is a ship blocker, not new
surface, and it is small — but it belongs on that ledger.
2026-08-06 09:54:54 -07:00
CodeWhale Bot d9d803eb22 fix(ci): second round — budget fold, web parity, stale RLM feature step
- source-structure budget: fold the test-fix commit's 3 executor.rs lines
  (673293 -> 673296).
- docs/public-surface-facts.json: sourceCandidate toolCount 67 -> 69 to
  match the regenerated web facts (MCP-discovery surface).
- web/lib/release-credits.ts + docs/CONTRIBUTORS.md: add @bistack (#5238)
  and extend @SparkofSpike's v0.9.4 entries (#5242/#5240/#5234) — the
  changelog/credits/contributors parity test requires exact handle parity.
- core_command_surfaces.feature: the /rlm dispatch copy changed to
  'Loading that into a persistent working context...' in a50b6532b
  (pre-existing on main, hidden by the cancelled CI); align the step.
2026-08-06 05:43:19 -07:00
CodeWhale Bot 31d69c0f11 Merge branch 'feature/mcp-discovery'
Harvested from PR #5238 by @bistack

MCP Registry discovery with Registry-first tool selection: registry_sync
surfaces the eligible local stdio catalog as a complete model-side
candidate set, connect-failure messages classify early-exit/help output
and point recovery at the next Registry candidate, and the bundled
mcp-discovery skill documents the flow.

Conflict resolutions (keep BOTH features where #5077 overlaps):
- engine/tests.rs: import union — the PR's merge_new_runtime_mcp_tools
  alongside main's workspace_write_carve_out_applies.
- engine/context.rs: stacked both compaction guards — main's
  evidence_available pass-through and the PR's registry_sync intact-set
  preservation.
- skills/system.rs: kept main's external tests file; the PR's only new
  inline tests were the uninstall pair already dropped with #5077 (main's
  dead-code audit removed uninstall_system_skills).
- tools/runtime_mcp.rs: kept both new free functions — main's
  reject_shell_metacharacters guard and the PR's connect_failure_message.
- budgets: source-structure raised for the new 1283-line mcp_registry.rs
  (175 large modules, 673293 aggregate lines); runtime-contract re-measured
  exactly at budget (registry tools sit outside the no-mcp default surface
  the fixture profiles).
2026-08-06 02:16:37 -07:00
CodeWhale Bot 21e73351bd Merge branch 'agent/minimal-fresh-session-context'
Harvested from PR #5077 by @Hmbown

Progressive fresh-context disclosure: the constitution ships as a minimal
kernel (Ground truth / User intent and scope / Truthful completion / Put
guarantees in mechanism / Whose word wins) with procedural playbooks
disclosed on demand; project context pack is opt-in
(project_context_pack_enabled) and counted in context reports;
load_skill gains name="list" catalogue discovery.

Conflict resolutions:
- prompts/text.rs: took the PR's kernel rewrite (its mechanism and tests
  key on the new section names); main's Playful overlay / legacy-prompt
  removals kept.
- prompts.rs: two main-side tests pinned the superseded 'Verify before you
  claim' text; updated to pin the kernel's Truthful completion contract.
- tools/skill.rs: PR's name="list" discovery wording + main's current
  File action tool naming.
- skills/mod.rs: PR's USAGE trailer + hard prompt-budget assert.
- skills/system.rs: kept main's external tests file; transplanted the PR's
  procedural_skill_homes_remain_bundled_and_lazy test. Dropped the PR's two
  uninstall tests — main's dead-code audit (849010b03) deliberately removed
  uninstall_system_skills.
- context_report.rs: env block lives once in base_source_entries (AlwaysOn,
  PR's design); main's native_prompt_block memory path kept; the PR's
  moraine_fallback test dropped (field removed from main); both project-pack
  tests kept.
- tui/ui.rs: PR's apply_workspace_runtime_state line transplanted into
  ui/apply.rs (function moved by the ui split).
- budgets: runtime-contract regenerated from measurement (28 metrics
  shrank ~40%, 5 grew, 17 identity changes — all from the feature); source
  aggregate folded +76 lines to 671740.
2026-08-06 02:08:06 -07:00
CodeWhale Bot 8a0ea7f742 Merge branch 'codex/harness-wait-timing'
Harvested from PR #5240 by @SparkofSpike

shell tool: surface real wait elapsed time in tool content instead of the
requested timeout.

Conflict resolution: kept main's one-way source-structure ratchet values
(174 large modules, 17596 max module lines) and folded the merged lanes'
+389 production lines into the aggregate ceiling (671275 -> 671664,
measured via scripts/check-source-structure-budget.py).
2026-08-06 01:29:55 -07:00
CodeWhale Bot a50b6532bd feat(tui): harness/continual ledger, effort, recommend, voice ASR, ui split — 0.9.4 final bundle
- continual_harness ledger (bounded 24, PromptNote/SubagentSpec/SkillHint) + harness tool (overview/refine/remove) for persistent working context
- /effort + /thinking aliases for ReasoningEffort
- skills/recommend: deterministic skill ranker for /plugin suggest|recommend
- voice: free ASR stack (GROQ_ASR_URL, LOCAL_WHISPER_BINS, detect_free_asr)
- tui/ui split: apply/event_loop/handlers/dispatch/motion/overlays/provider_routes/release_check/session_state/frame/terminal extracted from 19k-line ui.rs
- model catalog: Muse Spark 1.2 + ultra effort + cache_read costs
- provider_defaults: gpt-5.5→5.6, muse-spark-1.1→1.2 canonical routes
- locales: CmdEffortDescription, PickerActionSetStartupDefault, operate hint refresh
- docs + budgets resynced; drop stale HANDOFF/RELEASE_EVIDENCE working notes
- .gitignore: ignore .ralph/ agent scratch
2026-08-06 00:35:36 -07:00
Hmbown 56ceb09c6e chore(gates): re-baseline source-structure aggregate for v0.9.4 ship fixes
The v0.9.4 must-fix items (composer cursor/wrap unification, Windows
start_turn Box::pin, the #5032 dangling xAI OAuth repair + its test, the
platform-aware /status safety-policy test, the 0.9.4 checkpoint bump) grew
owned Rust by +201 lines (668406 -> 668607), tripping the one-way aggregate
ratchet. No new 1000-line modules; growth is in existing files. Re-baseline
the ceiling and record why; pay the aggregate back down in v0.9.5.
2026-08-05 06:53:37 -07:00
Hmbown b6f21cf893 fix(agent): only type=builder contradicts read_only, not type=worker
Third and last conflict from the #5123 fail-closed rule. The release QA
contract `release_four_read_only_fleet_roles_launch_with_canonical_prompts`
launches worker, scout, reviewer, and verifier — it calls that set "the
four canonical read-only Fleet roles" — and the worker stopped launching
at all (`worker did not launch once: 0 != 1`).

Worker is the unnamed default role; it renders as `general` and takes its
capability from `write_authority`, not from its name, so a read-only
worker is an ordinary general-purpose child. Builder is the role that
actually claims write capability, and it is the one the #5123 transcript
shows self-BLOCKING — the worker in that same transcript ran fine.

So the check is now exactly: caller wrote `type`, that type resolves to
Builder (either spelling), and authority is read_only. Everything else —
`type=worker` + read_only, any `role` + read_only — stays legal.

Verified: release_four_read_only_fleet_roles_launch_with_canonical_prompts
passes; builder_plus_read_only_authority_fails_closed covers both the
`builder` and `implementer` spellings; new
read_only_worker_is_an_ordinary_general_child pins the canonical case;
the workflow, roster-role, and narrowing contracts still pass (8 total).
cargo fmt clean; structure ceiling folded to 668406.
2026-08-05 01:03:10 -07:00
Hmbown a4a837d6ea fix(ci): fold this lane's own 35 lines into the structure ceiling
The earlier re-baseline was measured before the role/type spawn fix, its
regression tests, and the env-lock line landed, so the ratchet caught
this lane's own growth: 668365 -> 668400.

Verified: scripts/check-source-structure-budget.py -> PASS.
2026-08-05 00:57:28 -07:00
Hmbown 91ecefd824 fix(ci): reviewed source-structure budget update for the Fleet rebuild
The one-way ownership ratchet failed the release train on the v0.9.4
Fleet work. Reviewed and re-baselined:

- aggregate owned Rust 662389 -> 668365
- three new 1000-line modules admitted: fleet/store.rs (1114, the named
  Fleet store v2), tui/transcript.rs (1062, the release-quality
  transcript pass), views/fleet_detail.rs (1056, the secondary
  named-Fleet editor behind /fleet fleets)

Also tightened rather than left slack: seven modules have since split
below the threshold (cli/cloud.rs, client/responses.rs,
session_control_acceptance.rs, skills/system.rs, tui/footer_ui.rs,
widgets/footer.rs, widgets/header.rs) and are dropped from the
allowlist, so the count lands at 168 and the largest module at 19087.
All three new modules are recorded as v0.9.5 split candidates.

Verified: scripts/check-source-structure-budget.py -> PASS with no
"can tighten" remainder.
2026-08-05 00:17:39 -07:00