Commit Graph

30 Commits

Author SHA1 Message Date
Marcos Paulo 5d4a2c8fe1 feat: all files in the Explorer, publish and share links, image annotation core, last-edit line
ci / ci (macos-latest) (push) Has been cancelled
ci / ci (ubuntu-latest) (push) Has been cancelled
ci / ci (windows-latest) (push) Has been cancelled
- Explorer: every non-hidden file is listed with its own icon and tab kind (image, video, audio, pdf, code, text, other); settings show_all_types, hidden_extensions and show_annotation_files; kinds without a viewer open a placeholder card, never the text editor
- crates/annotate: non-destructive image annotations (strokes, lines, rectangles, ellipses, text) with strict sidecar JSON validation, hit testing, zoom/pan transforms and undo
- engine: file.info, file.hash, file.neighbours, image.annotations.load and save (a corrupt sidecar is kept as .bad, the image is never modified), header-only image sizing for PNG, JPEG, GIF, WebP, BMP and SVG
- sync server: publish notes or folders as static HTML (raw HTML escaped, strict CSP, publish: false honoured, no attachments) and expiring revocable share links, with per-route rate limits and audit rows
- ui-egui: "Last edit - name, time ago" in the status bar from server.file_meta
- specs and designs: file viewers spec, 20 PaperCraft exports rated 8.2 of 10 (design/files/RATING.md), annotate and viewer briefs

Verified with cargo xtask ci (fmt, clippy -D warnings, workspace tests, layers, tree, i18n).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 14:38:47 -03:00
Marcos Paulo d9359ba93d feat: live.* engine commands, last-edit lookup, waiting-to-sync queue and offline banner
ci / ci (windows-latest) (push) Has been cancelled
ci / ci (macos-latest) (push) Has been cancelled
ci / ci (ubuntu-latest) (push) Has been cancelled
- engine: live.join, live.edit, live.poll, live.peers, live.selection, live.info and live.leave over the live session client (at most 8 rooms, no token in any answer, dropping a session with open rooms returns within 2 s); server.file_meta names the last editor of a file
- engine: sync.pending lists the local changes the server does not have yet (new, edited, deleted; at most 500, local comparison only)
- ui-egui: a "Waiting to sync" queue sheet opened from the sync sheet, and the "You are offline" banner on the compact Notes page
- tests: two sessions converge through the real server using live.* commands; stub-server, queue and banner tests

Verified with cargo xtask ci (fmt, clippy -D warnings, workspace tests, layers, tree, i18n).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 13:00:13 -03:00
Marcos Paulo 9bd7dc931e feat: chunked resumable uploads in the sync driver and the phone sync sheet
ci / ci (macos-latest) (push) Has been cancelled
ci / ci (ubuntu-latest) (push) Has been cancelled
ci / ci (windows-latest) (push) Has been cancelled
- engine: Remote gains missing_chunks, put_chunk and put_chunked; upload_chunked streams a big file in 4 MiB chunks, sends only the chunks the server lacks, retries with backoff and reports progress (SyncStatus.transfer); the scan hashes by streaming and skips only files over 1 GiB
- engine: server.devices command and a sync.attachments option (non-Markdown files are skipped when it is off)
- ui-egui: the sync pill opens a bottom sheet on a phone-width window (status, devices, conflicts row, options, Sync now); wider windows keep Settings > Sync
- tests: chunk resume against the real server, 6 driven sheet tests, devices stub tests

Verified with cargo xtask ci (fmt, clippy -D warnings, workspace tests, layers, tree, i18n).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 08:57:07 -03:00
Marcos Paulo 181aad91e6 feat: sync, accounts, live editing, vault launcher, compact layout
Sync and the server
- crates/sync: revision ledger (stale writers conflict, edit beats delete), client planner, three-way merge, conflict names, path and hash gates
- apps/notescraft-sync-server: pairing, device tokens, change log with long poll, blobs, accounts with many vaults, roles, invites, audit log, quota, GC, readiness, request ids
- server history (revisions, restore, retention), chunked resumable uploads, live editing endpoints (SSE rooms, presence, flush through the ledger)
- engine: HttpRemote, sync_once, SyncWorker, sync.* commands, share.* and server.* commands, live session client, note.capture, vault catalog and vaults.* commands

Editing together
- crates/collab: operational transformation core (TextOp, transform, client state machine, room, presence)
- ui-egui: Settings > Sync, sync pill, conflicts, Share dialog, live pill and remote carets, launcher Connect and Join flows

App shell
- vault launcher (desktop and phone layouts) wired into the app host (--launcher, File > Vaults...)
- compact (phone) layout with a bottom tab bar

Verified with cargo xtask ci (fmt, clippy -D warnings, workspace tests, layers, tree, i18n). Android and iOS shells are not built: the build machine has no NDK or Xcode.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 07:46:24 -03:00
Marcos Paulo 5e8020aa38 feat: Obsidian basics, editor previews, graph rework, query blocks, stacked tabs, pop-out windows
ci / ci (macos-latest) (push) Has been cancelled
ci / ci (ubuntu-latest) (push) Has been cancelled
ci / ci (windows-latest) (push) Has been cancelled
Editor previews (colour swatches, arrows, embeds), the 18 obsidian-basics tasks (find and replace
with regex, back/forward, auto-pair, footnotes, folding, search operators, split view, PDF/audio/
video embeds, spelling, drag and drop, pinned tabs, settings) and round 2: ```query blocks, stacked
tabs, pop-out windows, tasks ticked inside embeds, text around an embed, embeds that follow edits,
block menu shortcut. New crates: notescraft-regex (linear-time engine) and notescraft-syntax.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 11:21:19 -03:00
Marcos Paulo 15d7f5e873 feat: editor blocks and lint, vault knowledge, calendar plugin, macOS menu
- notescraft-lint (rules, safe fixes, learned style) and notescraft-blocks (block model and edits); engine lint.* and block.* commands with CLI and MCP parity
- Lint tab, underlines, slash menu with preview in Source and Visual, block grip and menu, Settings > Editor and lint, Vim block keys
- Visual view: tables, note embeds, %% comments, wrapping property chips
- Vault knowledge (Related tab, assistant sources, Settings) and calendar plugin
- Sidebar top padding fixed, dot grid follows PaperCraft spacing, right-card tabs no longer cover the collapse button

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-18 12:36:00 -03:00
Marcos Paulo a9cff2e151 feat: undo/redo in the Visual view (typing merges per word), window icon on Windows/Linux
ci / ci (macos-latest) (push) Has been cancelled
ci / ci (ubuntu-latest) (push) Has been cancelled
ci / ci (windows-latest) (push) Has been cancelled
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 17:56:05 -03:00
Marcos Paulo d1cedc99d2 fix(engine): note.delete/rename/duplicate work on drawings, canvases and attachments; feat(mac): no title bar, traffic lights float over the canvas
ci / ci (ubuntu-latest) (push) Has been cancelled
ci / ci (windows-latest) (push) Has been cancelled
ci / ci (macos-latest) (push) Has been cancelled
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 17:30:45 -03:00
Marcos Paulo 22daa31853 feat(app): File > Open vault… and Open recent: switch vaults by relaunching on the chosen folder
ci / ci (macos-latest) (push) Has been cancelled
ci / ci (ubuntu-latest) (push) Has been cancelled
ci / ci (windows-latest) (push) Has been cancelled
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 16:12:13 -03:00
Marcos Paulo 7db396618e feat(release): packaging for macOS, Windows and Linux; app icon; xtask version/ico; plain launch reopens the last vault or asks for a folder; --version
Packaging lint / lint (push) Has been cancelled
ci / ci (macos-latest) (push) Has been cancelled
ci / ci (ubuntu-latest) (push) Has been cancelled
ci / ci (windows-latest) (push) Has been cancelled
Packaging is ported from the Craft family (effectcraft): DMG built and smoke-tested on
macOS aarch64, MSI/deb/rpm scripts adapted, thin release.yml and packaging-lint.yml callers.
rfd 0.17 added (native folder dialog; same version the other Craft apps use).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 12:48:09 -03:00
Marcos Paulo 4806209761 feat: whiteboard upgrade (.draw format, zoom bar, layers, SVG export) and vault-only engine exports
Whiteboard: zoom bar and dot grid, layers panel, appear motion, sound cues, focus rings
and AccessKit labels; .draw files with legacy .excalidraw still readable;
notescraft-cli export whiteboard.

Security: export.pdf and file.export_whiteboard_svg accept vault-relative out paths only
(they are reachable by the assistant and the control channel). The CLI places absolute
--out files itself via the new notescraft_engine::render_pdf; the UI export worker renders
and the live session writes.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 11:12:33 -03:00
Marcos Paulo 614b8f7e91 fix(cli): mcp --via-control keeps its local session read-only while the app runs
ci / ci (ubuntu-latest) (push) Has been cancelled
ci / ci (macos-latest) (push) Has been cancelled
ci / ci (windows-latest) (push) Has been cancelled
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 14:41:32 -03:00
Marcos Paulo d103a96c69 merge: acp client crate, PDF export (crate, engine command, CLI)
ci / ci (macos-latest) (push) Has been cancelled
ci / ci (ubuntu-latest) (push) Has been cancelled
ci / ci (windows-latest) (push) Has been cancelled
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 02:27:46 -03:00
Marcos Paulo 02136c8078 feat: pdf-export 2026-10-15 02:24:15 -03:00
Marcos Paulo d57c544adf feat: assistant gate 2026-10-15 02:00:16 -03:00
Marcos Paulo 507e3ea6d7 feat: control-channel 2026-10-14 23:59:28 -03:00
Marcos Paulo 86a4cfd56e merge: views-wire (typed tabs, canvas/whiteboard/graph/settings, title bar)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 09:28:23 -03:00
Marcos Paulo c27e546c56 feat(ui): wire canvas/whiteboard/graph/settings tabs, title bar 2026-10-14 09:25:49 -03:00
Marcos Paulo 0666cb9aa9 Merge branch 'feat/editor-wire' into develop
# Conflicts:
#	Cargo.lock
2026-10-14 00:32:16 -03:00
Marcos Paulo 9ed85a3c41 feat(editor-wire): wave 9
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 00:32:10 -03:00
Marcos Paulo f893c85a18 feat(cli-mcp): wave 9
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 00:32:04 -03:00
Marcos Paulo 7a70adc7ac feat(cli): wave 8
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 00:00:21 -03:00
Marcos Paulo 154be8d24b feat(ui): animations and pop sounds (motion, synthesised cues, cpal sink)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-13 21:38:49 -03:00
Marcos Paulo 2feadd9760 feat(ui): PaperCraft visual pass (fonts, icons, sidebar, tabs, cards), offscreen snapshot example
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-13 21:11:03 -03:00
Marcos Paulo a8158190d0 feat: wave 7 merged (ui polish, editor); wgpu app
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-13 20:49:33 -03:00
Marcos Paulo 8e3f79aad8 feat(ui-polish): wave 7
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-13 20:47:41 -03:00
Marcos Paulo 9f47f843f7 feat(ui): first UI merged (shell, views); app compiles
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-13 20:15:23 -03:00
Marcos Paulo 3ce2a9b099 feat(ui-egui): ui-shell
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-13 20:12:24 -03:00
Marcos Paulo 1f06da8926 ui-egui: dependencies and theme token contract
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-13 19:55:28 -03:00
Marcos Paulo 9fbb7073d1 Phase 0: workspace foundation
Spec, roadmap, 17 stub crates, two app stubs, xtask verify/layers/ci.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-13 18:32:56 -03:00