Rename the lowercase bash tool struct and its bounded output
accumulator, plus the file read/write helper symbols and their
tests, to contract-based names. Tool names, schemas, and behavior
are unchanged; doc and test references updated to match; the
model-visible catalog text and budget files are untouched.
Verified: cargo test -p codewhale-tui --lib (shell/registry/file/
file_tool/tool_catalog filters) 308 passed; web
public-surface-contract 13/13 passed.
Use the native Firecrawl adapter as the zero-config search route, preserve visible DuckDuckGo and Bing fallback, and document explicit China-provider choices without inferring geography.
Bind npm publication to the exact release SHA after the public asset freshness gate, without a long-lived registry token. Document the npm-side publisher binding and interactive 2FA recovery path.\n\nCloses #5299
Document Work and To-do as the two product concepts, synchronize every shipped locale, publish the six-tool and typed-image contracts, and keep static web generation offline while live GitHub chrome refreshes after deployment.
#5293: v0.9.6 made a fresh approval card highlight Deny so a reflexive
Enter refuses a call the user has not read. That is the right default,
but operators who trusted the pre-v0.9.6 Enter-to-approve flow deserve
a knob instead of a surprise. [approval] default_selection accepts
deny (default) or allow_once; it moves the highlight only — which
calls are prompted stays approval_policy plus permissions.toml rules.
Documented in CONFIGURATION.md with the muscle-memory rationale.
Operationalize the owner report around the honest metric: observed active
installs = distinct rotating anonymous install ids with a session_start
ingested on a UTC day. The canonical report:active-installs command prints
the daily series, a complete-days 7-vs-7 trend, event freshness, and an
always-printed coverage-caveat block; report:dau remains as a pure re-export
compat alias. Exclusion guarantees are now pinned by tests (index1 only
inside count(DISTINCT), no content/identity/network columns anywhere in the
report path), and the output is forbidden from claiming DAU/unique users.
Known floor semantics recorded in docs: day attribution is ingest-day (events
carry no per-event timestamps), distinct counts cannot be sampling-corrected,
and id rotation can double-count across a trend window — all framed as the
lower-bound caveats they are.
Verified: telemetry-ingest npm test (109/109), npm run typecheck, CLI smoke
against fixtures.
Implemented with Claude Code agent assistance.
PLUGIN_BUNDLES.md was still written against v0.9.1 while PLUGINS.md
described the v0.9.4 /plugin lifecycle. The bundle doc now states the
boundary as of v0.9.6, documents both manifest encodings the runtime
actually parses (native plugin.json and legacy plugin.toml), describes the
real accept/reject behavior for inactive manifest sections (inventoried,
shown in review, enable fails closed naming them), notes that
capabilities.network_hosts is enforced today, and declares ownership between
the two docs. PLUGINS.md's plugin.toml-only install claim is corrected to
match the installer.
Every behavioral claim verified against crates/tui/src/plugins/ (manifest.rs,
agent_plugin.rs, registry.rs, install/) before restating.
Implemented with Claude Code agent assistance.
Fleet-dispatched members under a `network_tool = false` ceiling lost the
`Web` family entirely: the ceiling deny list matched the family name via
the `web*` glob and the `Web` entry, and even an exact-name list would
have blocked `search`/`fetch` through their legacy aliases (`web_search`,
`fetch_url`). An ordinary `agent`-tool scout keeps `Web {search, fetch}`;
a Fleet recon member got nothing, a parity gap.
Fix, in two halves that must stay together:
- `NETWORK_TOOL_DENYLIST` no longer denies the `Web` family name. The
two narrow globs `web_*` / `web.*` replace the `web*` glob so every
other browsing spelling (`web.run`, `web_run`, `web_search`,
`web.fetch`, `web_fetch`, `fetch_url`, `wait_for_dev_server`) is still
denied by prefix or exact name, while `Web` itself survives. The
sentinel (`fetch_url`) is untouched, so the capability envelope's
network bit and `network_is_denied()` read exactly as before.
- `SubAgentToolRegistry::is_action_allowed` carves out `Web {search,
fetch}` for network-denied children past the denied aliases. The
family name denial still wins outright, `wait` stays denied through
`wait_for_dev_server`, and `reject_network_reaching_input` still
refuses a URL-addressed `fetch` at dispatch — the carve-out grants the
read-only shape, not the reach.
`full`/network ceilings are unchanged (empty deny list, whole `Web`
enum + `web.run`). Everything else a network denial seals — `web.run`,
`fetch_url`, `github`, `mcp*`, `rlm_open`/`rlm_eval` — stays sealed, and
the URL-input guard remains deny-closed for any tool we did not
explicitly allow.
Tests: extend the exact-fleet registry tests to the new contract (Web
visible as exactly search/fetch, reaching spellings denied, URL-addressed
fetch refused at dispatch, full member untouched) and add a dedicated
recon-member test; add a deny-list test covering every network-denied
preset; update the posture-sealing test for the `web_*` glob. FLEET.md
documents the read-only exception.
Security note: nothing new is granted beyond the Web family's
search/fetch actions for network-denied members; every destructive or
reaching surface stays denied, and the sentinel-backed envelope plus
URL-input guard remain the fail-closed backstop for unenumerated tools.
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.
Replace duplicated implementation-heavy notes with a complete user-facing release ledger, sync the embedded changelog, and align compaction math documentation with the shipped trigger.\n\nExpose the existing Skills and Plugins guides in the website documentation index while retaining v0.9.5 as the latest published release until 0.9.6 is public.
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.
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.
Keep the checked source-candidate contract in sync with the generated 41-provider registry so the full web suite validates the new first-class route.
Signed-off-by: CodeWhale Bot <bot@codewhale.net>
Scope Mistral's polymorphic reasoning and replay behavior to exact first-party HTTPS routes, preserve stored thinking across real prompt construction, and keep DeepSeek's sanitizer from injecting a second dialect into tool-call history.
Align the current model registry, provider-scoped model override, generated facts, docs, and focused route-isolation tests. Split the large stream decoder test module so the source-structure gate remains below budget.
Signed-off-by: CodeWhale Bot <bot@codewhale.net>
Wire Mistral AI / la Plateforme into the shared provider registry, TUI
provider enum, provider-scoped config/env overrides, static model
registry, context-window metadata, reasoning wiring, docs, and
examples. The route uses Mistral's OpenAI-compatible Chat Completions
endpoint at https://api.mistral.ai/v1 with 'mistral-code-latest' as
the default model (Codestral coding model, 256K context).
Model IDs verified live against https://api.mistral.ai/v1/models: the
static registry ships 'mistral-code-latest' (accepts 'codestral-latest'
as alias for backward compatibility), 'mistral-medium-latest',
'mistral-small-latest', 'magistral-small-latest', and
'mistral-large-latest'. All models report 262144 (256K) context on
/v1/models except mistral-code-latest at 256000; earlier drafts of
this PR had those windows reversed.
Reasoning is wired end-to-end for the three models that advertise
'reasoning: true' on /v1/models — mistral-medium-latest,
mistral-small-latest, and magistral-small-latest. Codewhale sends
'reasoning_effort' (Mistral currently accepts 'none' or 'high' only;
intermediate tiers return HTTP 400 code 3051), parses the polymorphic
'content: [{type: thinking, thinking: [{type: text, text: ...}],
closed: bool}, {type: text, text: ...}]' shape emitted by reasoning
models, and replays the thinking trace back into multi-turn history
per docs.mistral.ai/capabilities/reasoning. Non-reasoning models
(mistral-code-latest, mistral-large-latest) never receive the field
because Mistral would reject it. FIM (/v1/fim/completions) is not
wired.
Provider aliases: mistral-ai, mistralai, la-plateforme. Env vars:
MISTRAL_API_KEY, MISTRAL_BASE_URL, MISTRAL_MODEL. Auth via API key
from https://console.mistral.ai/api-keys, config, or 'codewhale auth
set'.
Test env-poisoning: EnvGuard captures/removes/restores MISTRAL_* so
tests stay reproducible when a user has these vars exported in their
shell.
Validation:
- cargo fmt --all -- --check
- cargo clippy --workspace --all-targets --all-features --locked (with
the documented allow list) -- No issues found
- cargo test --workspace --all-features --locked -- 22 pre-existing
failures in crates/tui git-shell tests (worktree init failing on
'git commit' in isolated tempdirs), verified identical count on
origin/main at 91bca01a9 and unrelated to this change
- python3 scripts/check-provider-registry.py -- passed
- codewhale --provider mistral --model mistral-medium-latest exec
against api.mistral.ai returned a correct reasoning-mode response
- codewhale --provider mistral --model mistral-large-latest exec
succeeded without HTTP 400 code 3051 (verifies the model-aware
reasoning gate)
- TUI smoke previously validated: /status shows mistral +
mistral-code-latest, /provider lists Mistral, tool call end-to-end
Assisted by Codex CLI for implementation and multiple Oracle review
passes (correctness + convention + Hunter's inline review) that
surfaced the ProviderArg clap enum gap, the ModelRegistry silent
fallthrough to DeepSeek, the Codestral context-window regression, the
EnvGuard env-poisoning flake, and the model-ID / context-window /
reasoning-support mistakes from the initial docs-slug pass now
corrected against the live /v1/models catalog.
Advance the separately modeled public-release record only after the immutable GitHub release and 34-asset gate are live. Regenerate the checked-in web facts so install pages and deployed receipts resolve v0.9.5 instead of the prior release.
Remove the impossible startup-recovery path: arming deliberately truncates every pre-consent buffer, so the startup predicate could only race with events queued by the current process and send them before a mid-session opt-out.
Make the single shutdown flush structural by removing the non-final actor message and public flush API. Strengthen the process-level contract to prove an armed session sends nothing before shutdown, while preserving the shutdown consent re-check and bounded deadline.
Verified with the telemetry unit suite, five focused process-level race runs, the full 263-test integration target, strict workspace all-target/all-feature Clippy, source/runtime/dead-code budgets, formatting, and diff checks.
Record GitHub v0.9.4 as the latest published release while keeping the workspace and website source candidate at v0.9.5. Regenerate the build-time facts fallback so the manual Cloudflare deploy receipt compares against the same published tag already served from KV.
Verified with the focused facts and deploy contracts, the complete 256-test web suite, ESLint, TypeScript, facts/docs drift checks, and a 288-page production build.
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.
Remove the implicit 100-pass terminal ceiling from persistent goals. Token and time budgets remain advisory telemetry, while users who want a circuit breaker can still opt into [goal] max_continuations explicitly.
Verified with the focused goal-loop and configuration tests. Agent assistance was used for implementation and review.
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.
Record the four human contributors whose work is present in the 0.9.5 candidate, update the public credit matrix and website snapshot, and add the missing canonical identity for PR #5257. The candidate heading and compare links remain explicitly pre-tag until publication approval.
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.
Advertise codewhale and the release/npm codew convenience name without exposing the retired codewhale-tui install surface. Keep Cargo truthful: codewhale-cli installs only codewhale unless the user defines an alias.
Verified with focused public-surface tests, facts/docs/locale checks, ESLint, and diff checking.
Align startup release completeness with the current two-command 27-asset contract so v0.9.5 and later releases are not hidden by removed TUI assets. Reduce the default network-check cache to one hour while retaining cached notices, CI suppression, and explicit opt-out behavior.\n\nVerified with all 37 codewhale-release tests and the focused v0.9.5 startup-notice inventory regression.
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
- New tests/features/feat-012-discovery-filtering.feature: 7 scenarios
(AC1-AC6 + AT-010 alias-aware unification) covering all six FEAT-012
acceptance criteria and EPIC AT-008/009/010
- New commands/epic_discovery_acceptance.rs: scenario-level cucumber worlds
bound to live palette builder, live slash completion, and live dispatch;
fail_on_skipped + non-zero passed-step assertions per scenario
- Registered module in commands/mod.rs
- docs/architecture/command-dispatch.md: module map row for shared
discovery.rs owner
- feat012 selector: 7/7 scenarios pass, zero skipped, non-zero steps each
- Guards: discovery 13/13, palette 34/34, completion 24/24; strict clippy
0 warnings
Generated with Claude Code
- 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.
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.
Adds two sections a successor needs before touching either surface.
The VS Code fork: cloned at /Volumes/VIXinSSD/CW/vscode, product.json
rebranded, and — the part most likely to be undone by someone helpful —
`extensionsGallery` pointed at Open VSX. The Microsoft Marketplace ToU
restrict it to Microsoft products and a fork aimed at it violates them
without failing loudly. Also states the honest cost: icons, toolchain,
signing, and then rebasing on upstream forever, which is the real expense.
Visual identity: the mark is Signal Current, defined in web/components/
whale.tsx from the managed product contract, and its two path strings now
live in three files — which is exactly how the extension ended up shipping
a different whale. Names the duplication so the next person collapses it
instead of adding a fourth copy.
Includes the real TUI palette from crates/tui/src/palette/tokens.rs so
matching the extension to the product is a table lookup rather than taste,
with two cautions: webviews must still respect the user's editor theme via
var(--vscode-*) or they look broken in light mode, and the TUI's ambient
touches are characterful rather than decorative — port the restraint, and
give anything animated a reduced-motion path. Notes CWC should take the
same palette so the four surfaces stop diverging.
Records the state a successor needs: main is 22 commits past what the
v0.9.4 notes describe, what is verified locally versus never seen by CI
(RUST_MIN_STACK in particular), the three blockers before publishing, and
the traps that cost this session real time.
Agent Plugins v1.0.0 consume, publish, and name slugification.
Discovery prefers `plugin.json` and falls back to `plugin.toml`; both parse
into the existing PluginManifest, so registry, trust, staging, and skills
are untouched. Codewhale-only fields round-trip through
`extensions["net.codewhale"]`, unknown namespaces are dropped rather than
rejected — the point of the standard — and `mcp_servers` map to and from a
sibling `mcp.json`, since plugin.json's root is closed. `/plugin export`
emits a spec-valid bundle into a fresh directory without touching the
source.
The implementation corrected four things the design doc got wrong about
this codebase, which is why it is worth reading before the next pass:
- PluginManifest was NOT a superset of the standard. It had no `homepage`,
`repository`, `license`, or `keywords`, and models `author` as a bare
string, so those were added and the structured author is mapped both ways.
- The name rules genuinely conflict. Codewhale historically allows `--` and
bans dots; the standard bans `--`/`..` and allows dots. Holding
`plugin.toml` to the standard rule would have stopped existing plugins
like `a--b` loading at all — and made export-time slugification
unreachable, since no registry could then hold a non-conforming name. So
toml keeps its historical rule, json enforces the standard, and export
slugifies between them with the original kept as a display name.
- The mcp.json transport discriminant was never specified; `type` is now
emitted and consumed explicitly, inferred from command-vs-url when absent.
- `/plugin export` had no destination in the spec, so it takes an explicit
target directory — writing into the source bundle would be the migration
half, which is deliberately out of scope.
Known interop limit, stated rather than discovered later: Codewhale's trust
model still applies to third-party bundles. Literal `env` values and literal
headers are rejected (env must be exact `${VAR}` placeholders) and
`capabilities.network_hosts` must cover remote MCP hosts, so some in-the-wild
plugins will need those two idioms adjusted before they load here.
Built by Kimi K3 in Codewhale exec on an isolated worktree. Verified here:
147 plugin tests, full suite 9941 passed, fmt clean.
Harvested from PR #5252 by @cacdcaecawae
Adds an optional `EngineConfig::subagent_state_root` so an embedding host
can own delegated-agent lifecycle storage instead of sharing
`<workspace>/.codewhale/state` with every other conversation bound to the
same project. The worker ledger, transcript artifacts, coordination lock,
cleanup, and `resume_from` reads move behind the selected root; child
execution cwd, file authority, and receipts are unchanged.
Unset leaves the legacy default byte-for-byte, so nothing changes for
anyone who does not opt in.
The PR is explicit that it is a partial building block for #4416 and
deliberately does not implement durable session ownership, cross-session
history union, or write arbitration — and therefore does not close it. It
also documents that distinct state roots are distinct coordination domains
and do not arbitrate writes to a shared execution workspace, which is the
limitation most likely to be misread as isolation.
Co-authored-by: cacdcaecawae <109055297+cacdcaecawae@users.noreply.github.com>
Adopt plugin.json as the native manifest format, with plugin.toml
legacy-readable and auto-migrated inside Codewhale's managed plugin root.
Codewhale-specific manifest fields move under extensions["net.codewhale"];
mcp_servers moves to a sibling mcp.json because plugin.json's root is
additionalProperties: false.
Records the two hazards worth knowing before implementation: the standard's
name pattern rejects uppercase/underscores/spaces so existing names need
slugification, and migration must not rewrite manifests living under someone
else's version control.
Harvested from PR #5229 by @vFONGv
Windows beginner guide in zh-CN (467 lines) with four screenshots under
docs/images/: a layperson-first walkthrough for installing and running
Codewhale on Windows — VC++ runtime, PATH setup, first workspace, Ask
mode defaults, and the portable-zip notes from review.
The PR was closed unmerged when its base branch was accidentally deleted
during maintainer branch cleanup; the content was never in main. This
merge lands the guide with full credit (original commits and authorship
preserved).
- 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.
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.
Separate delegated-agent persistence and coordination state from the execution workspace while retaining the legacy default. Keep child cwd and file authority unchanged, and cover isolated ledgers, transcripts, locks, and resume reads.
Refs Hmbown/CodeWhale#4416 (partial).
Signed-off-by: liuyang <3078108050@qq.com>
- bump docs/public-surface-facts.json toolCount to 67 to match
web/lib/facts.generated.ts after harness/continual tool addition
(fixes Web Frontend Lint & Type Check: expected 66 to be 67)
- README: remove codewhale account login / account auth paragraph
until hosted account is actually available; keep simple auth flow