576 Commits
Author SHA1 Message Date
Craig Osterhout b34003b104 ai-gov: rearrange and feedback (#26412)
<!--Delete sections as needed -->

## Description

Rearrange AI Gov section and apply internal feedback.

https://deploy-preview-26412--docsdocker.netlify.app/ai/governance/

## Related issues or tickets

https://docs-review-portal.internal.tools/comments?build_id=18

## Reviews

<!-- Notes for reviewers here -->
<!-- List applicable reviews (optionally @tag reviewers) -->

- [ ] Technical review
- [ ] Editorial review
- [ ] Product review

---------

Signed-off-by: Craig Osterhout <craig.osterhout@docker.com>
2026-11-03 10:30:14 -08:00
David Karlsson 47172b3700 Upgrade Hugo to 0.169.0 (#26496)
Pin Docker builds and Netlify previews to Hugo 0.169.0. Replace
deprecated `.Params.summary` lookups with `.RawSummary` in the guide
template.

Validation: the full minified debug build passed with
`--panicOnWarning`, path checks, and unused-template checks, with no
deprecation notices. Dockerfile and template formatting checks, Markdown
post-processing tests, rendered summary/redirect checks, and API output
validation passed.
2026-11-02 09:47:38 +01:00
Trung Nguyen 02b412b178 Docs: answer with cards (steps, tables, notes, follow-up questions) in Gordon chat (#26452)
## Description

Gordon answers everything in plain markdown, even when the answer is a
procedure or a comparison. Those answers are harder to scan than they
need to be. This PR lets Gordon put a small card inside its answer when
that helps:

- **Steps** for procedures, with commands in code boxes
- **Tables** for comparisons (limits, plans, options)
- **Notes** for warnings, active incidents or tips
- **Code snippets** for config files
- **Follow-up questions** as chips. Selecting one asks it as your next
question.

```
You can containerize it with docker init, then run it with Compose.

┌───────────────────────────────────────────────┐
│ Containerize a Node.js app                    │
│ ① Generate the Docker assets                  │
│   [ docker init ]                             │
│ ② Build and run the app                       │
│   [ docker compose up --build ]               │
│ ▌ Use Docker Hardened Images for security     │
│ ( How do I add a database service? )          │
└───────────────────────────────────────────────┘

Sources:
- https://docs.docker.com/guides/nodejs/
```

Short answers, explanations and greetings stay plain markdown.

### How it works

```
chat ── "I can draw cards" (ui: "openui-v1") ──▶ Gordon
chat ◀── markdown answer, with at most one ```openui-lang block ── Gordon
chat: draws the block as a card, everything else as markdown
```

- The chat sends one extra field with each question. Only then does
Gordon's backend tell the model it may add a card. Without the field,
answers are the same as today.
- A card is a fenced block of [OpenUI
Lang](https://www.openui.com/docs/openui-lang) inside the normal answer
text, so the conversation history and stored messages stay plain text.
- The chat draws the block with its own styles. Anything it doesn't
recognize is left out, and if the card code can't load, the block shows
as a plain code block.

### Visual change to all answers

Gordon's answers are no longer inside a grey bubble. A framed card
inside the grey bubble looked like a box in a box. Answers now sit on
the panel background at full width, and the card stands out as its own
block. Your own messages keep the blue bubble.

<!-- screenshots: before / after, light and dark -->

### Rollout

- Cards are **on in local builds and deploy previews**, and **off in
production**.
- To turn them on in production, set `params.gordon.cards: true` in
`hugo.yaml`.
- Gordon's backend already supports this, so no other change is needed.

### Other notes

- **Safety:** card text from the model is only ever inserted as text,
never as HTML.
- **Page weight:** the card code (about 120 KB gzipped) is a separate
bundle. It's only downloaded when an answer first contains a card, never
on page load.
- **Copy button:** copies the answer with cards written out as markdown
(numbered steps, a table, `> [!NOTE]`), not the raw card code. Follow-up
chips are left out.
- **Instructions Gordon gets:** the prompt lives entirely in Gordon's
backend, which injects it when the chat sends `ui: "openui-v1"`. This
repo only has the component list the chat draws
(`assets/js/gordon-cards/components.mjs`). The backend's card prompt
describes the same components, so when adding or changing one, the
backend's prompt changes with it.
- **New dependencies:** `@openuidev/lang-core` (the OpenUI Lang parser)
and `zod`, pinned. Its usage telemetry never runs in a browser, and
`.npmrc` already blocks install scripts.

### How to test

1. Run `docker compose watch` and open http://localhost:1313. Local
builds use Gordon's staging backend.
2. Open Gordon from the header and ask:
- **Should show a card:** "How do I containerize my Node.js app?", "What
are the Docker Hub pull limits?", "How do I set up a registry mirror?"
   - **Should stay plain text:** "What is Docker Scout?", "hi"
3. Select a follow-up chip. It should ask that question.
4. Select **Copy** on an answer with a card. The pasted text should be
markdown.
5. Reload the page. Cards should come back from the conversation
history.
6. Check dark mode.
7. In the browser's Network tab, check:
   - each question to `/public/ask` includes `"ui": "openui-v1"`;
   - `gordon-cards.js` only loads after the first answer with a card.

## Related issues or tickets

<!-- none public -->

## Reviews

- [x] Technical review
- [ ] Editorial review
- [ ] Product review
2026-10-27 17:16:06 +01:00
David Karlsson eeee4e20be Merge pull request #26392 from dvdksn/fix-null-lastmod
fix: omit zero lastmod dates from sitemap
2026-10-20 17:10:34 +02:00
David Karlsson d6df16b222 fix: omit zero lastmod dates from sitemap
Generated reference pages without modification dates appeared in the sitemap with lastmod set to 0001-01-01. Only render lastmod when the page has a nonzero date.
2026-10-20 14:36:06 +00:00
David Karlsson 257d2217fd Point llms.txt to the Docker RAG MCP endpoint
Signed-off-by: David Karlsson <35727626+dvdksn@users.noreply.github.com>
2026-10-19 14:58:29 +00:00
David Karlsson 5cb209a1d4 Advertise Docker Skills in llms.txt discovery links
Signed-off-by: David Karlsson <35727626+dvdksn@users.noreply.github.com>
2026-10-19 08:51:49 +00:00
Usha MandyaandClaude Opus 5.5 fca13866d3 api: pin Redoc to v2.5.1 to fix blank API reference pages (#26350)
The API reference layout loaded Redoc from the `latest` CDN URL, which
now serves Redoc 3.0.0. That bundle is an ES module that uses
import.meta, so the classic script tag fails with "Cannot use
'import.meta' outside a module" and the Engine, Hub, and Registry API
pages render blank. Pin to the 2.x UMD build.

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-14 16:12:06 +02:00
David Karlsson c64e3927ef docs: update Sandboxes for the v0.48.0 CLI refactor (#26314)
## Summary

Update the Sandbox documentation for the v0.48.0 CLI refactor: renamed
flags, settings commands, terminal output, structured output, and
non-interactive confirmations. Add a migration reference for scripts and
CI workflows, with a [**Copy as prompt**
button](https://deploy-preview-26314--docsdocker.netlify.app/ai/sandboxes/workflows/automation/#update-scripts-for-v0480)
that copies agent instructions and the section Markdown.

This PR targets `main` independently of the other PRs in the sbx/v0.48.0
milestone. It keeps the generated reference import separate from
documentation edits:

- Vendor the 120 generated CLI YAML files
- Update command examples and guidance. Historical release notes retain
their original command spellings.

The other milestone PRs cover separate release features; this PR covers
the CLI migration.

@netlify /ai/sandboxes/workflows/automation/

Generated by Codex
2026-10-13 17:18:50 +02:00
David Karlsson da6c1308a0 Merge pull request #26316 from dvdksn/prune-guides
docs: prune guide catalog and refine topic categories
2026-10-09 11:54:45 +02:00
196def55a1 docs: show owners managing orgs and companies (#26283)
Updates org and company index pages for content, removes screenshots to
replace with scalable mermaid.js diagrams

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com>
2026-10-08 11:17:09 -05:00
David Karlsson d837c637cd docs: align guide categories with remaining content
Monitoring guides were grouped under CI/CD, and several other guides had
categories that did not match their main purpose. Add Observability,
rename Deployment to Services & infrastructure, and move LocalStack and
Django into Testing and Languages & frameworks.
2026-10-08 14:22:25 +00:00
agent 5c858018dc docs: fix API reference banner contrast in dark mode
The API reference banner kept its light background when links switched to light colors in dark mode. Add dark background, border, and text colors matching the note callout palette.
2026-10-06 15:22:40 +00:00
maxcleme 4dcdee13f3 site: remove leftover VWO smartcode
Drops the staging-only VWO Async SmartCode snippet from the head partial
and the matching analytics.vwo account param. VWO is no longer used;
this was left over from the 2024 A/B testing trial on docs-stage.

Signed-off-by: maxcleme <maxime.clement@docker.com>
2026-10-02 15:14:28 +02:00
Allie Sadler b1df186833 mv DD machine page (#26217)
<!--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

---------

Signed-off-by: aevesdocker <allie.sadler@docker.com>
2026-09-29 15:15:25 +01:00
David KarlssonandClaude bed22bda81 docs: Cloud Sandboxes API and SDK (#26168)
## Description

Add an experimental Sandboxes API and SDK section alongside Docker
Sandboxes under AI and agents, at `/ai/sandboxes-api/`. Cover
installation of `@docker/sandboxes`, browser and PAT authentication, and
a TypeScript walkthrough that launches the shell kit, runs a command,
and deletes the sandbox. Explain kits and image choices with examples,
along with compute sizes, quotas, permissions, resource lifecycle,
errors, and retries. Link subscription setup and billing to the shared
Docker Agentic Platform guide. Preserve the previous
`/ai/sandboxes/api/` URLs with redirects.

Uses the shared Docker Agentic Platform documentation merged in #26142.
Sibling to #26158, which introduces CLI-side Cloud Sandboxes
documentation.

Include 36 SDK cookbook recipes at `/ai/sandboxes-api/cookbook/` and the
public REST API reference at `/reference/api/sandboxes/`. Import the
generated export from `docker/sbx-api` commit `60d79c1d` (source
`1a7f4026`). Overview and installation remain maintained here. The
reference uses the shared API renderer from main, with separate
operation and schema pages, streaming and WebSocket details, and a
downloadable OpenAPI spec. An API reference link appears in the API/SDK
sidebar. A pinned manifest and import script provide the basis for later
release automation.

Examples are optional in the shared renderer; supplied examples still
have to pass schema validation. Requests without body examples use a
request-body file with instructions to prepare it. The import copies all
selected recipes and the OpenAPI specification byte for byte from the
corrected upstream export, without patches or link rewrites. The broken
naming recipe remains temporarily excluded.

This remains a draft pending validation against the published npm SDK.
The imported cookbook contains the TypeScript-only guidance, five-minute
request deadlines, kit-readiness explanation, active-policy status
requirement, and snapshot-deletion and lifetime-renewal restrictions.

Validation: scoped Markdown and Vale checks, full Hugo build, rendered
navigation, redirects, and internal links, and TypeScript type-checking
against the generated public SDK from `docker/sbx-api` commit
`68f214b9`. Import validation also covers all 60 REST operations and 188
schema definitions, 1,198 imported-page links and anchors,
desktop/mobile rendering, Markdown output, spec delivery, and a repeat
import. The shared renderer tests, strict generation for all five APIs
(zero diagnostics), full Hugo build, and verification of 453
HTML/Markdown page pairs and API links pass. No live sandbox execution.
The corrected export passes strict generation for all five APIs with
zero diagnostics, scoped Markdown/Vale lint, a full Hugo build, and
verification of 453 HTML/Markdown page pairs and API links. A repeat
import produces identical files. The spec update changes examples only;
schemas and operations are unchanged.

@netlify /ai/sandboxes-api/

Generated by Codex

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-09-24 18:06:30 +02:00
David Karlsson ca37f38768 docs: add Docker Sandboxes settings reference (#26156)
Settings usage is scattered across individual guides. Add a Settings
page under Configuration explaining value precedence, environment
variables, and when changes take effect. Each catalog entry includes a
use case, an example, and the consequences of changing the setting, with
links to detailed task guides.

A small `setting-metadata` shortcode separates type, default, and
environment variable from prose using a responsive definition list. It
also provides plain Markdown output. Link existing settings mentions to
the reference and remove duplicated explanations while retaining
task-specific instructions.

Verified against Sandboxes v0.45.0 source. Feature-flag controls are
excluded; experimental entries are limited to documented flows. Scoped
lint, the Hugo build, and 70 rendered internal links passed. Checked all
26 metadata records in HTML and Markdown and browser layouts at widths
from 320 to 1440 pixels.

@netlify /ai/sandboxes/configuration/settings/

Generated by Codex
2026-09-23 10:53:55 +02:00
David Karlsson 5c18bca350 docs: migrate AI Governance API reference (#26125)
## Summary

Vendor the OpenAPI 3.2 specification merged in
docker/governor-services#755 and move AI Governance onto the unified API
reference renderer while preserving its existing URLs. This supersedes
#26067, which vendors an earlier upstream revision and retains the
legacy renderer.

@netlify /reference/api/ai-governance/latest/

[Deploy
preview](https://deploy-preview-26125--docsdocker.netlify.app/reference/api/ai-governance/latest/)

Generated by Codex
2026-09-22 08:58:30 +02:00
David Karlsson c93c72c7c2 Merge pull request #25979 from dvdksn/codex/sandbox-interactive-diagram
docs: prototype interactive Sandboxes diagram
2026-09-21 16:23:46 +02:00
David Karlsson 9b1f7de05f docs: unify Hub, DVP, and Registry API references (#26048)
@netlify /reference/api/

[Preview the API
reference](https://deploy-preview-26048--docsdocker.netlify.app/reference/api/)

Adds a shared API reference experience for Hub, DVP, and Registry: a
catalog, operation navigation, linked schemas, request and response
examples, and matching HTML and Markdown output. A validation and
generation pipeline prepares the reference data for Hugo and runs as
part of Docker and Netlify builds.

Migrates the three specifications to OpenAPI 3.2, correcting response
shapes, nullable fields, and authentication and token examples. The Hub
migration also corrects SCIM contracts and CSV exports; DVP gains
complete report response schemas and examples. Registry keeps its
documented Hub-specific subset, with authentication and media
negotiation expressed through OpenAPI security and content fields.

Validation is strict for both checks and generation, with no exception
baseline or bypass flag. The build uses the migrated sources directly,
without migration scripts or records.

Page and specification URLs remain stable, including the DVP alias.
Operation and schema anchors change. Engine and Governance retain their
existing references.

Validated locally with Go tests, strict validation of all three
specifications (zero diagnostics), scoped formatting and lint, and a
full Hugo build checking all 176 HTML/Markdown page pairs, example
parity, reference links, and byte-identical published specifications. A
browser check confirmed raw CSV rendering and the generated request
header. No live API requests were made.
2026-09-17 16:56:32 +02:00
David KarlssonandCodex b98c400647 docs: prototype new get started journeys (#25986)
## Summary

Prototypes a task-first Get started experience organized around three
short journeys:

- Containerization: run a container and application stack, build an
image, and share it.
- AI development: move an existing full-autonomy coding-agent workflow
into a disposable Docker Sandbox.
- Administration: invite a pilot user, apply a Docker Desktop policy,
and verify the managed experience.

The change replaces the existing Get started landing content with a
compact journey selector, adds direct installation paths for Docker and
Docker Sandboxes above the tutorials, adds the tutorials as a
collapsible sidebar group, and updates homepage and `llms.txt` discovery
paths. The container and sandbox tutorials include focused next steps
into relevant concept and manual pages.

The superseded Introduction series and its unused images are removed.
Its published routes and legacy aliases, including the workshop routes
consolidated on `main`, redirect to the replacement container tutorial
or the Get Docker page. Inbound documentation links point to the new
tutorial.

The existing Docker concepts content remains available while this
direction is evaluated.

@netlify /get-started/

## Deploy preview

- [Get started landing
page](https://deploy-preview-25986--docsdocker.netlify.app/get-started/)
- [Containerization
tutorial](https://deploy-preview-25986--docsdocker.netlify.app/get-started/tutorials/run-an-app/)
- [AI agent
tutorial](https://deploy-preview-25986--docsdocker.netlify.app/get-started/tutorials/run-an-agent/)
- [Administrator
tutorial](https://deploy-preview-25986--docsdocker.netlify.app/get-started/tutorials/admin-set-up/)

Generated by Codex

---------

Co-authored-by: Codex <noreply@openai.com>
2026-09-07 13:38:47 +02:00
David KarlssonandClaude 192303efc4 docs: label Desktop installer downloads for Marlin
Marlin auto-captured installer links without stable labels matching the legacy Segment download events. Add explicit labels to installer buttons and release-note shortcodes, and route WSL users through the Windows installation guide.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-09-04 11:50:44 +00:00
Alexa KristensenandCursor b744dd3103 docs: restructure Platform accounts, security, and billing IA (#25982)
# To dos

~- Evaluate _index pages and standardize across account + admins
category~
~- Edit weights of topics~
- Notify TSEs, other stakeholders
- TW sign off 

## Summary

This PR restructures the Platform documentation into a clearer Accounts,
Security, and Subscription and billing information architecture, with
aliases so existing URLs keep working.

Work from these PRs was merged into this feature branch:

- #25957 (Security IA)
- #25960 (Accounts and Admin)
- #25981 (Subscription and billing)

### Accounts

- Moves organization, company, and admin content under Accounts.
- Splits individual-account docs into their own subsection.
- Removes the standalone Admin section; those pages now live under
Accounts.

### Security

- Publishes Security at `/security/`, matching other Platform sections.
- Groups authentication (SSO, 2FA, OIDC), access tokens, provisioning,
and roles under Security.
- Leaves Enterprise Hardened Desktop and related enterprise security
docs under Enterprise.
- Restores shipped Hardened Desktop and security FAQ URLs so they match
`main`.

### Subscription and billing

- Merges Subscription and Billing into a single Subscription and billing
section.
- Drops the extra subcategory wrappers and nests billing tasks under
Manage.
- Shortens the billing details sidebar label.

### FAQs

- Consolidates Platform FAQs onto four pages: Accounts, Security,
Subscription and billing, and Platform.
- Folds leftover general, container, and network/VM security FAQs into
Platform FAQs.
- Folds SSO enforcement FAQs into the SSO FAQ.
- Templates FAQ pages with H2 topics and H3 questions, and limits the
table of contents to H2.

### Navigation and follow-ups

- Renames the manuals sidebar group from Platform to Accounts and admin,
and updates the manuals landing heading and copy to match.
- Fixes the MSI install Settings Management link after the security path
move.
- Updates CODEOWNERS, the labeler, and in-repo links to the new paths.

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-03 09:26:12 -07:00
David Karlsson fd74c4a89f Merge pull request #25955 from dvdksn/codex/add-docs-honeypot
docs: add bot-detection honeypot
2026-08-27 15:53:29 +02:00
David KarlssonandCodex a4dd1dfb76 docs: add bot-detection honeypot
Automated crawlers had no dedicated trap route in the docs site. Add a hidden site-wide footer link to a noindex page whose existing Marlin pageview identifies requests.

Co-Authored-By: Codex <codex@openai.com>
2026-08-27 11:06:43 +00:00
Codex 53f24e10a0 docs: hide Agentic Platform subtree
Agentic Platform child pages remained visible to generated discovery indexes because only the section root disabled sitemap output.

Cascade the sitemap setting and reveal hidden descendants only within the active sidebar branch.
2026-08-27 09:01:41 +00:00
ae45f40caa dap (#25941)
<!--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

---------

Signed-off-by: David Karlsson <35727626+dvdksn@users.noreply.github.com>
Co-authored-by: David Karlsson <35727626+dvdksn@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
2026-08-26 15:42:04 -05:00
David Karlsson 678542f456 docs: add automated what's new highlights (#25729)
## Summary

Replace the static Featured topics section with a data-driven Whatʼs new
timeline. Show the five most important launches by default and let
readers expand the full curated 30-day archive.

Run a daily Claude Sonnet 5 curator over a rolling 30-day window, with
manual dispatch support, deterministic validation, and bot-managed pull
requests. Package the editorial workflow as the reusable
`curate-whats-new` repository skill so Docker Agent and other Agent
Skills-compatible clients can invoke the same process.

Preserve the human-reviewed July 13 through August 11, 2026 result and
flexible selection criteria as a regression example outside the skillʼs
runtime context.

@netlify /

[Homepage
preview](https://deploy-preview-25729--docsdocker.netlify.app/)

Generated by Codex
2026-08-12 17:23:31 +02:00
David Karlsson 63ddb2912c Merge pull request #25710 from dvdksn/codex/migrate-rumdl
build: migrate Markdown tooling to rumdl
2026-08-05 09:16:24 +02:00
Craig Osterhout d1eaa21fd5 ai-audit-logs: add siem catalog (#25687)
<!--Delete sections as needed -->

## Description

There's a new SIEM catalog in addition to the Custom HTTPS endpoint.

- Created dedicated SIEM connector topic with more info
- Removed SIEM info from view and export topic
- Updated index with new topic

Preview:
https://deploy-preview-25687--docsdocker.netlify.app/ai/sandboxes/governance/audit/siem/

Added summary bar with min version.
Preview:
https://deploy-preview-25687--docsdocker.netlify.app/ai/sandboxes/governance/audit/

## Related issues or tickets


## Reviews

<!-- Notes for reviewers here -->
<!-- List applicable reviews (optionally @tag reviewers) -->

- [ ] Technical review
- [ ] Editorial review
- [ ] Product review

---------

Signed-off-by: Craig Osterhout <craig.osterhout@docker.com>
2026-08-03 11:14:43 -07:00
Craig Osterhout 1fe539c389 check for circular aliases (#25502)
<!--Delete sections as needed -->

## Description

Added check for circular aliases.

I've done it a few times. Move something and add an alias. Then move it
back and forget to remove the alias.

Currently there is a circular alias, so it should fail successfully.

## Related issues or tickets

<!-- Related issues, pull requests, or Jira tickets -->

## Reviews

<!-- Notes for reviewers here -->
<!-- List applicable reviews (optionally @tag reviewers) -->

- [ ] Editorial review

Signed-off-by: Craig Osterhout <craig.osterhout@docker.com>
2026-07-24 08:17:50 -07:00
Trung Nguyen 824235ad10 fix(gordon): empty-state scroll and wheel-chaining bugs
- Make outer messagesContainer the sole always-on scroller and use my-auto
  on the empty-state root so the robot's top stays at scrollTop=0 and is
  always reachable, even on short viewports.
- Add overscroll-behavior: contain to the drawer paper and messages
  scroller so the wheel doesn't chain out to the docs page behind.
- Drop the robotFloat keyframe (re-rasterises the SVG every frame while
  idle) and size the robot with clamp(80px, 35%, 160px) so it stays
  compact on short drawers.
2026-07-01 15:45:36 +02:00
David KarlssonandClaude Sonnet 4.6 f02e2a5633 Revamp the guides section: taxonomy, single-page structure, and new landing/filter UX (#25338)
## What

A full revamp of the `/guides` section — taxonomy, structure, and UX.

Preview: https://deploy-preview-25338--docsdocker.netlify.app/guides/

### Taxonomy & structure
- Replaces the sprawling 24-tag set with a focused 9-tag taxonomy
aligned to use case / SDLC: **Languages & frameworks, AI, Testing,
CI/CD, Security, Databases, Deployment, Admin, Hands-on labs**.
- Removes the languages taxonomy entirely (`data/languages.yaml` and all
`languages:` front matter).
- Collapses all multi-page guide series into single pages, with aliases
so old sub-page URLs continue to resolve.
- Deletes redirect-only shim pages and flattens directory-wrapped single
pages.

### Landing page (`/guides/`)
- A clean index: hero, then category sections listing each guide as a
plain **title / summary** row.
- **Browse rail** (sticky, left): click a topic to filter the page to
just that topic's guides; "All guides" resets. A count + Clear bar
appears while filtering.
- **Text filter**: instant client-side search over title, summary, and
tags. Topic filter and text search are mutually exclusive and share the
same flat-list view.
- No more "Featured guides" section.

### Guide content pages
- Removes the left sidebar for the guides section (mobile drawer kept).
- Centered reading column (`92ch`) with the TOC taking the remaining
width.
- Summary rendered as a lead paragraph under the h1.
- TOC scrollbar auto-hides until hover; breadcrumbs render at a
consistent size inside and outside `prose`.

## Notes
- Deep full-text search across guide bodies is still handled by the
existing site-wide Pagefind (⌘K); the landing filter is the fast
metadata-narrowing surface.
- `series.html` is retained — it's still used by `get-started` pages.

## Validation
- Site builds clean locally (Hugo dev server, no errors / broken refs).
- All collapsed sub-page URLs redirect via aliases.

## Follow-ups

- Prune guides that we no longer need/want
- Tighten the guides that span too many concepts (e.g. language guides;
remove cicd/deploy/sscs)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-01 10:47:10 +02:00
Usha MandyaandClaude Opus 4.8 721054f0ff Update footer link to Docker Terms of Use
Rename the footer "Terms of Service" link to "Terms of Use" and point it
to https://www.docker.com/legal/docker-terms-use/.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 10:13:35 +01:00
David Karlsson b586d74072 Merge pull request #25392 from dvdksn/includes-cleanup
Remove unused includes and fail the build on broken include references
2026-06-18 17:55:06 +02:00
David KarlssonandClaude Opus 4.8 482519b7d1 hugo: fail the build on broken include references
The include shortcode previously called readFile directly, which renders
nothing when the target is missing instead of failing. That let renamed
or deleted snippets linger as silent no-ops (for example the stale
scout-early-access.md and compose/develop.md references).

Check fileExists first and errorf with the shortcode position when the
target is missing, mirroring the file/files shortcodes. Verified against
Hugo 0.163.0: valid includes still render; a missing target now fails the
build with the offending file and line.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 11:08:24 +02:00
David Karlsson bfb37fee27 Merge pull request #25279 from dvdksn/worktree-sbx-experimental-badges
sbx-cli: render experimental indicators for commands and flags
2026-06-10 14:47:29 +02:00
David KarlssonandClaude Opus 4.8 c43b2b9886 cli: use violet for experimental flag badges
Align the experimental flag badges in the Docker CLI layout with the
violet color used by the sbx-cli layout, so experimental indicators are
consistent across both reference templates.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 14:39:48 +02:00
David KarlssonandClaude Opus 4.8 59a9547a27 sbx-cli: render experimental indicators for commands and flags
The sbx-cli layout had no handling for the experimental: true field
present in many data/sbx_cli/*.yaml files. Add visual indicators
matching the Docker CLI layout:

- Command-level (experimental: true at YAML root): magenta callout
  block below the summary table
- Flag-level (experimental: true on an option): violet badge before
  the flag description in Options and Global options tables
- Subcommands table: violet badge alongside the synopsis for
  experimental child commands

The title heading stays plain, consistent with cli.html, which signals
experimental status only through the command-level callout.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 14:39:32 +02:00
Craig Osterhout 5862e80e5b guides: update python & add files component (#25206)
<!--Delete sections as needed -->

## Description

Updated Python guide

- Removed DOI in favor of DHI only. DHI Community is now free, so
there's no reason to keep the DOI fallback path.
- Removed the git clone sample-app pattern. Maintaining external sample
repos is a burden, and split source of truth between the docs and the
sample.
- New file browser / scaffolding component. Lets users copy individual
files or scaffold the whole project with one command. Replaces the role
the cloned sample repo used to play.
- New "Secure your supply chain" topic highlighting what DHI gives you
and how to attach matching attestations to your own image in CI.
- A bunch of smaller improvements: clearer intros for each topic,
progressively updating the same app in all topics, ran and fixed issues,
etc.

https://deploy-preview-25206--docsdocker.netlify.app/guides/python/

## Related issues or tickets

ENGDOCS-3308

## Reviews

<!-- Notes for reviewers here -->
<!-- List applicable reviews (optionally @tag reviewers) -->

- [ ] Technical review
- [ ] Editorial review

---------

Signed-off-by: Craig Osterhout <craig.osterhout@docker.com>
2026-06-08 12:07:31 -07:00
David KarlssonandClaude Opus 4.8 50eeca7b4d build: bump Hugo to 0.162.1 and fix deferred CSS template (#25264)
## Summary

The site fails to build on Hugo 0.162, which no longer allows
`templates.Defer` inside a `partialCached` partial. `head.html` called
`utils/css.html` (which defers with a global key) via `partialCached`.
This switches that call to `partial` — the global Defer key already
dedupes the work, so caching was redundant — and bumps the pinned Hugo
version in the `Dockerfile` and `netlify.toml` to 0.162.1.

Verified with a full local build on Hugo 0.162.1 extended (Node 24):
clean build, 3332 pages, no template errors.

## Learnings

- Hugo 0.162 enforces that `templates.Defer` cannot live inside a
`partialCached` partial; the build error points at the deferred
template, not the `partialCached` caller, so trace upward to the caching
call site.

Generated by Claude Code

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 13:04:49 +02:00
David KarlssonandClaude Opus 4.8 4595cae8ac build: bump Hugo to 0.162.1 and fix deferred CSS template
Hugo 0.162 disallows templates.Defer inside a partialCached partial.
The CSS partial uses templates.Defer with a global key, so switch its
caller in head.html from partialCached to partial (the global Defer key
already dedupes the work). Bump the pinned Hugo version in the Dockerfile
and netlify.toml.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 11:05:31 +02:00
David Karlsson 4e1cedac16 Merge pull request #25235 from dvdksn/worktree-remove-api-header
Remove redundant header from API reference pages
2026-06-03 08:09:57 +02:00
553c69e1b7 sbx: restructure governance docs and add API reference (#25162)
## Summary

Restructures the Docker AI Governance documentation under
\`/ai/sandboxes/governance/\` and adds the supporting API reference.

Preview links:

-
https://deploy-preview-25162--docsdocker.netlify.app/ai/sandboxes/governance/
-
https://deploy-preview-25162--docsdocker.netlify.app/reference/api/ai-governance/

### Information architecture

The existing \`security/governance\` and \`security/policy\` pages are
merged into a new top-level \`governance\` section so local-policy and
org-policy sit side by side instead of being split across unrelated
parents:

- \`/ai/sandboxes/governance/\` — section landing; explains local + org
as layered enforcement
- \`/ai/sandboxes/governance/concepts/\` — resource model, rule syntax,
evaluation, precedence
- \`/ai/sandboxes/governance/local/\` — \`sbx policy\` CLI for
individual machines
- \`/ai/sandboxes/governance/org/\` — Admin Console flow (was
\`security/governance.md\`)
- \`/ai/sandboxes/governance/monitoring/\` — \`sbx policy ls\` / \`sbx
policy log\`

### API reference

\`/reference/api/ai-governance/\` renders the Governance OpenAPI spec
vendored at \`content/reference/api/ai-governance/api.yaml\` from
\`docker/governor-services\`. Operations, schemas, examples, and status
codes are fully driven by the spec — future updates land via re-vendor,
not in-repo edits. Anything wrong in the rendered reference should be
fixed upstream and re-vendored here.

The spec has been re-vendored to the latest upstream version, which
updated the server URL to \`hub.docker.com/v2\` and added the
\`/governance/\` prefix to all API paths.

### Review focus

1. The \`/ai/sandboxes/governance/\` landing — does the local + org
framing match how the product is positioned?
2. \`/reference/api/ai-governance/\` — does the rendered spec match the
source of truth, and is anything important missing?

Generated by Claude Code

---------

Co-authored-by: Louis-Arnaud <la.catoire@gmail.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 10:05:05 +02:00
Arnaud Héritier 1d6fa0234a fix(cli): render experimental callout without markdownify round-trip
The experimental notice on CLI reference pages was being produced by
running a Hugo shortcode through markdownify. The shortcode template
embeds the icon partial, and the recent migration to multi-line
Heroicons SVGs (commit ee71c80562) pushed the inner SVG path to a
4-space indent inside the expanded HTML. markdownify then re-parsed
that HTML as Markdown and treated the indented lines (the SVG path
plus the trailing </span> and <strong>Experimental</strong>) as a
fenced code block, which is what users see on docs.docker.com.

Replace the markdownify+shortcode round-trip with the rendered HTML
inline, matching the styling of the experimental shortcode but with
no Markdown re-parse.

Fixes #25215
2026-05-30 19:17:22 +02:00
David Karlsson d95336d485 Merge pull request #25178 from dvdksn/mermaid-codeblock-hook
layouts: render mermaid code blocks as diagrams
2026-05-27 14:49:57 +02:00
David Karlsson 9789556384 layouts: render ```mermaid code blocks as diagrams
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.
2026-05-27 11:08:46 +02:00
David KarlssonandClaude Sonnet 4.6 28ca826bf1 analytics: fix Marlin endpoint URL double-encoding in head.html
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>
2026-05-22 15:42:49 +02:00
David KarlssonandClaude Opus 4.7 a6c2209c7f analytics: add Marlin SDK and migrate dropdown Heap markers
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>
2026-05-22 13:40:16 +02:00
Michael Irwin cc85fe12f8 Merge pull request #25091 from mikesir87/add-model-prereqs-to-ai-labs
Adjust verbiage in labs using models to include DMR setup link
2026-05-19 03:22:03 -04:00