Repository navigation
0.9.0 — 2026-10-05
A minor release, because a tracker store this version enrolls cannot be
written by an older whip, and four published crates changed public types
that a dependent can match on, construct or call:
- Stored data. Once a tracker store publishes discovery files (below), it
carries triggers that refuse any writer that does not take the publication
lock, andwhip0.8.0 and earlier do not. Their reads still work, but every
write fails withno such function: whip_tracker_discovery_writer_v1.
Upgrade everywhipthat shares a tracker store before using this one on it. whipplescript-store:NormReferenceInventory,NormReferenceField,
NormCharter,RunView,ProgramImportAdmissionRecordand
ProgramImportWitnessgained fields;UnreadygainedInitiative, which
moves its later variants' discriminants;FlowingTargetEffectsOutcomegained
InitialNoopNeedsGenesis.whipplescript-parser:IrProgramandEffectgained fields;
IrEffectKindandBodyEffectKindgainedTrackerMembershipand
TrackerInspect, which moves their later variants' discriminants;
BodyEffectKind::TrackerFileandTrackerFinishgainedinitiative;
ResourcegainedPair.whipplescript-kernel:ShellOutput,ShellRequest,ResourceRef,
ReadActionResult,ReconcileEffectCommand,BrokeredTurnInput,
CheckedImportBasis,AssembledContext,ModelRequestProvenanceand
Plannedgained fields;ResolvedPackagegained private fields and can no
longer be built with a literal;InstructionAuthoritygainedAgentAuthor,
which moves and renumbers its later variants;ChatMessagegained
Developer;TransportErrorandHarnessModelErrorgained
RetryBudgetExhausted; and
RuntimeKernel::create_program_version_for_compiled_program_with_imports
takes a fifth parameter.whipplescript:HostedRuntimeContextRequestgainednotices;
HostRuntimeErrorgainedHomeJournal;NativeWorkspaceResolveris no
longerUnwindSafeorRefUnwindSafe; andworkspace_grep::GrepMatcher,
grep_file_intoandcap_grep_lineare gone, replaced by the shared
workspace helpers.
Code that matches those enums without a wildcard arm, builds those structs with
a literal, calls that method, compares or casts those enums by position, or
uses the removed grep items must follow the change. The command line and
configuration stay compatible.
-
A tracker store can publish its current records into each enrolled
checkout'stracker/directory as searchable HJSON, with a startup
context.hjson, refreshed under one lock with every write (WS-571). -
Native workspace embeddings can retain exact prepared file bytes through an
explicit callback before write, edit and virtual bash effects. Refusal prevents
the file changes; retained preparation still requires a successful saved owner
witness before result publication. -
Version 2 effect reconciliation names the original action issuer separately
from the current investigator's authority. Its signature and retry identity
bind both coordinates; the target evidence keeps its own authority. Version 1
bytes and receipts remain compatible. Rust embeddings addoriginal_issuer: Noneto V1 constructors, or supply the original issuer for V2 commands. -
The curated mirror publisher accepts an explicit maintenance destination with source/tree and forward-history checks; its default remains
main. -
Version 2 action-result reads name the current policy authority separately
from the original command issuer. Version 1 retains its original contract.
Rust embeddings addread_authority: Noneto existing V1 request constructors;
V2 requires an explicit authority. Reads still require current access and
exact original evidence. -
Hosted lease expiry preserves the original event completion time when rebuilding run projections, including tracker result recovery.
-
Workspace edit and grep semantics now share pure helpers across native and Durable Object hosts. The native workspace resolver rejects overlapping edits while preserving leading BOMs; hosted grep keeps the same parameter behavior and 500-character line cap.
-
Embeddings can fence a native imported diff with their original current
authority. A final refusal rolls back the branch head, cut and operation
receipt; exact recovery also requires current authority under retention.
Backends without a final transaction check refuse guarded publication. -
The owned harness knows the limits of the newest models. Claude Fable 5 and
5.1 compact against their 1M window and default to a 128K output ceiling,
not 200k and 64K. GPT-6, GPT-5.6, GPT-5.4 and GPT-5.5 compact at their
922,000-token prompt limit, the rest of GPT-5 at 272,000, and Grok 4.5 to
4.7 at 500k. An unlisted Claude, GPT, o-series or Grok model now gets a
250k window rather than 128k–200k. Any other unlisted model keeps its
default. The limits are one table checked daily against models.dev
(DR-0161). -
An authenticated host opts in to recorded presented-root renames with
"workspace_root_renames": "recorded"on its turn request; the Durable
Object worker forwards it into the placement's agent configuration, which
the host cannot write itself. A public session cannot opt in. -
A v1 Agent's hosted session no longer makes a host's work-target references
read-only. Only the root reference and references touchingagent/,
artifacts/orwork/are narrowed, as the harness specification
describes; any other subtree keeps the writability its host admitted. -
A Durable Object host can now admit presented-root renames: a host that sets
"workspace_root_renames": "recorded"has the placement admit a rename of a
writable root to a free name and record it at
.whipplescript/root-renames/<n>.jsonfor the host to ratify (DR-0148).
Without the setting, hosted renames are still refused. -
A Durable Object's authored external tools reach the placement's
implementation again. The shared SQL handle did not forward
external_tool, so every call was refused before the placement was asked. -
A file-store
ResourceRefmay present its selected root to the model at
another path,presented_as(DR-0148). The native and Durable Object hosts
map every file tool and the virtual shell through onefile_viewmodule,
keep selectors in every record, and report a shellmvof a presented root
as a rename the embedding host admits throughwith_root_rename_admission.
This breaks construction ofResourceRef,ShellRequestandShellOutput:
a dependent that builds one addspresented_as: None,presented_roots: Vec::new()or readsrenames. -
The native host no longer refuses a
bashcommand because an unchanged file
it left behind is read-only; only changed, added and removed paths are
checked for write access. -
The native host verifies the exact registered skill catalogue before asking
an embedding resolver for its system-prompt source labels. Missing or changed
skill bodies keep that model request's provenance incomplete.
Verifying this release
Built on GaugeWright's own fleet. Every file's SHA-256 is in
whipplescript-0.9.0.intoto.json, signed with the key in
docs/release-provenance.pub:
minisign -V -p release-provenance.pub -m whipplescript-0.9.0.intoto.json