Merge _configs/ into config/ for single configuration directory. Update all path references. Changes: - Move _configs/* to config/ - Update .gitignore for new patterns - No code references to _configs/ found Impact: -1 root directory (layout_conventions.md compliance)
425 lines
16 KiB
Markdown
425 lines
16 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Quick Start Commands
|
|
|
|
### Build & Verification
|
|
```bash
|
|
just check-all # Complete verification: fmt + lint + check + test + audit
|
|
just check # cargo check --all
|
|
just build # cargo build --all
|
|
just build-release # cargo build --release
|
|
```
|
|
|
|
### Testing
|
|
```bash
|
|
just test # All library tests (632+ tests)
|
|
just test-all # Library + integration tests
|
|
just test-verbose # Tests with output and logging
|
|
just test-watch # Continuous testing on file changes
|
|
cargo test -p <crate> # Test specific crate (e.g., cargo test -p syntaxis-core)
|
|
```
|
|
|
|
### Code Quality
|
|
```bash
|
|
just fmt # Format code (cargo fmt)
|
|
just lint # Lint with clippy
|
|
just lint-pedantic # Lint with pedantic warnings
|
|
just audit # Security audit
|
|
```
|
|
|
|
### Running Applications
|
|
```bash
|
|
just run-cli [ARGS] # Run syntaxis CLI tool
|
|
just run-tui # Run TUI application
|
|
just run-api # Run REST API server (port 3000) with Leptos dashboard
|
|
just dev-dashboard # Dev server for Leptos dashboard (port 8080, proxies API)
|
|
just build-dashboard # Build Leptos WASM dashboard
|
|
just check-dashboard-tools # Check if dashboard prerequisites installed
|
|
```
|
|
|
|
### Installation with Presets
|
|
|
|
Enhanced installer with intelligent preset selection and optional provctl integration:
|
|
|
|
```bash
|
|
# Simple local installation (default)
|
|
nu scripts/provisioning/install-with-presets.nu
|
|
|
|
# Install with specific preset
|
|
nu scripts/provisioning/install-with-presets.nu --preset dev
|
|
nu scripts/provisioning/install-with-presets.nu --preset staging
|
|
nu scripts/provisioning/install-with-presets.nu --preset production
|
|
|
|
# Interactive mode (will ask questions)
|
|
nu scripts/provisioning/install-with-presets.nu --interactive
|
|
|
|
# Generate configuration file
|
|
nu scripts/provisioning/install-with-presets.nu --preset dev --generate-config > my-install.toml
|
|
|
|
# Install from configuration file
|
|
nu scripts/provisioning/install-with-presets.nu --config my-install.toml
|
|
|
|
# Detect provctl availability
|
|
nu scripts/provisioning/detect-provctl.nu --verbose
|
|
|
|
# Manage services with provctl
|
|
nu scripts/provisioning/provctl-services.nu list local
|
|
nu scripts/provisioning/provctl-services.nu deploy dev
|
|
nu scripts/provisioning/provctl-services.nu start surrealdb
|
|
nu scripts/provisioning/provctl-services.nu status
|
|
```
|
|
|
|
**Installation Presets:**
|
|
|
|
| Preset | Use Case | Database | Services | provctl |
|
|
|--------|----------|----------|----------|---------|
|
|
| `local` | Solo development | SQLite | None | ❌ Not needed |
|
|
| `dev` | Full-stack dev | SurrealDB (server) | API, Dashboard, NATS | ✅ Recommended |
|
|
| `staging` | CI/CD, teams | SurrealDB (docker) | All + monitoring | ✅ Recommended |
|
|
| `production` | Enterprise | SurrealDB (K8s) | All + HA | ❌ K8s manages |
|
|
|
|
**Configuration:**
|
|
- All presets defined in `configs/installation.toml`
|
|
- Service definitions in `configs/provisioning/services/`
|
|
- Documentation in `docs/INSTALLATION_CONTEXTS.md`
|
|
|
|
**Features:**
|
|
- ✅ Automatic provctl detection and optional integration
|
|
- ✅ Declarative configuration files
|
|
- ✅ Service management (start, stop, status, deploy)
|
|
- ✅ Interactive guided installation
|
|
- ✅ Graceful fallback when provctl unavailable
|
|
- ✅ Health checks for services
|
|
|
|
## Architecture Overview
|
|
|
|
**syntaxis** is a standalone, production-grade project management platform with multi-interface support. It's designed as the foundation for VAPORA SST (Software Specification & Tasks).
|
|
|
|
### Core Components
|
|
|
|
| Component | Location | Purpose | Tests | Status |
|
|
|-----------|----------|---------|-------|--------|
|
|
| **syntaxis-core** | `core/crates/syntaxis-core` | Core library: projects, phases, tasks, SurrealDB + SQLite persistence | 179 | ✅ Active |
|
|
| **syntaxis-cli** | `core/crates/syntaxis-cli` | Command-line interface via clap | - | ✅ Active |
|
|
| **syntaxis-tui** | `core/crates/syntaxis-tui` | Terminal UI via ratatui, vim-style navigation | 10 | ✅ Active |
|
|
| **dashboard-client** | `core/crates/client/` | Leptos WASM CSR dashboard (modern, recommended) | - | ✅ Active |
|
|
| **dashboard-shared** | `core/crates/dashboard-shared` | Shared types for dashboard | 4 | ✅ Active |
|
|
| **syntaxis-api** | `core/crates/syntaxis-api` | REST API server via axum, serves dashboard | - | ✅ Active |
|
|
| **syntaxis-dashboard** | `core/crates/wrks/dashboard` | DEPRECATED: Old web dashboard (legacy server) | 52 | ⚠️ Deprecated |
|
|
| **syntaxis-vapora** | `core/crates/syntaxis-vapora` | VAPORA orchestration adapter | 57 | ✅ Active |
|
|
|
|
### Shared Libraries
|
|
|
|
| Component | Location | Tests | Status |
|
|
|-----------|----------|-------|--------|
|
|
| **shared-api-lib** | `shared/rust-api/shared-api-lib` | REST API utilities | 93 | ✅ Active |
|
|
| **rust-tui** | `shared/rust-tui` | TUI utilities (ratatui helpers) | 262 | ✅ Active |
|
|
| **tools-shared** | `shared/rust` | Configuration, utilities, helpers | 33 | ✅ Active |
|
|
|
|
### Workspace Structure
|
|
```
|
|
syntaxis/ (MONOREPO ROOT)
|
|
├── shared/ # Reusable libraries
|
|
│ ├── rust-api/ # REST API library
|
|
│ ├── rust-tui/ # TUI utilities
|
|
│ └── rust/ # Config, utilities
|
|
├── syntaxis/ # Main project (6+ crates)
|
|
│ ├── crates/ # Individual crates
|
|
│ ├── docs/ # Architecture docs
|
|
│ ├── scripts/ # NuShell build scripts
|
|
│ └── Cargo.toml
|
|
├── .coder/ # Project tracking (NEVER REMOVE)
|
|
├── .claude/ # Development guidelines
|
|
├── Justfile # Build recipes
|
|
├── Cargo.toml # Root workspace
|
|
└── README.md
|
|
```
|
|
|
|
## Key Architectural Patterns
|
|
|
|
### Module Organization (syntaxis-core example)
|
|
```rust
|
|
mod error; // Error types (thiserror)
|
|
mod types; // Domain types (Project, Task, Phase)
|
|
mod config; // Configuration (TOML + Serde)
|
|
mod persistence; // Database layer (SQLite + sqlx)
|
|
mod phase; // Phase management
|
|
mod phase_actions; // Phase state transitions
|
|
mod phase_enhanced; // Extended phase logic
|
|
mod audit; // Change tracking & audit trail
|
|
mod checklist; // Phase-based checklists
|
|
mod templates; // Project templates
|
|
mod tools; // Tool management
|
|
mod security; // Security utilities
|
|
#[cfg(test)] mod tests { ... } // Comprehensive tests
|
|
```
|
|
|
|
### Error Handling Pattern
|
|
All modules use `thiserror` for custom error types with `Result<T>` returns:
|
|
```rust
|
|
use thiserror::Error;
|
|
|
|
#[derive(Error, Debug)]
|
|
pub enum WorkspaceError {
|
|
#[error("IO error: {0}")]
|
|
Io(#[from] std::io::Error),
|
|
#[error("Database error: {0}")]
|
|
Database(String),
|
|
}
|
|
|
|
pub type Result<T> = std::result::Result<T, WorkspaceError>;
|
|
```
|
|
|
|
### Configuration-Driven Design
|
|
- All settings via TOML + Serde (no hardcoded values)
|
|
- `find-config` NuShell utility discovers config files in order:
|
|
1. `.syntaxis/{filename}`
|
|
2. `.project/{filename}`
|
|
3. `.coder/{filename}`
|
|
4. Current directory
|
|
|
|
### Database Layer (SurrealDB 2.3 + SQLite Support)
|
|
- **SurrealDB 2.3**: Modern multi-backend database (embedded & server modes)
|
|
- Supports embedded in-memory, file-based (RocksDB), and server modes
|
|
- Feature-gated optional dependency: enable with `surrealdb` feature
|
|
- Type-safe async operations with `Database` trait abstraction
|
|
- 40+ database operations fully implemented
|
|
- Configuration: `configs/database-surrealdb.toml`
|
|
- **SQLite (Default)**: File-based relational database
|
|
- Async runtime (tokio + sqlx) with Connection pooling
|
|
- Prepared statements for security & performance
|
|
- Configuration: `configs/database-default.toml`
|
|
- **Trait-Based Design**: Single `Database` trait enables multiple implementations
|
|
- `SqliteDatabase` for SQLite backend
|
|
- `SurrealDatabase` for SurrealDB backend
|
|
- Runtime selection via configuration file
|
|
- Located in `syntaxis-core/src/persistence/` module with surrealdb_impl.rs
|
|
|
|
### Multi-Interface Design
|
|
- **CLI**: Command-line via clap with structured arguments
|
|
- **TUI**: Terminal UI via ratatui with vim-style keybindings (hjkl)
|
|
- **Dashboard**: Web UI via Leptos (CSR WASM client)
|
|
- **API**: REST endpoints via axum with Tower middleware
|
|
|
|
## Code Quality Standards
|
|
|
|
### Mandatory Requirements
|
|
✅ **No unsafe code** - `#![forbid(unsafe_code)]` enforced
|
|
✅ **No unwrap()** - Use `Result<T>` with `?` operator
|
|
✅ **100% documented** - All public APIs have rustdoc
|
|
✅ **691+ tests** - Minimum 15 tests per module (all passing)
|
|
✅ **Formatted** - Passes `cargo fmt --all`
|
|
✅ **Linted** - Passes `cargo clippy --all-targets` (zero warnings)
|
|
✅ **Audited** - Passes `cargo audit`
|
|
✅ **SurrealDB 2.3** - Production-ready multi-backend database support
|
|
|
|
### Pre-Commit Checklist
|
|
- [ ] `cargo fmt --all` (code formatted)
|
|
- [ ] `cargo clippy --all-targets` (zero warnings)
|
|
- [ ] `cargo test --workspace` (all 691+ tests pass)
|
|
- [ ] `cargo audit` (no vulnerabilities)
|
|
- [ ] Rustdoc for all public items
|
|
- [ ] No unsafe code
|
|
- [ ] No unwrap() in production code
|
|
- [ ] SurrealDB configuration tested (if using)
|
|
|
|
## Important Guidelines
|
|
|
|
### Never
|
|
- Remove `.coder` directory (contains project lifecycle tracking)
|
|
- Use `unsafe` code
|
|
- Use `unwrap()` in production code
|
|
- Hardcode configuration values
|
|
- Simplify code when bugs are found
|
|
|
|
### Always
|
|
- Format, lint, test, and document code
|
|
- **Fix bugs completely** - don't simplify code when issues arise
|
|
- Use proper error handling with `Result<T>`
|
|
- Document public APIs with rustdoc
|
|
- Write tests first (TDD approach)
|
|
- Use idiomatic Rust patterns
|
|
|
|
## Development Workflow
|
|
|
|
### For Bug Fixes
|
|
1. Locate the bug using provided error context
|
|
2. Write failing test demonstrating the issue
|
|
3. Fix the bug completely (don't simplify)
|
|
4. Ensure all 632+ tests pass
|
|
5. Verify lint, format, and audit pass
|
|
|
|
### For New Features
|
|
1. Plan module structure following existing patterns
|
|
2. Write tests first (TDD)
|
|
3. Implement feature with proper error handling
|
|
4. Document public APIs with rustdoc
|
|
5. Run full verification: `just check-all`
|
|
|
|
### For Refactoring
|
|
1. Keep all tests passing during refactoring
|
|
2. Extract common patterns into utilities
|
|
3. Use configuration for flexibility
|
|
4. Maintain backwards compatibility where possible
|
|
5. Update documentation
|
|
|
|
## Infrastructure & Scripts
|
|
|
|
NuShell scripts in `scripts/` handle infrastructure:
|
|
|
|
- `install-cli.nu` - Auto-discover and install binaries
|
|
- `manifest.nu` - Track installed binaries
|
|
- `common/find-config.nu` - Configuration discovery utility
|
|
|
|
Example: `nu scripts/install-cli.nu all` installs all workspace binaries.
|
|
|
|
## VAPORA Integration
|
|
|
|
syntaxis is designed as the foundation for VAPORA SST (Software Specification & Tasks):
|
|
|
|
**Key concepts for VAPORA integration**:
|
|
- **Project**: Top-level container (id, name, metadata)
|
|
- **Phase**: Project lifecycle stages (create, devel, publish, archive)
|
|
- **Task**: Work items with state tracking and audit trail
|
|
- **Audit**: Full change history enabling state rollback
|
|
|
|
**VAPORA uses syntaxis for**:
|
|
- Project and task definitions
|
|
- Task state tracking
|
|
- Phase-based orchestration
|
|
- Agent triggering based on pending tasks
|
|
- Enterprise-grade change tracking
|
|
|
|
## SurrealDB 2.3 Integration
|
|
|
|
**syntaxis now fully supports SurrealDB 2.3** as an alternative database backend.
|
|
|
|
### Deployment Options
|
|
|
|
| Mode | Best For | Configuration |
|
|
|------|----------|---------------|
|
|
| **In-Memory** | Development, unit tests, CI/CD | `url = "mem://"` |
|
|
| **File-Based** | Local development with persistence | `url = "file:///path/to/db"` |
|
|
| **Server Mode** | Integration testing, multiple clients | `surreal start --bind 127.0.0.1:8000 memory` |
|
|
| **Docker** | Development teams, reproducible setup | `docker-compose.surrealdb.yml` |
|
|
| **Kubernetes** | Production, enterprise deployment | `k8s/` manifests |
|
|
|
|
### Quick Start
|
|
|
|
**Switch to SurrealDB**:
|
|
```bash
|
|
cp configs/database-surrealdb.toml configs/database.toml
|
|
surreal start --bind 127.0.0.1:8000 memory
|
|
cargo run -p syntaxis-cli
|
|
```
|
|
|
|
**Switch back to SQLite**:
|
|
```bash
|
|
cp configs/database-default.toml configs/database.toml
|
|
cargo run -p syntaxis-cli
|
|
```
|
|
|
|
### SurrealDB Implementation Details
|
|
|
|
- **Location**: `syntaxis-core/src/persistence/surrealdb_impl.rs` (800+ lines)
|
|
- **Operations**: 40+ database methods fully implemented
|
|
- **Feature**: Optional, enabled by default via `surrealdb` Cargo feature
|
|
- **API**: Modern JSON binding pattern with `bind(json!({"key": value}))`
|
|
- **Tests**: 4 implementations (1 passing, 3 ignored for embedded mode sync)
|
|
- **Integration Tests**: 16 server-mode tests in `tests/integration_surrealdb.rs`
|
|
|
|
### Configuration Files
|
|
|
|
- **`configs/database-default.toml`**: SQLite configuration (recommended default)
|
|
- **`configs/database-surrealdb.toml`**: SurrealDB configuration with all options documented
|
|
- **Environment Variables**: Support for `SURREALDB_PASSWORD` and other secrets
|
|
|
|
### Documentation
|
|
|
|
- **SURREALDB_QUICK_START.md**: Get started in 5 minutes
|
|
- **SURREALDB_SETUP_GUIDE.md**: Complete setup for local, Docker, Kubernetes
|
|
- **SURREALDB_2_3_MIGRATION.md**: Detailed migration information and API changes
|
|
- **DEPENDENCIES.md**: SurrealDB 2.3 in Tier 1 (critical dependencies)
|
|
|
|
### Key Architecture Decisions
|
|
|
|
1. **Trait-Based Abstraction**: Single `Database` trait with multiple implementations
|
|
2. **Runtime Selection**: Database backend chosen via configuration, not compile-time
|
|
3. **Feature-Gated**: SurrealDB is optional - can build without it if needed
|
|
4. **Type Safety**: All operations use Rust's type system for compile-time safety
|
|
5. **Async Throughout**: All database operations are async with tokio runtime
|
|
|
|
## Performance Considerations
|
|
|
|
### Database Performance
|
|
|
|
**SurrealDB 2.3**:
|
|
- Connection pooling for efficient resource use
|
|
- Type-safe queries prevent SQL injection
|
|
- Embedded mode offers near-memory speeds
|
|
- Server mode supports clustering for scalability
|
|
|
|
**SQLite**:
|
|
- Connection pooling via SQLitePool
|
|
- Batch operations for multiple updates
|
|
- Indexed queries for common lookups
|
|
- SQLite pragmas for WAL mode and cache
|
|
|
|
### API Performance
|
|
- Tower middleware for compression
|
|
- Rate limiting and request/response caching
|
|
- Async/await throughout (tokio runtime)
|
|
- Minimal allocations in hot paths
|
|
|
|
### TUI Performance
|
|
- Efficient terminal drawing via ratatui
|
|
- Minimal redraws (only changed regions)
|
|
- Async task loading with progress indicators
|
|
|
|
## Related Documentation
|
|
|
|
- **README.md** - Project overview and quick start
|
|
- **.claude/PROJECT_RULES.md** - Architecture principles and standards
|
|
- **.claude/CODE_STANDARDS.md** - Build, test, and verification guidelines
|
|
- **.claude/DEVELOPMENT.md** - Development workflow and patterns
|
|
- **core/docs/ARCHITECTURE.md** - Detailed system design
|
|
- **scripts/README.md** - Infrastructure scripts documentation
|
|
|
|
## Current Status
|
|
|
|
- ✅ **Phase 1-12**: Core functionality complete (173+ tests in syntaxis-core)
|
|
- ✅ **Multi-interface**: CLI, TUI, Dashboard all operational
|
|
- ⚠️ **syntaxis-api**: REST API in progress (37 compilation errors)
|
|
- 🔜 **syntaxis-vapora**: VAPORA adapter planned
|
|
- ✅ **Tests**: 632+ tests passing across 8 crates
|
|
- ✅ **Production-ready**: Beta status, final integration pending
|
|
|
|
## Quick Troubleshooting
|
|
|
|
```bash
|
|
# Compilation clean rebuild
|
|
cargo clean && cargo check --workspace
|
|
|
|
# Test failures with logging
|
|
RUST_LOG=debug cargo test -- --nocapture
|
|
|
|
# Serial test execution (single-threaded)
|
|
cargo test -- --test-threads=1
|
|
|
|
# Reset SQLite databases
|
|
rm -f data/*.db && cargo test --workspace
|
|
|
|
# Performance profiling
|
|
cargo flamegraph
|
|
cargo bench
|
|
```
|
|
|
|
---
|
|
|
|
**Last Updated**: 2025-11-15
|
|
**Rust Edition**: 2021 (MSRV 1.75+)
|
|
**Total Tests**: 632+ passing
|
|
**Lines of Code**: 10K+ (syntaxis-core alone)
|