Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
624555e
docs: design for binary document live-reload (auto-update)
exilis Jun 26, 2026
1359814
docs: implementation plan for binary document live-reload
exilis Jun 26, 2026
07926df
feat(binreload): scroll-ratio helpers + debounce constant
exilis Jun 26, 2026
af8761e
feat(binreload): change-routing decision
exilis Jun 26, 2026
9a94309
feat(binreload): per-path debounce scheduler
exilis Jun 26, 2026
bc5cb4f
feat(binreload): seq-guarded refresh with off-screen swap and PPTX in…
exilis Jun 26, 2026
8f341e3
refactor(binreload): structural never-reject at scheduler + drop dead…
exilis Jun 26, 2026
77e4a50
feat(app): auto-update binary previews via binreload refresher
exilis Jun 26, 2026
9ab5513
fix(binreload): remove off-screen container on abort paths; consume r…
exilis Jun 26, 2026
fe0cae3
build: embed web/binreload.js in the binary
exilis Jun 26, 2026
885e985
fix(watcher): emit change events for binary documents, not just markdown
exilis Jun 26, 2026
50e1de5
docs: announce binary live-reload; correct backend assumption; cross-…
exilis Jun 26, 2026
4e8eb09
docs(binreload): drop stale task refs; note defensive PPTX clear
exilis Jun 26, 2026
67cab3f
feat(binreload): show missing-file state when an open binary doc is d…
exilis Jun 26, 2026
196d097
docs: note binary deletion shows missing-file state
exilis Jun 26, 2026
cb56983
feat(app): show missing-file state when an open document is deleted o…
exilis Jun 26, 2026
b7d0e69
refactor(app): drop unused dirOf import
exilis Jun 26, 2026
ffaa322
test(e2e): Playwright browser tests for binary live-reload; wire into CI
exilis Jun 26, 2026
1e7e359
test(e2e): harden server startup against port races; review nits
exilis Jun 26, 2026
ea04a29
docs: changelog for E2E tests and delete-state fix
exilis Jun 26, 2026
3a02ece
Merge remote-tracking branch 'origin/feat/binary-doc-live-reload' int…
exilis Jun 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,5 +52,12 @@ jobs:
with:
node-version: '22'
- run: npm install
# Install only the Chromium browser plus its OS dependencies.
- run: npx playwright install --with-deps chromium
- run: npm run e2e
- uses: actions/upload-artifact@v4
if: failure()
with:
name: playwright-report
path: playwright-report/
retention-days: 7
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@
/node_modules/
/package-lock.json

# Playwright E2E artifacts (dev-only; never committed)
/test-results/
/playwright-report/
/blob-report/
/.last-run.json

# Editor / OS
.DS_Store

Expand Down
21 changes: 21 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,27 @@ All notable changes to reefdoc are documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.11.0] - 2026-06-26

### Added
- Binary document previews (PDF, DOCX, XLSX, PPTX) now **auto-update** when the
file changes on disk, matching markdown live-reload. The active preview
re-renders automatically; background tabs are flagged and re-render when you
switch to them. PDF/DOCX/XLSX render off-screen and swap in (no flicker, and a
half-written file leaves the previous preview intact); PPTX re-renders in
place. Scroll position is best-effort preserved across a refresh.
- End-to-end browser tests (Playwright) covering the live-reload pipeline:
active-tab auto-update, the background "updated" marker, and the
deleted-file state. Run with `npm run e2e`.

### Fixed
- The file watcher now emits change events for binary document formats, not
just markdown, so binary previews actually receive live updates.
- Deleting an open document on disk now shows the "this file no longer exists"
state in its tab, instead of leaving a stale preview. This previously did not
happen for any file type (deletion emits only a directory-tree event); the
open tab is now re-checked when its directory listing changes.

## [0.10.0] - 2026-06-26

### Added
Expand Down
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@ go build -o reefdoc . && ./reefdoc ./docs
- Download the open document (its original file) with one click
- Auto table of contents from document headings
- Dark / light theme (mermaid follows the theme)
- Live reload: edit a file in any editor and the open tab updates
- Live reload: edit a file in any editor and the open tab updates — including
PDF, DOCX, XLSX, and PPTX previews
- Hyperlinks between documents — markdown links and Allium `use` paths open in a new tab

## Status
Expand All @@ -54,8 +55,9 @@ themes, live reload). See [`docs/specs`](docs/specs) for the design and
[`docs/plans`](docs/plans) for the implementation plan.

Run the unit tests with `go test ./...` and `npm test`. The browser end-to-end
test (Playwright, drives the real binary) runs with `npm run e2e` — it needs Go
on your PATH and Playwright's Chromium installed (`npx playwright install chromium`).
tests (Playwright, in `web/e2e/`, drive the real binary) run with `npm run e2e`
— they need Go on your PATH and Playwright's Chromium installed
(`npx playwright install chromium`).

## Architecture

Expand Down
Loading