Readonly comments prove the type hosts on deck.
AUP is a semantic tree
AUP is not a CSS framework and not a page template language. You author a semantic tree of named node types. A target device reports what it can render; the runtime degrades or refuses the rest.
This deck is a web slideshow tour: one Markdown record, slides: true, hosted on Web Device docs. It shows what a deck path can host—not ordinary article document caps.
Document caps vs deck caps
| Cap profile | What it means on this site |
|---|---|
| document | Ordinary articles: native subset, partial time, forced degradation for interactive types |
deck (DEVICE_CAPS_DECK) | This slideshow: document natives plus chart/map/calendar/overlay/canvas/explorer/surface/chat shells |
| web-full | Full interactive Web (Showcase / apps): session, write paths, multi-window |
This deck uses DEVICE_CAPS_DECK (arc#4005 / #4011 / #4012). Human lock (#4006): only rtc and camera-preview are hard excludes; other surfaces ship as readonly + authored data demos. Ordinary articles still degrade chart→table and map→media.
Basic interface
view — native
Portable container. On document, tabs and steps are static UI chrome (panel switch only—no session, no exec).
Install with pnpm install.
Install with npm install.
text — native
Ordinary Markdown body is the main text path. Callouts become text-admonition presentation on document.
Portable copy
This callout is document content. It does not run actions or write AFS data.
media — native
Semantic media node (image path here). Same-site / whitelist rules for frames are separate.

input — native
Unbound form control on document. Typing changes only the browser control—no bind, session, or AFS write.
action — native
Navigation-only on document. No exec, no destructive confirm from a static sample.
overlay — deck open shell
Open dialog chrome on this deck (readonly). Dismiss bus / session confirm stay interactive.
This shell is open by default so the slide shows real chrome—not a screenshot.
| Fact | Boundary |
|---|---|
| Deck path | partial open shell (arc#4012) |
| Ordinary document | still unsupported → text |
| Session dismiss / confirm bus | interactive only |
Structure and time
table — native (GFM path)
GFM tables render on the document target. Prefer an author-written table when the page needs data.
| File | Purpose | Writes data |
|---|---|---|
content.md | Content item | No |
layout.aup | Page layout | No |
time — partial
Document reports partial. Display mode is a static snapshot, not a live clock.
No continuous client ticker on this path. Clock/countdown product claims belong to interactive targets after re-verification.
chart — quarterly bar
map — Paris
calendar — August 2026
Interactive surface
chat — deck readonly + data
Authored messages only. Input bar is disabled—no session bus, no write (human #4006).
| Fact | Boundary |
|---|---|
| Deck path | partial readonly shell |
| Write / session / agent runtime | not on this tour |
| Ordinary document | still unsupported |
rtc — excluded (human #4006)
| Fact | Boundary |
|---|---|
| Deck path | unsupported (hard exclude) |
| Shared chain | unsupported → annotated text |
| What this deck does | No RTC / camera-preview demo |
Media permissions and peer sessions are not slideshow product demos. camera-preview widget is excluded for the same reason.
explorer — deck static tree
Authored items only—not path-backed AFS browse.
/docs/aup- 📁overview
- 📁capability-tour-slides
- 📄README.md/docs/aup/README.md
| Fact | Boundary |
|---|---|
| Deck path | partial static shell |
| Path-backed live AFS | interactive / session only |
| Pair with afs-list | static children only on docs |
editor — native (experimental)
Document registers an editor renderer as a local textarea. Typing stays in the browser—no IDE, no AFS write-back.
::editor{id="aup-tour-editor" language="json" label="Example snippet" value="{ "ok": true }"}
Markdown attribute strings are not guaranteed to match AUP JSON booleans (readOnly). Prefer JSON/DSL when the prop must be strict.
canvas — deck drawing shell
Host + canvas; progressive enhance enables local pen (no AFS persistence).
| Fact | Boundary |
|---|---|
| Deck path | partial shell + local pen enhance |
| Ordinary document | unsupported → media → text |
| Persist strokes / multi-user | interactive only |
surface — deck host shell
Labeled host region + children. Taxonomy: primitive surface ≠ wm-surface ≠ layout surface dirs.
Static surface body — authored children only. No session view selector on this deck.
| Fact | Boundary |
|---|---|
| Deck path | partial host shell |
| Session expand / path browse | interactive only |
| Confusion | do not rename site chrome as this primitive |
afs-list — document (static children)
Document can render list chrome. Path-backed live AFS data is not closed on public docs—use static children only.
Static row one — authored as document children, not fetched.
Static row two — still not an AFS path proof.
Empty / loading chrome without children is documented on the unit page; this tour only shows the static-children path.
Document-hostable widgets
Widgets are not the 18 cross-device primitives. Deck SSR now registers focused shells for many of them (arc#4012 / #4008 / #4009). Array/object props as JSON strings are coerced (same as chart/map). Nested portal chrome for app-header still needs object props from DSL.
app-header — document shell
Document registers app-header and emits the same .aup-app-header* chrome classes as the interactive path. Nested brand / nav / actions need object props (Showcase / AUP DSL). Markdown directive attributes are always strings, so this slide shows the registered shell only—not a full portal header.
| Fact | Boundary |
|---|---|
| Document RENDERERS | yes (static) |
| MD live brand/nav/actions | not — string attrs are not JSON-coerced |
| Session / search / microBar | interactive / AFS only |
Unit page: app-header. Showcase: prim-app-header.
app-footer — document shell
Document renders a static footer. The legacy top-level copyright string is MD-safe and produces the bottom bar. Multi-column brand / columns / social need object props (same MD string-attr limit as header).
Unit page: app-footer. Showcase: prim-app-footer.
ticker — document static
Document RENDERERS force data-mode="static": children separated by bullets—not a continuous scroll ticker.
Document surface
•Static children
•No live scroll on this path
Interactive scroll/flip modes stay on web-full. Unit page: ticker.
broadcast — document static shell
Document RENDERERS treat broadcast as a view-like container: children render, live channel / director wiring does not.
Static broadcast shell — authored children only. No shared channel, no AI director, no live viewer count on document.
Role expansion (live-badge, lower-third, …) is interactive. Unit page: broadcast.
deck — this tour is the host
This record is already a deck: front matter slides: true + layout: slides builds the player. Document reports deck as partial host chrome—not a nested product deck inside each slide.
| Fact | Boundary |
|---|---|
| Host | This capability-tour record |
| Authoring | ## slides, --- dividers, optional media-fill bodies |
Nested ::deck | Not required for this tour |
You are inside the demo. Unit page: deck. Markdown slides guide: markdown-slides.
frame — document partial
Sandboxed iframe via AUP type: "frame". Same trust boundary as embeds: http(s) or allow-listed paths; unknown/unsafe src becomes an error or link fallback.
::embed{url=…} is the Markdown authoring path that often compiles toward frame-shaped nodes. This slide names the widget type explicitly. Document capability is partial. Unit page: frame.
key-value-list — deck shell
Unit page: key-value-list. Showcase: prim-key-value-list.
breadcrumb — deck shell
AUP widget—not the site layout page-breadcrumb chrome. Unit page: breadcrumb.
chip — deck shell
Stable3Deck shellReadonlyUnit page: chip. Dismiss events stay interactive.
pagination — deck static chrome
Buttons disabled—no page events on this tour. Unit page: pagination.
tooltip — deck shell
Hover target (and visible tip below)
Native title + visible hint for deck proofUnit page: tooltip.
entity-overview — deck shell
Identity
Caps
Unit page: entity-overview.
terminal — deck readonly transcript
$ arc --version2.0.0-beta.35$ arc blocklet check blocklets/arcblockok
Not a live PTY / xterm WebSocket. Unit page: terminal.
moonphase — deck shell
Pure math shell (no CDN). Unit page: moonphase.
globe — world markers
comments-surface — deck readonly
Write path and session stay off this tour.
Human #4006: data demo OK; no write. Live article mount is a separate site toggle.
wm — single-panel shell
Single-panel window chrome for deck geometry (1280×720). Not multi-window desktop.
Human #4006: single-panel OK; full desktop geometry stays Showcase wm-desktop.aup.
agent — deck readonly (chat alias)
Same shell as chat. No AFS write / agent loop.
wm-surface — same single-panel shell
Same SSR as wm. Taxonomy: widget wm-surface ≠ primitive surface.
xeyes — static gaze
Mouse tracking stays interactive. Deck hosts the chrome.
searchable-dropdown — closed list
- Bun
- Node
- Workers
Closed list. Filter/onChange stay interactive.
Filter / onChange stay interactive.
afs-stat — label + value
afs-preview — path + snippet
# AUP\nSemantic tree. Device reports caps.
afs-dropzone — dashed host
Ingest / grant PUT stay off this tour.
natal-chart — planets table
| Planet | Longitude | Sign | Degree in Sign |
|---|---|---|---|
| Sun | 45.20° | Taurus | 15.20° |
| Moon | 120.50° | Leo | 0.50° |
| Mercury | 12.00° | Aries | 12.00° |
Astrochart CDN stays on web-full.
finance-chart — candle table
| Time | Open | High | Low | Close |
|---|---|---|---|---|
| 2026-08-12 | 10 | 12 | 9 | 11 |
| 2026-08-13 | 11 | 13 | 10 | 12 |
| 2026-08-14 | 12 | 12.5 | 11 | 11.5 |
TradingView stays interactive.
skills — authored names
- issue-audit
- land
- verification
Live registry stays off this tour.
text-highlight — marks
Deck can host highlighted phrases without an iframe.
type-block — authored DSL
AUP is a semantic tree.
Mode shuffle — iframe type-block runtime stays interactive.
Iframe type-block runtime stays interactive.
hero-widget — title + desc
Readonly host for the WebGL/iframe hero.
Style cube — WebGL/iframe hero stays interactive.
webgl-hero — GPU placeholder
GPU scene needs web-full. Deck shows the host, not the shader.
progress-bar-3d — CSS stand-in
64%
2D CSS stand-in. 3D WebGL bar stays interactive.
photo-story — stills


text-image-expand — pair

Harbor plate. Expand/hover stays interactive.
Static pair — expand/hover stays interactive.
scroll-explainer — stacked steps
- Author Markdown
- Deck SSR shell
- Enhance where JS exists
block-revealer — already open
Enter/scroll reveal stays interactive. This slide starts open.
post-editor — readonly
Readonly chrome — publish path stays off this tour.
share-panel — URL chrome
AUP capability tour
https://new.arcblock.io/en/docs/aup/capability-tour-slides/
Native share sheet / QR stay interactive.
Native share sheet / QR stay interactive.
provider-card — catalog chrome
Deployment storage. Card chrome only on this deck.
Catalog card chrome only.
connection-gate — status
Status: disconnected
Auth/connect stay off the slideshow.
Auth/connect stay off the slideshow.
blocklet-embed — address only
Embed target: https://new.arcblock.io/
Deck hosts the address, not a nested live blocklet session.
Nested live session stays off this tour.
auto-surface — host
Fixture chrome. Session expand stays interactive.
auto-fire — no fire
Would exec /dev/agent/.actions/run on mount.
Deck: no fire. Session / reconnect re-triggers stay off this tour.
Would exec on mount. Deck: no fire.
url-default — no navigation
match /app/today → /app/today/2026-08-14
Deck: no navigation. Canonicalize-on-mount stays off this tour.
Canonicalize-on-mount stays off this tour.
Markdown surface
Admonition (GFM callout)
Same path as text admonition—shown again as an authoring surface you type in Markdown.
Prefer same-line titles
A bare marker uses locale defaults; an explicit title on the marker line always wins.
Unknown markers
[!FIXME] stays an ordinary blockquote, not callout chrome.
Steps (::::steps)
Tutorial chrome lands on document view rendering. Outer fence must wrap each :::step.
Name the target
Document vs web-full first—then pick primitives the target reports.
Demo or label
Native → live MD sample. Unsupported → one honest “not on document” slide.
YouTube partial
Prose keeps the embed partial — normal deck padding, no data-media-fill. Supported providers render as a sandboxed frame; unrecognized URLs stay ordinary links.
This is the frame / embed path—not a general privileged iframe API.
GFM table (MD structure)
Author tables in ordinary Markdown when the document needs data. Live chart on this deck is a separate experimental node (generic directive)—not a general MD chart contract for all docs. Do not smuggle a chart through a GFM table.
| Cap | document article | this deck (DEVICE_CAPS_DECK) | web-full |
|---|---|---|---|
table | native | native | webview |
chart | unsupported → table/text | partial shell (Chart.js) | chart |
map | unsupported → media/text | partial shell (Leaflet) | map |
Image (Markdown structure)
Inline images are a structure path distinct from ::media, but both are document-reachable media presentation.

Prefer ::media when you need caption / type props as an AUP node; use  for ordinary article figures.
Link card + navigation action
Cards are Markdown directives that compose with action for navigation-only CTAs.
Primitive taxonomy
18 cross-device primitives vs 42 Web-only widgets—keep the layers separate.
Device caps and degradation
Shared chains, document article policy, and deck chart/map shells.
Open degradation guideDeck media host
One stage · many media modes
The deck is a 1280×720 media host, not just prose cards.
| Mode | Feel |
|---|---|
| Single plate | One photo, edge-to-edge |
| Mosaic | Bento tiles fill the stage |
| Grid | Equal tiles fill the stage |
| Stage / video | 16 box, full-bleed loop, YouTube |
| Tweet clamp | Tall embed scrolls inside the stage |
Next pages: one effect each — visual first.
Single plate

Mosaic



Grid



Sized stage



Full-bleed · plates


Full-bleed · YouTube
Tweet clamp
What this deck proves
- One Markdown record → player + reading transcript (
slides: true) - Deck ≠ document article — interactive shells on
DEVICE_CAPS_DECK - Hard excludes — only
rtcand camera-preview (#4006) - Widgets — one focused readonly+data slide each (arc#4009); web-full stays richer
- Media host — single · mosaic · grid · stage · full-bleed · tweet