Repository navigation
A minor release because tracker query setup behavior, embedding-host admission
and published crates' public interfaces break compatibility with 0.10.0:
-
Tracker command line. Queries no longer create or migrate a tracker
store, enroll the current checkout or repair generated discovery views. A
missing store is refused. Runwhip issue bootstrapwith the same store
selection and working directory used by your tracker commands for initial
plain native setup, checkout enrollment and recovery. Writes still enroll
checkouts and publish synchronously. Protected tracker stores keep their
existing custody requirements; bootstrap is not a plaintext conversion. -
whipplescript-store:RetargetOutcomegainedParentFlowingSource, and
CreateBranchOutcomegainedParentAdmissionDisabledand
ParentFlowingTopology.FlowingFencegained three required methods:
open_flowing_member,flowing_source_openingand
flowing_member_opening. Implementors must provide atomic member/source
opening and reads of the original immutable opening receipts.
source_review::ReviewErrorgainedStale(String)for evidence tied to a
superseded revision; exhaustive matches must handle it. The exported
flowing_fence::SCHEMAarray now has five entries instead of two.
FlowingGateCertificateandNativeGatePlangained a required Rust
coveragefield.FlowingAdmissionsgained required
record_flowing_coverage_premisesandflowing_coverage_premisesmethods.
Implementors must provide the trusted premise writer and current-premise
reader.FlowingAdmissionRefusalgainedCoverageUnavailable,
CoverageStale,CoverageScopeUnknownandCoverageOwnerUnvalidated,
changing the discriminants of later variants. The exported
flowing_admission::SCHEMAarray now has twelve entries instead of nine. -
whipplescript-kernel:ResultExplanationgainedsupport;ReasonCode
gainedWaitingCapacity,WaitingBackoff,MissingConfiguration,
MissingAuthority,StaleSupport,InadequateSupportand
ConflictedSupport;NextActionCodegainedInspectOperationBlock.
These enum insertions change later discriminants, andReasonCode's
derived ordering changes with its variant positions. -
Breaking for embedding hosts:
GovernedHostFacadenow refuses hosted
program opens, changed-IR re-attestation, and ordinary and materialized
host-action admission unless the host's shipped standard registry is
configured, with "... requires the host's shipped standard registry". Before,
an unconfigured facade admitted with no construct witness. An embedding host
must call
.with_embedded_std_manifests(whipplescript::std_manifests::EMBEDDED_STD_MANIFESTS)
on its facade, or pass an explicit empty set if it ships no standard
vocabulary. This needs a middle-number release.
Dependents constructing ResultExplanation literals must supply support.
Struct literals for FlowingGateCertificate and NativeGatePlan must supply
coverage; deserialization of older data still defaults it to None, which
does not satisfy the new admission requirement.
Exhaustive matches on these enums must handle the new variants; code relying
on their numeric casts or ReasonCode ordering must follow the new layout.
Automation that relied on query side effects must invoke bootstrap explicitly
before querying a missing store, or when enrolling a checkout or repairing
discovery.
Embedding hosts must declare their actual shipped registry before admission;
.with_embedded_std_manifests(&[]) is only a truthful declaration for a host
that ships no standard vocabulary. It does not supply registrations required
by a program using the standard library. The exact compiler artifact digest
remains required. Existing retained witnesses are not rewritten to invent
classes that were never examined.
The native branch satellite schema advances from 11 to 18, and the source
review satellite schema from 3 to 4. Opening these authorities through their
normal writable APIs migrates them to retain immutable flowing opening
receipts, carried-cut roots, pending-close fences, parked-member and final-close
receipts, complete abandonment indexes, and content-bound review findings and
approvals. Older binaries
refuse the newer satellite schema; use the upgraded version for those
migrated authorities.
-
Flowing member creation and source-fence opening commit in one authority
transaction. Exact retries read immutable member and source opening
receipts, so later head, authority or fence changes do not alter the
original result. Sources opened before immutable receipts were introduced
retain their established current-state retry fallback. Native and Durable
Object realizations share this behavior. New body-free host readers expose
source/member opening and parking evidence without disclosing unit bodies. -
Flowing admission now checks the reference-coverage premise vector against
the gate plan before checks, before issuing a certificate, and again in the
native or hosted ref transaction. Missing coverage on prior certificates,
or absent recorded premises, refuses admission. Coverage-bearing
certificates use the v4 handle domain; legacy handle identities are retained
for older certificates without coverage. A trusted coverage authority must
record current premises and supply a matching candidate-specific basis;
Noneor a missing claim does not bypass this fence; a no-edge query over
an incomplete roster does not establish complete coverage.
Unknown and bounded scopes require the specified owners' validation at the
current graph epoch. This is the RC-5 store slice: no production RC-4 issuer
yet derives the vector, graph or owner set. It does not replace conservative
source-unit closure or the separate historical instance and bark-chip pin
obligations. -
Native source review findings bind the exact revision, manifest, path, blob
digest and line range; approvals bind the exact revision and manifest.
A finding remains current when the latest revision retains the same blob
at its path; otherwise it is stale. An approval is stale after any later
revision. Native revisions, findings and approvals are append-only. These
storage APIs do not authenticate a network caller. -
The unscoped versioned-save adapter now reports a reconcilable recovery
ceiling and exposes disposition observations backed by the actual save
binding. The
scoped adapter remainsUnverifiableand refuses unscoped disposition
observations. The defaultFileStore::recovery_ceilingisUnverifiable;
wrappers must forward a qualified adapter's declaration to retain it. This does not activate a
consumer's capability dispatch or grant authority to perform I/O. -
Obsolete release, archive smoke, crate publication and production canary
GitHub Actions workflows are removed. The existing fleet release and
scheduled canary lanes own those duties; tags do not trigger a workflow. -
Tracker discovery retires obsolete views and staging directories by rename,
then deletes them after releasing the database writer and publication locks.
A slow cleanup no longer blocks another tracker writer; interrupted cleanup
is recovered without removing unrelated directories. -
Tracker queries now read a single committed, read-only SQLite snapshot and
remain available while a writer publishes discovery. Queries no longer
initialize a missing store, enroll a checkout or repair generated views.
Runwhip issue bootstrapexplicitly for plain native tracker setup and
recovery; mutations still enroll and publish synchronously. Readiness and
lease overlays share one query boundary instant (DR-0196). -
whip auth set openai-generic <base-url> <key>stores a key for one
OpenAI-compatible endpoint, under its base URL, and a call to that endpoint
uses it afterOPENAI_API_KEYand before the storedopenaikey.
whip auth statuslists each stored endpoint redacted, and the new
whip auth clearremoves a stored credential (WS-297). -
The hosted Durable Object runtime admits, executes and reads back governed
host actions through its Worker (DR-0197). Proofs verify against action
authorities the deployment pins inWHIP_ACTION_TRUST; without it every
action route refuses. -
GovernedHostFacade::revalidate_retained_constructsjudges retained
construct and declaration witnesses against the host's current shipped
registry and compiler artifact. Registry or provider-source drift makes an
edgeUnknown; an unexamined class stays unknown. The exported
construct_revalidationmodule supplies the current basis and standing
types. This is not a complete Home-wide reference-coverage claim. -
External
signal.emitand legacyevent.emithandlers use fresh observed
dispatch. An existing run-start cannot authorize another sink operation.
First-attempt identities are preserved; a separately admitted retry has
distinct run, lease, terminal and fact identities. The governed-operation
inventory checks each handler family's dispatch classification; families
still using reattachable starts continue to refuse action instances. -
SignalDeliveryAuthorityand
GovernedHostFacade::execute_action_signal_effectsupply the governed
directed-signal execution door. It verifies current execution authority and
the observed effect, then authorizes the actual target instance and signal
before consuming the single-use dispatch grant. Target-side delivery uses
an attempt-independent identity. The legacyevent.emitis not an
admissible action effect. This adds no automatic retry, production product
binding or blanket non-file migration. -
Embedding-host Rust API and action readers.
HostActionCommandand
ActionAdmissionReceiptgained optionalanchorfields, and
ActionResultSnapshotgained optionalfootprint; Rust struct literals must
supply them. Absent fields retain the original unanchored wire/signing bytes.
Use the immutable host-action V7 contract and negotiate
whipplescript.action-result.v4for anchored reads and footprints. V1/V2
readers refuse anchored actions; V4 uses its own NUL-terminated signing domain.
An anchor is attribution, not proof of a currently held claim; unsigned
counts that decode structurally are not runtime observations. -
Flowing store implementors.
BranchStatusgainedParkedandClosed;
exhaustive matches must handle both.FlowingFenceadditionally requires
flowing_close_request.FlowingAdmissionsadditionally requires
configure_flowing_gate_issuer,flowing_gate_trusted_issuers,
record_flowing_gate_signatureandflowing_gate_signatures.
FlowingAdmissionRefusalandFlowingAttemptFinishRefusalgainedGateIssuer,
andFlowingAdmissionRefusal::SourceNotDirectTwigis replaced by
SourceKindMismatch; update exhaustive matches and avoid old discriminants.
Trusted issuer configuration is operator authority, not a grant to a gate
worker. Signatures must verify against the current configured root again
under the ref CAS. NewFlowingFinalClose,FlowingMemberParkingand
FlowingAbandonmentsinterfaces retain their exact immutable receipts;
closing or parked sources do not become writable after a retry.
Rust literals forFlowingCloseUnitmust supplyhandoff_op_id,
FlowingCloseMembermust supplyparked, andFlowingCloseRostermust
supplysource_parent_branch_id,source_branch_point_cut_id,
close_requestandlive_attempts; read them from actual retained history
rather than inventing a complete close roster.
Carried cuts and authenticated peer lines retain manifests and source
closure; a named-branch prefix still requires the actual validated gate
basis and does not admit an arbitrary ancestor or peer. -
Governance import and parser dependency. The workspace now publishes
whipplescript-hjson, the owned full HJSON parser exposed under the
deser_hjsonlibrary name. The store dependency uses the Cargo alias
deser-hjsonwithpackage = "whipplescript-hjson"; update a direct
dependency by package identity rather than assuming the old third-party
crate. Trailing malformed input is refused. The new signed governance
preparation/import API pins immutable source history and mapping revisions,
admits and records exact retries atomically on Native and DO stores, and
keeps imported chronology distinct from effective authenticated evidence or
explicit adoption.ImportReportgainedconcurrent_claims; Rust literals
must supply it and consumers must distinguish an advisory from writer
authority. It does not automatically adopt Company governance. -
Checkpoint adapters. The new paired capture API returns the retained
cut and original position payload together. Existing unpaired callers stay
supported; wrappers supporting paired capture must forward the atomic bridge,
since unsupported adapters refuse instead of appending a position first.
Coordinate read failures refuse before capture. Historical orphan events are
retained as history rather than projected as completed checkpoint pairs. -
Admission and compiler migration. Native signal, resident ingress and
local-message delivery now run the settled authority-only admission check,
including for legacy retained instances. Current import/construct basis
includes the actual shipped registry and provider-source identity.
CurrentImportBasisreplacesconstructsanddeclarationswith
construct_basis; update Rust literals and supply the independently current
CurrentConstructBasis, not copied retained declarations. Do not
invent missing retained witnesses or reuse an old run-start as a new grant.
The provider wire contract is declared data shared by native and Worker
clients; custom callers must select an actually supported declared wire.
Programs relying on omitted optional fields being treated as present must
handleNone; coerce calls require the declared argument types and arity.
Opened plaintext remains process-local, and an opened region still requires
envelope identity derivation for sealing; a constant or declassified value
does not supply that authority. -
Authored
seal ... with ... as ...actions now wrap the resolved value and
resume their continuation, including when the construct slots span lines.
In an opened region, sealing requires envelope identity derivation;
constant and declassified values there remain conservatively refused. -
Checkpoints publish workspace/external positions and the successful cut atomically
on native and DO stores. Busy or failed captures leave no orphan carrier; exact
redelivery returns the original positions, and changed command content refuses.
whip handlesno longer presents historical orphan carriers as completed cuts. -
Apply the settled authority-only admission compile to native signal, resident ingress and local message delivery, including retained legacy instances; preserve replay/schema/source checks, check-only liveness and the script runtime backstop (DR-0233, WS-326).
-
Publish the immutable host-action V7 contract for DR-0207 anchors and
negotiated V4 result footprints. V1–V6 bundles and unanchored signing bytes
remain unchanged; older reads refuse anchored admissions. Structural decoding
does not establish a held claim or validate runtime-derived footprint counts. -
Rule-body optional cases route an omitted field to
None, just like an
explicitnull, instead of binding the internal missing-value marker toSome. -
Interrupted mutation sweeps restore their original source bytes on catchable
signals, preserving another edit or an existing recovery backup. -
Rule guards now recognize dotted effect-query kinds as query metadata while continuing to check binding reads in filters and surrounding expressions.
-
Effect-query
wherefilters now reject non-boolean results during compilation, matching fact-query filters. -
open <sealed> into <Type> with <credential> as <binding>now runs. The
plaintext reaches only theafter … as <alias>of the open, from process
memory; the open's recorded output is the envelope's identity, and no record
ever holds the plaintext.declassifyis materialized at run time. A region
whose open settled in another process, or before a restart, refuses to lower
with a diagnostic instead of reading null fields. Opening needs a custodian,
so the hosted runtime still refuses it. -
Typed coerce calls now validate their declared argument types and paths, reject
unknown functions and wrong arity, and point type errors to the coerce parameter. -
Optional-field presence proofs retain their binding or query-row identity. A proof for one row no longer authorizes another, and implicit query fields accept the same presence forms as qualified fields.
-
Map indexes accept fields with literal-string and literal-string-union key types, alongside ordinary strings. Invalid keys now produce one compatibility diagnostic.
-
Bare builtin schema triggers now require the same real schema producer or
workflow input as explicit fact triggers, unless the rule is@external.
Declaring a tracker or telling an agent no longer makes an otherwise inert
bare WorkItem or AgentTurn trigger passcheck; use the existing observer
sugar for those runtime observations. Declared-class producers, Evidence
records and terminal payloads keep their existing behavior. The refusal's
suggestion now says what each builtin name means as a trigger: the
completed turnandhas ready issuesugar for AgentTurn and WorkItem, and
after <effect> fails/times out/cancels as xfor the three terminal payloads.
Verifying this release
Built on GaugeWright's own fleet. Every file's SHA-256 is in
whipplescript-0.11.0.intoto.json, signed with the key in
docs/release-provenance.pub:
minisign -V -p release-provenance.pub -m whipplescript-0.11.0.intoto.json