steps and step organize Markdown as a numbered tutorial. They present static content written by the author. A step has no action, data binding, or write behavior of its own.
This page is a live feature guide. Unit pages: steps, step.
Sample contract
| Field | Value |
|---|---|
| Purpose | Static numbered tutorial structure in content Markdown |
| Boundaries | Static-only: no run-button, no bind, no write; not a cross-device primitive promise |
| Author entry | ::::steps wrapping :::step{title=…} containers |
| Surface | Web Device document → view with mode=steps |
| Public status | released |
| Fallback / failure | Wrong fence depth drops or misparses body; ::step leaf cannot hold content |
| Verification | Routes below · arc --version = 2.0.0-beta.32 |
Start with the fence rule
A step needs a body, so it must be a container directive with at least three colons. The wrapping steps directive uses one more. A two-colon ::step is a leaf directive with no body and cannot hold step content.
Source:
::::steps
:::step{title="Define the content boundary"}
Say what the page presents, and what it does not execute.
:::
:::step{title="Place source above the result"}
Let the reader see both the Markdown and its actual output.
:::
:::step{title="Inspect it in a browser"}
Confirm that the numbering, text, and narrow-screen layout all render normally.
:::
::::Rendered:
Define the content boundary
Say what the page presents, and what it does not execute.
Place source above the result
Let the reader see both the Markdown and its actual output.
Inspect it in a browser
Confirm that the numbering, text, and narrow-screen layout all render normally.
A step body can include ordinary Markdown blocks such as paragraphs, lists, code blocks, or GitHub-style callouts. The outer steps fence must have more colons than the deepest nested container, otherwise the parser reads the fence as a different directive structure.
Failure and limits
| Situation | Expected result |
|---|---|
::step{title="…"} leaf (two colons) | No body; not a usable step |
Outer :::steps with nested :::step (same depth) | Misparsed structure; body may be lost |
| Expecting a “Run this step” control | Out of contract — steps are static presentation |
| Narrow viewport | Numbering and text remain readable as document content |
steps is a Web Device document structure produced by the content reader. It is not a separate cross-device AUP primitive promise. For the Web layout boundary in this site, see AUP layout boundary.
Verification evidence
| Item | Value |
|---|---|
| Baseline | 2026-08-12 · arc --version → 2.0.0-beta.32 |
| Capability row | docs/aup/capability-matrix.md (internal, non-routed) · ::::steps / :::step |
| Implementation | providers/runtime/web-device/src/content-reader.ts (stepsDirectiveToAup); renderer/primitives/view.ts (mode=steps) |
| Unit pages | steps · step |
| Public routes | /en/docs/web-device/markdown-steps/ · /zh/docs/web-device/markdown-steps/ |
| Local run | arc service start --blocklet blocklets/arcblock --port 4900 · desktop + ~390px |
| Accept | Numbered steps match source titles/bodies; no action/write chrome |