Skip to content

feat(steerwish): wish commands in the cli - declare, list, show, close - #31

Merged
cherusk merged 1 commit into
mainfrom
feat/steerwish-cli
Sep 11, 2026
Merged

feat(steerwish): wish commands in the cli - declare, list, show, close#31
cherusk merged 1 commit into
mainfrom
feat/steerwish-cli

Conversation

@godon-robot

@godon-robot godon-robot Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

What

godon_cli wish {list | declare --file wish.yaml | show --id | close --id} -
the steerwish becomes a first-class cli command family, mirroring the
systemtender pattern. This is the cli half of the steerwish chain: the
control API landed first (godon-images 983068e), the workflow smoke test
comes next and drives the cli.

Details

  • lib.rs - Steerwish types mirroring the openapi schemas
    (Steerwish, SteerwishSummary, SteerwishCreate, SteerwishBand,
    SteerwishLimits, SteerwishEvent). Wire names preserved
    (maxChange, createdAt, type); optionals skipped on serialize,
    so a minimal declare carries exactly outcome + band (omitted
    budget = upkeep indefinitely; omitted regime = standing).
  • client.rs - list / declare / get / close against /steerwishes,
    plus declare_steerwish_from_yaml: the declare artifact is the yaml
    file (outcome, band, limits, budget, regime).
  • main.rs - command enum, dispatcher, and text renderers. The text
    view prints the full receipt: band edges, target marked receipt-only,
    excluded inputs, max change, budget (unbounded when omitted),
    regime, and the event history with refusal reasons.
  • Stub tests (first in this crate): yaml create parse, minimal
    create serializes without optionals, event-history parse including a
    refusal naming its binding constraint, summary parse without band.
    All keyed to the openapi examples.

Notes

  • No local cargo; CI is the gate (established pattern).
  • Held for review per standing rules.

Co-authored-by: cherusk 10729954+cherusk@users.noreply.github.com

The cli takes up the steerwish logic ahead of the workflow smoke test:
the wish becomes a first-class command family, mirroring the
systemtender pattern one-to-one.

- lib.rs: Steerwish types mirroring the openapi schemas (Steerwish,
  SteerwishSummary, SteerwishCreate, SteerwishBand, SteerwishLimits,
  SteerwishEvent) - camelCase wire names (maxChange, createdAt, type),
  optionals skipped so a minimal declare carries exactly outcome+band.
- client.rs: list/declare/get/close against /steerwishes, plus
  declare_steerwish_from_yaml - the declare artifact is the yaml file
  we settled on (outcome, band, limits, budget, regime).
- main.rs: `godon_cli wish {list|declare|show|close}` with text/json
  output; the text renderer prints the full receipt - band, target
  marked receipt-only, limits, budget (unbounded when omitted), and
  the event history with refusal reasons.
- Stub tests (first in this crate): yaml create parse, minimal-create
  serialization omits optionals, event-history parse incl. refusal
  detail, summary parse without band - all keyed to the openapi
  examples.

Note: no local cargo; CI is the gate (established pattern).

Co-authored-by: cherusk <10729954+cherusk@users.noreply.github.com>
@cherusk
cherusk merged commit 7c354a0 into main Sep 11, 2026
1 check passed
@cherusk
cherusk deleted the feat/steerwish-cli branch September 11, 2026 07:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant