v0.8.0 — @dualmark/deno + status-page converter + CLI v1.0 JSON
Highlights
Three things land in this release:
- New package:
@dualmark/deno— a Deno Deploy edge adapter that wraps any Denofetchhandler. AI bots get the markdown twin at the edge; lifecycle hooks (analytics/telemetry) are scheduled oninfo.completed.examples/deno-deployscores a perfect 125/125 underdeno run. - New converter:
status-page— a built-in converter for public uptime/status pages (component health + incidents). Dropconverter: "status-page"into an Astro or Next.js collection and status pages get the same battle-tested markdown layout as the rest. - Stable
dualmark verify --json—@dualmark/clinow emits the public AEO Spec v1.0 JSON contract instead of the internal report shape. See the migration note below.
No breaking API changes for the framework adapters. Drop-in upgrade from 0.7.x. The whole @dualmark/* family moves to 0.8.0 together (linked versioning).
What's new
@dualmark/deno@0.8.0 (new)
- Deno Deploy edge adapter (
6a6bf8a) — wraps any upstream Deno fetch handler, serves markdown to known AI bots at the edge, and schedules lifecycle hooks oninfo.completed. - 23 tests pass. Integration docs included.
@dualmark/converters@0.8.0
- New:
statusPageConverter(dd0512c, closes #12) for uptime/status pages — public component health plus incident history, with the standard brand-footer + breadcrumb conventions. - Registered as the built-in
status-pageresolver in@dualmark/astroand@dualmark/nextjs— no config beyondconverter: "status-page". - Separators in the status converter now render conditionally (
b2d925e).
@dualmark/cli@0.8.0
-
verify --jsonnow emits the AEO Spec v1.0 JSON contract (65ab17e) and enforces--jsonmutual exclusivity with--quiet/--color. Required-check failures still exit non-zero.Migration note:
--jsonpreviously emitted the internalVerifyReportshape (mdUrl,maxScore,passed[],failed[],skippedNegotiation). It now emits the v1.0 public schema (url,markdownUrl,score,max,level,skippedNegotiation,durationMs,checks[]) with checks in canonical evaluation order. Update any CI parsing that read the old field names.
@dualmark/core@0.8.0, @dualmark/astro@0.8.0, @dualmark/nextjs@0.8.0, @dualmark/cloudflare@0.8.0
Version bumps to keep the linked @dualmark/* family in lockstep (and to register the status-page resolver in astro / nextjs). No API changes.
Upgrade
# Astro
bun add @dualmark/astro@^0.8.0
# Next.js
bun add @dualmark/nextjs@^0.8.0
# Cloudflare
bun add @dualmark/cloudflare@^0.8.0
# Deno (new!)
bun add @dualmark/deno@^0.8.0
# CLI
bun add -g @dualmark/cli@^0.8.0To use the new status-page converter:
// astro.config.mjs
dualmark({
siteUrl: "https://yourcompany.com",
collections: {
status: { converter: "status-page" }, // ← new
},
});Verified
- ✅ All package tests pass across
@dualmark/*(build 7/7, test 7/7, typecheck 7/7) - ✅ Conformance E2E:
examples/deno-deploy125/125,examples/astro-cloudflare-full125/125,examples/nextjs-app-router120/125