Skip to content

v0.5.6 — world-building as context engineering

Choose a tag to compare

@mvschwarz mvschwarz released this 30 Aug 08:45
· 2145 commits to main since this release

v0.5.6 — world-building as context engineering

OpenRig 0.5.6 ships the context system's next layer, makes long-running
agents durable, and makes messages to humans trustworthy. Three themes: the
context a seat runs on is structured, tagged, and verifiable; an agent seat
can now outlive its own context window without a human managing the
transition; and anything routed to a human carries proof of delivery.

The context system: structured, tagged, verifiable

  • The mission install. A documented five-layer convention
    (docs/reference/mission-install.md) for installing project context into a
    seat: the pieces, their arrangement, the seat's own position, the current
    contract, and a derive-your-own-delta step that proves the install was
    consumed rather than skimmed.
  • Lore routing. What a seat learns locally routes into addressable,
    rig-local lore packs (docs/reference/lore-routing.md) — carried with a
    maturity stage from birth, and structurally excluded from anything that
    ships.
  • Taxonomy everywhere. Every pack entering rig context carries its
    class — WORLD / LORE / SKILLS / MISSION — surfaced in listings, with a loud
    refusal for untagged packs.
  • A public world pack with checkable claims. The public onboarding pack
    is authored as atoms whose claims each carry a check that can fail, with
    the verifier shipped inside the pack — public content that cannot rot
    silently.
  • A complete, self-retrievable skill index. The skill router's index now
    covers the full shipped set, is retrievable through the routes it teaches,
    and carries a recurrence test so coverage gaps stay found.
  • A substance gate for what ships. A whole-surface review pass over every
    packaged file (bundle and npm surfaces included) runs as a named release
    step; this release shipped with all 5,316 packaged files passing.

Continuity: seats that outlive their context windows

  • Continuity policies in the agent spec. compaction_strategy is now live
    configuration with four modes: default-compaction, managed-compaction,
    handover, and apprentice-handover. Modes apply to Claude seats
    (positive runtime matching — Codex seats keep their native behavior) and
    resolve through the same spec-default < profile < member precedence as the
    rest of the agent spec.
  • The apprentice handover, automated. A seat declaring
    apprentice-handover gets two armed triggers: near its context threshold,
    the system creates a fresh successor seat and runs its onboarding install;
    nearer the wall, it mints an owned handover work item for the seat that
    executes the swap. The executing seat is declared configuration (mechanic: on the
    policy) — never inferred from topology, and arming refuses loudly if it is
    missing.
  • Managed compaction with honest restores. Seats in managed-compaction
    mode get a pre-compaction prep nudge (deposit your state before the window
    closes) and, after a configured restore, a durable receipt recording how
    much usable context the restore actually recovered — so a restore that
    silently refills the window instead of recovering width is visible.
  • Context-usage triggers as a primitive. rig watchdog gains a
    usage-threshold condition: fire any command when a seat's context usage
    crosses a calibrated per-seat threshold. The continuity modes are built on
    it; your own automation can be too.

The human layer: delivery you can prove

  • No more silent fall-through. One destination resolver classifies every
    dispatch: terminal-bound seats use the terminal; registered humans and
    virtual seats route through the gateway; nothing falls through to a
    terminal lookup that cannot succeed. Unregistered external addresses get a
    structured, teaching refusal.
  • Delivery receipts on the work item. Every gateway post writes its
    receipt atomically on the queue row: posted (with the message timestamp
    and channel), transport-failed (with the error), or — derivably —
    never-posted. rig queue undelivered now consults that ledger first and
    returns only genuine failures. "Did this reach them?" is one read.
  • Notification levels, one vocabulary. Queue transitions classify as
    RECORD < NOTICE < ALERT at write time — a human-required decision is
    ALERT; system ceremony events are NOTICE; the rest is durable record.
    Two independent dials configure the minimum level that posts and the
    minimum level that interrupts.
  • A delivery-rules engine. Stored per-human preferences and availability
    decide how each message class is delivered. An off preference suppresses
    interruption — never the durable record, the post, or the receipt. Away
    windows defer routine traffic into digests (4-hour and daily), with
    exactly-once delivery by construction: durable episode identities, retry
    until a real receipt, and structurally non-overlapping digests.
  • Files dropped in Slack become work. A file or image upload lands as a
    work item with the file transferred to local storage and referenced by
    path — authenticated download, size-bounded, per-file failures named, and
    no URL or token ever written to a row. A park blocked on a registered human
    automatically enters the alert path and posts exactly once per episode.

Operational honesty

  • A rate-limited seat gets exactly one timed wake at its stated reset.
  • A seat holding claimed live work while sitting idle gets woken by the
    system, consuming the arbitrated activity oracle — with exactly one wake
    per park episode.
  • Refocus state keys to the current occupant of a seat; a fresh occupant
    never inherits a predecessor's baselines.
  • rig ps counts claimed in-progress work as assigned work.
  • Sends refuse empty bodies; unknown daemon API routes return JSON 404s.
  • Stuck-sweep findings stop re-minting after closure; cross-host custody
    verification completes durably instead of refreshing forever.
  • Blocker actuation is unified: one helper, cross-host closure honest,
    delivery after the transaction commits.
  • Rig expansion and serialization preserve what they were given:
    session_source versions, services, and member overrides survive
    round-trips; fork forwards model, role, restore policy, and label.
  • rig view show execution derives who is building what, what is next, and
    each item's completion rung (locked / built / reviewed / folded / adopted)
    at read time — unknowns render as INDETERMINATE, never as idle or done.

Process and reference

  • The SDLC conventions document is now a component menu: choose per mission
    from the simple flow, the wave model, or the rigorous overlay, with
    planning rigor as a dial. Four full references ship at docs/reference/:
    planning-dial.md, wave-sdlc.md, release-boundary.md, and
    product-management-pass.md, joined by mission-install.md and
    lore-routing.md.

Upgrade notes

  • Three database migrations apply automatically on daemon start:
    074_context_usage_watchdog, 075_context_usage_watchdog_generation, and
    076_owner_notification_levels. No manual steps.
  • Context packs: 41 ship (up from 39).
  • Delivery defaults are deliberately wide open (post at NOTICE and above,
    interrupt at ALERT and above). Tune down from measured volume with the
    two dials rather than pre-filtering.
  • Continuity modes are opt-in per seat; unconfigured seats keep today's
    behavior exactly.