Cold-read agents often miss the full-site path (theme + multi-page via
create-site), mix up disk build output with what HTTP is serving, and
mix up daemon :4900 with the Web Device site host port. This booklet
is the L0 map. Prefer live arc afs explain /web after a daemon is up
(arc skill show daemon).
Prefer
arc skill list→ this booklet for create-site / whole site / serve vs build / URLs- Live:
arc afs explain /webthenarc afs explain /web/.actions/create-site - After a site exists:
arc afs exec /web/sites/<name>/.actions/doctor(site doctor — not top-levelarc doctor) - No dangling links:
arc afs exec /web/sites/<name>/.actions/check-links - Persist durable content:
arc skill show space· search:arc skill show index
Critical path facts (do not invent)
| Wrong (404 / missing) | Correct on a typical daemon |
|---|---|
list /.library/themes |
list /web/.library/themes |
explain /.library/themes/{name} |
explain /web/.library/themes/{name} |
storage: "/storage" on a new instance |
storage: "/work" (writable host work root) |
/storage is not a default system mount. Theme library is under the /web
mount. Writable storage on a fresh instance is /work.
Serve vs build
build writes static HTML to .web/.build on disk. declare starts an HTTP
host with its own lifecycle (in-memory SiteServer). A successful build does
not reload HTTP. If disk .web/.build is a new revision but
http://<site>.localhost:<web-port>/en/ still shows the old page, the host is
stale.
arc afs exec /web/sites/<name>/.actions/doctor --instance <name>
# FAIL + remediation → reload the host:
arc afs exec /web/.actions/undeclare --instance <name> --args '{"name":"<site>"}'
arc afs exec /web/.actions/declare --instance <name> --args '{"name":"<site>","source":"/work/<site>"}'
Accept-path: healthy site (HTTP matches disk) passes. Stale-serve fails with undeclare+declare — never a silent success.
Ports and URLs
Three different listeners — do not mix them:
| Surface | Typical URL | What it is |
|---|---|---|
Daemon / arc service HTTP |
http://localhost:4900/ |
ARC daemon (AFS, blocklets, MCP). Not the site. |
| Web Device site host | http://<site>.localhost:<web-port>/en/ |
Site HTTP started by declare (dynamic port, e.g. :34069). |
*.localhost Host routing |
Host <site>.localhost |
Multi-site routing on the Web Device port. |
create-site / declare return the site URL — open that, not :4900.
Discover (daemon up)
Add --instance <name> unless you are on the default instance.
arc afs explain /web --instance <name>
arc afs ls /web/.library/themes --instance <name>
arc afs explain /web/.library/themes/default --instance <name>
arc afs ls /web/.library/themes/default/components --instance <name>
arc afs ls /web/.actions --instance <name>
arc afs explain /web/.actions/create-site --instance <name>
arc afs ls /work --instance <name> # confirm writable root
arc service status
Golden path: create-site
arc afs ls /web/.library/themes --instance <name>
arc afs exec /web/.actions/create-site --instance <name> --args '{
"name": "my-site",
"storage": "/work",
"theme": "default",
"pages": {
"index": {
"sections": [
{
"id": "hero",
"type": "hero-banner",
"props": { "title": "Hello", "subtitle": "From arc skill show site" }
}
]
}
}
}'
Then:
arc afs ls /web/sites --instance <name>
arc afs explain /web/sites/my-site --instance <name>
arc afs exec /web/sites/my-site/.actions/check-links --instance <name>
Open the URL in the action receipt (http://my-site.localhost:<web-port>/en/).
If the page looks stale after a later build, run doctor (above).
Acceptance: check-links reports no dangling links. The JSON above is
listing-safe; default theme chrome still links to /en/docs/ and
/en/articles/ unless those pages exist — copy examples/starter-site/site.json
for a check-links-green template.
Take component type names from list /web/.library/themes/{theme}/components
— do not invent. Prefer explain a component path before filling props (leaf returns the props schema).
Chrome / portal-header: avoid stacking shell chrome — see doctor / blocklet
guidance when present; do not double-wrap portal-header.
Listing components invent collection URLs
product-showcase, content-card, news-ticker, and technology-card
invent collection URLs even when items have no slug (/en/products/#/,
/en/news/#/, /en/technology/#/, …). Without matching detail pages those
links dangle and check-links goes red.
The create-site example's product-showcase + items: [] emits no hrefs;
filling those items without slugs / detail pages is the trap. Prefer the
copy-paste starter (examples/starter-site/site.json) — its content-card
items have no slugs, so default-theme cards stay unlinked.
Golden-path acceptance after create-site:
arc afs exec /web/sites/<name>/.actions/check-links --instance <name>
Site doctor is /web/sites/<name>/.actions/doctor, not top-level arc doctor.
Local Pages deploy
Local-only Pages deploy (no public URL, receipt local://…) needs either
daemon env AFS_TEST_PAGES_LOCAL=1 at start, or { "local": true } on
/web/sites/<name>/.actions/deploy when the Pages backend is already local.
Client-shell export of AFS_TEST_PAGES_LOCAL does not reach a running daemon.
Related
- Daemon /
:4900:arc skill show daemon - Paths / WM:
arc skill show afs - DID Space persist:
arc skill show space - Retrieval Index:
arc skill show index - Blocklet scaffold:
arc skill show blocklet - Catalog:
arc skill list - Install:
arc skill install site