Skip to content

Latest commit

 

History

History
345 lines (222 loc) · 30.7 KB

File metadata and controls

345 lines (222 loc) · 30.7 KB

@open-press/core

3.0.3

Patch Changes

  • 2b64a11: Reclaim the workbench canvas with on-demand controls, a persisted bookmarks-panel toggle, and consistent icon-only toolbar actions for export, document information, zoom, and extension tools.
  • 8ffa2a4: Keep the Workbench on the same H3 section, with an H2 fallback, when AI or inline edits repaginate a document.
  • f450eaf: Fix Workbench inline editing for Markdown table cells by preserving the selected cell index through the source-edit endpoint.
  • 8d42c06: Add persisted Workspace appearance controls, a resizable bookmarks panel, and a centralized keyboard shortcut registry with a read-only shortcut reference.
  • 137db83: Keep Workbench zoom preferences independent per Press and keep the zoom dock available when the bookmarks panel is collapsed.

3.0.2

Patch Changes

  • a58fbb1: Persist Reader and Workbench zoom preferences, preserve page-relative reading position, add a shared zoom dock with custom 25–200% controls, and keep oversized pages horizontally reachable.

3.0.1

Patch Changes

  • 552abcd: Fix local multi-Press PDF exports, validate PDF page selections, and harden local workbench mutation endpoints.

3.0.0

Major Changes

  • 079d75c: Improve local export flows with a Word DOCX options dialog, high-fidelity visual DOCX output, selected-page export plumbing, IME-safe editor key handling, and corrected PDF print layout that no longer inserts blank pages between rendered pages.

    Remove legacy compatibility surfaces: BaseCallout is no longer exported, bare /<press-slug> workspace routes no longer resolve as preview routes, pagination overflow warnings now use the region-shaped schema directly, CSS theme collection no longer expands local @import rules, and unused workspace/slide CSS selectors have been pruned.

Patch Changes

  • 079d75c: Add standard slide and document theme profiles with built-in color and typography roles while preserving extension tokens.

    Remove unused UI helper dependencies from @open-press/core as part of the theme cleanup.

2.0.5

Patch Changes

  • 36726b0: Add standard slide and document theme profiles with built-in color and typography roles while preserving extension tokens.

    Remove unused UI helper dependencies from @open-press/core as part of the theme cleanup.

2.0.4

Patch Changes

  • 4fcd954: Clean the workspace object authoring API around frame keys, labels, theme tokens, and slide template scaffolds.

2.0.3

Patch Changes

  • 3674b30: Improve page pagination, table flow, local font assets, and Public Reader E2E coverage.

2.0.2

Patch Changes

  • 9edc747: Finalize the release-bound Press CSS and skill boundary: scope exported CSS per Press, keep generic page shell/prose/print behavior framework-owned, retire bundled starter skills from the active catalog, and document custom Press geometry for project-specific formats.

2.0.1

2.0.0

Major Changes

  • Move the slide and workbench styling direction to Tailwind-first authoring. OpenPress now wires the Tailwind v4 Vite plugin into the package-owned runtime, ships a shared op-* slide styling layer, and keeps Preflight disabled so existing reader/workbench CSS contracts remain stable.
  • Introduce the slide template protocol as the recommended slide authoring surface. Dogfood slide content now composes protocol compound slots instead of owning raw slide markup, which gives agents a smaller and more repeatable API for deck generation.
  • Remove large legacy runtime CSS files in favor of React-owned class constants and protocol/Tailwind utilities. Legacy document theme CSS remains supported where needed, but new visual work should live in components.

Patch Changes

  • Preserve multi-Press export, deploy, image export, and pagination fixes from the 1.x line while preparing the 2.0 runtime package boundary.

1.2.1

Patch Changes

  • 10130dd: Fix multi-press deploy: the dev server's deploy endpoint now reads the press slug from the request body and passes --press <slug> to the CLI. Previously the slug was ignored, causing the PDF export step to load the gallery (0 pages observed) and time out instead of exporting the correct press.

1.2.0

Minor Changes

  • 0f01b4b: The public reader's toolbar now ships a search button that works on deployed (static) pages, not just dev. The React render pipeline emits a workspace-wide <outputDir>/openpress/search-corpus.json containing every content source file's raw text; the public viewer lazy-loads it on first query and runs the same literal-match logic the dev /__openpress/search endpoint uses, all in the browser. SearchControl becomes pluggable via a new searcher prop — the workbench keeps the live HTTP searcher (unchanged), the public viewer passes a static-corpus searcher. The corpus is small (raw MDX text only, no AST), shipped uncompressed for cache-friendliness, and cached for the lifetime of the page after the first search.
  • d97f282: The public reader (deployed-page) now renders through the same <WorkbenchShell> as the workbench, replacing the bespoke FAB + right-drawer layout. The public toolbar holds the PDF link, page-geometry label, and zoom / single-vs-spread controls; the left panel holds the document identity, chapter bookmarks, and current-page summary. The right panel is omitted in public mode (comments + project entry remain workbench-only) — WorkbenchShell gains a withRightPanel opt-out and a publicViewer marker prop so the outer <main> keeps its data-openpress-public-viewer attribute for CSS / integration targeting. Search is intentionally not wired here; the live /__openpress/search endpoint only exists in dev. A follow-up patch will add a build-time static index so search can ship to deployed pages.

Patch Changes

  • b4248f6: Internal cleanup of legacy devMode naming left over from the removed ?dev=1 URL toggle. The workbench internals now consistently use workspaceMode (the path-based detector in runtimeMode.ts) for the prop name across HtmlWorkbench, WorkbenchShell, and useInspectorComments. The dead data-dev-mode DOM attribute (set on <main class="openpress-workbench"> but never queried by CSS or any selector) and the unused devMode prop on <PublicPage> are removed. No public API change — HtmlWorkbench and friends are documented as workbench internals — and the openpress-dev-* legacy CSS class names are retained because they remain load-bearing in public-viewer.css / responsive.css.

  • 7ba9434: openpress pdf and openpress image now accept --press <slug> to target a specific Press in a multi-Press workspace. The slug is validated against the workspace manifest (<outputDir>/openpress/workspace.json) before launching Chrome — unknown slugs print the list of known slugs and exit instead of timing out on a blank document. Output is automatically suffixed with the slug (document-slide.pdf, images-slide/page-001.png) so multiple Presses can be exported side-by-side without overwriting each other. The previous default behavior (no --press) is unchanged: exports the first Press declared in <Workspace>. Also fixes a stray [object Object] page count in the success log left over from the readiness-result shape change in 1.1.5.

  • c11b33b: Two narrow-viewport / non-A4 export fixes.

    • Drawer panels no longer flicker closed when toggled below the breakpoint. usePanelState's resize listener was re-subscribed on every state change, so the moment a user opened a left/right drawer in a narrow viewport (e.g. a portrait PDF preview tab) the effect re-ran, called handleResize synchronously, saw "open + below breakpoint", and immediately closed the panel the user had just opened. The handler now reads the current state through a ref so the listener stays subscribed across toggles and only the actual resize event drives the auto-close behavior.
    • PDF / image export now sizes the headless viewport to the document's page geometry instead of pinning it to 1200×1698. Slide presses (16:9, 1920×1080) and other non-A4 documents were being rendered at a viewport narrower than the page, so right-side content was clipped in the rendered DOM and shipped clipped to the PDF. After navigating to the print URL the engine now reads --openpress-page-width / --openpress-page-height (resolving any CSS unit through a hidden helper element), and calls Emulation.setDeviceMetricsOverride to widen the viewport before pagination kicks in. Existing A4 documents stay unchanged.
  • 9c6fd9b: Two fixes for the slide presenter Esc / fullscreen flow.

    • Esc no longer navigates out of the slide presenter. Pressing Esc in fullscreen previously called the browser's fullscreen-exit (correct) and delivered the same keystroke to our keydown handler, which fell through to onExitPresentation and dropped the user out of the presenter entirely. The chrome HUD already exposes an explicit close button, so Esc is now reserved purely for exiting fullscreen — the windowed presenter stays mounted with its re-enter-fullscreen and close buttons visible.
    • OpenPressRuntime re-evaluates location-derived modes on client-side navigation. workspaceMode, printMode, and activeRuntimeMode were memoized with [] deps, so a SPA navigation from /<slug>/present to /<slug>/preview (the exit-presentation flow) kept the stale workspaceMode=false from mount and rendered the legacy PublicViewer (with its leftover floating bookmark button) instead of the workbench. A new route-version hook patches history.pushState / replaceState and listens for popstate / hashchange to bump a counter the memos depend on.
  • 99d7c34: Fix workbench PDF export in multi-Press workspaces. Clicking the PDF button while viewing a non-default Press (e.g. `/slide/preview`) used to POST to `/__openpress/local-pdf-export` without any slug, so the CLI defaulted to exporting the first Press by navigating to `/?print=1` — which renders the gallery, not a print document — and the readiness probe timed out at "observed 0 page(s), 0 overflowing". The workbench now threads the active Press slug from `OpenPressApp` → `OpenPressRuntime` → `HtmlWorkbench` → `useDeploymentWorkbench`, the local-pdf-export endpoint accepts a JSON body with a `press` field, passes it to the CLI as `--press `, and the file-serving endpoint accepts the slug as a query string so the slug-suffixed PDF (`document-.pdf`) is what gets streamed back to the workbench.

1.1.4

Patch Changes

  • 408f6f4: Three improvements to large-document export:
    • Stop letting page overflow block PDF / image export. waitForPrintReady used to declare ready only when every page fit perfectly, so a single overflowing row stalled the entire export until the deadline expired and the run reported a misleading "pagination timed out". Readiness is now driven by layout stability (page count and overflow signature stay unchanged for OPENPRESS_PRINT_READY_STABLE_MS, default 300 ms). Overflow no longer gates the export — it logs a single warning with the affected page numbers so authors can fix the source.
    • Replace the hard 30s deadline with a progress-aware idle window + hard cap. OPENPRESS_PRINT_READY_IDLE_MS (default 30s) and OPENPRESS_PRINT_READY_TIMEOUT_MS (default 5 min) tune the no-progress / total-time guards; inspection ships the equivalent OPENPRESS_INSPECTION_IDLE_MS / OPENPRESS_INSPECTION_TIMEOUT_MS. Timeout errors now include the last observed page count and overflowing-page count, so genuine stalls are easy to tell apart from a slow-but-progressing render.
    • openpress image accepts --pages <selector> to export a subset of pages: comma-separated singles, closed ranges (3-7), and open-ended ranges (15-, -5) are all supported. Filenames keep the original page index (e.g. page-005.png) so slices stay unambiguous.

1.1.3

Patch Changes

  • 39bbf0d: Drop the inspector / inline-edit outline chrome in the reader runtime so hovering and selecting blocks no longer paints outlines or runs transitions; the cursor (crosshair / text / pointer) is now the sole mode indicator, keeping the rendered page visually stable while tools are open.
  • 68435a1: Document and ship the Text object contract, including automatic source-range mapping for literal TSX text so slide/card/canvas copy can be commented on and inline-edited without hand-written source refs.
  • 2eac5df: Add slide Press presentation routing with a dedicated single-page presenter, new-tab fullscreen entry, and immersive chrome-hidden mode.

1.1.2

Patch Changes

  • 11dbcb1: Fix workbench routing and slide thumbnail overflow. The dev URL now opens /workspace, document previews use /<press-slug>/preview, and thumbnail navigation scrolls within the left panel without overlapping the page counter.

1.1.1

Patch Changes

  • Generate a package-owned TypeScript project config for workspaces that do not vendor tsconfig.json.

1.1.0

Minor Changes

  • Move OpenPress workspaces to a package-owned runtime model.

    The CLI now scaffolds a workspace that depends on @open-press/core and @open-press/cli instead of copying framework internals such as engine/, src/openpress/, index.html, and vite.config.ts into the user project. Runtime commands exposed by open-press delegate into @open-press/core, whose packaged Vite entry, browser shell, render engine, and static server are used directly from node_modules.

1.0.0

Major Changes

  • 8c528ad: 1.0 contract release. Breaking changes:
    • <Workspace> is now required at the root of press/index.tsx; <Press> lives as a child, and multi-Press workspaces are first-class (each <Press> exports to /openpress/<slug>/document.json).
    • Document metadata (title / subtitle / organization / page / sources / captionNumbering) moves onto <Press> JSX props. export const config and export const sources are removed.
    • openpress.config.mjs is removed. Operational settings (deploy / pdf) live in the workspace package.json under the "openpress" field; paths are convention (press/, press/<slug>/chapters/, press/theme/, public/openpress/, dist-react/).
    • Workspace folder renamed from document/press/. The dogfood and starter skills are migrated.
    • Reader gains a workspace gallery for multi-Press projects, per-page PNG export, page thumbnails for canvas-style Press, and a back-to-workspace button.
    • New built-in page presets a4, social-square, slide-16-9 and improved scaffold metadata propagation.

0.8.0

Minor Changes

  • Workbench architecture: the monolithic workbench.tsx is split into a modular structure under workbench/{shell,panels,actions,inspector,mentions,project,document}/. New panels: DeploymentControl, SearchControl, PendingCommentsPanel, DocumentPanel, ProjectEntryPanel, plus WorkbenchShell and InlineInspectorLayer.
  • Module reorganization: source tree split into typed subdirectories:
    • app/: OpenPressApp, OpenPressRuntime (replaces the old App.tsx + renderer.tsx)
    • document-model/: anchorMap, documentIndexes, documentTypes, objectEntityModel, projectIdentity, reactDocumentMetadata
    • reader/: PublicReaderPage, ReaderNavigationPanel, useReaderRuntime, registry/route/scroll/state helpers
    • shared/: frameScheduler, runtimeMode, Panel, numberUtils
  • Object-entity model: Frame and MdxArea now expose data-openpress-object-id. New document-model/objectEntityModel defines the id format.
  • MediaFigure / ImageFigure: new core primitives that accept src/alt/caption and resolve relative paths to /openpress/media/... automatically.
  • <Sections> default page: page prop becomes optional; when omitted the built-in DefaultSectionPage renders the standard manuscript frame.
  • Engine helpers: new engine/react/{http-json,object-entities,source-edit-endpoint}.mjs and engine/runtime/{file-walk,path-utils}.mjs runtime helpers. engine/runtime/source-text-tools exports TypeScript definitions.
  • Dev endpoints: vite plugin wires /__openpress/search and /__openpress/source-edit middlewares for the new workbench search + inline editing flows.
  • Inline source editor: ships the InlineSourceEditorLayer UI on top of useInlineDocumentEditor + /__openpress/source-edit. The hook now uses a MutationObserver so newly inserted blocks become editable, and routes mouse clicks through focus() to preserve selection on contenteditable boundaries. Workbench wires sourceEditorTarget state into the layer.
  • Table editing in the source pipeline: table captions are emitted as standalone source blocks (kind=element, name=caption, layout="attached") with data-openpress-block-id/data-openpress-object-id markers and preserved source positions; the allocator treats layout="attached" blocks as non-paginable. applySourceBlockTableCellEditToText (in engine/runtime/source-text-tools) accepts a cellIndex so the inline source editor can target a single <td>.
  • Reader pagination: arrow-key pagination now defers to the user's active text selection. Shift-arrow / mouse-drag selections no longer get swallowed by the page-turn shortcut.
  • Page zoom + spread layout: new reader/pageViewportScaleModel + usePageViewportScale hook drive a --openpress-page-viewport-scale CSS variable on the page container; the workbench toolbar exposes a PageZoomControl dropdown with fit-width / fit-page / fixed percentages plus a one-page / two-page spread toggle.
  • Inspector cell-precision comments: CommentDraft gains an optional targetObjectId so a comment can point at a sub-block (e.g. a single table cell) while still attributing the source position to its enclosing block. formatInspectorHint carries the value through to the wire hint.
  • Shared WorkbenchDialog shell: portal + backdrop + header (eyebrow / title / title-meta / close) + optional footer. DeploymentControl, SearchControl, and ProjectPreviewDialog all render through this shell now, replacing the prior per-dialog scaffolding under openpress-deploy-dialog-* / openpress-search-dialog-* / openpress-project-preview-dialog__*.
  • WorkbenchControlPanel registry: HtmlWorkbench now accepts an extraControlPanels?: WorkbenchPanel[] prop and renders the right-side panel from a { id, render } registry. Built-in panels (pending comments, project entry) ship as the first entries.
  • Workbench state hooks: extract useDeploymentWorkbench and useInspectorComments from HtmlWorkbench; useReaderRuntime is split into focused sub-hooks (usePanelState, useReaderScrollAnchor, useReaderHashSync, useReaderKeyboardNav).
  • InlineInspectorLayer memoization: now wrapped in React.memo with a stable geometryVersion prop so the geometry / event listeners no longer rebuild on every parent render.
  • Panels open lazily: usePanelState now defaults both panels closed, so the reader opens with a clean stage; resize never auto-opens them.

Patch Changes

  • Inspector: fix comment-marker count and multi-target marker rendering.
  • Inspector: object-entity id helpers consolidate in document-model/objectEntityModel instead of being duplicated inside Frame, MdxArea, manuscript TocArea, and PublicReaderPage.
  • Inline editor: useInlineDocumentEditor exposes onDocumentEdited; OpenPressApp re-loads /openpress/document.json after a successful inline edit so derived indexes stay in sync.
  • Dev: reset Vite optimizer cache so workspace-side dependencies are picked up.
  • Workbench dialog: viewport-aware width + max-height so a big media preview doesn't blow up the dialog to full screen.
  • Project composer: add /apply-comments to the skill mention list so pending comment resolution can be invoked from the workbench.
  • Carries forward the 0.7.1 measurement + pagination fixes (font/image readiness, relative media src inlining, list-per-item paging, OPENPRESS_DEBUG_ALLOC, academic-paper starter body overflow).

Breaking Changes

  • FrameContext.consumeArea(chainId) return type changes from ReactNode | null to { indexInFrame: number; blocks: ReactNode | null }. Custom Frame consumers must read .blocks.
  • App export is renamed to OpenPressApp and now lives under @open-press/core/app. The old renderer.tsx is replaced by OpenPressRuntime.
  • data-openpress-mdx-area-empty is now always emitted ("true" / "false"). Selectors that relied on the attribute being absent need updating.
  • Reader ViewMode collapses to "paged" only — the legacy "reading" flow mode is removed. Use usePageViewportScale for free-scaling instead.
  • Several internal module paths moved into subdirectories (document-model/, reader/, shared/, workbench/...). Consumers that deep-imported from the openpress source must switch to the new barrels.
  • Shared dialog scaffolding (backdrop, container, header, close button) moved from per-dialog class families (openpress-deploy-dialog-backdrop, __panel, __panel header, __close, etc.) to the shared openpress-workbench-dialog* family. Per-dialog modifier classes (openpress-deploy-dialog, openpress-search-dialog, openpress-project-preview-dialog) are still applied for dialog-specific styling. Selectors that targeted the old scaffolding names (notably *-backdrop and __panel) need updating; selectors that combine the modifier class with new __heading / __footer / __close modifiers continue to work.

0.7.1

Patch Changes

  • Measurement pipeline + pagination fixes:
    • Measurement: wait on document.fonts.ready, image load/error + decode(), and two requestAnimationFrame ticks before sampling block heights so figures no longer under-measure on cold loads.
    • Measurement: inline relative media/, ./media/, and /openpress/media/ image sources during the SSR measurement pass (previously only the absolute /openpress/media/... form was rewritten, leaving relative refs as broken).
    • MDX compile: split bullet/numbered lists into per-item paginable blocks so long lists can break across pages without losing ordered numbering.
    • Debug: new OPENPRESS_DEBUG_ALLOC env var prints per-iteration allocator state (mdxArea capacities, block heights, pagination hints, warnings).
    • Academic-paper starter: <MdxArea overflow="extend"> on the body and the single-column .reader-page--content .page-body override removed so content paginates naturally with the new allocator.

0.7.0

Minor Changes

  • 718d2d1: Press Tree render architecture — full refresh of the React export pipeline (clean break, no v0.5 compatibility).

    The render kernel no longer knows about cover, toc, chapter, or back-cover as built-in concepts. Workspaces describe their document as a React tree using three primitives:

    • Press — root composition boundary.
    • Frame — a single fixed-layout surface (replaces BasePage and friends).
    • MdxArea — a measurable slot consuming a content chain, with overflow="extend|truncate|error" control.

    Sources are now declarative descriptors:

    export const sources = {
      story: mdxSource({ preset: "section-folders", root: "chapters" }),
    };
    
    export default function MyPress() {
      return (
        <Press>
          <Cover />
          <Toc source="story" />
          <Sections source="story" page={Page} />
          <BackCover />
        </Press>
      );
    }

    Three mdxSource() presets: section-folders (existing convention), section-files (flat file-per-section), file-list (explicit ordering).

    Manuscript helpers (Toc, Sections, Chapters alias) ship in @open-press/core/manuscript. mdxSource() lives in @open-press/core/mdx. Subpath exports keep the public surface tight without committing to separate npm packages.

    Toc is implemented as a manuscript helper, not a core kernel special case. Registered sources generate a synthetic toc:<sourceId> chain; TocArea consumes it with the same allocation path as MdxArea.

    Reader-side pagination is removed. The export pipeline writes final frame HTML into document.json; the reader displays that HTML and no longer mutates headings/captions, injects footers, or reflows pages at runtime. Page shell belongs to workspace components.

    MDX source resolution now derives manuscript TOC entries from actual ## / ### headings, not folder slugs. Heading numbering is written during export as data-chapter="01" / data-section="1.1" attributes so themes can render numbering with CSS without reader-side mutation.

    Removed (no compatibility layer):

    • BasePage, BaseCoverPage, BaseTocPage, BaseContentPage, BaseBackCoverPage.
    • Legacy named exports (cover, toc, backCover) from document/index.tsx.
    • The migrate-to-react CLI command.
    • Implicit chapter discovery as the only source mechanism.
    • Legacy chapter.tsx meta/opener auto-discovery. Section openers are explicit workspace components in the Press tree.

    The top-level purity gate remains: config must be data, sources must be pure mdxSource() descriptors, and filesystem/network/process side effects are rejected before module execution. Default-exported function bodies can contain normal React component logic, including hooks and .map().

    All <Frame> instances require a stable frameKey; source roots and file-list entries must stay inside document/.

    Workspace data attributes:

    • data-frame-role (new, opaque role like "manuscript.content").
    • data-page-kind (derived from role's last segment — reader CSS keeps using this).
    • data-section-id replaces data-chapter-slug for section-scoped CSS.

    Migration: Workspaces written for v0.5.x must rewrite document/index.tsx to default-export a Press component. Pre-1.0 minor bump is acceptable per repo policy; no production deployments exist to break.

0.6.0

Minor Changes

  • f8fdecd: Third bundled pack: academic-paper.

    A single-column A4 academic / research paper starter — serif title block, abstract band, index terms, numbered sections (I, II, III), italic sub-sections (A, B, C), [N] numeric references, sample chapters derived from the IEEE conference template structure (Introduction, Methods, Results & Discussion, Acknowledgment, References).

    Suitable for: draft / preprint / iteration. Not suitable for camera-ready IEEE / ACM submission — those still need LaTeX with the publisher's class file.

    Two-column body and other paged-document features (footnotes, cross-references with page numbers, running headers) are intentionally out of scope for this release. They'll be designed as a self-maintained engine evolution + multi-mode architecture in a separate spec round, rather than depending on a third-party pagination polyfill.

  • c490653: The scaffolder accepts third-party style packs via --pack github:owner/repo.

    The cli fetches starter/document/ from the named repo (default branch, or #ref for a specific branch/tag) and copies it into the new workspace. If the pack repo also publishes SKILL files at skills/<name>/, they're installed via npx skills add <owner>/<repo> after the framework skills, so the agent picks them up automatically.

    Repo layout convention for third-party packs is documented in docs/style-pack-authoring.md. Empty-result extraction (the named repo exists but has no starter/document/ at root) fails with a clear error pointing at the expected layout.

    The two bundled packs (editorial-monograph, claude-document) keep their current short-name behaviour; only the cli's validator widened to accept the github: prefix.

0.5.0

Minor Changes

  • 0169cba: Agent-driven upgrade flow.

    New commands:

    • npx open-press doctor — diagnose workspace against latest framework state. Reports @open-press/core version vs npm latest, installed skill count, and any pending docs/migrations/<version>.md notes between current and latest. --json for machine-readable output, --no-cache to bypass the 24h cache. Always exits 0 (informational only).

    • npx open-press upgrade — orchestrate the upgrade. Runs npm update @open-press/core (when the workspace declares the dep) and npx skills upgrade, then surfaces the list of migration notes for the agent to read. Does not auto-edit document/ content — the agent reads the surfaced docs/migrations/<version>.md notes and proposes edits to the user with confirmation. Use --dry-run to preview, --no-deps / --no-skills to target one layer.

    Dev startup notice:

    open-press dev now runs doctor before starting Vite. When the workspace is behind, a single line prints: ○ open-press: @open-press/core 0.4.0 → 0.5.0 · 1 migration note(s) — run npx open-press doctor for details. Cached for 24h, network failure is silent, never blocks dev.

    Migration docs:

    • New docs/migrations/_template.md — each release with breaking changes ships a docs/migrations/<version>.md file with sections the agent reads.
    • New docs/migrations/0.4.0.md — backfilled. Documents the SKILL fold (no document or CLI changes).

    SKILL update:

    openpress skill's "Updating An Existing Workspace" section rewritten around the new commands: detect (doctor), apply (upgrade), interpret migration notes, propose document edits with user confirmation. Concrete agent workflow + breaking-change reference table.

Patch Changes

  • 931d4ac: Support framework root dogfood workspaces and correct CLI script paths outside the core package root.

0.4.0

Minor Changes

  • 3cb4939: Consolidate internal skills (13 → 11).

    • openpress-update folded into openpress as an "Updating An Existing Workspace" section. The release-upgrade flow, pre-flight checks, breaking-change reference, and do-not list are now part of the system-operation skill where they naturally belong.
    • Document hierarchy rules folded into the writing workflow. Hierarchy decisions (H2/H3/H4 model, TOC depth, appendix placement, H4 granularity) and prose decisions happen together.
    • references/data-structures-outline.md moved into the writing references.

    Lower maintenance surface: 2 fewer SKILL.md files to keep in sync, ~5 fewer cross-references to police. No content lost — same rules, fewer files.

    User impact: agents already in workspaces with openpress-update or openpress-document-hierarchy SKILL files installed should run npx skills upgrade to refresh the catalog.

0.3.0

Minor Changes

  • Initial monorepo release of @open-press/cli and @open-press/core on npm.

    @open-press/cli (new): scaffolder for open-press workspaces. Supports editorial-monograph and claude-document style packs, metadata flags, and AI-agent skill installation under .claude/skills/ and .agents/skills/.

    @open-press/core (new): framework runtime, CLI engine, render pipeline, and document primitives. Consumed transitively by workspaces scaffolded via @open-press/cli. Exposes the open-press bin (dev / build / preview / validate / pdf / deploy / export).