Skip to content

ci(installer): trust Homebrew formula transition - #7558

Merged
cv merged 10 commits into
mainfrom
codex/7451-homebrew-template-anchor
Jul 26, 2026
Merged

ci(installer): trust Homebrew formula transition#7558
cv merged 10 commits into
mainfrom
codex/7451-homebrew-template-anchor

Conversation

@cjagwani

@cjagwani cjagwani commented Jul 26, 2026

Copy link
Copy Markdown
Collaborator

Summary

Temporarily authorize exactly the current OpenShell installer template and the reviewed safe Homebrew trust-lifecycle template in base-trusted CI. This prerequisite lets #7555 validate its runtime fix without allowing the mutable pull request to authorize its own installer behavior.

Related Issue

Related to #7451

Changes

Type of Change

  • Code change (feature, bug fix, or refactor)
  • Code change with doc updates
  • Doc only (prose changes, no code sample modifications)
  • Doc only (includes code sample changes)

Quality Gates

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification:
  • Docs updated for user-facing behavior changes
  • Docs not applicable — justification: this is a CI-only trust anchor and does not change runtime behavior, supported versions, commands, configuration, or user guidance
  • Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging)
  • Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: Codex Desktop reviewed the base-trusted boundary. The successor hash was derived from and revalidated against fix(installer): trust verified Homebrew formula #7555's exact corrected installer; the dependent consumer is named, and negative coverage rejects any transition drift.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Documentation Writer Review

  • Documentation writer subagent reviewed the completed changes
  • Result: no-docs-needed
  • Evidence: At exact PR SHA 4c6f09d585eada4097f1b42dfc945986ae64470c, this changes only the base-trusted verifier allowlist and fixtures for fix(installer): trust verified Homebrew formula #7555's safe Homebrew trust lifecycle. It does not change installer runtime behavior or a supported user contract. The corrected fix(installer): trust verified Homebrew formula #7555 parser proof, 75/75 installer-hash tests, npm run build:cli, and npm run check:diff passed.
  • Agent: Codex Desktop

DGX Station Hardware Evidence

  • Tested on DGX Station
  • Tested commit:
  • Station profile/scenario:
  • Result:
  • Supporting evidence:

Verification

  • PR description includes a Signed-off-by: line and every commit appears as Verified in GitHub
  • Normal pre-commit, commit-msg, and pre-push hooks passed; npm run build:cli and npm run check:diff also passed on exact head 4c6f09d585eada4097f1b42dfc945986ae64470c
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: npx vitest run test/installer-hash-check.test.ts (75/75 passed); the updated parser also accepted fix(installer): trust verified Homebrew formula #7555's exact corrected installer template.
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result:
  • Quality Gates section completed with required justifications or waivers
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Signed-off-by: Charan Jagwani cjagwani@nvidia.com

Summary by CodeRabbit

  • Bug Fixes
    • Updated installer/template verification to accept only templates whose computed hashes match a predefined allowlist, while continuing to reject drifted or unapproved templates with “not base-trusted” guidance.
  • Tests
    • Added Homebrew trust-transition fixture coverage for reviewed, drifted, and completed (legacy/current vs future/updated) scenarios.
    • Asserts the approved path reports “All installer hashes are current” and that drifted/unapproved and rejected completed modes fail appropriately.

Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Trusted template verification now accepts approved SHA-256 allowlists for installer and Brev templates. Tests add Homebrew trust-transition fixtures covering accepted transitions, drift rejection, and completed transition states.

Changes

Trusted template verification

Layer / File(s) Summary
Allowlist-based template verification
scripts/checks/extract-installer-pins.mts
Installer and Brev hashes use allowlists, with verification, failure reporting, and CLI wiring updated accordingly.
Homebrew transition test coverage
test/installer-hash-check.test.ts
Adds Homebrew trust-transition fixtures, trusted-parser mutations, and assertions for accepted, rejected, and completed transition states.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

Suggested labels: area: security

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and accurately reflects the main change: CI now trusts the Homebrew formula transition.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/7451-homebrew-template-anchor

Comment @coderabbitai help to get the list of available commands.

@github-code-quality

github-code-quality Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit 4c6f09d in the codex/7451-homebrew-... branch remains at 96%, unchanged from commit 1bfaac9 in the main branch.

TypeScript / code-coverage/cli

The overall coverage in commit 4c6f09d in the codex/7451-homebrew-... branch is 80%. The coverage in commit 1bfaac9 in the main branch is 81%.

Show a code coverage summary of the most impacted files.
File main 1bfaac9 codex/7451-homebrew-... 4c6f09d +/-
src/lib/onboard...box-prebuild.ts 92% 73% -19%
src/lib/actions...ocker-health.ts 82% 65% -17%
src/lib/actions...confirmation.ts 79% 69% -10%
src/lib/actions...-add-restart.ts 19% 10% -9%
src/lib/actions...x/mcp-bridge.ts 43% 36% -7%
src/lib/actions...lution-probe.ts 93% 88% -5%
src/lib/actions...e-validation.ts 84% 81% -3%
src/lib/shields/index.ts 67% 71% +4%
src/lib/onboard...host-anchors.ts 90% 94% +4%
src/lib/onboard/docker-cdi.ts 70% 80% +10%

Updated July 26, 2026 22:18 UTC

@github-actions

github-actions Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings reported

Advisor assessment: No blocking advisor findings reported
Next action: No advisor follow-up needed.
Findings: 0 blockers · 0 warnings · 0 suggestions

Model lanes

  • GPT-5.6 Terra (primary): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Model comparison: normalized findings match; normalized E2E selections differ; severity counts match.

Nemotron output stays in workflow artifacts and does not change the assessment above.

E2E guidance

Advisory only. E2E / PR Gate selects and runs jobs independently.

Recommended E2E: None

2 optional E2E recommendations
  • openshell-version-pin
  • bootstrap-install-smoke

Workflow run details

This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge.

@coderabbitai coderabbitai Bot left a comment

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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@test/installer-hash-check.test.ts`:
- Around line 760-766: Add a focused negative test alongside the accepted
Homebrew trust transition case in the installer hash-check suite. Use the
existing fixture runner and fixture conventions to mutate the brew help trust or
brew trust --formula block, then assert the result exits non-zero and does not
report all installer hashes as current.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: e6326672-2808-4838-9b01-5a4bcef26ac6

📥 Commits

Reviewing files that changed from the base of the PR and between 4fdbb79 and 5c8b977.

📒 Files selected for processing (2)
  • scripts/checks/extract-installer-pins.mts
  • test/installer-hash-check.test.ts

Comment thread test/installer-hash-check.test.ts
@cjagwani

Copy link
Copy Markdown
Collaborator Author

The Advisor preauthorization warning is intentionally not applied. Base-trusted CI executes the checker from the base commit while validating mutable PR input, so the reviewed future template must be authorized in a separate prerequisite before the consumer PR can pass. This follows the repository transition pattern: #7558 allows only the exact current and exact #7555 normalized hashes, names #7555 as the dependent consumer, and 07a1575 adds a negative drift fixture. After #7558 merges, #7555 will tighten the allowlist to the single future hash.

@cjagwani

Copy link
Copy Markdown
Collaborator Author

Addressed PRA-1 in 06f2a95. The trust-anchor comment now names #7555 as the consumer and defines the concrete removal event: after #7558 merges, #7555 must remove the legacy hash and retain only the trust-enabled hash before merging. Executable fixture modes model that completed state, reject the legacy installer, and accept the exact trust-enabled installer. Installer-hash suite: 75/75; source-shape and normal hooks pass.

@coderabbitai coderabbitai Bot left a comment

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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@test/installer-hash-check.test.ts`:
- Line 810: Update the test description in the completed trust-transition test
to remove the `(`#7555`)` suffix or replace it with the correct local issue
reference; do not use the dependent pull-request number as an issue suffix.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: db09701b-cdd4-498e-84a4-5ee13baed012

📥 Commits

Reviewing files that changed from the base of the PR and between 07a1575 and 06f2a95.

📒 Files selected for processing (2)
  • scripts/checks/extract-installer-pins.mts
  • test/installer-hash-check.test.ts

Comment thread test/installer-hash-check.test.ts Outdated
cjagwani and others added 4 commits July 25, 2026 20:24
Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>

@cv cv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Blocking installer trust-boundary defect at this exact head: the workflow still allowlists successor formula SHA-256 5ddf9956…, but the current corrected installer/formula contract uses 24305648faee…; the live parser rejects that current artifact. The cleanup path also deletes the trusted formula before running brew untrust. If untrust then fails, the trust record can survive after the checked file is gone, so a recreated path may inherit trust. Update the successor hash to the reviewed 24305648faee…, require successful untrust before checked deletion, and keep regressions for both the exact accepted hash set and untrust-before-delete ordering. Refresh onto the stable post-#7561 main, then rerun exact-head docs/security review and full CI/E2E before approval; #7555 must remain sequenced after this contract lands.

@cv cv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Exact-head product and nine-category security review: PASS. The #7555 successor template hash ee10afaeb5dc1477ca4b35a70a654ed32092399dbb290266f9f138d64484f1e2 was independently recomputed and accepted by the base-trusted parser as inert input. The transition fixture revokes trust before deleting temporary formula files and retains them when revocation fails; drift and legacy-completion paths fail closed. Local evidence: 75/75 focused tests, all reviewed OpenShell 0.0.85 manifests/assets, build/type-check/check:diff, and exact-head no-docs-needed receipt. GitHub evidence: all 53 current checks green including E2E / PR Gate, all 10 commits Verified, advisor merge_as_is with 0 blockers/warnings/suggestions, and no unresolved CodeRabbit threads. #7555 remains strictly sequenced after this prerequisite.

@cv
cv merged commit 968385b into main Jul 26, 2026
75 of 76 checks passed
@cv
cv deleted the codex/7451-homebrew-template-anchor branch July 26, 2026 22:23
@cv cv mentioned this pull request Jul 26, 2026
23 tasks
apurvvkumaria pushed a commit that referenced this pull request Jul 27, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Add the canonical `docs/changelog/2026-07-25.mdx` release entry with the
exact `## v0.0.96` heading.
The entry reconciles all 90 first-parent commits since v0.0.95 with all
92 merged PRs in the live `v0.0.96` label ledger and groups the
user-visible changes by operator journey.

## Changes

- Add the parser-safe dated MDX changelog entry for v0.0.96 with
root-absolute links to the focused user guides.
- Source summary:
- [#7194](#7194) ->
`docs/changelog/2026-07-25.mdx`: Document persistent baseline network
policy exclusions and their inspection, rebuild, and snapshot behavior.
- [#7188](#7188),
[#7427](#7427), and
[#7546](#7546) ->
`docs/changelog/2026-07-25.mdx`: Document DNS-backed HTTPS inference
routing, keyless loopback endpoints, and provider-marker isolation.
- [#7238](#7238) ->
`docs/changelog/2026-07-25.mdx`: Document blueprint sandbox and provider
identifier validation before state writes or OpenShell calls, with
bounded terminal-safe rejection previews.
- [#7319](#7319),
[#7274](#7274),
[#7528](#7528),
[#7353](#7353), and
[#7560](#7560) ->
`docs/changelog/2026-07-25.mdx`: Document the managed default gateway
service, onboarding readiness, and container-runtime identity
safeguards.
- [#7349](#7349),
[#7498](#7498),
[#7406](#7406),
[#7196](#7196),
[#7559](#7559),
[#7421](#7421),
[#7510](#7510),
[#7295](#7295), and
[#7565](#7565) ->
`docs/changelog/2026-07-25.mdx`: Document gateway-scoped status,
lifecycle diagnostics, managed MCP recovery, delete-edge safeguards, and
fail-closed CLI prompt and command output.
- [#7591](#7591) ->
`docs/changelog/2026-07-25.mdx`: Document opt-in authenticated MCP
tool-name discovery, its bounded and names-only contract, probe
interaction, and rebuild requirement.
- [#7305](#7305),
[#7480](#7480),
[#7471](#7471),
[#7365](#7365), and
[#7541](#7541) ->
`docs/changelog/2026-07-25.mdx`: Document installer version checks,
version-tag reporting, license guidance, WSL Ollama selection, and DGX
Station vLLM detection.
- [#7482](#7482),
[#7466](#7466),
[#7208](#7208),
[#7434](#7434), and
[#7586](#7586) ->
`docs/changelog/2026-07-25.mdx`: Document Ollama resource details,
reasoning precedence, Hermes onboarding behavior, and preserved managed
Hermes BuildKit failures.

- [#6830](#6830),
[#7492](#7492),
[#7563](#7563), and
[#7582](#7582) ->
`docs/changelog/2026-07-25.mdx`: Document the authoritative OpenClaw
production lock, fixed managed-image dependencies, immutable Hermes base
adoption, and Hermes image-size reduction.
- [#7505](#7505),
[#7530](#7530),
[#7547](#7547),
[#7508](#7508),
[#7548](#7548),
[#7549](#7549),
[#7537](#7537),
[#7534](#7534),
[#7515](#7515),
[#7511](#7511),
[#7551](#7551),
[#7562](#7562),
[#7575](#7575),
[#7496](#7496),
[#7594](#7594),
[#7595](#7595), and
[#7599](#7599) ->
`docs/changelog/2026-07-25.mdx`: Summarize release validation, transient
and bounded dispatch reconciliation, exact pre-tag qualification,
identity revalidation, npm-audit retry, sharding, image reuse, timeout,
telemetry, and workflow-hardening changes.
- Reconciled without separate changelog prose:
- [#7539](#7539),
[#7526](#7526),
[#7507](#7507),
[#7506](#7506),
[#7519](#7519),
[#7516](#7516),
[#7396](#7396),
[#7254](#7254),
[#7583](#7583),
[#7596](#7596), and
[#7598](#7598): Test-harness or
fixture-only changes.
- [#7403](#7403),
[#7161](#7161),
[#6877](#6877),
[#7531](#7531),
[#7525](#7525),
[#7522](#7522),
[#7536](#7536),
[#7552](#7552),
[#7566](#7566),
[#7553](#7553),
[#7561](#7561),
[#7577](#7577),
[#7569](#7569),
[#7585](#7585),
[#7584](#7584),
[#7592](#7592),
[#7580](#7580),
[#7571](#7571),
[#7517](#7517),
[#7589](#7589),
[#7402](#7402),
[#7558](#7558),
[#7544](#7544), and
[#7601](#7601): Dependency,
internal recovery, validation, contributor-workflow, E2E optimization,
telemetry, or CI trust changes with no separate user-facing release
claim.
- [#7556](#7556),
[#7573](#7573),
[#7576](#7576), and
[#7578](#7578): Experimental
repository-maintainer conflict automation with no canonical user
documentation surface.

## Type of Change

- [ ] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [x] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Quality Gates

- [ ] Tests added or updated for changed behavior
- [x] Existing tests cover changed behavior — justification:
`test/changelog-docs.test.ts` validates dated changelog structure,
version headings, and published links.
- [ ] Tests not applicable — justification:
- [x] Docs updated for user-facing behavior changes
- [ ] Docs not applicable — justification:
- [ ] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [ ] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification:
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Documentation Writer Review

- [x] Documentation writer subagent reviewed the completed changes
- Result: `docs-updated`
- Evidence: Reviewed `docs/changelog/2026-07-25.mdx` at exact head
`0f5dedb47` against 90 first-parent release commits and 92 merged PRs
labeled `v0.0.96`. Verified parser-safe MDX SPDX, the exact version
heading, literal CLI names, writing style, skip terms, all 20
root-absolute published links, and the accepted #7591 opt-in
authenticated discovery bounds. #7544, #7599, and #7601 remain internal
or CI-only release-ledger entries. Changelog tests passed 6/6, the docs
build passed with 0 errors and two pre-existing Fern warnings, and `npm
run check:diff` plus the final diff check passed.
- Agent: Codex Desktop documentation-writer subagent
<!-- docs-review-head-sha: 0f5dedb -->
<!-- docs-review-agents-blob-sha: be20a09 -->

## DGX Station Hardware Evidence

- [ ] Tested on DGX Station
- Tested commit:
- Station profile/scenario:
- Result:
- Supporting evidence:

## Verification

- [x] PR description includes a `Signed-off-by:` line and every commit
appears as `Verified` in GitHub
- [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or
`npm run check:diff` passed when hooks were skipped or unavailable
- [x] Targeted behavior tests pass for the current change set, or tests
are marked not applicable above — `npx vitest run
test/changelog-docs.test.ts`: 6/6 passed.
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — command/result: Not applicable to this
prose-only changelog entry.
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only) — the
build passed with 0 errors and 2 existing Fern warnings; the
published-route check passed.
- [x] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)
— native changelog files use the required parser-safe MDX SPDX comment
and no frontmatter.

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Persistent network policy exclusions with consistent restore/exclusion
reporting across rebuilds/snapshots.
* Opt-in MCP tool discovery via `mcp status --tools` with bounded,
redacted authenticated traffic.
* Improved HTTPS inference switching for custom endpoints and refreshed
onboarding/model menu details.
* Refined OpenShell gateway defaults for port `8080`, including more
reliable readiness checks.
* **Bug Fixes**
* Prevent incorrect provider/model restoration after compatible-provider
update failures.
* Preserve managed MCP state after exec loss and tighten gateway/doctor
status scoping.
* **Tests**
* Stronger, fail-closed release validation with hardened
evidence/artifact handoff and bounded timeouts/retries.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Co-authored-by: Prekshi Vyas <prekshiv@nvidia.com>
@wscurran wscurran added area: ci CI workflows, checks, release automation, or GitHub Actions area: packaging Packages, images, registries, installers, or distribution labels Jul 29, 2026
@wscurran wscurran added chore Build, CI, dependency, or tooling maintenance security labels Jul 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: ci CI workflows, checks, release automation, or GitHub Actions area: packaging Packages, images, registries, installers, or distribution chore Build, CI, dependency, or tooling maintenance security

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants