Files
bbs-md/.planning/STATE.md
T
ruohki d9db04fb01 docs(01-03): complete app event loop and Phase 1 wiring plan
- 01-03-SUMMARY.md: documents App struct, event loop, double-Ctrl+C state machine, main.rs pipeline
- STATE.md: Phase 1 complete, 3/3 plans done, Phase 2 next, 01-03 decisions recorded
- ROADMAP.md: Phase 1 marked Complete (3 plans / 3 summaries)
- REQUIREMENTS.md: SHEL-01 marked complete
2026-02-28 21:20:02 +01:00

73 lines
2.9 KiB
Markdown

# Project State
## Project Reference
See: .planning/PROJECT.md (updated 2026-02-28)
**Core value:** Users can connect via SSH and seamlessly browse a vault of linked markdown documents with retro BBS aesthetics
**Current focus:** Phase 1 complete — Phase 2 next (Content Rendering)
## Current Position
Phase: 1 of 4 (Safety Foundation) — COMPLETE
Plan: 3 of 3 in current phase (all plans done)
Status: Phase 1 complete — Phase 2 ready to start
Last activity: 2026-02-28 — Plan 03 complete (event loop + main.rs wiring)
Progress: [███░░░░░░░] 25%
## Performance Metrics
**Velocity:**
- Total plans completed: 3
- Average duration: 2.3 min
- Total execution time: 0.12 hours
**By Phase:**
| Phase | Plans | Total | Avg/Plan |
|-------|-------|-------|----------|
| 01-safety-foundation | 3 | 7 min | 2.3 min |
**Recent Trend:**
- Last 5 plans: 2 min, 3 min, 2 min
- Trend: Stable
*Updated after each plan completion*
## Accumulated Context
### Decisions
Decisions are logged in PROJECT.md Key Decisions table.
Recent decisions affecting current work:
- Pre-Phase 1: Verify `edition = "2024"` compiles before changing to 2021 — leave it if `cargo build` succeeds
- Pre-Phase 1: Use pulldown-cmark event-based approach for markdown parsing (not comrak)
- Pre-Phase 1: No tokio/async runtime — synchronous event loop only
- Pre-Phase 2: Choose wiki-link parsing strategy before implementation (regex pre-pass vs post-parse interception)
- 01-01: Resolve relative vault_path against config file parent dir (not cwd) — bbs.toml lives next to binary
- 01-01: detect_login_shell() called before parse_cli() — both read argv[0], parse_cli strips the dash
- 01-02: Use ratatui::crossterm re-export path — crossterm is transitive dep, not direct dep in Cargo.toml
- 01-02: SIGINT not registered via signal-hook — crossterm key events handle double-press Ctrl+C in Plan 03
- 01-02: restore_terminal() skips ratatui::restore() — that would call LeaveAlternateScreen (never entered)
- 01-03: show_goodbye() called after restore_terminal() — terminal must be in cooked mode before println! is safe
- 01-03: app_config stored in App struct for Phase 2 access — vault_path accessible inside event loop
- 01-03: Quit prompt cleared on any non-Ctrl+C key — pressing any key dismisses double-press window
### Pending Todos
None.
### Blockers/Concerns
- **REND**: Verify ratatui 0.30 custom Widget trait signature before building BBS widgets (changed between 0.28 and 0.29)
- **NAV**: Path traversal via wiki-links must be addressed in Phase 3 link resolver — canonicalize and prefix-check every resolved path
- **LIVE**: notify 8.x API must be verified at integration time; watch only current file (not full vault) to avoid inotify exhaustion
## Session Continuity
Last session: 2026-02-28
Stopped at: Completed 01-03-PLAN.md — Phase 1 complete, app event loop and main.rs pipeline committed
Resume file: .planning/phases/02-content-rendering/ (next phase)