Skip to content

feat(update): offer updates on startup (notifier adoption)#22

Merged
kreneskyp merged 6 commits into
mainfrom
feat/notifier-adoption
Jun 27, 2026
Merged

feat(update): offer updates on startup (notifier adoption)#22
kreneskyp merged 6 commits into
mainfrom
feat/notifier-adoption

Conversation

@kreneskyp

Copy link
Copy Markdown
Contributor

Draft — blocked on agent-ix/ix-cli-core#4 merging + publishing.

Wires maybeOfferUpdate (ix-cli-core's new update notifier) into quoin's main(): for any command other than update (and not under --json), quoin offers a newer published version on startup. Throttled, interactive-only, silent in CI / non-TTY, never blocks or throws.

Blocked on

  • ix-cli-core must publish the release that exports maybeOfferUpdate. The dep is set to >=0.11.0 assuming a semver-minor feature release — set it to match the actual ix-cli-core version before un-drafting.

Verified locally

Built and tested against a local ix-cli-core dist overlay: quoin typechecks against the new export, and the full suite passes with zero new failures (notifier no-ops in non-TTY test context). CI here will stay red until ix-cli-core publishes.

🤖 Generated with Claude Code

Peter Krenesky and others added 5 commits June 26, 2026 19:09
`quoin update` passed no registry to ix-cli-core's runSelfUpdate, so npm used
the ambient config. On machines whose npm points at a private snapshot
registry, that 404s — @agent-ix/quoin is published to public npm. Default to
https://registry.npmjs.org/ when no --registry is given (FR-022); --registry
still overrides for local-dev snapshots.

Also prevent the version drift this surfaced:

- Bake `git describe --tags --dirty` into the build (vite define) and have
  packageVersion() prefer it, so `quoin --version` is truthful: a clean tag
  shows the tag (0.5.2), any other build reveals it's ahead/dirty
  (0.5.1-3-gabc123-dirty). Falls back to package.json for dev/test/no-git builds.
- Add a release-drift CI guard that fails while main's src/ is ahead of the
  latest release tag, so fixes can't sit unreleased; self-heals on tag push.

Updates FR-022 (spec, matrix, plan) and adds tests for both version branches.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Code-review finding: the fallback test used weak assertions (typeof/length).
Assert the exact package.json version instead.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Gap analysis (SR-001) flagged that baking git-describe into packageVersion()
changed FR-002 behavior without updating the requirement, and that
version.test.ts was untracked.

- FR-002: Description + Behavior now specify "prefer the build-time baked
  version, fall back to package.json"; add FR-002-AC-4.
- Matrix: add version.test.ts to the FR-002 row.
- Add the gap-analysis SpecReview artifact (reviews/, quire-validated).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Wire ix-cli-core's update notifier into main(): for any command other than
`update` (and not under --json), offer a newer published quoin. The notifier is
throttled, interactive-only, silent in CI / non-TTY, and never blocks or throws.

Requires the ix-cli-core release that exports maybeOfferUpdate (>=0.11.0).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@kreneskyp kreneskyp marked this pull request as ready for review June 27, 2026 14:46
@kreneskyp kreneskyp requested review from a team as code owners June 27, 2026 14:46
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@kreneskyp kreneskyp merged commit 061f1b7 into main Jun 27, 2026
6 checks passed
@kreneskyp kreneskyp deleted the feat/notifier-adoption branch June 27, 2026 14:53
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