Skip to content

fix(install): add locked_verify_provenance setting and detect github attestations at lock time#8901

Merged
jdx merged 15 commits intomainfrom
fix/lock-time-provenance-verification
Apr 4, 2026
Merged

fix(install): add locked_verify_provenance setting and detect github attestations at lock time#8901
jdx merged 15 commits intomainfrom
fix/lock-time-provenance-verification

Conversation

@jdx
Copy link
Copy Markdown
Owner

@jdx jdx commented Apr 4, 2026

Summary

Lock-time verification (current platform):

  • During mise lock, for the current platform, downloads the artifact to a temp directory and runs full cryptographic verification (GitHub attestations, SLSA, cosign, minisign) before recording provenance in the lockfile
  • Cross-platform entries still use detection-only (registry metadata) since we can't easily verify artifacts for other platforms
  • If verification fails, provenance is not recorded (warning logged)

Install-time re-verification setting:

  • Adds locked_verify_provenance setting (MISE_LOCKED_VERIFY_PROVENANCE, default: false, auto-enabled under MISE_PARANOID) that forces provenance re-verification at install time even when the lockfile already has both checksum and provenance

GitHub attestations at lock time:

Security context: Previously, detect_provenance_type() recorded provenance from aqua registry metadata without cryptographic verification, and mise install --locked skipped verify_provenance() entirely when the lockfile had both checksum and provenance. This meant provenance was never actually verified in the mise lockmise install flow. Lock-time verification for the current platform closes this gap, and the locked_verify_provenance setting provides additional protection for paranoid users.

Supersedes #8781 — incorporates the GitHub attestations detection change while addressing the underlying security gap discussed there.

Test plan

  • Verify cargo check passes (confirmed locally)
  • Verify mise lock records github-attestations provenance for tools with github_artifact_attestations in aqua registry (e.g., jq >= 1.8.0) after downloading and verifying the artifact
  • Verify mise lock logs verification activity for current platform tools with provenance
  • Verify mise install --locked skips provenance verification by default (existing behavior preserved)
  • Verify MISE_LOCKED_VERIFY_PROVENANCE=1 mise install --locked re-verifies provenance at install time
  • Verify MISE_PARANOID=1 mise install --locked also re-verifies provenance
  • Verify cross-platform lock entries still get provenance from metadata detection (no download)
  • Verify the new setting appears in mise settings ls and schema

🤖 Generated with Claude Code


Note

Medium Risk
Changes tool provenance verification behavior in the aqua and github backends, including new lock-time artifact downloads and optional install-time re-verification, which could affect install/lock reliability and CI rate limits.

Overview
Strengthens lockfile provenance semantics. mise lock now cryptographically verifies detected provenance for the current platform (downloading the artifact to a temp dir) before writing provenance into mise.lock for both aqua and github; if verification fails, provenance is omitted so it will be verified later.

Adds an opt-in install-time safety check. Introduces locked_verify_provenance (also enabled by paranoid) to force provenance re-verification during mise install even when the lockfile already contains checksum+provenance, and updates schema/docs accordingly.

Test/docs updates. E2E tests are adjusted for the new npm package-manager env var and for updated provenance expectations, and the cosign verification test now uses an aqua package with bundle-based cosign verification.

Reviewed by Cursor Bugbot for commit 810ef29. Bugbot is set up for automated code reviews on this repo. Configure here.

…attestations at lock time

Previously, detect_provenance_type() recorded provenance from registry metadata
without cryptographic verification, and mise install --locked skipped
verify_provenance() entirely when the lockfile had both checksum and provenance.
This meant provenance was never actually verified in the lock→install flow.

This adds a locked_verify_provenance setting (default: false, auto-enabled under
MISE_PARANOID) that forces re-verification at install time even when the lockfile
has provenance. Also enables GitHub artifact attestations as the highest-priority
provenance detection at lock time, and applies the same fix to the github backend.

Closes the security gap discussed in #8781.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces the locked_verify_provenance setting, which allows users to force cryptographic provenance re-verification during installation even when a lockfile is present. This behavior is also automatically enabled when paranoid mode is active. The changes include updates to the documentation, JSON schema, and the installation logic for both Aqua and GitHub backends. Feedback suggests extracting the duplicated logic for determining whether to force verification into a helper method on the Settings struct to improve maintainability.

Comment on lines +1034 to +1035
let settings = Settings::get();
let force_verify = settings.locked_verify_provenance || settings.paranoid;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This logic to determine if provenance verification should be forced is duplicated in src/backend/github.rs. To improve maintainability, consider extracting this into a helper method on the Settings struct.

For example, in settings.rs:

impl Settings {
    // ...
    pub fn force_provenance_verify(&self) -> bool {
        self.locked_verify_provenance || self.paranoid
    }
}

Then, this block could be simplified to:

let force_verify = Settings::get().force_provenance_verify();
let platform_key = self.get_platform_key();
// ...

Comment on lines +633 to +634
let settings = Settings::get();
let force_verify = settings.locked_verify_provenance || settings.paranoid;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This logic to determine if provenance verification should be forced is duplicated in src/backend/aqua.rs. To improve maintainability, consider extracting this into a helper method on the Settings struct.

For example, in settings.rs:

impl Settings {
    // ...
    pub fn force_provenance_verify(&self) -> bool {
        self.locked_verify_provenance || self.paranoid
    }
}

Then, this block could be simplified to:

let force_verify = Settings::get().force_provenance_verify();
if has_lockfile_integrity && !force_verify {
// ...

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Apr 4, 2026

Greptile Summary

This PR closes a meaningful security gap in the mise lockmise install provenance flow. Previously, detect_provenance_type() recorded provenance from registry metadata or the attestation API with no cryptographic verification, and mise install --locked skipped verify_provenance() entirely when the lockfile already had checksum+provenance. The PR adds lock-time cryptographic verification for the current platform (download + attestation/SLSA/cosign/minisign check) in both the aqua and github backends, a locked_verify_provenance setting for opt-in re-verification at install time, and surfaces GitHub artifact attestations as the highest-priority provenance detection method.

  • Cross-platform provenance gap: For non-current-platform targets, provenance is written to the lockfile from registry metadata or the attestation API — never cryptographically verified. On those platforms, mise install --locked with the default locked_verify_provenance = false will satisfy has_lockfile_integrity and skip all crypto checks. Users on a different OS/arch from the lock author get no cryptographic verification unless they opt in via locked_verify_provenance. The docs acknowledge this, but it's a material limitation worth tracking.
  • Missing e2e coverage: The test plan lists MISE_LOCKED_VERIFY_PROVENANCE=1 and MISE_PARANOID=1 positive paths, but these are not implemented in e2e/lockfile/test_lockfile_provenance.

Confidence Score: 5/5

Safe to merge; all remaining findings are P2 style/improvement suggestions with no blocking defects

The core security logic is sound: lock-time provenance is cleared on failure (not kept as unverified), force_provenance_verify() is correctly wired into both backends, and the downgrade-attack detection is preserved. The addressed concern from prior threads (provenance kept on failure) was fixed in a9457d3. All open findings are P2: missing e2e coverage for locked_verify_provenance, a provenance-type mismatch between detection and verification in github.rs, and double artifact downloads. None of these block correct behavior.

src/backend/github.rs (provenance type inconsistency between detect and verify), e2e/lockfile/test_lockfile_provenance (missing locked_verify_provenance and MISE_PARANOID positive-path tests)

Important Files Changed

Filename Overview
src/backend/aqua.rs Adds GithubAttestations-first detect_provenance_type and verify_provenance_at_lock_time; clears provenance on failure so install-time runs as fallback
src/backend/github.rs Adds API-based attestation detection and lock-time crypto verification for current platform; cross-platform entries remain detection-only
src/config/settings.rs Adds force_provenance_verify() helper returning locked_verify_provenance
settings.toml Adds locked_verify_provenance setting with MISE_LOCKED_VERIFY_PROVENANCE env var, default false, auto-enabled by paranoid
e2e/lockfile/test_lockfile_provenance Tests SLSA lock-time provenance and downgrade detection; missing locked_verify_provenance and MISE_PARANOID positive-path coverage
e2e/backend/test_aqua_cosign Switches sops to fork-cleaner which has bundle-based cosign matching the new native-only detection logic
e2e/backend/test_backend_missing_deps Renames MISE_NPM_BUN to MISE_NPM_PACKAGE_MANAGER in npm backend missing-dep test
e2e-win/npm_backend.Tests.ps1 Updates Windows npm e2e test to MISE_NPM_PACKAGE_MANAGER env var
docs/dev-tools/mise-lock.md Documents lock-time verification, cross-platform detection-only approach, and locked_verify_provenance setting
docs/paranoid.md Documents that paranoid mode enables locked_verify_provenance provenance re-verification behavior
schema/mise.json Adds locked_verify_provenance to JSON schema

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[mise lock] --> B{target.is_current?}
    B -- Yes --> C[detect_provenance_type]
    B -- No --> D[detect_provenance_type\ncross-platform]
    D --> E[registry metadata / API query only]
    E --> F[Write provenance to lockfile\nno crypto verification]
    C --> G{provenance detected?}
    G -- No --> H[No provenance in lockfile]
    G -- Yes --> I[verify_provenance_at_lock_time\ndownload artifact + crypto check]
    I -- Ok --> J[Write verified provenance\nto lockfile]
    I -- Err --> K[warn: lock-time failed\nprovenance = None]
    K --> L[No provenance in lockfile]
    J --> M[mise install --locked]
    F --> M
    H --> M
    L --> M
    M --> N{has_lockfile_integrity?\nchecksum AND provenance}
    N -- No --> O[verify_provenance\nfull crypto check]
    N -- Yes --> P{force_provenance_verify?\nlocked_verify_provenance or paranoid}
    P -- Yes --> O
    P -- No --> Q[ensure_provenance_setting_enabled\ndowngrade attack check only]
Loading

Fix All in Claude Code

Reviews (10): Last reviewed commit: "fix(test): use tool with native cosign b..." | Re-trigger Greptile

jdx and others added 4 commits April 4, 2026 16:34
…rrent platform

During `mise lock`, for the current platform, download the artifact to a
temp directory and run full cryptographic verification (GitHub attestations,
SLSA, cosign, minisign) before recording provenance in the lockfile. This
ensures the lockfile's provenance entry is backed by actual verification,
not just registry metadata detection.

Cross-platform entries still use detection-only (registry metadata) since
we can't easily verify artifacts for other platforms.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…GER in e2e tests

Update tests that use the deprecated MISE_NPM_BUN env var to use
MISE_NPM_PACKAGE_MANAGER=bun instead. The deprecated alias still works
via migration logic, but tests should use the current API.

Note: e2e/backend/test_npm_package_manager intentionally tests the
deprecated npm.bun migration path, so those references are left as-is.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 4, 2026

Hyperfine Performance

mise x -- echo

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.4.3 x -- echo 22.2 ± 0.3 21.6 25.0 1.00
mise x -- echo 22.6 ± 0.5 21.8 26.1 1.02 ± 0.03

mise env

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.4.3 env 22.0 ± 0.6 20.9 24.1 1.00
mise env 22.9 ± 0.6 21.4 25.8 1.04 ± 0.04

mise hook-env

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.4.3 hook-env 22.4 ± 0.6 21.7 31.8 1.00
mise hook-env 22.9 ± 0.4 21.9 25.2 1.02 ± 0.03

mise ls

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.4.3 ls 19.7 ± 0.4 19.0 21.6 1.00
mise ls 20.1 ± 0.3 19.4 21.8 1.02 ± 0.03

xtasks/test/perf

Command mise-2026.4.3 mise Variance
install (cached) 148ms 149ms +0%
ls (cached) 79ms 78ms +1%
bin-paths (cached) 82ms 83ms -1%
task-ls (cached) 824ms 793ms +3%

When lock-time cryptographic verification fails (e.g., Rekor key format
issues, network errors), still record the detected provenance type in
the lockfile. This preserves the install-time verification path while
not breaking lockfile generation due to transient issues.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… failure, update test

- Extract force_provenance_verify() helper on Settings to deduplicate
  the locked_verify_provenance || paranoid check across aqua and github
  backends (gemini feedback)
- Clear provenance on lock-time verification failure so install-time
  verification runs instead of being skipped (cursor bugbot feedback)
- Update test_lockfile_provenance to match new SLSA format with URL
  from lock-time verification (provenance.slsa table vs provenance string)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
jdx and others added 2 commits April 4, 2026 13:31
…ithub backend

- Change debug! to info! for artifact download message so users see
  feedback during potentially slow lock-time provenance verification
- Clarify mise-lock.md docs: aqua backend does full crypto verification
  at lock time, github backend makes a lightweight attestation API query

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…verification

Extract shared verification helpers (run_github_attestation_check,
run_slsa_check, run_minisign_check, run_cosign_check,
download_checksum_file) that are called by both lock-time and
install-time verification paths. This eliminates ~200 lines of
duplicated download+verify logic while preserving the behavioral
differences between the two contexts:

- Lock-time: strict errors, downloads to temp dir, no progress reporter
- Install-time: lenient pre-checks for missing assets, progress reporting,
  provenance recording into ToolVersion

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
.into_iter()
.find(|a| a.name == asset)
.map(|a| a.browser_download_url)
.wrap_err_with(|| format!("no asset found for minisign: {asset}"))?;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minisign missing asset now errors instead of warning

Medium Severity

The refactored run_minisign_check uses .wrap_err_with()? when a minisign signature asset is not found in a GitHub release, which propagates a hard error. The old verify_minisign code used if let Some(url) = url { ... } else { warn!(...); return Ok(()); }, gracefully skipping verification with a warning. Since verify_minisign now delegates to run_minisign_check, tools with minisign configured in the aqua registry but missing the signature asset in a specific release will now fail installation instead of installing with a warning.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit a9457d3. Configure here.

autofix-ci bot and others added 2 commits April 4, 2026 18:58
Previously the github backend's detect_provenance_type() only queried
the attestation API to check if attestations exist, without performing
cryptographic verification. This meant provenance was recorded in the
lockfile based on "attestations exist" rather than "we verified them",
and at install time with default settings the verification was skipped
(has_lockfile_integrity=true).

Now for the current platform during `mise lock`, the github backend
downloads the artifact to a temp dir and runs full cryptographic
verification (GitHub attestations or SLSA) before recording provenance.
On failure, provenance is cleared so install-time verification runs.

Also updates mise-lock.md docs to reflect that both aqua and github
backends now verify provenance at lock time for the current platform.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
self.github_release_asset(&key_pkg, v, asset_strs).await?.0
}
"http" => key.url(pkg, v, os(), arch())?,
t => return Err(eyre!("unsupported cosign key type: {t}")),
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cosign empty asset_strs no longer handled gracefully

Medium Severity

The refactored run_cosign_check removes the empty-string guard that the old cosign verification had. The old code checked if asset_strs.is_empty() and produced an empty key_arg/sig_arg/bundle_arg, then skipped verification with if !key_arg.is_empty(). The new code passes potentially empty asset_strs directly to github_release_asset, which will likely error, turning a previously graceful skip into a hard install failure.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 701693e. Configure here.

jdx and others added 4 commits April 4, 2026 14:03
The pre-check in verify_slsa called github_release_asset to leniently
verify the asset exists, then run_slsa_check called it again with the
same arguments. Replace the pre-check + strict delegation with a single
call to run_slsa_check, catching errors leniently at install time.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
If the aqua registry says a package has SLSA provenance, verification
failures should be errors, not warnings. The previous lenient behavior
silently skipped verification when assets couldn't be found or
verification failed, which defeats the purpose of provenance checking.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The test_aqua_cosign test was using sops which only has opts-based
cosign (CLI pass-through), not native key/bundle verification. The test
was a false positive — it matched a progress message that was set before
the opts-only early return, so native verification never actually ran.

Switch to fork-cleaner@2.4.0 which has bundle-based cosign configured
in the aqua registry, enabling actual native cosign verification. Also
disable github_attestations in the test so cosign isn't short-circuited
by the higher-priority attestation check.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

There are 3 total unresolved issues (including 2 from previous reviews).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 810ef29. Configure here.

Ok(provenance_url)
}
Ok(false) => Err(eyre!("SLSA provenance verification failed")),
Err(e) => Err(e.into()),
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Refactored SLSA check turns graceful warnings into hard errors

Medium Severity

The refactored run_slsa_check removes graceful fallback handling that existed in the old verify_slsa code. Previously, when a SLSA asset was missing from a release (empty asset_strs or github_release_asset returning Err), the old code logged a warn! and returned Ok(()), allowing installation to proceed. The new shared helper propagates these as hard errors via ?. Since verify_slsa calls run_slsa_check with ? at install time, tools that have SLSA configured in the aqua registry but lack SLSA assets for a specific version/platform will now fail to install instead of succeeding with a warning.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 810ef29. Configure here.

@jdx jdx enabled auto-merge (squash) April 4, 2026 19:36
@jdx jdx merged commit e56ff71 into main Apr 4, 2026
37 checks passed
@jdx jdx deleted the fix/lock-time-provenance-verification branch April 4, 2026 19:39
jdx pushed a commit that referenced this pull request Apr 5, 2026
### 🚀 Features

- **(ci)** auto-convert external PRs to draft mode by @jdx in
[#8896](#8896)
- **(deps)** add `depends` field for user-specified tool dependencies by
@cprecioso in [#8776](#8776)
- **(dotnet)** support runtime-only installs by @fragon10 in
[#8524](#8524)
- **(npm)** apply install_before to transitive dependencies by @risu729
in [#8851](#8851)
- **(task)** allow passing arguments to task dependencies via
{{usage.*}} templates by @jdx in
[#8893](#8893)
- add options field to BackendListVersionsCtx by @esteve in
[#8875](#8875)

### 🐛 Bug Fixes

- **(backend)** filter PEP 440 .dev versions in fuzzy version matching
by @richardthe3rd in [#8849](#8849)
- **(ci)** update COPR BuildRequires rust version to match MSRV 1.88 by
@jdx in [#8911](#8911)
- **(ci)** add Ruby build dependencies to e2e Docker image by @jdx in
[#8910](#8910)
- **(ci)** add missing build dependencies to e2e Docker image by @jdx in
[#8912](#8912)
- **(ci)** add missing build dependencies to e2e Docker image by @jdx in
[#8914](#8914)
- **(ci)** use Node 24 LTS for corepack e2e test by @jdx in
[#8915](#8915)
- **(ci)** add libxml2 and pkg-config to e2e Docker image by @jdx in
[#8917](#8917)
- **(ci)** add libxml2-dev to e2e image and disable Swift SPM tests by
@jdx in [#8918](#8918)
- **(docs)** use sans-serif font for badges by @jdx in
[#8887](#8887)
- **(env)** parse --env=VALUE and -E=VALUE flag forms correctly by @jdx
in [#8889](#8889)
- **(exec)** use i64::from() for seccomp syscall numbers to survive
autofix by @jdx in [#8882](#8882)
- **(github)** preserve tool options like filter_bins when version
specified via CLI by @jdx in
[#8888](#8888)
- **(github)** use alias-specific options when tool_alias has its own
config by @jdx in [#8892](#8892)
- **(install)** add locked_verify_provenance setting and detect github
attestations at lock time by @jdx in
[#8901](#8901)
- **(lock)** prune stale version entries during filtered `mise lock
<tool>` runs by @altendky in
[#8599](#8599)
- **(python)** use lockfile URL for precompiled installs by @hehaoqian
in [#8750](#8750)
- **(release)** verify all build targets succeed before releasing by
@jdx in [#8886](#8886)
- **(ruby)** support build revisions for precompiled binaries in
mise.lock by @jdx in [#8900](#8900)
- **(swift)** fall back to Ubuntu 24.04 for unsupported Ubuntu versions
by @jdx in [#8916](#8916)
- **(zsh)** avoid duplicate trust warning after cd by @timothysparg in
[#8898](#8898)
- update flake.lock and add fix for rust-bindgen to default.nix by
@esteve in [#8874](#8874)
- when direnv diff is empty, do not try to parse it by @yaleman in
[#8857](#8857)
- skip trust check for plain .tool-versions in task list by @dportalesr
in [#8876](#8876)

### 🚜 Refactor

- **(go)** rename go_* settings to go.* namespace by @jdbruijn in
[#8598](#8598)

### 📚 Documentation

- **(tasks)** clarify task_config.includes behavior by @risu729 in
[#8905](#8905)

### 🧪 Testing

- **(ci)** run e2e tests inside Docker containers by @jdx in
[#8899](#8899)

### 📦️ Dependency Updates

- bump ubi from 0.8 to 0.9 by @jdx in
[#8906](#8906)
- bump zip from 3 to 8 by @jdx in
[#8908](#8908)
- update lockfile deps (hold back rattler) by @jdx in
[#8909](#8909)
- update bun.lock by @jdx in
[#8913](#8913)

### 📦 Registry

- add turso
([github:tursodatabase/turso-cli](https://github.com/tursodatabase/turso-cli))
by @kenn in [#8884](#8884)
- remove carp test by @jdx in
[#8894](#8894)

### Chore

- **(ci)** add workflow to warn PRs modifying vendored aqua-registry by
@jdx in [#8897](#8897)
- **(ci)** use github.token for draft conversion in auto-draft workflow
by @jdx in [#8903](#8903)
- remove deprecated settings older than 12 months by @jdx in
[#8904](#8904)

### New Contributors

- @dportalesr made their first contribution in
[#8876](#8876)
- @timothysparg made their first contribution in
[#8898](#8898)
- @hehaoqian made their first contribution in
[#8750](#8750)
- @jdbruijn made their first contribution in
[#8598](#8598)
- @cprecioso made their first contribution in
[#8776](#8776)
- @yaleman made their first contribution in
[#8857](#8857)
- @kenn made their first contribution in
[#8884](#8884)
- @fragon10 made their first contribution in
[#8524](#8524)

## 📦 Aqua Registry Updates

#### New Packages (6)

- [`ahkohd/oyo`](https://github.com/ahkohd/oyo)
- [`bellicose100xp/jiq`](https://github.com/bellicose100xp/jiq)
- [`kurama/dealve-tui`](https://github.com/kurama/dealve-tui)
- [`micahkepe/jsongrep`](https://github.com/micahkepe/jsongrep)
- [`textfuel/lazyjira`](https://github.com/textfuel/lazyjira)
- [`ubugeeei/vize`](https://github.com/ubugeeei/vize)

#### Updated Packages (1)

- [`sigstore/cosign`](https://github.com/sigstore/cosign)
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