fix(ci): publish validated conflict resolution trees#7576
Conversation
📝 WalkthroughWalkthroughThe merge conflict fixer tests add clean-file and moved-file conflict histories. Publication no longer propagates ChangesMerge conflict publication
Estimated code review effort: 3 (Moderate) | ~20 minutes Sequence Diagram(s)sequenceDiagram
participant publishResolution
participant validateResolutionPatch
participant publishValidatedTree
participant createGitHubTree
publishResolution->>validateResolutionPatch: validate resolution patch
validateResolutionPatch-->>publishResolution: finalTree and repository
publishResolution->>publishValidatedTree: publish validated tree with baseSha
publishValidatedTree->>createGitHubTree: create tree without changedPaths
createGitHubTree-->>publishValidatedTree: parent-aware GitHub tree entries
Possibly related PRs
Suggested labels: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall coverage in commit 21b6c14 in the TypeScript / code-coverage/cliThe overall coverage in commit 21b6c14 in the Show a code coverage summary of the most impacted files.
Updated |
PR Review Advisor — No blocking findings reportedAdvisor assessment: No blocking advisor findings reported Model lanes
Nemotron output stays in workflow artifacts and does not change the assessment above. E2E guidanceAdvisory only. E2E / PR Gate selects and runs jobs independently. Recommended E2E: None 1 optional E2E recommendation
This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge. |
<!-- markdownlint-disable MD041 --> ## Summary Update every managed sandbox base image to the same checksum-bound fixed Vim, jq, and Expat package boundary. The image build also remediates npm's private `brace-expansion` copy and verifies the fixed Perl component versions. ## Changes - Install `libexpat1=2.8.2-1`, `libonig5=6.9.9-1+b1`, `libjq1=1.8.2-1`, `jq=1.8.2-1`, `vim-common=2:9.2.0782-1`, and `vim-tiny=2:9.2.0782-1` from one immutable Debian snapshot in the OpenClaw, Hermes, and Deep Agents Code base images. Verify architecture-specific SHA-256 values before installation, then check every dpkg identity and exercise the jq, Oniguruma, Expat, and Vim runtimes. Emit the architecture and exact package identities as a root-owned, read-only inventory. - Replace only the `brace-expansion@5.0.7` package inside reviewed `npm@11.18.0` with the SRI-pinned `5.0.8` registry archive. The helper rejects identity or layout drift, unsafe archive contents, duplicates, and every symlink except a `node_modules/.bin` link to a regular file inside the reviewed `node_modules` root. It replaces the complete directory transactionally, disarms rollback after the verified replacement becomes authoritative, retries backup cleanup without risking the live tree, and verifies npm and npx only after the fixed package is active. - Apply the npm-private replacement after each OpenClaw, Hermes, and Deep Agents base-image npm upgrade. Reassert the contract in each completed image because the completed filesystem is the published dependency boundary. - Verify the `Socket`, `Storable`, `HTTP::Tiny`, `IO::Compress::Base`, `IO::Uncompress::Unzip`, and `File::GlobMapper` versions included in the checksum-pinned Perl 5.44.0 package. - Retain the OpenClaw base image's reviewed jq and Expat identities and move the Hermes and Deep Agents Code images to the same artifact boundary. - Reassert the immutable inventory metadata and content, all six installed package identities, jq-to-Oniguruma linkage, jq/Expat/Vim runtime probes, and an empty dpkg audit in each completed managed image. - Track the new helper in base-image source identity, workflow path filters, and optimized sandbox build contexts. - Add exact package `RUN`-chain execution and checksum-rejection tests for all three managed base images on amd64 and arm64. Add behavior, pre-swap and post-swap rollback, layout-drift, command-order, image-order, and real-artifact tests. Record the public dependency review and removal conditions in `docs/security/sandbox-base-2026-07-25-dependency-review.md`. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [x] 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: Exact-head review pending after resolving the immutable jq closure, completed-image inventory, and npm rollback findings. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: Current exact-head CI is pending after the clean current-main refresh. The prior disposition is invalid because the head and base SHAs changed. ## Documentation Writer Review - [x] Documentation writer subagent reviewed the completed changes - Result: `docs-updated` - Evidence: `docs/security/sandbox-base-2026-07-25-dependency-review.md`; the exact-head review confirmed the dependency identities, compatibility contracts, concern dispositions, removal conditions, changed comments, and test titles. It covered all three managed base images, both architectures, the checksum/runtime contracts, and npm rollback evidence. It also confirmed that the public diff contains no internal identifiers, private paths, scan counts, assignees, or confidential audit context. The exact-head rerun verified the complete jq runtime closure, corrected rollback state transition, partial-cleanup test, and complete package/range ledger. The exact-head follow-up confirmed that the growth-guard fixture refactor is behavior-neutral and requires no documentation change. The latest exact-head review verified the root-owned inventory and completed-image assertions for all three images and both architectures. The exact-head follow-up confirmed that the canonical instruction digest preserves trusted remote-dashboard staging without weakening rejection of noncanonical post-generator rewrites. The refreshed exact-head review confirmed the clean current-main merge only carries upstream conflict-fixer changes and does not alter the remediation. The latest exact-head follow-up confirmed the test-only base-APT fixture fix redirects the immutable inventory into temporary directories with exact root-ownership operation validation and requires no documentation change. The final fixture compaction preserves those exact operations while keeping the changed test file below its repository size budget. The refreshed exact-head review confirmed that the clean #7576 current-main merge is byte-for-byte identical to upstream in its two conflict-publisher files and has no remediation or documentation overlap. - Agent: Codex Desktop <!-- docs-review-head-sha: 632d490 --> <!-- 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 — the exact package and npm rollback suites passed 18 tests; relevant base-runtime provisioning passed 6 tests; bundled npm, Deep Agents Code, Perl, and applicable Hermes layout contracts passed. The one broader Hermes macOS permission fixture failure is unrelated to the changed package layer and is not claimed as passing evidence. The exact Hermes apt fixture that failed in CI now passes 10 tests after the current main refresh. The refreshed exact head passes 76 focused tests, including 18 exact base/completed-image package matrix cases for all three images and both architectures, plus the injected partial backup cleanup. The dashboard lifecycle and security matrix regression selection passes 52/52. After the current-main refresh, the complete relevant regression selection passes 110/110 plus the Hermes structural contract. The two full base-APT fixture cases that failed on Linux CI now pass 2/2, and the exact security package matrix remains green at 18/18. Hadolint passed for all six base/final Dockerfiles, and `npm run docs` passed. After the latest current-main refresh, the upstream conflict-publisher suite passes 12/12 and CLI type-checking passes alongside the unchanged 2/2 and 18/18 remediation regressions. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: Not run. The change is scoped to reviewed image dependencies and focused contracts. - [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 zero errors and two existing Fern warnings - [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) The new dependency review has the required SPDX header. It follows the established plain-Markdown `docs/security/*-dependency-review.md` audit-record pattern, which does not use Fern frontmatter. --- Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com> --------- Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
<!-- 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>
Summary
The conflict publisher rejected valid rename-aware resolutions and could reference clean-merge blobs that GitHub did not have. It now publishes the validated final tree and uploads each final blob that is absent from both recorded parents.
Related Issue
Follow-up to #7542.
Changes
Type of Change
Quality Gates
Documentation Writer Review
no-docs-neededDGX Station Hardware Evidence
Verification
Signed-off-by:line and every commit appears asVerifiedin GitHubpre-commit,commit-msg, andpre-pushhooks passed, ornpm run check:diffpassed when hooks were skipped or unavailablenpx vitest run --project integration test/pr-merge-conflict-fixer.test.tspassed 12 tests.npm run typecheck:clipassed, and the pre-push CLI TypeScript check passed.npm testfor broad runtime/test-harness changes;npm run checkfor repo-wide validation/coverage changes — command/result:npm run docsbuilds without warnings (doc changes only)Signed-off-by: Carlos Villela cvillela@nvidia.com