Addition of roadmap.md and decisions.md
This commit is contained in:
parent
c12816c09c
commit
24ed7f2655
2 changed files with 711 additions and 0 deletions
352
decisions.md
Normal file
352
decisions.md
Normal file
|
|
@ -0,0 +1,352 @@
|
||||||
|
# DECISIONS
|
||||||
|
|
||||||
|
This document records major architectural and product decisions made during the development of Sapling.
|
||||||
|
|
||||||
|
The goal is to preserve context and reasoning behind decisions so future contributors can understand why a particular approach was chosen.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# D-001 — Sapling Is Local-First
|
||||||
|
|
||||||
|
Date: 2025-08
|
||||||
|
|
||||||
|
Status: Accepted
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
Sapling will be a local-first application.
|
||||||
|
|
||||||
|
All user content lives on the local filesystem.
|
||||||
|
|
||||||
|
No Sapling-managed cloud service will be required.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
Users should own their data.
|
||||||
|
|
||||||
|
Files must remain accessible outside of Sapling.
|
||||||
|
|
||||||
|
The application should continue functioning without network connectivity.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
Positive:
|
||||||
|
|
||||||
|
- No vendor lock-in
|
||||||
|
- Offline support
|
||||||
|
- Simpler privacy story
|
||||||
|
- Easier long-term maintenance
|
||||||
|
|
||||||
|
Negative:
|
||||||
|
|
||||||
|
- No built-in synchronization
|
||||||
|
- Collaboration relies on Git workflows
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# D-002 — Git Is Infrastructure, Not the Product
|
||||||
|
|
||||||
|
Date: 2025-08
|
||||||
|
|
||||||
|
Status: Accepted
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
Git will be a first-class capability but not the primary user-facing concept.
|
||||||
|
|
||||||
|
The editor and workspace experience take precedence over Git terminology.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
Most users want versioning benefits without learning Git internals.
|
||||||
|
|
||||||
|
Sapling should remain approachable to writers, researchers, and knowledge workers.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
User interfaces should prefer language such as:
|
||||||
|
|
||||||
|
- Snapshot
|
||||||
|
- Changes
|
||||||
|
- History
|
||||||
|
|
||||||
|
over:
|
||||||
|
|
||||||
|
- Commit
|
||||||
|
- Staging
|
||||||
|
- Reflog
|
||||||
|
|
||||||
|
Advanced Git functionality will remain available.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# D-003 — Projects Are Git Repositories
|
||||||
|
|
||||||
|
Date: 2025-08
|
||||||
|
|
||||||
|
Status: Accepted
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
Every Sapling project corresponds directly to a Git repository.
|
||||||
|
|
||||||
|
No custom repository format will be introduced.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
Git repositories are portable and understood by existing tooling.
|
||||||
|
|
||||||
|
Users should be able to move between Sapling and other Git tools without migration.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
Projects can be opened in:
|
||||||
|
|
||||||
|
- Terminal
|
||||||
|
- GitHub Desktop
|
||||||
|
- SourceTree
|
||||||
|
- VS Code
|
||||||
|
- Any Git client
|
||||||
|
|
||||||
|
without conversion.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# D-004 — Workspaces Are Not Versioned
|
||||||
|
|
||||||
|
Date: 2025-08
|
||||||
|
|
||||||
|
Status: Accepted
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
Workspaces are organizational containers and are not Git repositories.
|
||||||
|
|
||||||
|
Projects are versioned.
|
||||||
|
|
||||||
|
Workspaces are not.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
Users need a place for temporary notes, drafts, and experimentation.
|
||||||
|
|
||||||
|
Not everything should require commits.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
Workspace structure exists outside repository history.
|
||||||
|
|
||||||
|
Projects remain independently portable.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# D-005 — Attachments Belong to Projects
|
||||||
|
|
||||||
|
Date: 2025-08
|
||||||
|
|
||||||
|
Status: Accepted
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
Attachments are stored inside project directories.
|
||||||
|
|
||||||
|
They are not stored in a database.
|
||||||
|
|
||||||
|
They are not stored in a global asset store.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
Repositories should remain self-contained.
|
||||||
|
|
||||||
|
Cloning a repository should retrieve everything required to render its content.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
Projects remain portable.
|
||||||
|
|
||||||
|
Attachments participate naturally in version control.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# D-006 — Large Assets Use Git LFS
|
||||||
|
|
||||||
|
Date: 2025-08
|
||||||
|
|
||||||
|
Status: Accepted
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
Large binary files should be managed through Git LFS.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
Repositories containing images, PDFs, design assets, and media files can become excessively large.
|
||||||
|
|
||||||
|
Git LFS is the industry-standard solution.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
Sapling must detect and assist with LFS configuration.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# D-007 — Subprojects Use Git Submodules
|
||||||
|
|
||||||
|
Date: 2025-08
|
||||||
|
|
||||||
|
Status: Accepted
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
Nested projects are implemented using Git submodules.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
Submodules provide an existing, portable, Git-native solution.
|
||||||
|
|
||||||
|
No custom dependency system is required.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
Sapling must provide a significantly better UX around submodules than traditional Git tools.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# D-008 — Hybrid Markdown Editing Is a Core Feature
|
||||||
|
|
||||||
|
Date: 2025-08
|
||||||
|
|
||||||
|
Status: Accepted
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
Sapling will implement hybrid Markdown editing.
|
||||||
|
|
||||||
|
The active line displays source.
|
||||||
|
|
||||||
|
Inactive lines display rendered content.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
This editing model combines the readability of rendered Markdown with the precision of source editing.
|
||||||
|
|
||||||
|
It is one of the primary differentiators of Sapling.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
The editor becomes a critical architectural component.
|
||||||
|
|
||||||
|
Prototype and validation work should occur early.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# D-009 — The Editor Is the Highest-Priority System
|
||||||
|
|
||||||
|
Date: 2025-08
|
||||||
|
|
||||||
|
Status: Accepted
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
Editor quality takes precedence over Git features.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
Users tolerate missing Git features.
|
||||||
|
|
||||||
|
Users do not tolerate poor editing experiences.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
Development milestones should prioritize:
|
||||||
|
|
||||||
|
1. Editing
|
||||||
|
2. Rendering
|
||||||
|
3. Workspace management
|
||||||
|
4. Git integration
|
||||||
|
|
||||||
|
in that order.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# D-010 — Git Access Must Be Abstracted
|
||||||
|
|
||||||
|
Date: 2025-08
|
||||||
|
|
||||||
|
Status: Accepted
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
All Git functionality must be accessed through a GitProvider abstraction.
|
||||||
|
|
||||||
|
Application code should never invoke Git directly.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
macOS and iOS have different implementation requirements.
|
||||||
|
|
||||||
|
A clean abstraction improves portability and testability.
|
||||||
|
|
||||||
|
## Initial Implementations
|
||||||
|
|
||||||
|
MacGitProvider
|
||||||
|
|
||||||
|
- Uses system Git
|
||||||
|
|
||||||
|
EmbeddedGitProvider
|
||||||
|
|
||||||
|
- Future iOS implementation
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
All repository operations must remain implementation-agnostic.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# D-011 — Markdown Files Remain Standard Markdown
|
||||||
|
|
||||||
|
Date: 2025-08
|
||||||
|
|
||||||
|
Status: Accepted
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
Sapling documents are standard Markdown files.
|
||||||
|
|
||||||
|
No proprietary format will be introduced.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
Users should be free to edit documents with any editor.
|
||||||
|
|
||||||
|
Knowledge should not be trapped inside Sapling.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
Any Sapling-specific features should degrade gracefully in standard Markdown environments.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# D-012 — Platform Focus
|
||||||
|
|
||||||
|
Date: 2025-08
|
||||||
|
|
||||||
|
Status: Accepted
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
macOS is the primary target platform.
|
||||||
|
|
||||||
|
iOS support is a secondary objective.
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
The desktop writing experience is the primary use case.
|
||||||
|
|
||||||
|
Starting with macOS reduces complexity and accelerates development.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
Architecture should remain cross-platform where practical.
|
||||||
|
|
||||||
|
Product decisions should optimize for desktop workflows first.
|
||||||
359
roadmap.md
Normal file
359
roadmap.md
Normal file
|
|
@ -0,0 +1,359 @@
|
||||||
|
# ROADMAP
|
||||||
|
|
||||||
|
# Sapling Roadmap
|
||||||
|
|
||||||
|
This roadmap defines the major milestones required to transform Sapling from a prototype into a production-ready Git-native Markdown workspace.
|
||||||
|
|
||||||
|
The roadmap focuses on delivering complete user workflows rather than isolated technical features.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Vision
|
||||||
|
|
||||||
|
Sapling is a local-first, open-source, Git-native Markdown workspace.
|
||||||
|
|
||||||
|
Users should be able to:
|
||||||
|
|
||||||
|
- Write documents
|
||||||
|
- Organize knowledge
|
||||||
|
- Manage projects
|
||||||
|
- Version their work
|
||||||
|
- Synchronize through Git
|
||||||
|
- Own their data
|
||||||
|
|
||||||
|
without relying on proprietary services.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Milestone 0 — Foundation
|
||||||
|
|
||||||
|
Status: In Progress
|
||||||
|
|
||||||
|
Goal:
|
||||||
|
|
||||||
|
Create a buildable application with a stable architecture and development workflow.
|
||||||
|
|
||||||
|
Deliverables:
|
||||||
|
|
||||||
|
- Project scaffolding
|
||||||
|
- Shared macOS / iOS architecture
|
||||||
|
- Core domain models
|
||||||
|
- Dependency injection
|
||||||
|
- Settings system
|
||||||
|
- Logging infrastructure
|
||||||
|
- Automated formatting and linting
|
||||||
|
|
||||||
|
Success Criteria:
|
||||||
|
|
||||||
|
- Application builds and launches
|
||||||
|
- Core modules communicate correctly
|
||||||
|
- Development workflow is stable
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Milestone 1 — Editor Prototype
|
||||||
|
|
||||||
|
Status: Planned
|
||||||
|
|
||||||
|
Goal:
|
||||||
|
|
||||||
|
Validate Sapling's most important feature: the editing experience.
|
||||||
|
|
||||||
|
Deliverables:
|
||||||
|
|
||||||
|
- File tree sidebar
|
||||||
|
- Document opening
|
||||||
|
- Document saving
|
||||||
|
- Markdown editor
|
||||||
|
- Keyboard navigation
|
||||||
|
- Undo / redo
|
||||||
|
- Syntax highlighting
|
||||||
|
|
||||||
|
Research:
|
||||||
|
|
||||||
|
Investigate implementation options:
|
||||||
|
|
||||||
|
- SwiftUI TextEditor
|
||||||
|
- NSTextView
|
||||||
|
- UITextView
|
||||||
|
- Custom text engine
|
||||||
|
|
||||||
|
Success Criteria:
|
||||||
|
|
||||||
|
- Comfortable editing experience
|
||||||
|
- Able to write and edit long documents
|
||||||
|
- No major cursor or selection issues
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Milestone 2 — Hybrid Markdown Editing
|
||||||
|
|
||||||
|
Status: Planned
|
||||||
|
|
||||||
|
Goal:
|
||||||
|
|
||||||
|
Implement Sapling's signature editing experience.
|
||||||
|
|
||||||
|
Behavior:
|
||||||
|
|
||||||
|
- Current line displays Markdown source
|
||||||
|
- Non-active lines display rendered content
|
||||||
|
- Editing feels seamless
|
||||||
|
|
||||||
|
Supported Elements:
|
||||||
|
|
||||||
|
- Headings
|
||||||
|
- Emphasis
|
||||||
|
- Links
|
||||||
|
- Lists
|
||||||
|
- Task lists
|
||||||
|
- Code blocks
|
||||||
|
|
||||||
|
Success Criteria:
|
||||||
|
|
||||||
|
- Writing feels faster than traditional split-view editing
|
||||||
|
- Rendering updates in real time
|
||||||
|
- Cursor behavior remains intuitive
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Milestone 3 — Rendering Engine
|
||||||
|
|
||||||
|
Status: Planned
|
||||||
|
|
||||||
|
Goal:
|
||||||
|
|
||||||
|
Provide high-quality Markdown rendering.
|
||||||
|
|
||||||
|
Deliverables:
|
||||||
|
|
||||||
|
- Full Markdown support
|
||||||
|
- Syntax-highlighted code blocks
|
||||||
|
- Tables
|
||||||
|
- Callouts
|
||||||
|
- Footnotes
|
||||||
|
- Wikilinks
|
||||||
|
|
||||||
|
Additional Support:
|
||||||
|
|
||||||
|
- LaTeX
|
||||||
|
- Mermaid diagrams
|
||||||
|
- Image rendering
|
||||||
|
|
||||||
|
Success Criteria:
|
||||||
|
|
||||||
|
- Most Obsidian-style documents render correctly
|
||||||
|
- Rendering performance remains smooth
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Milestone 4 — Workspace Management
|
||||||
|
|
||||||
|
Status: Planned
|
||||||
|
|
||||||
|
Goal:
|
||||||
|
|
||||||
|
Introduce Sapling's organizational model.
|
||||||
|
|
||||||
|
Deliverables:
|
||||||
|
|
||||||
|
- Workspace creation
|
||||||
|
- Folder management
|
||||||
|
- File management
|
||||||
|
- Project management
|
||||||
|
- Drag and drop support
|
||||||
|
|
||||||
|
Concepts:
|
||||||
|
|
||||||
|
- Workspace
|
||||||
|
- Project
|
||||||
|
- Folder
|
||||||
|
- Document
|
||||||
|
- Attachment
|
||||||
|
|
||||||
|
Success Criteria:
|
||||||
|
|
||||||
|
- Users can organize real-world projects
|
||||||
|
- Workspace structure feels natural
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Milestone 5 — Git Foundation
|
||||||
|
|
||||||
|
Status: Planned
|
||||||
|
|
||||||
|
Goal:
|
||||||
|
|
||||||
|
Introduce Git as a first-class concept.
|
||||||
|
|
||||||
|
Deliverables:
|
||||||
|
|
||||||
|
- Repository initialization
|
||||||
|
- Repository opening
|
||||||
|
- Repository status
|
||||||
|
- Commit creation
|
||||||
|
- History viewing
|
||||||
|
|
||||||
|
User Language:
|
||||||
|
|
||||||
|
Prefer:
|
||||||
|
|
||||||
|
- Snapshot
|
||||||
|
- Changes
|
||||||
|
- History
|
||||||
|
|
||||||
|
Instead of exposing Git terminology everywhere.
|
||||||
|
|
||||||
|
Success Criteria:
|
||||||
|
|
||||||
|
- Users can version documents without using a terminal
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Milestone 6 — Attachments
|
||||||
|
|
||||||
|
Status: Planned
|
||||||
|
|
||||||
|
Goal:
|
||||||
|
|
||||||
|
Support rich project assets.
|
||||||
|
|
||||||
|
Deliverables:
|
||||||
|
|
||||||
|
- Image attachments
|
||||||
|
- Drag and drop import
|
||||||
|
- Automatic link generation
|
||||||
|
- Attachment browser
|
||||||
|
|
||||||
|
Future Support:
|
||||||
|
|
||||||
|
- PDFs
|
||||||
|
- Audio
|
||||||
|
- Video
|
||||||
|
- Design assets
|
||||||
|
|
||||||
|
Success Criteria:
|
||||||
|
|
||||||
|
- Attachments integrate naturally into documents
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Milestone 7 — Git Collaboration
|
||||||
|
|
||||||
|
Status: Planned
|
||||||
|
|
||||||
|
Goal:
|
||||||
|
|
||||||
|
Support synchronization and collaboration.
|
||||||
|
|
||||||
|
Deliverables:
|
||||||
|
|
||||||
|
- Remotes
|
||||||
|
- Push
|
||||||
|
- Pull
|
||||||
|
- Fetch
|
||||||
|
- Branch creation
|
||||||
|
- Branch switching
|
||||||
|
|
||||||
|
Success Criteria:
|
||||||
|
|
||||||
|
- Projects can be synchronized across machines
|
||||||
|
- Basic collaboration workflows are supported
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Milestone 8 — Git LFS
|
||||||
|
|
||||||
|
Status: Planned
|
||||||
|
|
||||||
|
Goal:
|
||||||
|
|
||||||
|
Support large project assets.
|
||||||
|
|
||||||
|
Deliverables:
|
||||||
|
|
||||||
|
- Git LFS initialization
|
||||||
|
- Automatic asset tracking
|
||||||
|
- LFS status indicators
|
||||||
|
|
||||||
|
Success Criteria:
|
||||||
|
|
||||||
|
- Large attachments work reliably
|
||||||
|
- Repository portability is maintained
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Milestone 9 — Subprojects
|
||||||
|
|
||||||
|
Status: Planned
|
||||||
|
|
||||||
|
Goal:
|
||||||
|
|
||||||
|
Support modular project composition.
|
||||||
|
|
||||||
|
Implementation:
|
||||||
|
|
||||||
|
- Git submodules
|
||||||
|
|
||||||
|
Deliverables:
|
||||||
|
|
||||||
|
- Add subproject
|
||||||
|
- Remove subproject
|
||||||
|
- Update subproject
|
||||||
|
- Browse subproject contents
|
||||||
|
|
||||||
|
Success Criteria:
|
||||||
|
|
||||||
|
- Nested repositories behave naturally
|
||||||
|
- Complex knowledge structures are possible
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Milestone 10 — macOS Release Candidate
|
||||||
|
|
||||||
|
Status: Planned
|
||||||
|
|
||||||
|
Goal:
|
||||||
|
|
||||||
|
Prepare Sapling for public use.
|
||||||
|
|
||||||
|
Deliverables:
|
||||||
|
|
||||||
|
- Performance optimization
|
||||||
|
- Accessibility review
|
||||||
|
- Documentation
|
||||||
|
- Settings UI
|
||||||
|
- Error handling
|
||||||
|
- Migration support
|
||||||
|
- Packaging and distribution
|
||||||
|
|
||||||
|
Success Criteria:
|
||||||
|
|
||||||
|
- Daily-driver quality
|
||||||
|
- Stable for real projects
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Future Exploration
|
||||||
|
|
||||||
|
Potential features after v1.0:
|
||||||
|
|
||||||
|
- iOS application
|
||||||
|
- Plugin system
|
||||||
|
- Custom themes
|
||||||
|
- Command palette
|
||||||
|
- Workspace templates
|
||||||
|
- Advanced graph views
|
||||||
|
- Repository health checks
|
||||||
|
- Knowledge publishing workflows
|
||||||
|
- Alternative Git backends
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Guiding Principle
|
||||||
|
|
||||||
|
The editor is the product.
|
||||||
|
|
||||||
|
Git is infrastructure.
|
||||||
|
|
||||||
|
Every milestone should improve the writing and knowledge-management experience first.
|
||||||
Loading…
Add table
Reference in a new issue