# Mac owner checkpoint — 10 September 2026

Runtime update (September 10): use **Node 24 only** for new development and verification; see [migration instructions](migrations/node24.md). Historical Node 20/24 results and commands below describe prior checkpoints. Keep distinct browser/OS/native gates and the existing Office recovery prerequisite.

The active goal covers the full OpenPresentation ecosystem, with font/layout reliability before vector PDF, then SVG/Mermaid, followed by coordinated new releases and public-site verification. This checkpoint does not complete that goal. Read the full [8 September handoff](handoff-2026-09-08.md), [10 September wrap-up](handoff-2026-09-10-wrap-up.md), [ecosystem objective](plans/ecosystem-objective-2026-09-09.md), [font roadmap](plans/font-roadmap.md) and [text placement plan](plans/text-placement.md).

## PR backlog and current state

The seven-repository audit found only core [PR #60](https://github.com/OpenPresentation/opf/pull/60) open initially. Its TypeScript 7 compatibility changes were reviewed, updated to current main and tested on the exact updated head. Node 20/24 coordinated CI, Mac/Windows portability and Bugbot passed. Local TypeScript 7/core tests and clean packed TypeScript 5.9/7 NodeNext/Bundler consumers passed. Merge: `e882f357cd7860b3e0905fdf0b2fb3ff8c2464d8`; issue #41 is closed.

The separate Windows agent subsequently opened PPTX [PR #17](https://github.com/OpenPresentation/opf-pptx/pull/17), retaining the owned verifier's process handle so Windows PowerShell 5.1 preserves its exit code. The exact head `95f5b9e0387dabb467a26d0fbbbdbe0171439a55` passed Linux/Windows Node 20/24 and Bugbot. Reviewed and merged as `24e7b2f12462df246e35a8a714a47923ecbd2bfe`. The [GitHub coordination handoff](https://github.com/OpenPresentation/opf-pptx/pull/17#issuecomment-5623170599) requests immutable native findings and preserved failures.

The initial audit found no open Dependabot security alerts in core, renderer, PPTX, editor or the three sites. Published versions remain core 0.9.0, CLI 0.7.0, renderer/PPTX 0.7.0 and editor 0.6.0. All three public origins returned HTTP 200 with successful production deployment records. That is a state check, not fresh deployed workflow certification. No npm version, release plan or deployment changed in this checkpoint.

## Verified font preparation

Renderer [PR #13](https://github.com/OpenPresentation/opf-render/pull/13), commit `91fe43e25dca9e4f04a2a18b1c6ee74e7e3d2863`, adds `prepareNodeFonts` and an immutable manifest for 33 existing open faces/eight license notices. Exact package versions and file/notice hashes are checked before use. Shared options carry measurement, embedded SVG bytes and raster paths; system fonts are disabled. Visual substitutions remain explicit and authored documents are preserved.

The old raster default omitted semibold, italic and bold italic from the nine-face base registry. A direct probe preserves the three failing outputs and shows all nine matching after correction. All 143 changed corpus slides were inspected in 18 paired sheets and six at full size. The separate baseline preserves all 662 unchanged hashes and identical source. Complete renderer suites/805 slides pass under Node 20.20.2 and 24.21.0. Nine exact base faces pass actual offline Chromium loading and advance checks; accepted-text and rich-spacing browser checks also pass. [Portable renderer evidence](https://github.com/OpenPresentation/opf-render/tree/91fe43e25dca9e4f04a2a18b1c6ee74e7e3d2863/docs/evidence/font-preparation) includes failures, paired images, hashes and reproduction instructions.

Core's coordinated font harness now passes the same preparation options through pagination, editor composition, SVG/PNG and PPTX. Fresh candidate installations verify source preservation, edit/undo, rendering, editable export and heading reimport. The new declaration consumer checks the shared API and immutable catalog. TypeScript 5.9 and 7 pass. Historical registry harnesses remain version-pinned and do not call unpublished APIs.

Both Node 20 and 24 Mac installed-browser runs pass seven suites: canvas, rich text, layout, blocks, lists, creation and styled tables, totaling 230 assertions and eight trusted interaction scenarios. The initial Mac styled-table run failed because `Control+End` left all text selected. A direct Chromium control reproduced that behavior; `Meta+ArrowDown` collapses the selection at the end. The harness now uses the native platform shortcut and asserts the selection before typing. The original failure screenshot/log remain in [Mac evidence](evidence/mac-font-preparation/README.md). Product editing behavior was not changed.

Font preparation merged after successful exact-head review and CI: renderer #13 as `e4d0dc0070616bc3b63a10124ce92cb4aff40e21` and core #62 as `028178311dc7f29667086809c83eb09405cefc4a`. No release occurred.

## Merged physical font variants

Core adds optional `FontFaceSelection` metadata to `TextStyle`. Renderer [#14](https://github.com/OpenPresentation/opf-render/pull/14) selects exact static weights through preferred-family grouping and preserves the physical legacy-family style flags. PPTX [#20](https://github.com/OpenPresentation/opf-pptx/pull/20) consumes those flags across measured editable payloads. Previously Roboto 500/600/800 selected neighboring 400/700 files; SemiBold/ExtraBold could receive incorrect synthetic bold flags. All six reproduced selection/style discrepancies are corrected in the new source probes. Explicit custom namespaces, duplicate/ambiguous guards and providers without metadata retain documented behavior.

Source tests cover all nine base faces and seven payload slides on both Node runtimes. Actual offline Chromium advances match within 0.1 pixels; full renderer/converter Node 24 suites pass. The 805-slide base-font checkpoint stays unchanged. Seven complete before/after payload pairs were inspected. Fresh candidate checks repeat the physical-face tests from installed tarballs and verify shared layout, edit/undo, raster output, editable export and reimport. The [candidate evidence](evidence/mac-font-variants/README.md) records package/browser results and the separate native evidence review.

Physical variant changes merged after exact-head CI and review: core #64 as `a3ad7053e1bd6b7ba7ee8c98cc679caed741c433`, renderer #14 as `44ff76fe19ae9de80d2aaa962aa7e43fabce02bc`, and PPTX #20 as `cb297be6038b4ec6a84761693b6a7c9e4a4f518d`. The current coordinator pins the merged renderer, PPTX `8bf8aab4a69e2f89b489ff64cde2ae6b7c46de7e` (including the quote-role fix), and editor `6e0b7d2f1b4369fc0a228391cf36e913e05188f8`. These source pins remain separate from historical registry verification refs. Versions and `release-plan.json` still describe the published set.

## Remaining work and ownership

The Windows agent owns bounded native harness work and Office evidence. The user reviewed recovery and resumed Office activity on that computer. PPTX #18 bounds accepted-text workers and guarantees parent-owned temporary font cleanup; #19 bounds the six metric decks and preserves existing fidelity gates. Core [#63](https://github.com/OpenPresentation/opf/pull/63), exact evidence `e862a5f48bbb9e34aa6e5115922848292e23797f`, contains 1,585 byte-verified files. Both Node runtimes pass 24 accepted-text cases, 144 editable lines, 72 exact original/saved/edited imports, 24 equal save/reopen PNG pairs and 96 original-text ink masks. The Mac independently checked those masks and records. The result is scoped to the recorded graph and does not identify every native glyph's font file.

The original retained baseline on both runtimes reproduces eight metric tab outliers (maximum 0.0673828125 points) and one portrait/right Latency ink overflow at x=497 beyond 496.8. Their 144 imports each pass; character bounds, mask coverage and collisions pass. The Mac independently decoded 96 complete metric slides and 276 isolated masks, checked raw tab arithmetic and import hash bindings, and reproduced the failures. Precise saved DrawingML tab coordinates do not establish why COM/native shaping differs. The Mac owns the shared runtime investigation; avoid duplicate Windows runtime edits.

Core #65/PPTX #21 completed the eight-workbook native chart edit matrix on both runtimes. Exact evidence `a4e7e9b9b5810144b1f116d45a92bc71e1484c78` has 2,289 verified files. Independent Mac review executed 384 imports and 384 separate cache parses, checked live edits, all 128 original/reopened PNG pairs and all sixteen selected-slide raster changes. PowerPoint's loaded pie category getter returns null even in an independently native-created control; this is explicitly unavailable, while live edits and cached XML provide separate exact observations. The original dialog/crash/stale-cache failures remain retained.

Core #66 merged as `626bc8c80495733264a692401e6a8c96663dd62f` after nine checks passed. Its bounded metric layout uses accepted outlines and raster clearance while preserving literal source/tabs, physical font selection and readability floors. Both Node runtimes pass 96 actual offline browser cases; the width-only control also passes and does not reproduce the native Calibri failure. Fresh Windows evidence in core #68, exact `5d39217f0716453bf3762057852006b4787de73b`, independently confirms that the portrait/right Latency ink overflow is gone. The Mac checked 96 full native rasters, 276 isolated masks and 288 actual original/saved/edited imports. Six leading-tab discrepancies remain per runtime (max 0.0226745605469pt against 0.02pt); the full fidelity gate still fails. PPTX #23 corrects only the verifier's accepted-anchor assumption; tolerances and independent ink/source gates are unchanged. Core #68 merged as `fb56cd247091f45a739eb3e752126db9e69fbe4d`.

Core #67/PPTX #22 retain bounded native table/code/quote checks, exact evidence `2024141c116e81608d3c6632b02c7bcbcd2a2bcc` with 2,646 verified files. Tables/code pass their scoped gates. Stronger quote comparison exposed 36 portrait first-body-line-to-subtitle failures. PPTX #24 fixes inference beside complete roles and adds missing tags to default estimated-font headings without changing native geometry. It merged as `8bf8aab4a69e2f89b489ff64cde2ae6b7c46de7e` after all Linux/Windows Node 20/24 and Bugbot checks. Independent Mac runs of 108 table, 48 code and 72 quote imports pass on both Nodes; all 36 prior role failures are retained and now corrected. Six actual browser suites and sixteen loaded/default regression cases pass. Quotes still reimport as generic text lines, not semantic quote payloads.

The [Akasia assessment](evidence/akasia-assessment/README.md) records exact v0.0.2 open files and public upstream metric agreement across all twelve styles. It retains 14 missing reference codepoints and a Black Italic decomposed-mark Fontkit/Chromium difference of 0.421875px at size 32 on both Nodes. A source/NFC cluster control isolates the difference. Three full slides were inspected with existing sparse layout/contrast limitations explicit. No proprietary reference binary comparison, new mapping or font pack is shipped; Akasia remains experimental.

Core #69 merged the Akasia assessment and metric follow-up. Core #70, exact evidence `28ae661a606d0a70ff39d98aac32e84240dbbb23`, adds fresh native quote runs after PPTX #24 and native-created tab controls from merged PPTX #26. All 182 files were checked against immutable Git blobs; the Mac independently reimported 72 quote slides on each supported Node runtime. Exact current body/footer order, multiplicity and title edits pass. The 0.02pt tab gate still fails in the native-created control; no offset/tolerance workaround is justified by this evidence.

The natural-rich-text candidate closes the estimated fragment-gap defect, preserves measured origins and adapts editor selection/caret mapping to traced SVG spans. Core harness `0f937d3ee94644ee3df312b7dbbf36b6efe27e70`, renderer product `57be896e761af102961521acd7dd6104273296bf` and editor product `eeaee72f011ccb3d36259236d46fc9a4124a1eed` define the tested source graph. The [portable evidence](evidence/mac-rich-flow/README.md) records the 30-case browser checks, source edit/undo and clean installed-package checks. All 188 raster changes were visually reviewed with six full-size pairs; 617 hashes remain unchanged. The separate rich-flow checkpoint preserves historical baselines. This increment remains unpublished.

Renderer #15 merged as `c92198b0d0acc94892385a8594fe2879461d64b0` and editor #12 as `a0aa911188f8a6364b66c7a19cece64580c1d9f8`, with Node 20/24 CI and independent review passing. The follow-up source graph uses renderer `6520f091a95aa95be5993580adf5df567eb439c8` and editor `f0871842088d2180ed7de606c379d7921e7fbf0e`. It resolves Linux measured SVG advance drift through geometric precision and explicit accepted horizontal advances, keeping raw font metrics distinct from constrained output. Independent review also fixed inherited code-role guards for traced spans; real text-node selection now covers code body/filename/language. Core #71/PPTX #27 retain nine native output family/style matches and blocked image controls. The Mac verified all 389 files, 28 fresh font-slide imports on each Node, and all seven full-size PDF rasters. Native image acceptance remains blocked pending reviewed Office recovery; no further COM retry or cleanup claim.

Core #72 merged the rich-flow coordination and native follow-up as `804c6d362fd175940b8dd3170976ae6ffe87ed8c` after all supported-runtime checks and independent review passed. The subsequent scalar whitespace candidate is described in [its plan](plans/plain-text-whitespace.md) and [portable Mac evidence](evidence/mac-source-whitespace/README.md). It preserves spaces, tab segments and exact hard-break source ranges through fitting, SVG and editable PPTX reimport, fixes blank scalar selection and preserves untouched mixed endings across separate editor input events. A single wholesale replacement keeps the existing replacement-range newline policy. The 805-slide candidate changes 279 hashes, all reviewed in 35 paired sheets plus six full-size pairs; 526 are unchanged. Historical baselines and failures remain retained. The candidate is unpublished and does not close native Office or general visual-quality gates.

Continue the font roadmap: native follow-up for physical variants, real measurement integration in user workflows, text features, bounded repair/readability, diagnostic paths, multilingual shaping/coverage, Akasia/Aptos evaluation and native portability. Estimated rich-run gaps and scalar whitespace loss are corrected by the current candidates; sparse cards, missing marker glyphs and unresolved assets/data remain visible; the 805-slide hashes do not certify quality. Keep optional font packs openly licensed with provenance and bounded downloads. No silent content loss or synthetic compatibility claims.

Vector PDF remains gated on font/layout acceptance; sanitized SVG and the complete Mermaid support matrix follow afterward. Publication must use new versions in dependency order, then clean registry workflows, installed-package browser tests and all three deployed sites. The current releases and prior failures must remain distinguishable from source candidates throughout.

## Readability floor source checkpoint

The preceding whitespace PRs merged: core #73 `c51b02571eab6ee61d03560aa1f539072b2d381b`, renderer #16 `c7a7387f6e27cc21eeeec3015492afe289ec4ce3`, editor #13 `aea29cf6998127fda96a5cbcd6b608db4c4890e3` and PPTX #28 `4c75ff713a19dff072e8f3660c368499973b78ab`. The subsequent audit found no open PRs or Dependabot alerts across all seven repositories. The Windows coordination note is [posted](https://github.com/OpenPresentation/opf/pull/71#issuecomment-5625857758); its request remains conditional on user-reviewed Office recovery.

The next candidate fixes selected readability floors and bounds fitting to 65 candidate sizes, retaining source, run ratios and the prior relative shrink constraint. Core product is `ade2a4f0a8afa93f546a3b1e18f2ed23b84d0ac7`. [Portable Mac evidence](evidence/mac-readability-floor/README.md) records the reproduced failures, corrections, both runtime suites and fresh installed editing/undo/export checks. The independent 48-case SVG/PPTX size matrix passes from source and installed packages on both runtimes. Renderer #17 retains all 33 reviewed paired sheets for 262 changes, six full-size pairs and the exact predecessor. Editor #14 and PPTX #29 coordinate CI only. CI/review acceptance and merge status must be checked live; no package or site release has occurred.

The floor checkpoint covers scalar/rich/list/table glyphs and shared heading allocation. It does not close small template footers/page numbers, all chart/timeline internals, missing nested marker coverage, Auto arrange, general visual quality or native Office gates. Continue reliability before vector PDF and then sanitized SVG/Mermaid. The overall goal remains active.

## Shared timeline source checkpoint

Readability merged after all CI/review gates passed: core #74 `2aeb86012c15193dba78ae81be838c9d7e09ac67`, renderer #17 `53b90878b8a9610117ac5191ebfaaa549cc2f3ea`, editor #14 `f71c1cdb3e9e25c9a62e25b0e711792820e6545e` and PPTX #29 `13b2229e3172e48ee489e68cac8432471993d7a9`. Core exact head `82e5a86d597e99c5e3c032d8b3aea717fb0393e3` passed all nine checks, including coordinator run 34535898793; review comments were empty. A fresh seven-repository audit found no open PRs.

The new timeline implementation fixes core/renderer acceptance disagreement, omitted metadata and synthetic shorthand source paths. Product graph: core `cc4b5245ba1c197746a2c307b78ff58f45df02cc`, renderer `1e5cd95a76e356c09ae5da0c8604809a202b1f40`, editor `78184f161bdb243822f2b21699ee0ab759c4c7bd`, PPTX `6f06406d9615b35a66f39e6424b35b1d32a73052`. [Portable evidence](evidence/mac-shared-timeline/README.md) includes source and installed browser checks on both runtimes, exact current-native-text semantic timeline reimport, bounded search and strict overflow/pagination controls. The independently reproduced predecessor matches all 805 hashes; 83 candidate changes were reviewed in eleven paired sheets and six full-size pairs, with 722 unchanged. New timeline baselines are separate from prior checkpoints.

This checkpoint is unpublished. Verify live PR/CI status before claiming merge acceptance. Native tab tolerance still fails and image acceptance remains blocked pending Windows Office recovery. The narrow portrait browser control fits but remains heavily wrapped; Auto arrange and overall quality are not complete. Continue font/layout reliability before vector PDF, then SVG/full Mermaid, coordinated new releases and three deployed-site workflow checks.

Shared timeline is merged: core #75 `166cebd8d8af4a80cef3e06ece8e0f8f2d1cecb8`, renderer #18 `f863c9c9b234a36720e2500e19b0384e340f1cfb`, editor #15 `6a3b85aecd7ee96bbcd67d60e02a4c3e32ba93bb`, PPTX #30 `9646c0ddf6880dde1d41ecdf21446d347cd88bf4`. Final core head `c2379f870ee0eadabfcda2f738226bf8184451f3` passed all nine checks, including coordinator 34540948071; no core review comments. Final PPTX `d03e2daebaf9fb6c5d01a7461da22695da2bcb9f` passed Linux/Windows Node 20/24 and Bugbot (run 34540943584). Its guard-order review was fixed before merge. The editor blank-field finding was disproven by its existing generic source-text fallback and actual pointer/bounds controls; the [additional blank-when evidence](evidence/timeline-review-follow-up/README.md) is retained. Both runtime editor CI passed and the finding was resolved before merge. A fresh seven-repository audit returned zero open PRs.

The next [shared header/footer plan](plans/shared-furniture-layout.md) begins on `codex/shared-furniture-20260910`. Read-only Node 20/24 wide/portrait controls reproduce fixed 13px furniture at selected floors 16/32 and missing authored header/footer words in PPTX. They remain in `artifacts/furniture-predecessor` and the source probe/output files in `/private/tmp/opf-furniture-gap-before-node*.json`. No furniture product changes have been made yet. The core branch is based on the merged timeline checkpoint. The exact timeline core raster predecessor archive is retained at `/private/tmp/opf-timeline-predecessor.tgz` (SHA-256 `ad60806239f3aa3d6a9e0993a74d7781225a75998736213f019e34eb7f78a9bd`), with its original candidate manifest; the accepted timeline raster corpus remains available. Published versions, release plans and deployments are unchanged. The overall goal is still active.

The final [Windows handoff](https://github.com/OpenPresentation/opf/pull/71#issuecomment-5626767382) records the timeline/readability merge graph and keeps new native work conditional on reviewed Office recovery. [Portable header/footer predecessor evidence](evidence/mac-shared-furniture-predecessor/README.md) preserves the next defect before changes. All four active runtime checkouts now use `codex/shared-furniture-20260910` based on their merged timeline checkpoints.

## Shared furniture implementation checkpoint

The first source implementation is committed: core `864b73e356c45211a28f3ca5afe0702b55868fa4`, renderer `4e11b9557b589e3a9d04c7c97b4a0c66bce83d94`, editor `e0c817fb372a5639f9fd1c829e85bf21fb1ba241`, PPTX `d06bc9c72aef16fdbe345704309f53ed97321417`. The preceding statement that no furniture product changes exist is historical. [Portable draft evidence](evidence/mac-shared-furniture-draft/README.md) records this exact candidate, its failures and current limits.

Core resolves inherited/local/disabled furniture, preserves literal strings and metadata sources, measures accepted parts at the selected floor and reserves body space (`grid-score-v9`, `furniture-flow-v1`). Pagination evaluates final output page numbers and separates optional repeated metadata mappings from its existing body slices. Core's 507 tests and legacy pagination pass on Node 20/24. Thirty-two offline browser cases per runtime pass source editing, empty fields, generated-value selection guards, dates and undo/redo; all four reviewed full-size screenshots match across runtimes. Sixteen PPTX exports per runtime match accepted text boxes, font sizes, source lines and fitted images; all sixteen outputs are byte-identical across runtimes. Existing editor and converter suites pass on both runtimes.

Semantic furniture reimport is **not implemented**. PPTX currently draws accepted parts with stable shape names and preserves blank lines, but has no furniture provenance tags. Continue that work before creating the coordinated PRs or claiming a complete author/edit/export/reimport workflow. The plan identifies standard common-slide customer data as a possible topology carrier for empty/false definitions, to assess and test without stale source words. Missing/duplicate/changed groups, current native text/images, generated metadata disagreement and inheritance/overrides need explicit controls.

Renderer Node 24 non-golden checks pass. Its old timeline baseline correctly reports **657 changed / 148 unchanged** slides with an unchanged source digest. The candidate manifests are in `opf-render/artifacts/furniture-golden-after`; this initial run did not request PNG artifact retention. Regenerate the same candidate with `OPF_GOLDEN_ARTIFACTS=1` or `--update` into a distinct review directory, retain/verify predecessor PNGs, then inspect all changes and full-size pairs before promoting any new baseline. The old timeline baseline remains untouched. Clean candidate package/installed workflows, coordinated CI, PR review and merging remain pending. The large-font portrait browser specimen wraps the organization heavily despite passing bounds.

A fresh seven-repository audit still returned no open PRs. The latest three comments on core #71 contain no new Windows recovery evidence; the existing tab failure and blocked image state remain unchanged. No COM retries occurred. Versions, registry releases, sites and the full-goal acceptance status remain unchanged; continue reliability before vector PDF, then SVG/full Mermaid and coordinated publication.

The full candidate PNG corpus has now been regenerated into `opf-render/artifacts/furniture-golden-review`: all 805 PNG hashes match its manifest, and that manifest exactly matches the retained first comparison. Paired visual review is still pending. The four source commits and evidence checkpoint `abf3e27563364b4a6e1a095558740be8bd0da85c` are pushed to their matching furniture branches; no furniture PRs exist yet.

Concurrent working-tree edits to `docs/plans/ecosystem-objective-2026-09-09.md` and `docs/plans/font-roadmap.md` add an accepted Node 24-only runtime maintenance milestone after current in-flight checks and before release. These edits were discovered after the source checkpoint and left intact and unstaged. The current Node 20/24 checks are finished; follow the updated roadmap for subsequent work rather than starting more duplicate Node 20 runs. Audit and align the four packages/CLI, three sites, CI/packaging, clean installation, tooling and Windows coordination on Node 24 while retaining distinct browser/OS/native gates. Preserve historical evidence and published artifacts. This newly observed roadmap does not mean the engine declarations or active CI matrices have been migrated yet.
