Skip to content

🔄 refactor(release): sync main with dev/v1.6 for v1.6.0-rc.10 - #643

Closed
scttbnsn wants to merge 1 commit into
mainfrom
sync/main-20260731
Closed

🔄 refactor(release): sync main with dev/v1.6 for v1.6.0-rc.10#643
scttbnsn wants to merge 1 commit into
mainfrom
sync/main-20260731

Conversation

@scttbnsn

@scttbnsn scttbnsn commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Advances main to the exact tree of dev/v1.6 (49301617) ahead of the v1.6.0-rc.10 cut.

Delta since rc.9:

Wholesale-tree commit on top of main (same pattern as #600/#603/#629/#634); tree equality is asserted by the release-cut drift guard.

Changelog

  • ✨ Added Portwing Exec protocol and sockguard documentation.
  • ✨ Added maintenance-window cron guidance and update eligibility documentation.
  • ✨ Added narrow-minute maintenance-window detection and Docker watcher warnings.
  • ✨ Added eligibility documentation links to soft-blocked update dialogs.
  • 🔧 Changed update-available audit events to record only when the update signature changes or state resets.
  • 🔧 Updated audit tests for state-based deduplication, retries, cleanup, and restarts.
  • 🗑️ Removed DD_AUDIT_UPDATE_AVAILABLE_DEDUPE_MS and its configuration helper.
  • 🔒 Documented Docker socket security limits and sockguard authorization.

Concerns

  • Verify hasNarrowMinuteField handles all supported cron formats and invalid expressions consistently.
  • Verify audit state is updated only after successful persistence and is cleared on every container lifecycle path.
  • Verify all update confirmation dialogs use the same eligibility-link behavior and localization key.
  • Run the release-cut drift guard and the affected Docker, audit, and UI test suites.

@vercel

vercel Bot commented Jul 31, 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 Jul 31, 2026 3:12pm
drydockdemo-website Ready Ready Preview Jul 31, 2026 3:12pm

@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The PR replaces elapsed-time update-available deduplication with signature-based state tracking. It adds Docker warnings for narrow maintenance-window minute fields and updates related documentation. Update confirmation dialogs now show eligibility documentation links for soft blockers. Additional documentation covers Edge limitations, Portwing Exec sessions, key rotation, and sockguard configuration.

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 sync/main-20260731

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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.

Actionable comments posted: 3

🤖 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/faq/index.mdx`:
- Around line 482-486: Update the FAQ entry “Why doesn't my edge agent apply
updates?” to state only that Edge Mode cannot execute proxied docker or
dockercompose update actions and that update execution is unsupported. Remove
the assertions that updates silently do nothing or never appear as available in
the UI, and retain the guidance to use a standard inbound HTTP agent for update
triggers.

In `@content/docs/current/guides/security/index.mdx`:
- Around line 96-97: Update the portwing-with-exec.yaml guidance in the security
documentation so it is not presented as a usable v1.6 deployment option;
describe it only as protocol-implementer or future-integration setup, or remove
the activation instructions until Drydock exposes an Exec caller. Preserve the
default preset’s denial of Exec and avoid implying that enabling the file
provides a supported product path.

In `@test/qa-compose.yml`:
- Around line 97-102: Update the maintenance-window comments near
DD_WATCHER_LOCAL_MAINTENANCE_WINDOW to clarify that Docker.init() performs an
immediate startup check and may poll until the window opens; explain that a
parked cron and WATCHEVENTS=false do not disable this evaluation. State that a
runnable DD_WATCHER_LOCAL_CRON is required only when testing later scheduled
checks, while preserving the UTC matching guidance.
🪄 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: a4aef81c-32c6-47b6-a7a2-631eb88b7eca

📥 Commits

Reviewing files that changed from the base of the PR and between 9cc3010 and 3023d6d.

⛔ Files ignored due to path filters (1)
  • CHANGELOG.md is excluded by !CHANGELOG.md
📒 Files selected for processing (32)
  • app/configuration/index.test.ts
  • app/configuration/index.ts
  • app/event/audit-subscriptions.test.ts
  • app/event/audit-subscriptions.ts
  • app/watchers/providers/docker/Docker.containers.additional-coverage-core.test.ts
  • app/watchers/providers/docker/Docker.containers.additional-coverage-helpers.test.ts
  • app/watchers/providers/docker/Docker.containers.test.ts
  • app/watchers/providers/docker/Docker.events.test.ts
  • app/watchers/providers/docker/Docker.test.ts
  • app/watchers/providers/docker/Docker.ts
  • app/watchers/providers/docker/Docker.watch.test.ts
  • app/watchers/providers/docker/maintenance.test.ts
  • app/watchers/providers/docker/maintenance.ts
  • content/docs/current/api/portwing.mdx
  • content/docs/current/configuration/actions/update-eligibility.mdx
  • content/docs/current/configuration/agents/index.mdx
  • content/docs/current/configuration/server/index.mdx
  • content/docs/current/configuration/watchers/index.mdx
  • content/docs/current/faq/index.mdx
  • content/docs/current/getting-started/index.mdx
  • content/docs/current/guides/security/index.mdx
  • content/docs/current/monitoring/index.mdx
  • test/qa-compose.yml
  • ui/src/components/ConfirmDialog.vue
  • ui/src/composables/useConfirmDialog.ts
  • ui/src/composables/useUpdateStatus.ts
  • ui/src/locales/en/containerComponents.json
  • ui/src/views/DashboardView.vue
  • ui/src/views/containers/useContainerActions.ts
  • ui/tests/components/ConfirmDialog.spec.ts
  • ui/tests/views/DashboardView.spec.ts
  • ui/tests/views/containers/useContainerActions.spec.ts
💤 Files with no reviewable changes (3)
  • content/docs/current/configuration/server/index.mdx
  • app/configuration/index.ts
  • app/configuration/index.test.ts

Comment on lines +482 to +486
## Why doesn't my edge agent apply updates?

An Edge (Portwing) agent only proxies discovery/watch state, continuous container logs, and container delete over its WebSocket tunnel — `docker` and `dockercompose` action triggers are not yet proxied over Edge Mode. If update actions on an edge-connected host silently do nothing, or never show up as available in the UI, that's expected behavior in v1.6, not a misconfiguration.

**Fix:** Configure update triggers on a standard (inbound HTTP) agent instead. See [Edge-agent dial-out (Portwing)](/docs/configuration/agents#edge-agent-dial-out-portwing) for exactly what Edge Mode does and doesn't proxy today.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Remove the claim that Edge trigger support controls update availability.

The missing trigger proxy prevents an update action from reaching the Edge agent. It does not establish that updates never appear as available in the UI. The agent documentation states that Edge Mode proxies discovery and watch state.

State that execution is unsupported. Do not connect that limitation to update availability unless the implementation also suppresses availability reporting.

As per path instructions, review documentation content for accuracy against code, not prose style.

🤖 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 `@content/docs/current/faq/index.mdx` around lines 482 - 486, Update the FAQ
entry “Why doesn't my edge agent apply updates?” to state only that Edge Mode
cannot execute proxied docker or dockercompose update actions and that update
execution is unsupported. Remove the assertions that updates silently do nothing
or never appear as available in the UI, and retain the guidance to use a
standard inbound HTTP agent for update triggers.

Source: Path instructions

Comment on lines +96 to +97
sockguard also ships a separate [`portwing-with-exec.yaml`](https://github.com/CodesWhat/sockguard/blob/dev/v1.5/app/configs/portwing-with-exec.yaml) preset for deployments that need remote exec through the Edge agent (see the [exec session protocol](/docs/api/portwing#exec-session-protocol)). To activate it, replace the preset file the compose example mounts (swap `sockguard.yaml` for a copy of `portwing-with-exec.yaml`, or point the sockguard service's config mount at it) and restart sockguard — merely having the file present changes nothing, and the default preset above denies all exec. Exec authorization — privileged/root escalation and per-command allowlisting — is enforced by sockguard's exec policy, not by drydock.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Do not present Exec enablement as a usable v1.6 deployment option.

The Portwing API reference states that v1.6 has no end-user Exec UI or API, and that no product path opens a session. This instruction enables the Exec socket policy despite that limitation. It expands Docker API permissions without a usable Drydock feature.

Describe this preset as protocol-implementer or future-integration setup, or remove the activation guidance until Drydock exposes an Exec caller.

As per path instructions, review documentation content for accuracy against code, not prose style.

🤖 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 `@content/docs/current/guides/security/index.mdx` around lines 96 - 97, Update
the portwing-with-exec.yaml guidance in the security documentation so it is not
presented as a usable v1.6 deployment option; describe it only as
protocol-implementer or future-integration setup, or remove the activation
instructions until Drydock exposes an Exec caller. Preserve the default preset’s
denial of Exec and avoid implying that enabling the file provides a supported
product path.

Source: Path instructions

Comment thread test/qa-compose.yml
Comment on lines +97 to +102
# To test: also set DD_WATCHER_LOCAL_CRON above to a runnable schedule
# (it's parked at `0 0 29 2 *` and WATCHEVENTS=false, so nothing
# reevaluates the window otherwise), then pick a UTC window that
# matches/misses the current time.
# Matched per minute, so keep `*` in the minute field for a real window.
# - DD_WATCHER_LOCAL_MAINTENANCE_WINDOW=* 2-6 * * *

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Correct the QA maintenance-window instructions.

Docker.init() always schedules a startup watchFromCron(). If that check is outside the window, it queues a check and polls until the window opens. A parked cron and WATCHEVENTS=false do not prevent maintenance-window evaluation.

State that a runnable cron is needed only to test later scheduled checks.

Proposed fix
-      # To test: also set DD_WATCHER_LOCAL_CRON above to a runnable schedule
-      # (it's parked at `0 0 29 2 *` and WATCHEVENTS=false, so nothing
-      # reevaluates the window otherwise), then pick a UTC window that
-      # matches/misses the current time.
+      # The startup check evaluates this window even though the scheduled cron
+      # is parked. If startup is outside the window, drydock queues a check
+      # and polls until the window opens. Set a runnable CRON only to test
+      # later scheduled checks, then pick a UTC window that matches or misses
+      # the current time.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# To test: also set DD_WATCHER_LOCAL_CRON above to a runnable schedule
# (it's parked at `0 0 29 2 *` and WATCHEVENTS=false, so nothing
# reevaluates the window otherwise), then pick a UTC window that
# matches/misses the current time.
# Matched per minute, so keep `*` in the minute field for a real window.
# - DD_WATCHER_LOCAL_MAINTENANCE_WINDOW=* 2-6 * * *
# The startup check evaluates this window even though the scheduled cron
# is parked. If startup is outside the window, drydock queues a check
# and polls until the window opens. Set a runnable CRON only to test
# later scheduled checks, then pick a UTC window that matches or misses
# the current time.
# Matched per minute, so keep `*` in the minute field for a real window.
# - DD_WATCHER_LOCAL_MAINTENANCE_WINDOW=* 2-6 * * *
🤖 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 `@test/qa-compose.yml` around lines 97 - 102, Update the maintenance-window
comments near DD_WATCHER_LOCAL_MAINTENANCE_WINDOW to clarify that Docker.init()
performs an immediate startup check and may poll until the window opens; explain
that a parked cron and WATCHEVENTS=false do not disable this evaluation. State
that a runnable DD_WATCHER_LOCAL_CRON is required only when testing later
scheduled checks, while preserving the UTC matching guidance.

@scttbnsn

scttbnsn commented Aug 1, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by #648, which merged the final v1.6.0-rc.10 tree to main; v1.6.0-rc.10 has since been published from that sync.

@scttbnsn scttbnsn closed this Aug 1, 2026
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