Checks run themselves
Content checks run automatically when a change set changes, and appear as pending before they do. Custom checks get a settings screen, and published reads got faster.
Automatic runs
Editing a change set schedules a check run. A burst of edits coalesces into one run a few seconds later, and the run reads the change set fresh when it fires, so results are usually waiting by the time you open it.
$ myna changes checks chs_01...
CHECK STATUS STALE ISSUES
schema passed no 0
references passed no 0
seo pending no 0
Checks that have not produced a verdict yet are listed as pending rather than left out, so a gate you have to satisfy is never invisible. A result goes stale the moment the contents move underneath it, with a fresh run already queued. myna changes checks --run still forces one immediately when you do not want to wait out the debounce.
Custom checks in settings
Project settings → Checks lists the built-in suite with what each one verifies, and lets you declare, edit, and remove your own:
$ myna checks declare link-check --description "No broken links in staged copy" --required
Declared checks appear on every change set as pending until their reporter posts. Marking one required blocks publishing until it passes on the current contents.
Faster reads
Project configuration is cached behind a short TTL and invalidated on write. Usage is counted in memory and flushed on an interval. Backlink queries use an indexed lookup. Entry lists resolve a collection key and revision once per page rather than once per row.
Upload and delivery rules
Uploads refuse active document types — HTML, XHTML, SVG, XML, and scripts — by both content type and extension. The check ignores parameters, so image/svg+xml; charset=utf-8 is refused like image/svg+xml. Use raster formats for images.
Delivery serves a narrower allowlist inline: images, audio, video, PDF, plain text, CSV, Markdown, and web fonts. Anything else is served as a download.
Fixes
- Reviews and comments carry a resolved identity: display name, username, and avatar for a person, or the key's name for an API key.
reviewerIdandauthorIdare unchanged as the stable key. - Cursor pagination no longer repeats a row at page boundaries.
- Filtering entries by status is part of the query, so a page is full whenever more matching rows exist.
Upgrading
$ npm install @myna-sh/[email protected]
One breaking type change. A check can be pending, so id, runId, itemsFingerprint, ranByType, and createdAt are nullable and status gained "pending". Narrow on status first:
if (check.status !== "pending") {
console.log(check.id, check.createdAt);
}
Nothing fails at runtime on an older client. Reporting a check result still takes passed, failed, or skipped.
Affects api · dashboard · sdk · cli · mcp · docs
