- 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.
- 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.
- 552abcd: Fix local multi-Press PDF exports, validate PDF page selections, and harden local workbench mutation endpoints.
-
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:
BaseCalloutis 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@importrules, and unused workspace/slide CSS selectors have been pruned.
-
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/coreas part of the theme cleanup.
-
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/coreas part of the theme cleanup.
- 4fcd954: Clean the workspace object authoring API around frame keys, labels, theme tokens, and slide template scaffolds.
- 3674b30: Improve page pagination, table flow, local font assets, and Public Reader E2E coverage.
- 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.
- 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.
- Preserve multi-Press export, deploy, image export, and pagination fixes from the 1.x line while preparing the 2.0 runtime package boundary.
- 10130dd: Fix multi-press deploy: the dev server's deploy endpoint now reads the
pressslug 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.
- 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.jsoncontaining 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/searchendpoint uses, all in the browser.SearchControlbecomes pluggable via a newsearcherprop — 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) —WorkbenchShellgains awithRightPanelopt-out and apublicViewermarker prop so the outer<main>keeps itsdata-openpress-public-viewerattribute for CSS / integration targeting. Search is intentionally not wired here; the live/__openpress/searchendpoint only exists in dev. A follow-up patch will add a build-time static index so search can ship to deployed pages.
-
b4248f6: Internal cleanup of legacy
devModenaming left over from the removed?dev=1URL toggle. The workbench internals now consistently useworkspaceMode(the path-based detector inruntimeMode.ts) for the prop name acrossHtmlWorkbench,WorkbenchShell, anduseInspectorComments. The deaddata-dev-modeDOM attribute (set on<main class="openpress-workbench">but never queried by CSS or any selector) and the unuseddevModeprop on<PublicPage>are removed. No public API change —HtmlWorkbenchand friends are documented as workbench internals — and theopenpress-dev-*legacy CSS class names are retained because they remain load-bearing inpublic-viewer.css/responsive.css. -
7ba9434:
openpress pdfandopenpress imagenow 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, calledhandleResizesynchronously, 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 callsEmulation.setDeviceMetricsOverrideto widen the viewport before pagination kicks in. Existing A4 documents stay unchanged.
- Drawer panels no longer flicker closed when toggled below the breakpoint.
-
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
onExitPresentationand 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. OpenPressRuntimere-evaluates location-derived modes on client-side navigation.workspaceMode,printMode, andactiveRuntimeModewere memoized with[]deps, so a SPA navigation from/<slug>/presentto/<slug>/preview(the exit-presentation flow) kept the staleworkspaceMode=falsefrom mount and rendered the legacyPublicViewer(with its leftover floating bookmark button) instead of the workbench. A new route-version hook patcheshistory.pushState/replaceStateand listens forpopstate/hashchangeto bump a counter the memos depend on.
- 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
-
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.
- 408f6f4: Three improvements to large-document export:
- Stop letting page overflow block PDF / image export.
waitForPrintReadyused 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 forOPENPRESS_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) andOPENPRESS_PRINT_READY_TIMEOUT_MS(default 5 min) tune the no-progress / total-time guards; inspection ships the equivalentOPENPRESS_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 imageaccepts--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.
- Stop letting page overflow block PDF / image export.
- 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
Textobject 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.
- 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.
- Generate a package-owned TypeScript project config for workspaces that do not vendor
tsconfig.json.
-
Move OpenPress workspaces to a package-owned runtime model.
The CLI now scaffolds a workspace that depends on
@open-press/coreand@open-press/cliinstead of copying framework internals such asengine/,src/openpress/,index.html, andvite.config.tsinto the user project. Runtime commands exposed byopen-pressdelegate into@open-press/core, whose packaged Vite entry, browser shell, render engine, and static server are used directly fromnode_modules.
- 8c528ad: 1.0 contract release. Breaking changes:
<Workspace>is now required at the root ofpress/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 configandexport const sourcesare removed. openpress.config.mjsis removed. Operational settings (deploy / pdf) live in the workspacepackage.jsonunder 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-9and improved scaffold metadata propagation.
- Workbench architecture: the monolithic
workbench.tsxis split into a modular structure underworkbench/{shell,panels,actions,inspector,mentions,project,document}/. New panels:DeploymentControl,SearchControl,PendingCommentsPanel,DocumentPanel,ProjectEntryPanel, plusWorkbenchShellandInlineInspectorLayer. - Module reorganization: source tree split into typed subdirectories:
app/:OpenPressApp,OpenPressRuntime(replaces the oldApp.tsx+renderer.tsx)document-model/:anchorMap,documentIndexes,documentTypes,objectEntityModel,projectIdentity,reactDocumentMetadatareader/:PublicReaderPage,ReaderNavigationPanel,useReaderRuntime, registry/route/scroll/state helpersshared/:frameScheduler,runtimeMode,Panel,numberUtils
- Object-entity model:
FrameandMdxAreanow exposedata-openpress-object-id. Newdocument-model/objectEntityModeldefines the id format. MediaFigure/ImageFigure: new core primitives that acceptsrc/alt/captionand resolve relative paths to/openpress/media/...automatically.<Sections>default page:pageprop becomes optional; when omitted the built-inDefaultSectionPagerenders the standard manuscript frame.- Engine helpers: new
engine/react/{http-json,object-entities,source-edit-endpoint}.mjsandengine/runtime/{file-walk,path-utils}.mjsruntime helpers.engine/runtime/source-text-toolsexports TypeScript definitions. - Dev endpoints: vite plugin wires
/__openpress/searchand/__openpress/source-editmiddlewares for the new workbench search + inline editing flows. - Inline source editor: ships the
InlineSourceEditorLayerUI on top ofuseInlineDocumentEditor+/__openpress/source-edit. The hook now uses aMutationObserverso newly inserted blocks become editable, and routes mouse clicks throughfocus()to preserve selection oncontenteditableboundaries. Workbench wiressourceEditorTargetstate into the layer. - Table editing in the source pipeline: table captions are emitted as standalone source blocks (
kind=element,name=caption,layout="attached") withdata-openpress-block-id/data-openpress-object-idmarkers and preserved source positions; the allocator treatslayout="attached"blocks as non-paginable.applySourceBlockTableCellEditToText(inengine/runtime/source-text-tools) accepts acellIndexso 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+usePageViewportScalehook drive a--openpress-page-viewport-scaleCSS variable on the page container; the workbench toolbar exposes aPageZoomControldropdown with fit-width / fit-page / fixed percentages plus a one-page / two-page spread toggle. - Inspector cell-precision comments:
CommentDraftgains an optionaltargetObjectIdso a comment can point at a sub-block (e.g. a single table cell) while still attributing the source position to its enclosing block.formatInspectorHintcarries the value through to the wire hint. - Shared
WorkbenchDialogshell: portal + backdrop + header (eyebrow / title / title-meta / close) + optional footer.DeploymentControl,SearchControl, andProjectPreviewDialogall render through this shell now, replacing the prior per-dialog scaffolding underopenpress-deploy-dialog-*/openpress-search-dialog-*/openpress-project-preview-dialog__*. WorkbenchControlPanelregistry:HtmlWorkbenchnow accepts anextraControlPanels?: 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
useDeploymentWorkbenchanduseInspectorCommentsfromHtmlWorkbench;useReaderRuntimeis split into focused sub-hooks (usePanelState,useReaderScrollAnchor,useReaderHashSync,useReaderKeyboardNav). InlineInspectorLayermemoization: now wrapped inReact.memowith a stablegeometryVersionprop so the geometry / event listeners no longer rebuild on every parent render.- Panels open lazily:
usePanelStatenow defaults both panels closed, so the reader opens with a clean stage; resize never auto-opens them.
- Inspector: fix comment-marker count and multi-target marker rendering.
- Inspector: object-entity id helpers consolidate in
document-model/objectEntityModelinstead of being duplicated insideFrame,MdxArea, manuscriptTocArea, andPublicReaderPage. - Inline editor:
useInlineDocumentEditorexposesonDocumentEdited;OpenPressAppre-loads/openpress/document.jsonafter 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-commentsto 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).
FrameContext.consumeArea(chainId)return type changes fromReactNode | nullto{ indexInFrame: number; blocks: ReactNode | null }. CustomFrameconsumers must read.blocks.Appexport is renamed toOpenPressAppand now lives under@open-press/core/app. The oldrenderer.tsxis replaced byOpenPressRuntime.data-openpress-mdx-area-emptyis now always emitted ("true"/"false"). Selectors that relied on the attribute being absent need updating.- Reader
ViewModecollapses to"paged"only — the legacy"reading"flow mode is removed. UseusePageViewportScalefor 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 sharedopenpress-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*-backdropand__panel) need updating; selectors that combine the modifier class with new__heading/__footer/__closemodifiers continue to work.
- Measurement pipeline + pagination fixes:
- Measurement: wait on
document.fonts.ready, imageload/error+decode(), and tworequestAnimationFrameticks 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_ALLOCenv 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-bodyoverride removed so content paginates naturally with the new allocator.
- Measurement: wait on
-
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, orback-coveras built-in concepts. Workspaces describe their document as a React tree using three primitives:Press— root composition boundary.Frame— a single fixed-layout surface (replacesBasePageand friends).MdxArea— a measurable slot consuming a content chain, withoverflow="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,Chaptersalias) 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.Tocis implemented as a manuscript helper, not a core kernel special case. Registered sources generate a synthetictoc:<sourceId>chain;TocAreaconsumes it with the same allocation path asMdxArea.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 asdata-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) fromdocument/index.tsx. - The
migrate-to-reactCLI command. - Implicit chapter discovery as the only source mechanism.
- Legacy
chapter.tsxmeta/opener auto-discovery. Section openers are explicit workspace components in the Press tree.
The top-level purity gate remains:
configmust be data,sourcesmust be puremdxSource()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 stableframeKey; source roots and file-list entries must stay insidedocument/.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-idreplacesdata-chapter-slugfor section-scoped CSS.
Migration: Workspaces written for v0.5.x must rewrite
document/index.tsxto default-export a Press component. Pre-1.0 minor bump is acceptable per repo policy; no production deployments exist to break.
-
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#reffor a specific branch/tag) and copies it into the new workspace. If the pack repo also publishes SKILL files atskills/<name>/, they're installed vianpx 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 nostarter/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 thegithub:prefix.
-
0169cba: Agent-driven upgrade flow.
New commands:
-
npx open-press doctor— diagnose workspace against latest framework state. Reports@open-press/coreversion vs npm latest, installed skill count, and any pendingdocs/migrations/<version>.mdnotes between current and latest.--jsonfor machine-readable output,--no-cacheto bypass the 24h cache. Always exits 0 (informational only). -
npx open-press upgrade— orchestrate the upgrade. Runsnpm update @open-press/core(when the workspace declares the dep) andnpx skills upgrade, then surfaces the list of migration notes for the agent to read. Does not auto-editdocument/content — the agent reads the surfaceddocs/migrations/<version>.mdnotes and proposes edits to the user with confirmation. Use--dry-runto preview,--no-deps/--no-skillsto target one layer.
Dev startup notice:
open-press devnow runsdoctorbefore 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 adocs/migrations/<version>.mdfile with sections the agent reads. - New
docs/migrations/0.4.0.md— backfilled. Documents the SKILL fold (no document or CLI changes).
SKILL update:
openpressskill'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. -
- 931d4ac: Support framework root dogfood workspaces and correct CLI script paths outside the core package root.
-
3cb4939: Consolidate internal skills (13 → 11).
openpress-updatefolded intoopenpressas 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.mdmoved 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-updateoropenpress-document-hierarchySKILL files installed should runnpx skills upgradeto refresh the catalog.
-
Initial monorepo release of
@open-press/cliand@open-press/coreon npm.@open-press/cli (new): scaffolder for open-press workspaces. Supports
editorial-monographandclaude-documentstyle 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 theopen-pressbin (dev / build / preview / validate / pdf / deploy / export).