Skip to content

🔧 chore(release): consolidate v1.6.0-rc.2#550

Open
scttbnsn wants to merge 1 commit into
mainfrom
codex/v1.6.0-rc.2-release
Open

🔧 chore(release): consolidate v1.6.0-rc.2#550
scttbnsn wants to merge 1 commit into
mainfrom
codex/v1.6.0-rc.2-release

Conversation

@scttbnsn

@scttbnsn scttbnsn commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Summary

Immutable release construction

Local verification on the exact release head

Final merge gate

Do not merge this PR or cut v1.6.0-rc.2 until the exact-head GitHub CI, Playwright, Cucumber, load/security matrix, CodeRabbit/Qlty/CodeQL review, two required non-author approvals, and the isolated fresh 24-hour NAS acceptance report are clean with passed: true. The 24-hour NAS run starts last from the frozen approved tree. After rc.2, the 7-day soak restarts from its publication date (GA earliest ~2026-07-25); GA promotes the exact RC digest, and any further code change requires a new RC and a fresh soak.

✨ Added

  • Added shared GitHub Actions workflow testing utilities (.github/tests/workflow-test-utils.ts) with loadWorkflow()/getWorkflowStep() and workflow YAML types; refactored workflow inspection tests to use them.
  • Added/expanded Docker watchContainer Vitest coverage (app/watchers/providers/docker/container-processing.test.ts) to assert failure/success preservation of result and currentReleaseNotes, including validated-container getter safety.
  • Added/expanded Docker image orchestration tests for fast-path/repair-branch digest stickiness and errored-container fast-path eligibility (docker-image-details-orchestration.*.test.ts).
  • Added UI + i18n support for the new “Version Update” container filter (filterKind="version"), including kind-filter matching semantics, filter-chip/select option rendering, and route-query synchronization tests.
  • Added Portwing WS unit test assertions that the welcome frame’s config.drydockVersion matches the canonical getVersion() value (app/api/portwing-ws.test.ts).
  • Added/updated release-candidate identity/docs/changelog validation to cover v1.6.0-rc.2 (including compare-link chain completion expectations).

🔧 Changed

  • Refactored workflow inspection tests to deduplicate YAML parsing/type scaffolding by using shared loadWorkflow/getWorkflowStep helpers and shared workflow typings.
  • Hardened watchContainer by snapshotting/restoring only containerWithResult.result and containerWithResult.currentReleaseNotes across watch cycles, restoring them only when the current cycle still produced no fresh result (so later enrichment failures don’t overwrite earlier successful comparison state).
  • Updated Docker orchestration logic:
    • Included errored containers in the “already in store” refresh path.
    • Adjusted digest repair/stickiness behavior in refreshStoredContainerImageFields.
    • Simplified returned containerToReturn.image.digest.value assignment to always use the computed repoDigest.
    • Removed the explicit structuredClone carry-over of updatePolicyOverrides into returned containers before applying declarative policy.
  • Updated Portwing WS version reporting to lazily populate the cached drydock version from getVersion() on first use; extended injectDrydockVersionForTesting to accept string | undefined.
  • Implemented filterKind="version" as a grouped match: containers with updateKind of major/minor/patch match the version filter.
  • Bumped v1.6.0-rc.1v1.6.0-rc.2 across release identity surfaces (README/site badge + highlights, demo/mock data, API docs, quickstart/update content) and updated release-doc/changelog identity tests accordingly.

🐛 Fixed

  • Fixed an E2E restore-path defect where restoring getter-derived fields could throw and prevent container report persistence; restoration now targets only result/currentReleaseNotes so validated-container getters can safely derive updateAvailable/updateKind.
  • Fixed/validated Portwing welcome/version correctness by ensuring the welcome frame uses getVersion() and adding direct unit coverage.

🔒 Security

  • Preserved registry-reconciled digest context through watch/compare failure paths to keep security-scan grouping stable.

⚠️ Breaking

  • None

⚠️ Concerns

  • Ensure exact-head CI, testing, security checks, and all required approvals/reviews pass before merging/publishing.
  • Re-run both prior E2E jobs if needed to confirm the Playwright failure was not flaky (previously attributed to CI 429 rate limiting).
  • Complete the fresh 24-hour NAS acceptance run before merging/publishing v1.6.0-rc.2.
  • Confirm the post-publication 7-day soak restart behavior matches the release plan.

@vercel

vercel Bot commented Jul 17, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
drydock-website Ready Ready Preview, Comment Jul 17, 2026 1:11pm
drydockdemo-website Ready Ready Preview, Comment Jul 17, 2026 1:11pm

@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

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

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 539a9583-b0ec-4d20-b76b-d67c8c8afbf6

📥 Commits

Reviewing files that changed from the base of the PR and between d6e166f and cbecfa1.

⛔ Files ignored due to path filters (1)
  • CHANGELOG.md is excluded by !CHANGELOG.md
📒 Files selected for processing (38)
  • .github/tests/ci-verify-workflow.test.ts
  • .github/tests/crowdin-workflow.test.ts
  • .github/tests/e2e-playwright-workflow.test.ts
  • .github/tests/github-actions-pins.test.ts
  • .github/tests/harden-runner-workflow.test.ts
  • .github/tests/mutation-workflow.test.ts
  • .github/tests/path-filter-workflow.test.ts
  • .github/tests/release-cut-retry-workflow.test.ts
  • .github/tests/workflow-test-utils.ts
  • README.md
  • app/api/portwing-ws.test.ts
  • app/api/portwing-ws.ts
  • app/watchers/providers/docker/container-processing.test.ts
  • app/watchers/providers/docker/container-processing.ts
  • app/watchers/providers/docker/docker-image-details-orchestration.test.ts
  • app/watchers/providers/docker/docker-image-details-orchestration.ts
  • apps/demo/src/mocks/data/agents.ts
  • apps/demo/src/mocks/data/audit.ts
  • apps/demo/src/mocks/data/containers.ts
  • apps/demo/src/mocks/data/server.ts
  • apps/demo/src/mocks/handlers/app.ts
  • apps/web/src/lib/site-config.ts
  • apps/web/src/lib/site-content.ts
  • content/docs/current/api/agent.mdx
  • content/docs/current/api/app.mdx
  • content/docs/current/api/portwing.mdx
  • content/docs/current/quickstart/index.mdx
  • content/docs/current/updates/index.mdx
  • scripts/changelog-links.test.mjs
  • scripts/release-docs-identity.test.mjs
  • scripts/release-identity.test.mjs
  • ui/src/components/containers/ContainersListContent.vue
  • ui/src/composables/useContainerFilters.ts
  • ui/src/locales/en/containerComponents.json
  • ui/src/views/ContainersView.vue
  • ui/tests/components/containers/ContainersListContent.spec.ts
  • ui/tests/composables/useContainerFilters.spec.ts
  • ui/tests/views/ContainersView.spec.ts

📝 Walkthrough

Walkthrough

The PR centralizes GitHub Actions workflow parsing in shared test utilities. Docker watch and image reconciliation preserve prior comparison state and reconciled digests across failure, repair, and errored-container paths. The UI adds a version filter for major, minor, and patch updates with route synchronization. Release metadata, fixtures, documentation, README content, validation tests, and Portwing WebSocket version reporting are updated for v1.6.0-rc.2.

Possibly related issues

Possibly related PRs

🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 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.
✨ 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/v1.6.0-rc.2-release

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
.github/tests/ci-verify-workflow.test.ts (1)

36-39: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Delegate to the shared lookup helper.

 function getTestJobStep(name: string): WorkflowStep | undefined {
-  const workflow = loadWorkflow();
-  return workflow.jobs?.test?.steps?.find((step) => step.name === name);
+  return getWorkflowStep('test', name);
 }
🤖 Prompt for 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.

In @.github/tests/ci-verify-workflow.test.ts around lines 36 - 39, Update
getTestJobStep to delegate step lookup to the existing shared lookup helper
instead of directly traversing workflow.jobs.test.steps and calling find.
Preserve the current name-based lookup behavior and undefined result when no
matching step exists.
🤖 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.

Nitpick comments:
In @.github/tests/ci-verify-workflow.test.ts:
- Around line 36-39: Update getTestJobStep to delegate step lookup to the
existing shared lookup helper instead of directly traversing
workflow.jobs.test.steps and calling find. Preserve the current name-based
lookup behavior and undefined result when no matching step exists.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 17052623-2d47-4bce-be6e-8bf4e8bbea4b

📥 Commits

Reviewing files that changed from the base of the PR and between d6e166f and d63b3d3.

⛔ Files ignored due to path filters (1)
  • CHANGELOG.md is excluded by !CHANGELOG.md
📒 Files selected for processing (36)
  • .github/tests/ci-verify-workflow.test.ts
  • .github/tests/crowdin-workflow.test.ts
  • .github/tests/e2e-playwright-workflow.test.ts
  • .github/tests/github-actions-pins.test.ts
  • .github/tests/harden-runner-workflow.test.ts
  • .github/tests/mutation-workflow.test.ts
  • .github/tests/path-filter-workflow.test.ts
  • .github/tests/release-cut-retry-workflow.test.ts
  • .github/tests/workflow-test-utils.ts
  • README.md
  • app/watchers/providers/docker/container-processing.test.ts
  • app/watchers/providers/docker/container-processing.ts
  • app/watchers/providers/docker/docker-image-details-orchestration.test.ts
  • app/watchers/providers/docker/docker-image-details-orchestration.ts
  • apps/demo/src/mocks/data/agents.ts
  • apps/demo/src/mocks/data/audit.ts
  • apps/demo/src/mocks/data/containers.ts
  • apps/demo/src/mocks/data/server.ts
  • apps/demo/src/mocks/handlers/app.ts
  • apps/web/src/lib/site-config.ts
  • apps/web/src/lib/site-content.ts
  • content/docs/current/api/agent.mdx
  • content/docs/current/api/app.mdx
  • content/docs/current/api/portwing.mdx
  • content/docs/current/quickstart/index.mdx
  • content/docs/current/updates/index.mdx
  • scripts/changelog-links.test.mjs
  • scripts/release-docs-identity.test.mjs
  • scripts/release-identity.test.mjs
  • ui/src/components/containers/ContainersListContent.vue
  • ui/src/composables/useContainerFilters.ts
  • ui/src/locales/en/containerComponents.json
  • ui/src/views/ContainersView.vue
  • ui/tests/components/containers/ContainersListContent.spec.ts
  • ui/tests/composables/useContainerFilters.spec.ts
  • ui/tests/views/ContainersView.spec.ts

@scttbnsn

Copy link
Copy Markdown
Contributor Author

The 🥒 E2E Cucumber failure is root-caused and real, not a flake: the #543 restore in watchContainer's catch assigns updateAvailable/updateKind, but validate() installs those as getter-only derived properties — on a validated container the assignment throws ("Cannot set property updateAvailable of # which has only a getter"), escapes watchContainer, and the container report never persists, so start-drydock.sh's readiness gate times out. The unit tests missed it because their fixtures were plain literals without the model getters.

Fix round in progress on dev/v1.6 (restore only the plain data props result/currentReleaseNotes — the getters then derive correctly from the restored result; regression tests use real validate()-built containers). This head will be regenerated from the new frozen dev tip; hold review until the force-push.

scttbnsn added a commit that referenced this pull request Jul 17, 2026
…le (#551)

Fixes the real regression the 🥒 Cucumber E2E gate caught on release PR
#550 (details in [this
comment](#550 (comment))).

**Root cause:** the #543 error-restore in `watchContainer`'s catch
assigned `updateAvailable`/`updateKind`, but `validate()` installs those
as getter-only derived properties (no setter). On a validated container
the assignment threw `TypeError: Cannot set property updateAvailable of
#<Object> which has only a getter`, escaped `watchContainer`, and the
container report never persisted — so `start-drydock.sh`'s readiness
gate timed out on the `local_ecr_sub_sub_test` fixture.

**Fix:** restore only the plain data properties `result` and
`currentReleaseNotes`. `updateAvailable`/`updateKind` recompute from the
restored result via the getters, which also makes the restore inherently
consistent (no way to restore a stale flag against a fresh result).

**Why unit tests missed it:** the container fixtures were plain object
literals without the model's getters. TDD round (Codex tests first): a
new regression test builds its container through the real `validate()`
and failed pre-fix with the exact getter TypeError; the four
pre-existing tests were migrated off plain literals to
`validate()`-built containers so the file exercises real model object
shapes from now on. 2 failed pre-fix → 5/5 post-fix.

**Verification:** full docker provider suite 34 files / 1313 tests
green; `container-processing.ts` at 100/100/100/100; complete pre-push
gate green from a worktree (coverage 100% app+ui, builds, biome, qlty).

No CHANGELOG entry: this corrects the unreleased #543 implementation
already covered by the rc.2 bullet.

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

## Changelog

- 🐛 Fixed `watchContainer` error recovery for validated containers by
restoring only `result` and `currentReleaseNotes`.
- 🔧 Updated watcher tests to use validated container fixtures and cover
getter-derived update state.
- ✨ Added regression coverage for failed enrichment/write cycles and
state restoration.
- ✅ Verified with 1,313 Docker provider tests and the complete pre-push
gate.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@scttbnsn
scttbnsn force-pushed the codex/v1.6.0-rc.2-release branch from d63b3d3 to ebaaf21 Compare July 17, 2026 05:27
@scttbnsn

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

Head regenerated at ebaaf212 from the new frozen dev tip bb64ba16 (PR #551 — the getter-safe restore fix). Delta vs the superseded head d63b3d3e is exactly the two-file fix; all construction invariants re-verified (sole parent d6e166ff, zero .planning entries, non-planning tree identical to frozen dev). Full local gate + 37/37 website-script tests re-run green on the exact head.

@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

@scttbnsn Full review requested for head ebaaf212, including the getter-safe restore fix.

✅ Action performed

Full review finished.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

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 `@app/watchers/providers/docker/container-processing.test.ts`:
- Around line 86-92: Extend the test around watchContainer to verify
emitContainerReport is called after the restore path completes. Assert the
emitted report contains the restored container state, alongside the existing
return-value assertions, using the test's existing emitContainerReport mock or
spy.
🪄 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: Pro Plus

Run ID: 6bd66eab-5638-432c-8871-248effaafa8b

📥 Commits

Reviewing files that changed from the base of the PR and between d63b3d3 and ebaaf21.

⛔ Files ignored due to path filters (1)
  • CHANGELOG.md is excluded by !CHANGELOG.md
📒 Files selected for processing (36)
  • .github/tests/ci-verify-workflow.test.ts
  • .github/tests/crowdin-workflow.test.ts
  • .github/tests/e2e-playwright-workflow.test.ts
  • .github/tests/github-actions-pins.test.ts
  • .github/tests/harden-runner-workflow.test.ts
  • .github/tests/mutation-workflow.test.ts
  • .github/tests/path-filter-workflow.test.ts
  • .github/tests/release-cut-retry-workflow.test.ts
  • .github/tests/workflow-test-utils.ts
  • README.md
  • app/watchers/providers/docker/container-processing.test.ts
  • app/watchers/providers/docker/container-processing.ts
  • app/watchers/providers/docker/docker-image-details-orchestration.test.ts
  • app/watchers/providers/docker/docker-image-details-orchestration.ts
  • apps/demo/src/mocks/data/agents.ts
  • apps/demo/src/mocks/data/audit.ts
  • apps/demo/src/mocks/data/containers.ts
  • apps/demo/src/mocks/data/server.ts
  • apps/demo/src/mocks/handlers/app.ts
  • apps/web/src/lib/site-config.ts
  • apps/web/src/lib/site-content.ts
  • content/docs/current/api/agent.mdx
  • content/docs/current/api/app.mdx
  • content/docs/current/api/portwing.mdx
  • content/docs/current/quickstart/index.mdx
  • content/docs/current/updates/index.mdx
  • scripts/changelog-links.test.mjs
  • scripts/release-docs-identity.test.mjs
  • scripts/release-identity.test.mjs
  • ui/src/components/containers/ContainersListContent.vue
  • ui/src/composables/useContainerFilters.ts
  • ui/src/locales/en/containerComponents.json
  • ui/src/views/ContainersView.vue
  • ui/tests/components/containers/ContainersListContent.spec.ts
  • ui/tests/composables/useContainerFilters.spec.ts
  • ui/tests/views/ContainersView.spec.ts
🚧 Files skipped from review as they are similar to previous changes (29)
  • apps/demo/src/mocks/data/agents.ts
  • content/docs/current/api/portwing.mdx
  • apps/web/src/lib/site-content.ts
  • apps/demo/src/mocks/data/server.ts
  • apps/demo/src/mocks/handlers/app.ts
  • .github/tests/workflow-test-utils.ts
  • ui/src/locales/en/containerComponents.json
  • apps/web/src/lib/site-config.ts
  • content/docs/current/api/agent.mdx
  • ui/src/components/containers/ContainersListContent.vue
  • .github/tests/e2e-playwright-workflow.test.ts
  • apps/demo/src/mocks/data/audit.ts
  • app/watchers/providers/docker/container-processing.ts
  • .github/tests/harden-runner-workflow.test.ts
  • ui/tests/composables/useContainerFilters.spec.ts
  • scripts/changelog-links.test.mjs
  • scripts/release-docs-identity.test.mjs
  • apps/demo/src/mocks/data/containers.ts
  • content/docs/current/updates/index.mdx
  • .github/tests/crowdin-workflow.test.ts
  • .github/tests/path-filter-workflow.test.ts
  • README.md
  • ui/tests/components/containers/ContainersListContent.spec.ts
  • .github/tests/ci-verify-workflow.test.ts
  • .github/tests/mutation-workflow.test.ts
  • .github/tests/github-actions-pins.test.ts
  • ui/tests/views/ContainersView.spec.ts
  • app/watchers/providers/docker/docker-image-details-orchestration.test.ts
  • app/watchers/providers/docker/docker-image-details-orchestration.ts

Comment thread app/watchers/providers/docker/container-processing.test.ts
scttbnsn added a commit that referenced this pull request Jul 17, 2026
CodeRabbit follow-up from release PR #550 ([the
finding](#550 (comment))):
the getter-TypeError regression manifested as the container report never
persisting, so the regression test now also asserts
`emitContainerReport` ran once with the returned report, instead of only
checking returned container state.

Test-only, 4 lines. 5/5 tests green; full pre-push gate green from a
worktree.

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

✨ Added
- Extended the Docker container watcher regression test to verify
`emitContainerReport` is called once with the returned report.
- Confirmed the container state remains correctly preserved after a
getter `TypeError`.

- Test-only change.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@scttbnsn
scttbnsn force-pushed the codex/v1.6.0-rc.2-release branch from ebaaf21 to 0d93862 Compare July 17, 2026 06:12
@scttbnsn

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

Head regenerated at 0d938621 from frozen dev 42a1a2f1 — folds in your emit-assertion suggestion (landed via PR #552). Delta vs ebaaf212 is exactly the 4-line test addition; construction invariants re-verified (sole parent d6e166ff, zero .planning, non-planning tree identical to frozen dev); full gate + 37/37 website-script tests green on the exact head.

@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

@scttbnsn Full review requested for head 0d938621, including the emit-assertion regression test.

✅ Action performed

Full review finished.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

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 `@content/docs/current/api/portwing.mdx`:
- Line 188: Update the Welcome example’s drydockVersion value to match the
emitted default from drydockVersion() in app/api/portwing-ws.ts, which is 1.5.0;
preserve the surrounding example unchanged.
🪄 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: Pro Plus

Run ID: f740f86f-b412-47d0-b862-42b25ac8b217

📥 Commits

Reviewing files that changed from the base of the PR and between d6e166f and 0d93862.

⛔ Files ignored due to path filters (1)
  • CHANGELOG.md is excluded by !CHANGELOG.md
📒 Files selected for processing (36)
  • .github/tests/ci-verify-workflow.test.ts
  • .github/tests/crowdin-workflow.test.ts
  • .github/tests/e2e-playwright-workflow.test.ts
  • .github/tests/github-actions-pins.test.ts
  • .github/tests/harden-runner-workflow.test.ts
  • .github/tests/mutation-workflow.test.ts
  • .github/tests/path-filter-workflow.test.ts
  • .github/tests/release-cut-retry-workflow.test.ts
  • .github/tests/workflow-test-utils.ts
  • README.md
  • app/watchers/providers/docker/container-processing.test.ts
  • app/watchers/providers/docker/container-processing.ts
  • app/watchers/providers/docker/docker-image-details-orchestration.test.ts
  • app/watchers/providers/docker/docker-image-details-orchestration.ts
  • apps/demo/src/mocks/data/agents.ts
  • apps/demo/src/mocks/data/audit.ts
  • apps/demo/src/mocks/data/containers.ts
  • apps/demo/src/mocks/data/server.ts
  • apps/demo/src/mocks/handlers/app.ts
  • apps/web/src/lib/site-config.ts
  • apps/web/src/lib/site-content.ts
  • content/docs/current/api/agent.mdx
  • content/docs/current/api/app.mdx
  • content/docs/current/api/portwing.mdx
  • content/docs/current/quickstart/index.mdx
  • content/docs/current/updates/index.mdx
  • scripts/changelog-links.test.mjs
  • scripts/release-docs-identity.test.mjs
  • scripts/release-identity.test.mjs
  • ui/src/components/containers/ContainersListContent.vue
  • ui/src/composables/useContainerFilters.ts
  • ui/src/locales/en/containerComponents.json
  • ui/src/views/ContainersView.vue
  • ui/tests/components/containers/ContainersListContent.spec.ts
  • ui/tests/composables/useContainerFilters.spec.ts
  • ui/tests/views/ContainersView.spec.ts

Comment thread content/docs/current/api/portwing.mdx
scttbnsn added a commit that referenced this pull request Jul 17, 2026
…mes (#553)

Fixes the shipped bug CodeRabbit caught on release PR #550 ([the
finding](#550 (comment))):
`drydockVersion()` claimed to be populated from package.json at runtime
but hard-coded `'1.5.0'` — every portwing WS Welcome frame since the
endpoint shipped in v1.5.0 (so v1.5.1, v1.5.2, and v1.6.0-rc.1 servers)
identified itself as `1.5.0` to agents. The documented Welcome example
was describing intended behavior the code never delivered.

**Fix:** `drydockVersion()` now delegates to the canonical
`getVersion()` from `app/configuration` (`DD_VERSION` override, else
package.json — the same source `app/debug/dump.ts` and the rest of the
API use), still cached at first read and still overridable by
`injectDrydockVersionForTesting()`. Stale comments corrected.

**TDD (Codex tests first):** new regression test mocks `getVersion()` to
a sentinel and asserts the Welcome frame carries it — failed pre-fix
with `expected '1.5.0' to be '9.9.9-test'`; 98/98 file tests green
post-fix, `portwing-ws.ts` at 100/100/100/100.

CHANGELOG bullet under `[1.6.0-rc.2]` Fixed. Full pre-push gate green
from a worktree; release-guard scripts 105/105.

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

### 🐛 Fixed
- Portwing WebSocket Welcome frames now report the canonical server
version (no more hard-coded `1.5.0`).
- `drydockVersion()` delegates to the canonical `getVersion()` from
`app/configuration` (honors `DD_VERSION` override or `package.json`
fallback) while keeping first-read caching and the existing
`injectDrydockVersionForTesting()` override.
- Updated `[1.6.0-rc.2]` changelog entry to reflect the Portwing WS
welcome-version fix.

### 🔧 Changed
- Added/extended regression coverage: mock `getVersion()` and assert the
first outbound `welcome` frame contains `data.config.drydockVersion`
equal to the mocked value during a full upgrade + hello handshake.
- Replaced scheduler-sensitive fixed delay in the welcome-version
regression test with `vi.waitFor`.
- Refreshed related comments and configuration imports around the
version source.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@scttbnsn
scttbnsn force-pushed the codex/v1.6.0-rc.2-release branch from 0d93862 to d382696 Compare July 17, 2026 07:36
@scttbnsn

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

Final head d3826969 from frozen dev 174d62ce — folds in the portwing welcome-version fix (PR #553, your portwing.mdx finding: the code now delegates to the canonical getVersion(), so the documented 1.6.0-rc.2 Welcome example matches what a DD_VERSION-stamped release image actually emits). Delta vs 0d938621 is exactly the #553 squash (portwing-ws + test + CHANGELOG bullet). Construction invariants re-verified: sole parent d6e166ff, zero .planning entries, non-planning tree identical to frozen dev. Full gate + 37/37 website-script tests green on the exact head.

@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

@scttbnsn Full review requested for head d3826969, including the Portwing canonical-version fix and regression coverage.

✅ Action performed

Full review finished.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

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 `@app/watchers/providers/docker/docker-image-details-orchestration.test.ts`:
- Around line 330-352: Extend the test “keeps an errored broken reference on the
fast path and preserves its digest” to assert that the errored container’s
broken image reference is repaired after addImageDetailsToContainerOrchestration
completes. Verify the repaired image tag or image ID in addition to the existing
digest assertion, while retaining the fast-path getContainers assertion.
🪄 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: Pro Plus

Run ID: cae7a8c1-f898-47f2-a81a-b7810281c6f9

📥 Commits

Reviewing files that changed from the base of the PR and between 0d93862 and d382696.

⛔ Files ignored due to path filters (1)
  • CHANGELOG.md is excluded by !CHANGELOG.md
📒 Files selected for processing (38)
  • .github/tests/ci-verify-workflow.test.ts
  • .github/tests/crowdin-workflow.test.ts
  • .github/tests/e2e-playwright-workflow.test.ts
  • .github/tests/github-actions-pins.test.ts
  • .github/tests/harden-runner-workflow.test.ts
  • .github/tests/mutation-workflow.test.ts
  • .github/tests/path-filter-workflow.test.ts
  • .github/tests/release-cut-retry-workflow.test.ts
  • .github/tests/workflow-test-utils.ts
  • README.md
  • app/api/portwing-ws.test.ts
  • app/api/portwing-ws.ts
  • app/watchers/providers/docker/container-processing.test.ts
  • app/watchers/providers/docker/container-processing.ts
  • app/watchers/providers/docker/docker-image-details-orchestration.test.ts
  • app/watchers/providers/docker/docker-image-details-orchestration.ts
  • apps/demo/src/mocks/data/agents.ts
  • apps/demo/src/mocks/data/audit.ts
  • apps/demo/src/mocks/data/containers.ts
  • apps/demo/src/mocks/data/server.ts
  • apps/demo/src/mocks/handlers/app.ts
  • apps/web/src/lib/site-config.ts
  • apps/web/src/lib/site-content.ts
  • content/docs/current/api/agent.mdx
  • content/docs/current/api/app.mdx
  • content/docs/current/api/portwing.mdx
  • content/docs/current/quickstart/index.mdx
  • content/docs/current/updates/index.mdx
  • scripts/changelog-links.test.mjs
  • scripts/release-docs-identity.test.mjs
  • scripts/release-identity.test.mjs
  • ui/src/components/containers/ContainersListContent.vue
  • ui/src/composables/useContainerFilters.ts
  • ui/src/locales/en/containerComponents.json
  • ui/src/views/ContainersView.vue
  • ui/tests/components/containers/ContainersListContent.spec.ts
  • ui/tests/composables/useContainerFilters.spec.ts
  • ui/tests/views/ContainersView.spec.ts
🚧 Files skipped from review as they are similar to previous changes (33)
  • apps/demo/src/mocks/data/agents.ts
  • apps/demo/src/mocks/handlers/app.ts
  • content/docs/current/api/app.mdx
  • apps/demo/src/mocks/data/audit.ts
  • apps/demo/src/mocks/data/containers.ts
  • content/docs/current/quickstart/index.mdx
  • content/docs/current/api/portwing.mdx
  • ui/tests/composables/useContainerFilters.spec.ts
  • apps/web/src/lib/site-config.ts
  • content/docs/current/updates/index.mdx
  • apps/demo/src/mocks/data/server.ts
  • .github/tests/e2e-playwright-workflow.test.ts
  • ui/src/locales/en/containerComponents.json
  • .github/tests/harden-runner-workflow.test.ts
  • scripts/changelog-links.test.mjs
  • ui/src/views/ContainersView.vue
  • .github/tests/crowdin-workflow.test.ts
  • ui/src/components/containers/ContainersListContent.vue
  • .github/tests/workflow-test-utils.ts
  • scripts/release-docs-identity.test.mjs
  • ui/src/composables/useContainerFilters.ts
  • app/watchers/providers/docker/container-processing.ts
  • .github/tests/mutation-workflow.test.ts
  • apps/web/src/lib/site-content.ts
  • .github/tests/ci-verify-workflow.test.ts
  • .github/tests/path-filter-workflow.test.ts
  • ui/tests/views/ContainersView.spec.ts
  • ui/tests/components/containers/ContainersListContent.spec.ts
  • app/watchers/providers/docker/container-processing.test.ts
  • scripts/release-identity.test.mjs
  • app/watchers/providers/docker/docker-image-details-orchestration.ts
  • README.md
  • .github/tests/github-actions-pins.test.ts

Comment thread app/watchers/providers/docker/docker-image-details-orchestration.test.ts Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

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 `@app/api/portwing-ws.test.ts`:
- Around line 354-357: Update the welcome-frame assertion in the WebSocket test
to compare drydockVersion directly against the expected literal “9.9.9-test”
instead of calling getVersion(). Clear getVersion mock history before exercising
the production flow, then verify getVersion was called after the welcome
response is produced.
🪄 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: Pro Plus

Run ID: 521a17e9-2880-4daa-bfa4-d27a9cfb0239

📥 Commits

Reviewing files that changed from the base of the PR and between d6e166f and d382696.

⛔ Files ignored due to path filters (1)
  • CHANGELOG.md is excluded by !CHANGELOG.md
📒 Files selected for processing (38)
  • .github/tests/ci-verify-workflow.test.ts
  • .github/tests/crowdin-workflow.test.ts
  • .github/tests/e2e-playwright-workflow.test.ts
  • .github/tests/github-actions-pins.test.ts
  • .github/tests/harden-runner-workflow.test.ts
  • .github/tests/mutation-workflow.test.ts
  • .github/tests/path-filter-workflow.test.ts
  • .github/tests/release-cut-retry-workflow.test.ts
  • .github/tests/workflow-test-utils.ts
  • README.md
  • app/api/portwing-ws.test.ts
  • app/api/portwing-ws.ts
  • app/watchers/providers/docker/container-processing.test.ts
  • app/watchers/providers/docker/container-processing.ts
  • app/watchers/providers/docker/docker-image-details-orchestration.test.ts
  • app/watchers/providers/docker/docker-image-details-orchestration.ts
  • apps/demo/src/mocks/data/agents.ts
  • apps/demo/src/mocks/data/audit.ts
  • apps/demo/src/mocks/data/containers.ts
  • apps/demo/src/mocks/data/server.ts
  • apps/demo/src/mocks/handlers/app.ts
  • apps/web/src/lib/site-config.ts
  • apps/web/src/lib/site-content.ts
  • content/docs/current/api/agent.mdx
  • content/docs/current/api/app.mdx
  • content/docs/current/api/portwing.mdx
  • content/docs/current/quickstart/index.mdx
  • content/docs/current/updates/index.mdx
  • scripts/changelog-links.test.mjs
  • scripts/release-docs-identity.test.mjs
  • scripts/release-identity.test.mjs
  • ui/src/components/containers/ContainersListContent.vue
  • ui/src/composables/useContainerFilters.ts
  • ui/src/locales/en/containerComponents.json
  • ui/src/views/ContainersView.vue
  • ui/tests/components/containers/ContainersListContent.spec.ts
  • ui/tests/composables/useContainerFilters.spec.ts
  • ui/tests/views/ContainersView.spec.ts

Comment thread app/api/portwing-ws.test.ts Outdated
scttbnsn added a commit that referenced this pull request Jul 17, 2026
…554)

CodeRabbit follow-up from release PR #550 ([the
finding](#550 (comment))):
the errored-container fast-path tests pinned routing (no `getContainers`
scan) and digest stickiness, but not the repair itself — a
silently-skipped repair would still pass.

New test pins the full self-heal contract for an errored container with
a broken stored reference: fast-path routing held, tag repaired via
`resolveTagName` (`1.2.3` per the helpers fixture — verified by
execution), image id updated from inspect, #541 digest stickiness
(`sha256:reconciled` preserved), and the stored error retained until a
successful watch clears it.

Test-only, 29 lines (Codex-authored, contract verified by running
against the implementation). 56/56 file tests, full docker provider
coverage suite green, full pre-push gate green from a worktree.

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

✨ Added a Docker watcher test covering self-healing for errored
containers with broken image references:
- Verifies fast-path routing without `getContainers`
- Confirms tag normalization via `resolveTagName`
- Updates the image ID from inspection
- Preserves `sha256:reconciled` digest stickiness
- Retains the stored error until a successful watch clears it

- Test-only change
- File tests, Docker provider coverage, and pre-push checks pass

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@scttbnsn
scttbnsn force-pushed the codex/v1.6.0-rc.2-release branch from d382696 to 04152e7 Compare July 17, 2026 08:06
@scttbnsn

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

Final head 04152e7e from frozen dev 396d96fb — folds in the fast-path repair pin test (PR #554, your last remaining finding; the expected tag is 1.2.3 via the mocked resolveTagName, verified by execution). Delta vs d3826969 is exactly the 29-line test. Construction invariants re-verified: sole parent d6e166ff, zero .planning entries, non-planning tree identical to frozen dev. Full gate + 37/37 website-script tests green on the exact head. Both E2E jobs on the prior head were rerun and passed (the Playwright failure was a 429 rate-limit flake under CI load — the failing delta was portwing-ws + CHANGELOG only, which cannot reach the containers view).

@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

@scttbnsn Full review requested for head 04152e7e, including the fast-path repair pin regression test.

✅ Action performed

Full review finished.

scttbnsn added a commit that referenced this pull request Jul 17, 2026
CodeRabbit follow-up from release PR #550 ([the
finding](#550 (comment))):
the welcome-version regression test compared the frame against
`getVersion()` — the same mock production calls — so a hard-coded frame
value could still pass. Now asserts the `'9.9.9-test'` sentinel
literally (after clearing the mock's history) and verifies the mocked
`getVersion` was called to produce the frame.

Test-only, 5 lines. 98/98 file tests green; full pre-push gate green
from a worktree.

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

✨ Added
- Strengthened the welcome-version regression test with the literal
`9.9.9-test` sentinel.
- Verified the mocked `getVersion` function is called during handshake
processing.
- Cleared mock call history before exercising the gateway handshake.

Concerns:
- None identified.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@scttbnsn
scttbnsn force-pushed the codex/v1.6.0-rc.2-release branch from 04152e7 to 1b7c1ae Compare July 17, 2026 10:17
@scttbnsn

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

Final head 1b7c1ae0 from frozen dev bdb8f3fa — folds in the literal-sentinel assertion (PR #555, your last finding). Delta vs 04152e7e is exactly that 6-line test change. Construction invariants re-verified: sole parent d6e166ff, zero .planning entries, non-planning tree identical to frozen dev. Full gate + 37/37 website-script tests green on the exact head. All review threads resolved.

@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

@scttbnsn Full review requested for head 1b7c1ae0, including the literal-sentinel regression coverage.

✅ Action performed

Full review finished.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
app/watchers/providers/docker/docker-image-details-orchestration.test.ts (1)

125-164: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Capture the pre-call policy override reference.

result and stored are the same object, so Line 164 passes even if refresh replaces updatePolicyOverrides. Save the original nested reference before orchestration.

Proposed fix
 const stored = createErroredStoredContainer();
+const originalUpdatePolicyOverrides = stored.updatePolicyOverrides;

 // Run orchestration...

-expect(result?.updatePolicyOverrides).toBe(stored.updatePolicyOverrides);
+expect(result?.updatePolicyOverrides).toBe(originalUpdatePolicyOverrides);
🤖 Prompt for 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.

In `@app/watchers/providers/docker/docker-image-details-orchestration.test.ts`
around lines 125 - 164, Capture the original stored.updatePolicyOverrides
reference before calling addImageDetailsToContainerOrchestration, then assert
the result’s overrides are the same reference as that saved value. Update the
final identity assertion in the test while retaining the existing value-content
assertion.
🧹 Nitpick comments (1)
.github/tests/harden-runner-workflow.test.ts (1)

7-7: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Route workflow parsing through the shared loader.

loadWorkflowFiles() still parses YAML locally, so this test does not use the new parsing utility like the other migrated workflow tests. Keep source for assertions, but load workflow through loadWorkflow(...) (or extend the helper to return both) to prevent parser and type behavior from diverging.

🤖 Prompt for 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.

In @.github/tests/harden-runner-workflow.test.ts at line 7, Update the workflow
setup in harden-runner-workflow.test.ts so loadWorkflowFiles() retains source
for assertions but obtains workflow through the shared loadWorkflow(...)
utility, or extend that helper to return both values. Remove the local YAML
parsing path and preserve the existing test assertions.
🤖 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 `@app/api/portwing-ws.test.ts`:
- Around line 324-326: Reset the test-only _drydockVersion cache at the start of
the “reports the canonical configuration version in the welcome frame” test,
before vi.mocked(getVersion).mockClear(). Keep clearNonceCacheForTesting()
unchanged and use the existing test reset mechanism or directly reset the
visible cache symbol.

---

Outside diff comments:
In `@app/watchers/providers/docker/docker-image-details-orchestration.test.ts`:
- Around line 125-164: Capture the original stored.updatePolicyOverrides
reference before calling addImageDetailsToContainerOrchestration, then assert
the result’s overrides are the same reference as that saved value. Update the
final identity assertion in the test while retaining the existing value-content
assertion.

---

Nitpick comments:
In @.github/tests/harden-runner-workflow.test.ts:
- Line 7: Update the workflow setup in harden-runner-workflow.test.ts so
loadWorkflowFiles() retains source for assertions but obtains workflow through
the shared loadWorkflow(...) utility, or extend that helper to return both
values. Remove the local YAML parsing path and preserve the existing test
assertions.
🪄 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: Pro Plus

Run ID: 6aa81238-b851-4bb0-9fc5-da10aa4e6fc3

📥 Commits

Reviewing files that changed from the base of the PR and between d6e166f and 1b7c1ae.

⛔ Files ignored due to path filters (1)
  • CHANGELOG.md is excluded by !CHANGELOG.md
📒 Files selected for processing (38)
  • .github/tests/ci-verify-workflow.test.ts
  • .github/tests/crowdin-workflow.test.ts
  • .github/tests/e2e-playwright-workflow.test.ts
  • .github/tests/github-actions-pins.test.ts
  • .github/tests/harden-runner-workflow.test.ts
  • .github/tests/mutation-workflow.test.ts
  • .github/tests/path-filter-workflow.test.ts
  • .github/tests/release-cut-retry-workflow.test.ts
  • .github/tests/workflow-test-utils.ts
  • README.md
  • app/api/portwing-ws.test.ts
  • app/api/portwing-ws.ts
  • app/watchers/providers/docker/container-processing.test.ts
  • app/watchers/providers/docker/container-processing.ts
  • app/watchers/providers/docker/docker-image-details-orchestration.test.ts
  • app/watchers/providers/docker/docker-image-details-orchestration.ts
  • apps/demo/src/mocks/data/agents.ts
  • apps/demo/src/mocks/data/audit.ts
  • apps/demo/src/mocks/data/containers.ts
  • apps/demo/src/mocks/data/server.ts
  • apps/demo/src/mocks/handlers/app.ts
  • apps/web/src/lib/site-config.ts
  • apps/web/src/lib/site-content.ts
  • content/docs/current/api/agent.mdx
  • content/docs/current/api/app.mdx
  • content/docs/current/api/portwing.mdx
  • content/docs/current/quickstart/index.mdx
  • content/docs/current/updates/index.mdx
  • scripts/changelog-links.test.mjs
  • scripts/release-docs-identity.test.mjs
  • scripts/release-identity.test.mjs
  • ui/src/components/containers/ContainersListContent.vue
  • ui/src/composables/useContainerFilters.ts
  • ui/src/locales/en/containerComponents.json
  • ui/src/views/ContainersView.vue
  • ui/tests/components/containers/ContainersListContent.spec.ts
  • ui/tests/composables/useContainerFilters.spec.ts
  • ui/tests/views/ContainersView.spec.ts

Comment thread app/api/portwing-ws.test.ts
scttbnsn added a commit that referenced this pull request Jul 17, 2026
Closes the round-7 review finding on #550 plus two adjacent test-hygiene
issues found by an adversarial pass over the same surface, so the whole
batch lands in one review round.

## Changes

**Version cache reset (CodeRabbit finding on #550,
`app/api/portwing-ws.test.ts:324`)**
- `injectDrydockVersionForTesting` now accepts `undefined` to clear the
module-level `_drydockVersion` cache (the `!== undefined` guard in
`drydockVersion()` makes it naturally re-prime from `getVersion()`).
- The welcome-version test resets the cache before
`vi.mocked(getVersion).mockClear()`, so it stays order-independent: an
earlier inject or welcome frame can no longer leave the cache primed and
let the test pass without exercising the canonical `getVersion()` path.

**Same bug class one describe block down**
- The injector suite ended by "restoring" the cache to a literal
`'1.5.0'` — leaving every later test in the file primed with a stale
magic value, the exact order-dependency this PR fixes. It now resets to
`undefined` like the new idiom.

**Duplicate test scenario in the orchestration suite**
- `keeps an errored broken reference on the fast path and preserves its
digest` (repair-branch digest stickiness) and `repairs a broken
reference for an errored container on the fast path` (fast-path
eligibility) ran byte-identical arrange/act; the newer test asserts a
strict superset. Folded into one test whose name now carries both
intents. Coverage verified 100% across all metrics at directory scope
after the merge.

**Comment accuracy in `container-processing.ts`**
- The catch-block comment implied release-notes enrichment can reject
after a fresh result; `enrichContainerWithReleaseNotes` swallows its own
errors and never rejects, so the guard is defense-in-depth. The comment
now says so instead of overstating the live path.

## Verification

- `npx vitest run api/portwing-ws.test.ts
watchers/providers/docker/container-processing.test.ts
watchers/providers/docker/docker-image-details-orchestration.test.ts` —
158/158 pass.
- Directory-scope coverage: `docker-image-details-orchestration.ts` and
`container-processing.ts` both 100% branches/lines/functions/statements.
- Full pre-push gate (biome, qlty, coverage, build) green on push.


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

## Changelog

- ✨ Added support for clearing the cached Drydock version with
`undefined`.
- 🔧 Changed API tests to reset the version cache, preventing
order-dependent behavior.
- 🔧 Clarified the defensive result-restore comment in Docker container
processing.
- 🗑️ Removed a duplicate errored fast-path repair test and consolidated
digest assertions.

## Concerns

- Verify the targeted test suite and pre-push checks remain green.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@scttbnsn
scttbnsn force-pushed the codex/v1.6.0-rc.2-release branch from 1b7c1ae to cbecfa1 Compare July 17, 2026 13:08
@scttbnsn

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown
✅ Action performed

Full review finished.

@biggest-littlest biggest-littlest left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Reviewed the rc.2 delta: #541-544 hardening, #538 filter, docs content, and the seven review-round fixes. Invariants on the sanitized head check out.

@ALARGECOMPANY ALARGECOMPANY left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Release head construction verified (parent = frozen main, planning-free tree, delta matches dev exactly). LGTM.

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.

3 participants