[{"data":1,"prerenderedAt":1089},["ShallowReactive",2],{"navigation_docs":3,"-guides-export-check":412,"-guides-export-check-surround":1084},[4,38,84,326,386],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":37},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15,20,24,28,32],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-book-open",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":6},"Quick start: Nuxt","\u002Fgetting-started\u002Fquick-start-nuxt","1.getting-started\u002F3.quick-start-nuxt",{"title":25,"path":26,"stem":27,"icon":6},"Quick start: plain Vue","\u002Fgetting-started\u002Fquick-start-vue","1.getting-started\u002F4.quick-start-vue",{"title":29,"path":30,"stem":31,"icon":6},"Quick start: React","\u002Fgetting-started\u002Fquick-start-react","1.getting-started\u002F5.quick-start-react",{"title":33,"path":34,"stem":35,"icon":36},"Glossary","\u002Fgetting-started\u002Fglossary","1.getting-started\u002F6.glossary","i-lucide-book-a",false,{"title":39,"icon":40,"path":41,"stem":42,"children":43,"page":37},"Tutorial","i-lucide-graduation-cap","\u002Ftutorial","2.tutorial",[44,49,54,59,64,69,74,79],{"title":45,"path":46,"stem":47,"icon":48},"Tutorial: overview","\u002Ftutorial\u002Foverview","2.tutorial\u002F1.overview","i-lucide-map",{"title":50,"path":51,"stem":52,"icon":53},"Chapter 2: A simple editor","\u002Ftutorial\u002Fsimple-editor","2.tutorial\u002F2.simple-editor","i-lucide-pencil",{"title":55,"path":56,"stem":57,"icon":58},"Chapter 3: Compose features","\u002Ftutorial\u002Fcompose-features","2.tutorial\u002F3.compose-features","i-lucide-blocks",{"title":60,"path":61,"stem":62,"icon":63},"Chapter 4: Your own block, path A","\u002Ftutorial\u002Fown-block-path-a","2.tutorial\u002F4.own-block-path-a","i-lucide-square-plus",{"title":65,"path":66,"stem":67,"icon":68},"Chapter 5: Your own feature, path B","\u002Ftutorial\u002Fown-feature-path-b","2.tutorial\u002F5.own-feature-path-b","i-lucide-puzzle",{"title":70,"path":71,"stem":72,"icon":73},"Chapter 6: Backend and collaboration","\u002Ftutorial\u002Fbackend-and-collaboration","2.tutorial\u002F6.backend-and-collaboration","i-lucide-users",{"title":75,"path":76,"stem":77,"icon":78},"Chapter 7: AI","\u002Ftutorial\u002Fai","2.tutorial\u002F7.ai","i-lucide-sparkles",{"title":80,"path":81,"stem":82,"icon":83},"Chapter 8: The React surface","\u002Ftutorial\u002Freact-surface","2.tutorial\u002F8.react-surface","i-lucide-atom",{"title":85,"icon":14,"path":86,"stem":87,"children":88,"page":37},"Guides","\u002Fguides","3.guides",[89,93,98,103,108,112,116,121,126,130,134,139,144,149,154,159,164,169,174,179,184,189,194,199,204,209,213,218,223,228,233,237,242,247,251,256,261,266,271,276,281,286,291,295,302,307,311,316,321],{"title":90,"path":91,"stem":92,"icon":58},"Feature composition and entries","\u002Fguides\u002Fcomposition","3.guides\u002F1.composition",{"title":94,"path":95,"stem":96,"icon":97},"Media, mentions and transcript features","\u002Fguides\u002Fmedia-mentions-transcript","3.guides\u002F10.media-mentions-transcript","i-lucide-image",{"title":99,"path":100,"stem":101,"icon":102},"Authors and comments","\u002Fguides\u002Fauthors-and-comments","3.guides\u002F11.authors-and-comments","i-lucide-message-square-text",{"title":104,"path":105,"stem":106,"icon":107},"Themes (Obsidian)","\u002Fguides\u002Fthemes","3.guides\u002F12.themes","i-lucide-palette",{"title":109,"path":110,"stem":111,"icon":58},"Composites and the settings UI","\u002Fguides\u002Fcomposites","3.guides\u002F13.composites",{"title":113,"path":114,"stem":115,"icon":78},"AI","\u002Fguides\u002Fai","3.guides\u002F14.ai",{"title":117,"path":118,"stem":119,"icon":120},"Document tree","\u002Fguides\u002Fdocument-tree","3.guides\u002F15.document-tree","i-lucide-folder-tree",{"title":122,"path":123,"stem":124,"icon":125},"Markdown and code","\u002Fguides\u002Fmarkdown-and-code","3.guides\u002F16.markdown-and-code","i-lucide-file-code",{"title":127,"path":128,"stem":129,"icon":83},"Advanced editor in React","\u002Fguides\u002Fadvanced-react","3.guides\u002F17.advanced-react",{"title":131,"path":132,"stem":133,"icon":6},"Kitchen sink: learning path","\u002Fguides\u002Fadvanced-nuxt-example","3.guides\u002F18.advanced-nuxt-example",{"title":135,"path":136,"stem":137,"icon":138},"Production","\u002Fguides\u002Fproduction","3.guides\u002F19.production","i-lucide-server",{"title":140,"path":141,"stem":142,"icon":143},"Register the Nuxt module","\u002Fguides\u002Fnuxt-module","3.guides\u002F2.nuxt-module","i-lucide-package",{"title":145,"path":146,"stem":147,"icon":148},"Storage adapters, comment stores, Nitro host","\u002Fguides\u002Fstorage-adapters","3.guides\u002F20.storage-adapters","i-lucide-database",{"title":150,"path":151,"stem":152,"icon":153},"Migrating from #tiptap-editor","\u002Fguides\u002Fmigration","3.guides\u002F21.migration","i-lucide-arrow-right-left",{"title":155,"path":156,"stem":157,"icon":158},"Content tree mechanics","\u002Fguides\u002Fcontent-tree","3.guides\u002F22.content-tree","i-lucide-git-fork",{"title":160,"path":161,"stem":162,"icon":163},"Block capabilities, abilities and actions","\u002Fguides\u002Fblock-capabilities","3.guides\u002F23.block-capabilities","i-lucide-shield-check",{"title":165,"path":166,"stem":167,"icon":168},"Block types in code and JSON","\u002Fguides\u002Fblock-types","3.guides\u002F24.block-types","i-lucide-shapes",{"title":170,"path":171,"stem":172,"icon":173},"Derive methods and the Derivation index","\u002Fguides\u002Fderive-methods","3.guides\u002F25.derive-methods","i-lucide-git-branch-plus",{"title":175,"path":176,"stem":177,"icon":178},"Block properties and Property definitions","\u002Fguides\u002Fblock-properties","3.guides\u002F26.block-properties","i-lucide-sliders-horizontal",{"title":180,"path":181,"stem":182,"icon":183},"Image studio","\u002Fguides\u002Fimage-studio","3.guides\u002F27.image-studio","i-lucide-image-plus",{"title":185,"path":186,"stem":187,"icon":188},"Prüfung and Freigabestatus","\u002Fguides\u002Fpruefung","3.guides\u002F28.pruefung","i-lucide-stamp",{"title":190,"path":191,"stem":192,"icon":193},"Workspace: find, read, reference and embed Blocks across Documents","\u002Fguides\u002Fworkspace","3.guides\u002F29.workspace","i-lucide-network",{"title":195,"path":196,"stem":197,"icon":198},"EditorPorts: auth and storage","\u002Fguides\u002Feditor-ports","3.guides\u002F3.editor-ports","i-lucide-plug",{"title":200,"path":201,"stem":202,"icon":203},"Collections: an ordered list of Blocks","\u002Fguides\u002Fcollections","3.guides\u002F30.collections","i-lucide-list-checks",{"title":205,"path":206,"stem":207,"icon":208},"Data views: a query shown as table, list or board","\u002Fguides\u002Fdata-views","3.guides\u002F31.data-views","i-lucide-table-properties",{"title":210,"path":211,"stem":212,"icon":193},"Explore: backlinks, related Blocks and the trail","\u002Fguides\u002Fexplore","3.guides\u002F32.explore",{"title":214,"path":215,"stem":216,"icon":217},"Render: export a Block or a Document to a file","\u002Fguides\u002Frender","3.guides\u002F33.render","i-lucide-file-output",{"title":219,"path":220,"stem":221,"icon":222},"Importers: what a dropped file becomes","\u002Fguides\u002Fimporters","3.guides\u002F34.importers","i-lucide-file-input",{"title":224,"path":225,"stem":226,"icon":227},"Templates: start a Document from a Dokumentvorlage","\u002Fguides\u002Ftemplates","3.guides\u002F35.templates","i-lucide-file-stack",{"title":229,"path":230,"stem":231,"icon":232},"Citations","\u002Fguides\u002Fcitations","3.guides\u002F36.citations","i-lucide-quote",{"title":234,"path":235,"stem":236,"icon":163},"AI proposals and the export check","\u002Fguides\u002Fexport-check","3.guides\u002F37.export-check",{"title":238,"path":239,"stem":240,"icon":241},"Query: filter, sort, group and total Blocks","\u002Fguides\u002Fquery","3.guides\u002F38.query","i-lucide-list-filter",{"title":243,"path":244,"stem":245,"icon":246},"Edges: backlinks and authored connections","\u002Fguides\u002Fedges","3.guides\u002F39.edges","i-lucide-link-2",{"title":248,"path":249,"stem":250,"icon":163},"Server routes and authentication","\u002Fguides\u002Froutes-and-auth","3.guides\u002F4.routes-and-auth",{"title":252,"path":253,"stem":254,"icon":255},"Speech: text to audio, and subtitle files","\u002Fguides\u002Fspeech","3.guides\u002F41.speech","i-lucide-audio-lines",{"title":257,"path":258,"stem":259,"icon":260},"Graph: the Edges around a Block","\u002Fguides\u002Fgraph","3.guides\u002F42.graph","i-lucide-waypoints",{"title":262,"path":263,"stem":264,"icon":265},"PDF viewer: passages, anchors and quotes","\u002Fguides\u002Fpdf-viewer","3.guides\u002F43.pdf-viewer","i-lucide-file-search",{"title":267,"path":268,"stem":269,"icon":270},"Obsidian: import and export a vault","\u002Fguides\u002Fobsidian","3.guides\u002F44.obsidian","i-lucide-folder-input",{"title":272,"path":273,"stem":274,"icon":275},"Typst: render a Document as a PDF with citations","\u002Fguides\u002Ftypst","3.guides\u002F45.typst","i-lucide-file-text",{"title":277,"path":278,"stem":279,"icon":280},"Audio: read aloud, mixdown and ElevenLabs","\u002Fguides\u002Faudio","3.guides\u002F46.audio","i-lucide-audio-waveform",{"title":282,"path":283,"stem":284,"icon":285},"Slides: decks, slide layouts and exports","\u002Fguides\u002Fslides","3.guides\u002F47.slides","i-lucide-presentation",{"title":287,"path":288,"stem":289,"icon":290},"Knowledge graph: sources and concepts beside the Documents","\u002Fguides\u002Fknowledge-graph","3.guides\u002F49.knowledge-graph","i-lucide-share-2",{"title":292,"path":293,"stem":294,"icon":78},"AI configuration and secrets","\u002Fguides\u002Fai-configuration","3.guides\u002F5.ai-configuration",{"title":296,"path":297,"stem":298,"children":299,"icon":301},"Index on Postgres: typos, meaning and SQL pushdown","\u002Fguides\u002Findex-pg","3.guides\u002F50.index-pg",[300],{"title":296,"path":297,"stem":298,"icon":301},"i-lucide-database-zap",{"title":303,"path":304,"stem":305,"icon":306},"Charts: bar, line, pie and scatter over a query","\u002Fguides\u002Fcharts","3.guides\u002F51.charts","i-lucide-chart-column",{"title":308,"path":309,"stem":310,"icon":73},"Collaboration on the client","\u002Fguides\u002Fcollaboration","3.guides\u002F6.collaboration",{"title":312,"path":313,"stem":314,"icon":315},"Block UI (drag handle, hover actions)","\u002Fguides\u002Fblock-ui","3.guides\u002F7.block-ui","i-lucide-grip-vertical",{"title":317,"path":318,"stem":319,"icon":320},"Settings and app lifetime","\u002Fguides\u002Fsettings","3.guides\u002F8.settings","i-lucide-settings",{"title":322,"path":323,"stem":324,"icon":325},"Language","\u002Fguides\u002Flanguage","3.guides\u002F9.language","i-lucide-languages",{"title":327,"icon":14,"path":328,"stem":329,"children":330,"page":37},"Reference","\u002Freference","4.reference",[331,335,339,344,348,352,356,360,364,368,373,378,382],{"title":332,"path":333,"stem":334,"icon":143},"Public exports","\u002Freference\u002Fexports","4.reference\u002F1.exports",{"title":336,"path":337,"stem":338,"icon":173},"Derive method contract","\u002Freference\u002Fderive-methods","4.reference\u002F10.derive-methods",{"title":340,"path":341,"stem":342,"icon":343},"Changelog","\u002Freference\u002Fchangelog","4.reference\u002F11.changelog","i-lucide-history",{"title":345,"path":346,"stem":347,"icon":217},"Renderer port","\u002Freference\u002Frenderer-port","4.reference\u002F12.renderer-port",{"title":349,"path":350,"stem":351,"icon":255},"Speech port","\u002Freference\u002Fspeech-port","4.reference\u002F13.speech-port",{"title":353,"path":354,"stem":355,"icon":58},"Presets and features","\u002Freference\u002Fpresets-and-features","4.reference\u002F2.presets-and-features",{"title":357,"path":358,"stem":359,"icon":68},"Feature contract","\u002Freference\u002Ffeature-contract","4.reference\u002F3.feature-contract",{"title":361,"path":362,"stem":363,"icon":107},"CSS and UI-provider requirements","\u002Freference\u002Fcss-and-ui","4.reference\u002F4.css-and-ui",{"title":365,"path":366,"stem":367,"icon":148},"Vue-free advanced schema","\u002Freference\u002Fadvanced-schema","4.reference\u002F5.advanced-schema",{"title":369,"path":370,"stem":371,"icon":372},"Dependency rules","\u002Freference\u002Fdependency-rules","4.reference\u002F6.dependency-rules","i-lucide-git-branch",{"title":374,"path":375,"stem":376,"icon":377},"Commands","\u002Freference\u002Fcommands","4.reference\u002F7.commands","i-lucide-terminal",{"title":379,"path":380,"stem":381,"icon":163},"Block capability contract","\u002Freference\u002Fblock-capabilities","4.reference\u002F8.block-capabilities",{"title":383,"path":384,"stem":385,"icon":168},"Block type contract","\u002Freference\u002Fblock-types","4.reference\u002F9.block-types",{"title":387,"path":388,"stem":389,"children":390,"icon":393},"AI agents","\u002Fai-agents","5.ai-agents\u002F1.index",[391,394,398,402,407],{"title":392,"path":388,"stem":389,"icon":393},"Overview","i-lucide-bot",{"title":395,"path":396,"stem":397,"icon":198},"Integrate the editor","\u002Fai-agents\u002Fintegrate","5.ai-agents\u002F2.integrate",{"title":399,"path":400,"stem":401,"icon":68},"Add a block or feature","\u002Fai-agents\u002Fextend","5.ai-agents\u002F3.extend",{"title":403,"path":404,"stem":405,"icon":406},"Pitfalls and invariants","\u002Fai-agents\u002Finvariants","5.ai-agents\u002F4.invariants","i-lucide-shield-alert",{"title":408,"path":409,"stem":410,"icon":411},"Verify","\u002Fai-agents\u002Fverify","5.ai-agents\u002F5.verify","i-lucide-check-check",{"id":413,"title":234,"body":414,"description":1077,"extension":1078,"links":1079,"meta":1080,"navigation":1081,"path":235,"seo":1082,"stem":236,"__hash__":1083},"docs\u002F3.guides\u002F37.export-check.md",{"type":415,"value":416,"toc":1069},"minimark",[417,431,438,453,486,489,548,568,571,607,622,626,644,759,824,827,832,839,843,877,881,893,1046,1065],[418,419,420,421,425,426,430],"p",{},"An AI result is a Typed block that the model wrote. Two things tell that a block still waits for a person: the block has a Derivation made by the model, and nobody has changed or checked it since. The editor derives both facts on every read. Nothing new is stored: the decision of a person is the ",[422,423,424],"a",{"href":186},"Prüfung"," (a record pinned to a content hash), and the status is the derived ",[427,428,429],"strong",{},"Freigabestatus",".",[432,433,435],"h2",{"id":434},"vorgeschlagen",[436,437,434],"code",{},[418,439,440,441,444,445,448,449,452],{},"A block is an ",[427,442,443],{},"AI proposal"," when all of these hold (",[436,446,447],{},"isAiProposal(editor, node)",", ",[436,450,451],{},"@skaile\u002Fforge-editor\u002Fcomposites","):",[454,455,456,480],"ul",{},[457,458,459,460,463,464,467,468,471,472,475,476,479],"li",{},"its Derivation names the model as author: ",[436,461,462],{},"method"," starts with ",[436,465,466],{},"ai:"," (as ",[436,469,470],{},"derive"," and ",[436,473,474],{},"composite-fill"," write it), or ",[436,477,478],{},"activity.agent"," is set;",[457,481,482,485],{},[436,483,484],{},"outputHash"," is not empty and equals the SHA-256 of the block's body Markdown now, so nobody has edited the body since the model wrote it.",[418,487,488],{},"The Freigabestatus of a block, per kind, gains one value:",[490,491,492,505],"table",{},[493,494,495],"thead",{},[496,497,498,502],"tr",{},[499,500,501],"th",{},"Per kind",[499,503,504],{},"Meaning",[506,507,508,519,529,538],"tbody",{},[496,509,510,516],{},[511,512,513],"td",{},[436,514,515],{},"geprueft",[511,517,518],{},"a record of this kind exists at the current hash",[496,520,521,526],{},[511,522,523],{},[436,524,525],{},"veraltet",[511,527,528],{},"records of this kind exist, none at the current hash",[496,530,531,535],{},[511,532,533],{},[436,534,434],{},[511,536,537],{},"no record of this kind, and the block is an AI proposal",[496,539,540,545],{},[511,541,542],{},[436,543,544],{},"offen",[511,546,547],{},"no record of this kind, and the block is not an AI proposal",[418,549,550,551,553,554,556,557,559,560,563,564,567],{},"The order of the cases is fixed: a record decides first. An edit of the body ends the proposal, so the kind reads ",[436,552,544],{},", not ",[436,555,434],{},": the person who edits has taken the text over, and the Prüfung that follows pins their version. A block that is ",[436,558,434],{}," counts as open in ",[436,561,562],{},"freigabeOf",": the document is ",[436,565,566],{},"freigegeben"," only after every such block has a Prüfung.",[418,569,570],{},"Where it shows:",[490,572,573,583],{},[493,574,575],{},[496,576,577,580],{},[499,578,579],{},"Where",[499,581,582],{},"What",[506,584,585,599],{},[496,586,587,590],{},[511,588,589],{},"Chip after the title",[511,591,592,593,595,596,598],{},"„KI-Vorschlag“ (warning) while a kind is ",[436,594,434],{}," and none is ",[436,597,525],{},"; „Prüfung veraltet“ and „Geprüft“ keep their rules",[496,600,601,604],{},[511,602,603],{},"Section „Prüfstand“",[511,605,606],{},"the kind line reads „KI-Vorschlag“",[418,608,609,610,613,614,617,618,621],{},"Only blocks whose Block type lists the ",[436,611,612],{},"pruefung"," capability have a Freigabestatus. ",[436,615,616],{},"PruefungKindStatus"," is ",[436,619,620],{},"'geprueft' | 'veraltet' | 'offen' | 'vorgeschlagen'","; a host that switches over it adds the case.",[432,623,625],{"id":624},"the-export-check","The export check",[418,627,628,629,632,633,635,636,639,640,643],{},"Before a Typed block is exported as Markdown the editor looks for what a reader of the file could trip over. ",[436,630,631],{},"exportIssuesOf(editor, node)"," (",[436,634,451],{},") returns one ",[436,637,638],{},"ExportIssue"," per finding, for ",[436,641,642],{},"node"," and every Typed block inside it, in document order:",[645,646,651],"pre",{"className":647,"code":648,"language":649,"meta":650,"style":650},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","interface ExportIssue {\n  \u002F** The Typed block the finding concerns (for a reference chip, the block that holds the chip). *\u002F\n  blockId: string\n  code: 'ai-unchecked' | 'stale-derived' | 'source-missing' | 'unresolved-reference'\n  \u002F** Title of that block. *\u002F\n  title: string\n}\n","ts","",[436,652,653,670,677,690,737,743,753],{"__ignoreMap":650},[654,655,658,662,666],"span",{"class":656,"line":657},"line",1,[654,659,661],{"class":660},"spNyl","interface",[654,663,665],{"class":664},"sBMFI"," ExportIssue",[654,667,669],{"class":668},"sMK4o"," {\n",[654,671,673],{"class":656,"line":672},2,[654,674,676],{"class":675},"sHwdD","  \u002F** The Typed block the finding concerns (for a reference chip, the block that holds the chip). *\u002F\n",[654,678,680,684,687],{"class":656,"line":679},3,[654,681,683],{"class":682},"swJcz","  blockId",[654,685,686],{"class":668},":",[654,688,689],{"class":664}," string\n",[654,691,693,696,698,701,705,708,711,713,716,718,720,722,725,727,729,731,734],{"class":656,"line":692},4,[654,694,695],{"class":682},"  code",[654,697,686],{"class":668},[654,699,700],{"class":668}," '",[654,702,704],{"class":703},"sfazB","ai-unchecked",[654,706,707],{"class":668},"'",[654,709,710],{"class":668}," |",[654,712,700],{"class":668},[654,714,715],{"class":703},"stale-derived",[654,717,707],{"class":668},[654,719,710],{"class":668},[654,721,700],{"class":668},[654,723,724],{"class":703},"source-missing",[654,726,707],{"class":668},[654,728,710],{"class":668},[654,730,700],{"class":668},[654,732,733],{"class":703},"unresolved-reference",[654,735,736],{"class":668},"'\n",[654,738,740],{"class":656,"line":739},5,[654,741,742],{"class":675},"  \u002F** Title of that block. *\u002F\n",[654,744,746,749,751],{"class":656,"line":745},6,[654,747,748],{"class":682},"  title",[654,750,686],{"class":668},[654,752,689],{"class":664},[654,754,756],{"class":656,"line":755},7,[654,757,758],{"class":668},"}\n",[490,760,761,774],{},[493,762,763],{},[496,764,765,768,771],{},[499,766,767],{},"Code",[499,769,770],{},"When",[499,772,773],{},"Label",[506,775,776,788,800,812],{},[496,777,778,782,785],{},[511,779,780],{},[436,781,704],{},[511,783,784],{},"the block is an AI proposal and still waits for a Prüfung (see the check probe below)",[511,786,787],{},"„KI-Vorschlag ungeprüft“",[496,789,790,794,797],{},[511,791,792],{},[436,793,715],{},[511,795,796],{},"the block is Derived and its original changed since it was made",[511,798,799],{},"„Quelle geändert“",[496,801,802,806,809],{},[511,803,804],{},[436,805,724],{},[511,807,808],{},"the block is Derived and its original is gone",[511,810,811],{},"„Quelle fehlt“",[496,813,814,818,821],{},[511,815,816],{},[436,817,733],{},[511,819,820],{},"a reference chip points at a Block that does not exist",[511,822,823],{},"„Verweis ohne Ziel“",[418,825,826],{},"The check hashes and serialises bodies. It runs when someone exports or opens the inspector section, not for every row.",[828,829,831],"h3",{"id":830},"the-export-never-waits","The export never waits",[418,833,834,835,838],{},"The block action „Als Markdown exportieren“ (",[436,836,837],{},"document-export",") runs the check first. With one or more findings it shows a warning notice („1 Hinweis“, „n Hinweise“) that points at the inspector, and it exports anyway. The check informs, it never blocks.",[828,840,842],{"id":841},"the-inspector-section","The inspector section",[418,844,845,846,849,850,853,854,857,858,861,862,471,865,868,869,872,873,876],{},"The composites bindings add the section ",[427,847,848],{},"„Export-Hinweise“"," (id ",[436,851,852],{},"export-check",") to the Typed block inspector and the details card, for every Block type that lists the ",[436,855,856],{},"export"," capability. It lists the findings with their label and the block title, or „Keine Hinweise“. It follows document changes and Prüfung records. ",[436,859,860],{},"ExportCheckSection"," is exported from ",[436,863,864],{},"@skaile\u002Fforge-editor\u002Fcomposites\u002Fvue",[436,866,867],{},"@skaile\u002Fforge-editor\u002Fcomposites\u002Freact",". A host that builds ",[436,870,871],{},"compositeFeatureCore"," itself passes the component as ",[436,874,875],{},"CompositesUi.exportCheck","; without it the Feature adds no section (the notice stays).",[432,878,880],{"id":879},"who-tells-that-a-block-is-checked","Who tells that a block is checked",[418,882,883,885,886,888,889,892],{},[436,884,704],{}," needs to know whether a Prüfung exists, and the composites Feature does not know the ",[436,887,612],{}," Feature. A Feature that records checks provides a ",[427,890,891],{},"check probe"," for its editor:",[645,894,896],{"className":647,"code":895,"language":649,"meta":650,"style":650},"import { provideCheckProbe } from '@skaile\u002Fforge-editor\u002Fcomposites'\n\nconst unprovide = provideCheckProbe(editor, {\n  \u002F\u002F true while the block still waits for a check\n  awaitsCheck: (_editor, node) => !myChecks.has(node.attrs.id),\n  \u002F\u002F optional: the answer changed without a document change (the inspector section draws again)\n  subscribe: listener => myChecks.subscribe(listener),\n})\n",[436,897,898,923,929,951,956,1007,1012,1037],{"__ignoreMap":650},[654,899,900,904,907,911,914,917,919,921],{"class":656,"line":657},[654,901,903],{"class":902},"s7zQu","import",[654,905,906],{"class":668}," {",[654,908,910],{"class":909},"sTEyZ"," provideCheckProbe",[654,912,913],{"class":668}," }",[654,915,916],{"class":902}," from",[654,918,700],{"class":668},[654,920,451],{"class":703},[654,922,736],{"class":668},[654,924,925],{"class":656,"line":672},[654,926,928],{"emptyLinePlaceholder":927},true,"\n",[654,930,931,934,937,940,943,946,949],{"class":656,"line":679},[654,932,933],{"class":660},"const",[654,935,936],{"class":909}," unprovide ",[654,938,939],{"class":668},"=",[654,941,910],{"class":942},"s2Zo4",[654,944,945],{"class":909},"(editor",[654,947,948],{"class":668},",",[654,950,669],{"class":668},[654,952,953],{"class":656,"line":692},[654,954,955],{"class":675},"  \u002F\u002F true while the block still waits for a check\n",[654,957,958,961,963,965,969,971,974,977,980,983,986,988,991,994,996,999,1001,1004],{"class":656,"line":739},[654,959,960],{"class":942},"  awaitsCheck",[654,962,686],{"class":668},[654,964,632],{"class":668},[654,966,968],{"class":967},"sHdIc","_editor",[654,970,948],{"class":668},[654,972,973],{"class":967}," node",[654,975,976],{"class":668},")",[654,978,979],{"class":660}," =>",[654,981,982],{"class":668}," !",[654,984,985],{"class":909},"myChecks",[654,987,430],{"class":668},[654,989,990],{"class":942},"has",[654,992,993],{"class":909},"(node",[654,995,430],{"class":668},[654,997,998],{"class":909},"attrs",[654,1000,430],{"class":668},[654,1002,1003],{"class":909},"id)",[654,1005,1006],{"class":668},",\n",[654,1008,1009],{"class":656,"line":745},[654,1010,1011],{"class":675},"  \u002F\u002F optional: the answer changed without a document change (the inspector section draws again)\n",[654,1013,1014,1017,1019,1022,1024,1027,1029,1032,1035],{"class":656,"line":755},[654,1015,1016],{"class":942},"  subscribe",[654,1018,686],{"class":668},[654,1020,1021],{"class":967}," listener",[654,1023,979],{"class":660},[654,1025,1026],{"class":909}," myChecks",[654,1028,430],{"class":668},[654,1030,1031],{"class":942},"subscribe",[654,1033,1034],{"class":909},"(listener)",[654,1036,1006],{"class":668},[654,1038,1040,1043],{"class":656,"line":1039},8,[654,1041,1042],{"class":668},"}",[654,1044,1045],{"class":909},")\n",[418,1047,1048,1049,1051,1052,1054,1055,1057,1058,1060,1061,1064],{},"The ",[436,1050,612],{}," Feature does this for its model: a block awaits a check while any configured kind is not ",[436,1053,515],{},". A block whose Block type has no kind awaits nothing, so it is never listed as ",[436,1056,704],{},". Without any probe every AI proposal is ",[436,1059,704],{},". ",[436,1062,1063],{},"provideCheckProbe"," returns the function that removes the probe; call it when the editor goes away.",[1066,1067,1068],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":650,"searchDepth":672,"depth":672,"links":1070},[1071,1072,1076],{"id":434,"depth":672,"text":434},{"id":624,"depth":672,"text":625,"children":1073},[1074,1075],{"id":830,"depth":679,"text":831},{"id":841,"depth":679,"text":842},{"id":879,"depth":672,"text":880},"Show unchecked AI results as „KI-Vorschlag“ in the Freigabestatus, list what to look at before a Typed block is exported, and register your own check source.","md",null,{},{"icon":163},{"title":234,"description":1077},"3OZnHobVR_eUz5Z2cBvTZtkSp5HiqwKN2c28OxIH89Q",[1085,1087],{"title":229,"path":230,"stem":231,"description":1086,"icon":232,"children":-1},"Cite a bibliography entry of the Document with the inline cite node: insert it with \u002Fzitat, read it as (Autor Jahr), and keep it through Markdown export and import.",{"title":238,"path":239,"stem":240,"description":1088,"icon":241,"children":-1},"The DataQuery model, its pseudo-fields and operators per property kind, the evaluator, the BlockIndex.query port method, the route, the client call and the find_blocks tool.",1793219828650]