{"slug":"protocol-widgets","title":"Protocol Widgets: Self-Explanation, Vault Cards, and Native Embeds","body":"## What this article is\n\nProtocol Widgets document the rendering system on miscsubjects.com.  \nIt explains how evidence appears as self-contained cards and embeds.  \nThe audience is operators who maintain the site, models that consume the API, and readers who view articles.\n\n## Who claims what\n\nWidgets are self-explaining.  \nEvery attachSelf() response returns _self.what, _self.how_to_use, and _self.related URLs.  \nexplainGrowStep() returns human-readable why/how text for each grow-queue step.  \nPlatform logos and rail styling live in widgets/platform_logos.js and widgets/social.js.\n\n## What is known\n\nFEATURES in self_explain.js is the canonical feature index.  \nsourceToWidget() maps ledger sources to native cards for reddit, x, pubmed, youtube, and imessage.  \nbuildInlineEmbedMap() turns [[embed:slug]] markers into horizontal native cards.  \nnormalizeWidget() unifies directory rows, tasks, events, and claims into vault-card rails with shortHash ids.  \nmeta.widgets[] supports imessage, quote, stat, note, and gallery types as JSON series.  \nGraph canvas widgets come from GET /api/graph with nodes as claims or sources and edges as supported_by, posted_by, challenges, or embeds.  \nWidget rendering is deterministic from ledger JSON.  \nThird-party oEmbed iframes are avoided for Reddit and X.\n\n## What we do not know\n\nNot all admin pages yet consume _self blocks.  \nWidget accessibility with ARIA on rails remains partial.\n\n## Limitations\n\nWidgets display evidence only.  \nThey do not score or elevate claims.  \nWeighting stays in claim.weight from /score.\n\n## Disclaimer\n\nThis is not medical advice.  \nSocial anecdote widgets are anecdotal tier by definition.","register":"technical","tags":["system","protocol","widgets"],"category":null,"style":{},"claims":[{"id":"c_wid_1","text":"Every attachSelf() response includes _self.what, _self.how_to_use, and _self.related URLs — widgets are self-explaining payloads, not static HTML.","section":"what it is","tier":"system","source_status":"unsourced","why_material":"Architecture axiom — verifiable via live GET endpoints cited in text."},{"id":"c_wid_2","text":"FEATURES in self_explain.js is the canonical feature index; system-map article exposes it for humans and LLMs.","section":"what it is","tier":"system","source_status":"unsourced","why_material":"Architecture axiom — verifiable via live GET endpoints cited in text."},{"id":"c_wid_3","text":"sourceToWidget() maps hash-chained ledger sources to native platform cards (reddit, x, pubmed, youtube, imessage) on the reader page.","section":"what is known","tier":"system","source_status":"unsourced","why_material":"Architecture axiom — verifiable via live GET endpoints cited in text."},{"id":"c_wid_4","text":"buildInlineEmbedMap() resolves [[embed:slug]] markers in article body to horizontal native cards without external iframes.","section":"what is known","tier":"system","source_status":"unsourced","why_material":"Architecture axiom — verifiable via live GET endpoints cited in text."},{"id":"c_wid_5","text":"normalizeWidget() in vault_widgets.js unifies directory rows, tasks, events, and claims into vault-card rails with shortHash ids.","section":"what is known","tier":"system","source_status":"unsourced","why_material":"Architecture axiom — verifiable via live GET endpoints cited in text."},{"id":"c_wid_6","text":"meta.widgets[] supports imessage|quote|stat|note|gallery types as JSON series independent of the source ledger.","section":"what is known","tier":"system","source_status":"unsourced","why_material":"Architecture axiom — verifiable via live GET endpoints cited in text."},{"id":"c_wid_7","text":"Graph canvas widgets come from GET /api/graph — nodes are claims/sources, edges are supported_by, posted_by, challenges, embeds.","section":"what is known","tier":"system","source_status":"unsourced","why_material":"Architecture axiom — verifiable via live GET endpoints cited in text."},{"id":"c_wid_8","text":"explainGrowStep() returns human-readable why/how for each grow-queue step — operational widget for cron operators.","section":"who claims what","tier":"system","source_status":"unsourced","why_material":"Architecture axiom — verifiable via live GET endpoints cited in text."},{"id":"c_wid_9","text":"Platform logos and rail styling live in widgets/platform_logos.js and widgets/social.js — presentation layer only, not ledger truth.","section":"who claims what","tier":"system","source_status":"unsourced","why_material":"Architecture axiom — verifiable via live GET endpoints cited in text."},{"id":"c_wid_10","text":"Third-party oEmbed iframes are avoided for Reddit/X — native cards use ledger quote+url for auditability.","section":"what is known","tier":"system","source_status":"unsourced","why_material":"Architecture axiom — verifiable via live GET endpoints cited in text."},{"id":"c_wid_11","text":"Not all admin pages yet consume _self blocks — some legacy HTML predates attachSelf.","section":"what is unknown","tier":"system","source_status":"unsourced","why_material":"Architecture axiom — verifiable via live GET endpoints cited in text."},{"id":"c_wid_12","text":"Widget accessibility (ARIA on rails) is partial — visual cards exist before full a11y pass.","section":"what is unknown","tier":"system","source_status":"unsourced","why_material":"Architecture axiom — verifiable via live GET endpoints cited in text."},{"id":"c_wid_13","text":"Widget rendering is deterministic from ledger JSON — same source hash always maps to same card content.","section":"mechanism","tier":"system","source_status":"unsourced","why_material":"Architecture axiom — verifiable via live GET endpoints cited in text."},{"id":"c_wid_14","text":"Widgets display evidence; they do not score or elevate claims — weighting remains in claim.weight from /score.","section":"limitations","tier":"system","source_status":"unsourced","why_material":"Architecture axiom — verifiable via live GET endpoints cited in text."},{"id":"c_wid_15","text":"Not medical advice — social anecdote widgets are anecdotal tier by definition.","section":"disclaimer","tier":"system","source_status":"unsourced","why_material":"Architecture axiom — verifiable via live GET endpoints cited in text."}],"sources":[],"prov":{"model":"grok/build (protocol-meta-articles)","action":"write"}}