Replaces the goat ASCII-art registry/repository/image diagram with a
mermaid flowchart that uses nested subgraphs to express the same
containment hierarchy. Also exercises the new mermaid codeblock hook
so the layouts ship with at least one consumer.
Adds a Hugo codeblock render hook that turns ```mermaid fences into
<pre class="mermaid"> containers, plus a lazily-loaded mermaid bundle
that only ships on pages that actually contain a diagram. Mirrors the
existing YouTube embed pattern (Store flag + conditional script tag in
baseof) so the main scripts.js bundle stays unchanged.
<!--Delete sections as needed -->
## Description
<!-- Tell us what you did and why -->
## Related issues or tickets
<!-- Related issues, pull requests, or Jira tickets -->
## Reviews
<!-- Notes for reviewers here -->
<!-- List applicable reviews (optionally @tag reviewers) -->
- [ ] Technical review
- [ ] Editorial review
- [ ] Product review
Args passed after `--` now replace an agent's default startup flags
instead of being appended to them. Add a "Default startup command"
subsection to each agent's Configuration section spelling out the exact
default command and how to keep the implicit flags when passing custom
args.
Hugo's html/template JS-escapes string values inside <script> blocks.
Calling jsonify per-field produced quoted strings like "https://..."
which were then re-escaped, embedding literal quote characters in the
endpoint value passed to the SDK.
Fix by jsonifying the whole config dict at once and marking it safeJS
so html/template does not apply a second round of escaping.
Also extract the environment ternary out of the Marlin constructor call
for readability.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Introduces @docker/marlin-sdk-web-public for first-party pageview and
click analytics, bundled into scripts.js via Hugo's existing js.Build
pipeline. Config is emitted to window.__marlinConfig from head.html and
gated to prod/staging only.
Renames data-heap-id attributes on the markdown-dropdown buttons to
marlin-action so they are picked up by the SDK's auto-click tracking.
TODO: replace the REPLACE-ME endpoint placeholders in hugo.yaml with
the canonical Marlin ingestion URLs from the data-platform team.
TODO: heap.track() calls in youtube-script.html are left in place —
the public SDK exposes no equivalent track() method, so video
play/pause events cannot be migrated yet.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: David Karlsson <35727626+dvdksn@users.noreply.github.com>
Adds a note to the Docker Build Cloud setup steps clarifying that
`docker buildx create --driver cloud` connects Buildx to an existing
cloud builder created on the dashboard — it does not provision a new one.
Fixes#25150
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The "Data source Discovery" heading in
`content/guides/grafana-mcp-server-gemini.md` has two spaces after the
`###`, which trips markdownlint (MD019). Since the lint job runs over
the whole `content/**/*.md` tree, this currently fails CI on every open
PR. This removes the extra space.
## Summary
Add a release notes page for Docker Sandboxes under
`content/manuals/ai/sandboxes/release-notes.md`. The page is a single
Markdown file with an intro, an autogenerated block between `<!--
BEGIN/END GENERATED RELEASES -->` markers, and a link to the [Docker
Sandboxes releases on
GitHub](https://github.com/docker/sbx-releases/releases) for older
versions.
The generated block is populated by `hack/sbx-release-notes.py` — a
single-file `uv run` script (PEP 723 inline deps, Jinja2 only) that hits
the GitHub Releases API for `docker/sbx-releases`, filters to
strict-semver stable tags, groups by minor, and emits H2-per-release
sections for the latest N minor lines (default 2) and their patches.
Re-runs are idempotent and only touch content between the markers.
Script also runs `prettier --write` so output is lint-clean.
Also extends the existing release-notes Vale skip rule to match nested
paths under `content/manuals/`, so the new page picks up the same lint
exclusions as engine/desktop/build release notes.
## Usage
```sh
GITHUB_TOKEN=$(gh auth token) ./hack/sbx-release-notes.py
./hack/sbx-release-notes.py --minors 3
```
## Learnings
- Existing `.vale.ini` release-notes skip rule used
`content/manuals/*/release-notes.md`, which only matches one segment
after `manuals/`. Pages nested deeper (e.g.
`ai/sandboxes/release-notes.md`) need `**` to match.
Generated by Claude Code
Signed-off-by: David Karlsson <35727626+dvdksn@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add content/manuals/ai/sandboxes/release-notes.md as a single page listing
the latest stable releases of Docker Sandboxes, with a link to the GitHub
release history for older versions.
The block between BEGIN/END GENERATED RELEASES markers is populated by
hack/sbx-release-notes.py — a single-file uv-run script (PEP 723 inline
deps, Jinja2 only) that hits the GitHub Releases API for
docker/sbx-releases, filters to strict-semver stable tags with non-empty
bodies, and emits H2-per-release sections for the latest N minor releases
(default 3) and their patches.
Re-runs are idempotent and only touch content between the markers. The
script also invokes `prettier --write` so the output stays lint-clean.
Extend the existing release-notes Vale skip rule with
content/manuals/**/release-notes.md so the new file under ai/sandboxes/
picks up the same lint exclusions as engine/desktop/build release notes.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: David Karlsson <35727626+dvdksn@users.noreply.github.com>
Improved handling of transient rename failures due to antivirus
software.
Release note for this PR https://github.com/docker/pinata/pull/40861
Customer reported issue.
<!--Delete sections as needed -->
## Description
<!-- Tell us what you did and why -->
## Related issues or tickets
<!-- Related issues, pull requests, or Jira tickets -->
## Reviews
<!-- Notes for reviewers here -->
<!-- List applicable reviews (optionally @tag reviewers) -->
- [ ] Technical review
- [x] Editorial review
- [ ] Product review
---------
Co-authored-by: Allie Sadler <102604716+aevesdocker@users.noreply.github.com>
## Description
The restricted shortcode on the [unassociated machines
page](https://docs.docker.com/unassociated-machines/) renders with a
visible `</span>` tag due to using `{{% %}}` (markdown) delimiters
instead of `{{< >}}` (HTML) delimiters.
The `{{% %}}` delimiter causes Hugo to process the shortcode's HTML
output through the markdown renderer, which escapes the HTML tags from
the icon partial.
## Fix
Switch from `{{% restricted %}}` to `{{< restricted >}}` delimiters.
This matches the pattern used by the similar `experimental` shortcode in
other content files (e.g., `layouts/cli.html`).
## Testing
Before (Prod) | After (Preview)
--- | ---
<img width="1082" height="649" alt="image"
src="https://github.com/user-attachments/assets/6713bf13-ebb0-46c2-8772-247b62afbc6a"
/> | <img width="1075" height="500" alt="image"
src="https://github.com/user-attachments/assets/250933a7-7701-4d3e-aae9-6b3732321edb"
/>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
<!--Delete sections as needed -->
## Description
Removing `docker init` workflow from guides. See ticket for more info.
Instead, have copy-paste codeblocks of the existing output. Added tip to
use Gordon.
## Related issues or tickets
ENGDOCS-3299
## Reviews
<!-- Notes for reviewers here -->
<!-- List applicable reviews (optionally @tag reviewers) -->
- [ ] Editorial review
---------
Signed-off-by: Craig Osterhout <craig.osterhout@docker.com>
Updated the description for the Cloudflare Docker Pull/Push entry to not
only be paid palns.
<!--Delete sections as needed -->
## Description
<!-- Tell us what you did and why -->
## Related issues or tickets
<!-- Related issues, pull requests, or Jira tickets -->
## Reviews
<!-- Notes for reviewers here -->
<!-- List applicable reviews (optionally @tag reviewers) -->
- [ ] Technical review
- [ ] Editorial review
- [ ] Product review
## Description
Running `sbx run claude` from `~/my-pro` produces a sandbox named
`claude-my-pro`, but the docs tell you to clean up with `sbx rm
my-sandbox` and never explain where that name came from.
This PR documents the `<agent>-<directory>` and updates examples across
the sandbox docs to use names that match the rule, so the flow lines up
with what users actually see in `sbx ls`.
<img width="1391" height="703" alt="Screenshot 2026-05-16 at 2 48 30 PM"
src="https://github.com/user-attachments/assets/b0357bb5-32ea-48f4-ab5d-8494431e2772"
/>
## Reviews
<!-- Notes for reviewers here -->
<!-- List applicable reviews (optionally @tag reviewers) -->
- [x] Technical review
- [ ] Editorial review
- [ ] Product review
The Sandboxes overview showed quick install commands without pointing to the full platform prerequisites.
Add a prerequisite link before the quick install tabs so it applies to all installation methods.
Adds warning about containerd using a separate storage path from the
Docker data directory.
Changes:
- Added IMPORTANT callout in "Disk space usage" section explaining that
containerd uses separate storage
- Warns users with custom data directories that they need to configure
containerd separately
- Links to containerd configuration documentation for data directory
setup
This prevents users from unexpectedly filling their root partition when
they assumed their custom data directory configuration would apply to
containerd.
Fixes#24010
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>