Roadmap and known limitations
Delivered foundation
The current source implements separate model/history and DOM input, source/visual Markdown and HTML, plain source languages, rich policy, nested lists/tasks, pipe/HTML tables, image references/import callbacks, rich clipboard paths, guarded save snapshots, bookmarks/transactions, synchronized resizable preview, custom preview HTML/preprocessing, preview-only CSS, and a reusable .NET 10 WinForms control with a local NuGet package.
Earlier milestone notes that list tables, images, typed WinForms integration, source formatting shortcuts, or preview hooks as wholly deferred are historical. They should not be used as the current feature list.
Immediate correctness work identified by this audit
| Item | Current behavior | Work item and acceptance criterion |
|---|---|---|
| Native JavaScript language wire value | Enum camel-cases to javaScript; comment command expects javascript |
Add explicit wire mapping and regression coverage; JavaScript comments toggle through C# and keyboard paths |
| Optional ReplaceRangeAsync revision | Null is serialized as a supplied guard and rejected | Omit/normalize absent revision; test omitted, valid and stale guards |
| Empty native PasteAsync | No text clipboard passes empty string to replacement | Make host/helper no-op on no compatible text; test existing selection remains intact |
| Forced bold/italic in Markdown Source | Optional enabled argument currently toggles regardless of requested bool | Define/implement idempotent on/off semantics or expose a clearly separate toggle contract |
| Clearing display strings | Some JS configure setters ignore empty strings | Define reset behavior for placeholder/font/label and test repeated setting/clearing |
These issues are documented from source inspection. This documentation-only delivery does not silently change the runtime package. Existing safe usage is noted in the relevant method/clipboard guides; in particular, pass an explicit revision to ReplaceRangeAsync.
Release acceptance work
- Validate IME, mobile keyboards, screen readers and native selection on target devices.
- Exercise real Word/Outlook/browser/spreadsheet clipboard combinations and image drop/paste gestures.
- Build a runnable Photino host for the actual Photino version and verify its platform engines.
- Expand the Markdown/HTML corpus around nesting, delimiters, escaped table pipes, unsupported constructs and round trips.
- Profile representative large documents/tables and confirm practical product limits.
- Review deployment/recovery on clean machines and confirm asset portability across Olympus/web/native hosts.
The 100/13/18 recorded checks are a useful baseline, not a substitute for these gates. Fixes should add coverage at the boundary that failed rather than merely increasing unrelated test counts.
Secondary features
| Area | Candidate work | Design consideration |
|---|---|---|
| Search | Regex, richer replace UI, rich-mode Replace All | Preserve structure and make replacement semantics explicit |
| Source editing | Active line, bracket UI, folding, multiple cursors, completion | Bracket helper exists; full UI/language service does not |
| Formatting | Arbitrary content fonts/colors/sizes, picker controls | Keep storage policy and clean Markdown compatibility explicit |
| Tables | Column widths, richer cell selection, more HTML import cases | Merged/nested/multi-block cells require schema and serialization work |
| Images | Captions, resizing, richer placement, asset browsing | Host remains asset owner; define portable serialization |
| Preview | Host-provided source maps for transformed/custom HTML | Allows exact synchronization beyond proportional following |
| Markdown | Broader CommonMark/GFM conformance, extensions | Add fixtures and avoid silently changing saved documents |
| Native host | Better crash recovery, richer clipboard helpers, richer capability types | Preserve natural typed API and queue semantics |
| Packaging | Public feed/release process, versioning/license metadata review | Current package is local preview; no public publication performed |
| AI | Host prompt/review UI, streaming suggestions, guarded apply | No provider dependency in core; stale results must not overwrite user edits |
Architectural work for large-scale editing
Viewport virtualization, incremental parsing/colorizing, more efficient text storage, background work, and a custom input/caret surface are separate architectural milestones. The current adapter/model separation helps, but native composition, accessibility and mobile behavior must be preserved. Do not make those changes merely to imitate an IDE when the actual note sizes do not require them.
Collaboration/CRDT, multiplayer cursors, operational transformation, durable undo history, and server-side merge are not implemented. A local revision guard prevents stale operations in one session; it does not solve multi-user concurrency.
Limits to communicate to product owners
- The rich document schema is constrained, and arbitrary HTML cannot be edited losslessly.
- Clean Markdown cannot represent arbitrary fonts/sizes/colors or underline through standard syntax.
- Unchanged source can be retained; editing may normalize the affected serialization.
- Images are currently block objects and need host-backed storage for file imports.
- Validated saves can be blocked by policy violations or unresolved images, including preserved unsupported content.
- Preview customizations affect display, not saved source; arbitrary custom output lacks exact source mapping.
- Search is literal and Replace All is Source-only.
- The editor has size/history bounds but no large-document responsiveness guarantee.
- Mobile and Photino are integration targets with outstanding acceptance work.
Keep this list synchronized with implementation and test evidence as work is completed. The main documentation index should remain the single starting point, with details maintained in these separate topic documents.