communitas_kanban/lib.rs
1//! # communitas-kanban
2//!
3//! A CRDT-based Kanban system for Communitas.
4//!
5//! This crate provides offline-first, peer-to-peer collaborative project boards
6//! with conflict-free synchronization via Yrs (Yjs) CRDTs.
7//!
8//! ## Features
9//!
10//! - **Boards**: Kanban boards owned by Projects
11//! - **Columns**: Workflow stages with optional WIP limits
12//! - **Cards**: Work items with rich text descriptions, checklists, assignments
13//! - **Steps**: Checklist items within cards
14//! - **Comments**: Threaded discussions on cards
15//! - **Tags**: Categorization and filtering
16//! - **Filtering**: Filter cards by state, assignee, tags, due dates
17//!
18//! ## Architecture
19//!
20//! - **Normalized Data Model**: Cards stored in global registry, columns store card IDs
21//! - **Atomic Operations**: Card moves use single CRDT transactions
22//! - **OR-Set Collections**: Conflict-free add/remove for assignees and tags
23//! - **YText Rich Text**: Collaborative editing for descriptions and comments
24//!
25//! ## Usage
26//!
27//! ```ignore
28//! use communitas_kanban::{KanbanService, BoardSettings};
29//!
30//! let service = KanbanService::new(crdt_manager, peer_id);
31//!
32//! // Create a board for a project
33//! let board = service.create_board("project-four-words", "Sprint 1".to_string(), None).await?;
34//!
35//! // Add columns
36//! let todo = service.add_column(&board.id, "To Do".to_string(), None).await?;
37//! let done = service.add_column(&board.id, "Done".to_string(), None).await?;
38//!
39//! // Create and move cards
40//! let card = service.create_card(&board.id, &todo.id, "Task 1".to_string(), None).await?;
41//! service.move_card(&board.id, &card.id, &done.id, 0).await?;
42//! ```
43
44#![forbid(unsafe_code)]
45#![deny(clippy::unwrap_used, clippy::expect_used, clippy::panic)]
46#![warn(missing_docs, clippy::missing_docs_in_private_items)]
47
48mod analytics;
49mod error;
50mod filter;
51mod operations;
52mod service;
53mod state_machine;
54mod types;
55
56// Re-exports
57pub use analytics::{
58 BoardAnalytics, BurndownChart, BurndownDataPoint, CycleTimeBucket, CycleTimeDistribution,
59 TimeRange, VelocityDataPoint, VelocityMetric,
60};
61pub use error::{KanbanError, KanbanResult};
62pub use filter::CardFilter;
63pub use service::KanbanService;
64pub use state_machine::CardState;
65pub use types::{
66 Board, BoardSettings, BoardUpdate, Card, CardUpdate, Column, ColumnUpdate, Comment,
67 KanbanEvent, Priority, Step, Tag,
68};