Adom Wiki
Public Made by Adomby adom
How the Adom Wiki (wiki.adom.inc) works and how to drive it with the adom-wiki CLI: the two storage layers (git page repo vs package registry), hosting source by pushing files (not a tarball), making packages, cutting per-platform releases, and the three-tier skill layout (user skills ship, dev-skills/ and publish-skills/ stay source-only). adom-wiki is the current tool; adompkg is deprecated. Read this first before publishing or installing.
Registered ::widget tags cannot read a PRIVATE page's data — opaque-origin frame sends no session, so src 404s and the widget renders empty with no error
What happens
A registered ::widget{} tag renders an empty table with no error when its src points
at a file on a private page. Nothing appears in the console, nothing is logged, and the
frame collapses to its 120px minimum. From the reader's side it is indistinguishable from a
widget that has no data.
Why
The wiki sandboxes a ::tag frame to an opaque origin (allow-scripts allow-downloads allow-popups allow-popups-to-escape-sandbox, no allow-same-origin) — as
documented, and as the storage shim in the frame confirms. fetch() defaults to
credentials: 'same-origin', so from an opaque origin the request carries no session
cookie. The wiki then sees an anonymous reader and correctly 404s a private page's file.
So the sandbox that makes registered widgets safe is also what makes them unable to read the data of the page hosting them, whenever that page is private.
Evidence
Real Chrome (152.0.7977.64), the real frame at
/adom/repo-ownership/widget/adom-table?src=/adom/repo-ownership/render/ownership.json,
with a logged-in session. Two runs, identical except for allow-same-origin:
| sandbox | cookie on the data fetch | status | rows rendered | frame height |
|---|---|---|---|---|
allow-scripts allow-downloads allow-popups allow-popups-to-escape-sandbox (what the wiki emits) |
not sent | 404 | 0 | 120px (the floor) |
...same + allow-same-origin |
sent | 200 (82,735 B) | 288 | 12,549px |
The widget itself is healthy in both runs — defined:true, hasRuntime:true, shadow:true —
so this is purely the credentialed-fetch boundary, not a widget bug.
Why it matters
::tag widgets are currently usable only on public pages. Every private page — which is
most internal tooling — has to keep hand-building a bespoke section frame, which is exactly
the duplication the widget registry exists to end. The same table had been hand-built three
times before adom-table was registered.
Suggested fix
Have the widget frame resolve src server-side, with the requesting reader's session, and
inline the result as <script type="application/json"> inside the frame. The frame is
already rendered per-reader and already authenticated at that moment, so the data it inlines
is exactly what that reader is entitled to see. This would:
- make registered widgets work on private pages;
- match the data-loading order the runtime already prefers (inline JSON first,
srclast); - work in the readme frame too, where
connect-srcblocks the fetch anyway; - remove a round trip.
Workaround in use
adom/repo-ownership now hosts the registered adom-table script inside its own
section frame (/widget-script/adom-table.js, the registry-gated route — the same
reviewed file every ::tag reader gets). Section frames are not sandboxed, so the fetch is
credentialed and the table renders. That keeps the "fixes to the widget propagate
automatically" benefit, but it needs a hand-written host file per page, which is the thing
this issue asks to remove.
Filed by Ray. Not proposing a patch here — git-wiki is Colby's and this is a change to the
frame builder, so it wants an owner's judgement on where the fetch belongs.