Diagnostics and verification
Diagnose source fallback, rejected commands, resource leaks and interaction regressions.
Start with a reproducible source file
Include raw Markdown, installed extensions/options, mode, permission, versions and reproduction steps. Rendered HTML alone loses spelling, fence closure and selection details that may determine behavior.
Preserve unsaved source before reducing the extension set. Source mode helps confirm text integrity. Do not mask a problem by recreating the instance and discarding history.
Diagnosis table
| Symptom | First checks |
|---|---|
| Syntax remains source | Installation, closing delimiter, registered name, pending parse |
| A node displays but cannot edit | Validation, implemented patch, permission, stale range |
| Component never appears | Correct renderer and Host under the Provider tree |
| Custom code block shows only a toolbar | Header NodeView versus whole-block projection |
| Duplicate components or installation errors | Original StarterKit owner plus same-name derivative |
| Language has no highlighting | Exact registry name/alias and loader outcome |
| Empty chart | Container dimensions, validated data, engine status |
| Cursor jumps during composition | DOM mutation, focus stealing or instance recreation |
| Dialog writes to the wrong location | Missing target or cached numeric offsets |
| Readonly still offers replacement | Effective permission and final command result |
Observe errors and semantics
const options = {
onError(error: unknown) { console.error('MSFE integration error', error) },
}
const query = editor.querySource('customContainer')
const outcome = editor.lastCommandResult
const work = editor.work
Connect errors to host development diagnostics and UI boundaries. Do not send document content, credentials or editor objects to external logs. Command rejection is often a handled result, not an exception.
Distinguish pending from unsupported queries. Compare work-count deltas for one action; cumulative counters are not timings. Inspect projectionConflicts when replacements compete.
Minimum verification matrix
| Area | Exercise | Invariant |
|---|---|---|
| Source | Load, switch modes, render | Exact text unchanged without writes |
| Patches | Edit, undo, redo | Only intended ranges change; spelling restores |
| Input | Composition, partial tokens, paste | Native input retained; incomplete syntax stays source |
| Selection | Pointer, keyboard, drag, search | Correct source targeting throughout interaction |
| Permissions | Readonly source/live and locked | Components cannot bypass write protection |
| Lifetime | Rapid changes, unmount, replacement | No stale results or leaked resources |
| Visual | Both themes, narrow layout, enlarged text | Tokens and accessible controls |
| Performance | Cursor motion, local edits, long files | No unrelated full scans or remounts |
Use the examples as a starting point
Interactive examples and displayed source share the same files. Publication validates local dependencies and checks Vue/TypeScript examples. Recipes requiring a server explicitly identify that dependency instead of simulating a successful backend.
Run the documented acceptance actions before adding fields and requests. Consult Support rather than disabling source, selection or permission protection to make a screenshot look correct.