Skip to content

refactor(cli): install the operator by appVersion tag, not a pinned digest#109

Merged
jmgilman merged 1 commit into
masterfrom
refactor/p5-operator-tag-pin
Jun 4, 2026
Merged

refactor(cli): install the operator by appVersion tag, not a pinned digest#109
jmgilman merged 1 commit into
masterfrom
refactor/p5-operator-tag-pin

Conversation

@jmgilman
Copy link
Copy Markdown
Contributor

@jmgilman jmgilman commented Jun 4, 2026

Summary

P5 prep — the first step toward shipping the faucet-free, genesis-wallet
operator end to end.

The CLI's embedded operator install pinned the manager image to a hardcoded
digest (v0.1.1), which predates the genesis-funded faucet wallet (#97). So
today yacd devnet/yacd install deploy an operator that creates no funded
wallet. Because the operator and CLI ship in one coupled release (release-please
root yacd), the CLI can't digest-pin its own release — the image digest doesn't
exist until the release builds.

This makes the default install resolve the manager image to the chart's
appVersion (repository:appVersion). Since operator and CLI release together,
that tag always points at the matching, already-published image — so the next
release's CLI installs the next release's operator with no digest chicken-and-egg
and no version lag. (Maintainer-chosen approach.)

Change

  • cli/internal/operator/values.go: drop defaultManagerDigest; Default() sets
    only the image repository. The chart's existing yacd.image helper falls back to
    repository:appVersion when no digest/tag is set.

Behavior change (override semantics)

  • --set image.digest still produces a digest-pinned render (digest wins in the helper).
  • --set image.tag now repoints the image (repository:tag) instead of being
    shadowed by the old embedded digest.

Both remain unsupported configurations; the supported way to change the operator
version is to upgrade the CLI. The install help text and the in-code comment are
updated accordingly.

Tests

  • values_test.go: Default() sets only the repository (no digest/tag).
  • ssa/render_test.go: default render is repository:appVersion, derived from the
    embedded chart's appVersion
    (version-agnostic, so it survives the 0.1.x→0.2.0
    bump); added coverage that an image.digest override pins and an image.tag
    override repoints.
  • install_test.go: default install image is appVersion-pinned (no digest).

moon run root:check and moon run root:test green.

Sequencing

This must merge before the release-please PR #87 (chore(master): release 0.2.0)
so the v0.2.0 CLI ships with appVersion pinning and installs the v0.2.0 operator.

🤖 Generated with Claude Code

…igest

P5 prep. The embedded operator install pinned the manager image to a hardcoded
digest (v0.1.1), which predates the genesis-funded faucet wallet — so `yacd
devnet`/`yacd install` deployed an operator that creates no funded wallet. The
operator and CLI ship in one coupled release, so the CLI cannot digest-pin its
own release (the image digest does not exist until the release builds). Instead,
let the default install resolve the manager image to the chart's appVersion
(`repository:appVersion`) — which, because operator and CLI release together,
always points at the matching, already-published image.

`Default()` now sets only the image repository; the chart's existing `yacd.image`
helper falls back to `repository:appVersion` when no digest/tag is set.

Behavior change: an explicit `--set image.digest` override still produces a
digest-pinned render (digest wins in the helper), but a `--set image.tag`
override now REPOINTS the image (`repository:tag`) rather than being shadowed by
the old embedded digest. Both remain unsupported configurations; the supported
way to change the operator version is to upgrade the CLI.

- values.go: drop defaultManagerDigest; Default() sets only Repository
- render/values/install tests: assert repository:appVersion (derived from the
  embedded chart's appVersion, version-agnostic); cover digest-override-pins and
  tag-override-repoints; install help/Model-A text rewritten for tag pinning

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@jmgilman jmgilman merged commit 6a290bd into master Jun 4, 2026
12 checks passed
@jmgilman jmgilman deleted the refactor/p5-operator-tag-pin branch June 5, 2026 01:58
jmgilman added a commit that referenced this pull request Jun 5, 2026
…ion install pin, 0.2.0

Sessions 059 and 061 removed the in-cluster HTTP faucet entirely: `yacd topup`
is gone, `spec.chainAPI.{faucet,wallet}` and the FaucetReady/WalletReady
conditions are deleted, and the YACD_FAUCET_* env vars and endpoints.json
faucetUrl are removed. Funding is now CLI-native: every local network gets a
genesis-funded `faucet` wallet, and `yacd wallet {list,add,topup,export,remove}`
builds, signs, and submits transactions directly over Ogmios/Kupo.

- Rewrote funding.md around `yacd wallet`; updated getting-started step 5,
  connecting-tools, testing, troubleshooting, recipes, index, and the
  architecture/security concepts to the wallet model (security now covers wallet
  key custody + local signing instead of the deleted topup trust gate).
- reference/cli.md: replaced the `topup` section with a `wallet` section, dropped
  the faucet rows from the YACD_* contract / endpoints.json / list / info,
  retabled the Commands list.
- reference/cardanonetwork.md / environment.md: removed the faucet/wallet spec,
  status, conditions, and explicit-field rows.
- Install (#109/#87): operator is now appVersion-tag-pinned (not digest); fixed
  the install docs (`image.*` all repoint now), bumped version references to
  0.2.0/v0.2.0, and dropped the removed faucet image/flag from configuration.md.

Verified: mkdocs build --strict clean; full residual-reference sweep clean;
`yacd wallet`/`install` --help match. Live smoke pending.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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