From 279694a529664dbf1265a4942ef80b0db297dfcf Mon Sep 17 00:00:00 2001 From: Thomas Luizon Rodrigues Gregorio Date: Fri, 3 Jul 2026 19:34:56 -0300 Subject: [PATCH 1/2] =?UTF-8?q?chore:=20prune=20superseded=20root=20docs?= =?UTF-8?q?=20=E2=80=94=20description.md=20+=20mangled=20planning=20orphan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removes two dead root-level docs superseded by README.md; the second is a path-collapsed junk filename. Docs-only; no code references them. Refs thomasluizon/orbit-ui-mobile#380 Co-Authored-By: Claude Fable 5 --- ...rojectsOrbit.planning06-02-start-time.txt" | 2 - description.md | 243 ------------------ 2 files changed, 245 deletions(-) delete mode 100644 "C\357\200\272UsersthomaDocumentsProgrammingProjectsOrbit.planning06-02-start-time.txt" delete mode 100644 description.md diff --git "a/C\357\200\272UsersthomaDocumentsProgrammingProjectsOrbit.planning06-02-start-time.txt" "b/C\357\200\272UsersthomaDocumentsProgrammingProjectsOrbit.planning06-02-start-time.txt" deleted file mode 100644 index 2c646b7a..00000000 --- "a/C\357\200\272UsersthomaDocumentsProgrammingProjectsOrbit.planning06-02-start-time.txt" +++ /dev/null @@ -1,2 +0,0 @@ -2026-02-09T21:22:48Z -1770672168 diff --git a/description.md b/description.md deleted file mode 100644 index 00d0ba1f..00000000 --- a/description.md +++ /dev/null @@ -1,243 +0,0 @@ -# Orbit Project - Current State Description - -## Project Overview -Orbit is an AI-powered life management application built with .NET 10.0. The system is designed to help users manage habits and tasks through natural language interaction with an AI assistant. The project follows Clean Architecture principles with a clear separation of concerns across multiple layers. - -## Git Status -- **Current Branch**: `setup` -- **Main Branch**: `main` -- **Last Commit**: `a1467c7 - Add initial Orbit solution and project scaffold` -- **Uncommitted Changes**: Multiple new domain, application, and infrastructure files have been added but not yet committed - -## Solution Structure -The solution uses a `.slnx` file (modern Visual Studio solution format) and contains four projects organized in the `/src` directory: - -### 1. **Orbit.Api** (Presentation Layer) -- **Type**: ASP.NET Core Web API (SDK: Microsoft.NET.Sdk.Web) -- **Target Framework**: .NET 10.0 -- **Dependencies**: - - Microsoft.AspNetCore.OpenApi (v10.0.2) - - Orbit.Application (project reference) - - Orbit.Infrastructure (project reference) -- **Current State**: - - Contains default Program.cs with minimal setup - - Only has a sample WeatherForecast endpoint - - OpenAPI/Swagger configured for development environment - - No custom endpoints or controllers implemented yet - - No dependency injection configured for application services - -### 2. **Orbit.Application** (Application Layer) -- **Type**: Class Library (SDK: Microsoft.NET.Sdk) -- **Target Framework**: .NET 10.0 -- **Dependencies**: - - MediatR (v14.0.0) - for CQRS pattern - - Orbit.Domain (project reference) -- **Current State**: - - **COMPLETE** - Chat command handler fully implemented - - **COMPLETE** - Habit commands (Create and Log) fully implemented - - Missing: Task-related commands (not yet created) - - Missing: Query handlers (no read operations implemented) - -#### Implemented Application Features: -1. **Chat Commands** (`/Chat/Commands/`): - - `ProcessUserChatCommand` - Main orchestrator for AI-driven user interactions - - Retrieves user context (active habits, pending tasks) - - Calls AI intent service to interpret user messages - - Executes planned actions (LogHabit, CreateHabit, CreateTask, UpdateTask) - - Returns executed actions and AI response message - -2. **Habit Commands** (`/Habits/Commands/`): - - `CreateHabitCommand` - Creates new habits with validation - - `LogHabitCommand` - Logs habit completion with optional values - -### 3. **Orbit.Domain** (Domain Layer) -- **Type**: Class Library (SDK: Microsoft.NET.Sdk) -- **Target Framework**: .NET 10.0 -- **Dependencies**: None (pure domain layer) -- **Current State**: **COMPLETE** - All domain logic fully implemented - -#### Domain Structure: - -**Common** (`/Common/`): -- `Entity` - Base entity class with GUID Id and equality comparison -- `Result` and `Result` - Result pattern for error handling without exceptions - -**Entities** (`/Entities/`): -- `User` - User profile with name, email, creation date - - Factory method: `Create(name, email)` - - Method: `UpdateProfile(name, email)` -- `Habit` - Habit tracking with frequency, type, target values - - Factory method: `Create(userId, title, frequency, type, description, unit, targetValue)` - - Method: `Log(date, value)` - Creates habit log entries - - Method: `Deactivate()` / `Activate()` - - Navigation: Collection of `HabitLog` entries -- `HabitLog` - Individual habit completion records - - Internal factory: `Create(habitId, date, value)` -- `TaskItem` - Task management with status tracking - - Factory method: `Create(userId, title, description, dueDate)` - - Method: `MarkCompleted()`, `Cancel()`, `StartProgress()` - -**Enums** (`/Enums/`): -- `HabitFrequency` - Daily, Weekly, Monthly, Custom -- `HabitType` - Boolean, Quantifiable -- `TaskItemStatus` - Pending, InProgress, Completed, Cancelled -- `AiActionType` - LogHabit, CreateHabit, CreateTask, UpdateTask - -**Interfaces** (`/Interfaces/`): -- `IGenericRepository` - Generic repository pattern with async CRUD operations -- `IUnitOfWork` - Unit of Work pattern for transaction management -- `IAiIntentService` - AI service for interpreting user messages into action plans - -**Models** (`/Models/`): -- `AiAction` - Represents a single action extracted by AI (record type) -- `AiActionPlan` - Collection of actions plus AI response message (record type) - -### 4. **Orbit.Infrastructure** (Infrastructure Layer) -- **Type**: Class Library (SDK: Microsoft.NET.Sdk) -- **Target Framework**: .NET 10.0 -- **Dependencies**: - - Microsoft.EntityFrameworkCore (v10.0.2) - - Orbit.Application (project reference) - - Orbit.Domain (project reference) -- **Current State**: **PARTIALLY COMPLETE** - Database and repository infrastructure ready, AI service is stubbed - -#### Implemented Infrastructure: - -**Persistence** (`/Persistence/`): -- `OrbitDbContext` - EF Core DbContext with: - - DbSets: Users, Habits, HabitLogs, Tasks - - Configurations: - - User: Unique index on Email - - Habit: Composite index on (UserId, IsActive), cascade delete for logs - - HabitLog: Composite index on (HabitId, Date) - - TaskItem: Composite index on (UserId, Status) -- `GenericRepository` - Full implementation of IGenericRepository - - GetByIdAsync, GetAllAsync, FindAsync with predicates - - AddAsync, Update, Remove -- `UnitOfWork` - Implements IUnitOfWork with SaveChangesAsync - -**Services** (`/Services/`): -- `AiIntentService` - **STUBBED IMPLEMENTATION** - - Currently returns empty action list - - Contains comprehensive system prompt builder for LLM integration - - Prompt includes: - - AI role definition and rules - - User's active habits context - - User's pending tasks context - - Strict JSON schema for response - - Production implementation would integrate with LLM (e.g., Semantic Kernel, OpenAI API) - -## Technical Stack -- **.NET Version**: 10.0 -- **Language Features**: C# with nullable reference types enabled, implicit usings -- **Patterns**: - - Clean Architecture (Domain, Application, Infrastructure, API layers) - - CQRS (via MediatR) - - Repository Pattern - - Unit of Work Pattern - - Result Pattern (no exception-based error handling) - - Factory Methods on entities -- **ORM**: Entity Framework Core 10.0.2 -- **Mediator**: MediatR 14.0.0 -- **API**: ASP.NET Core Minimal API with OpenAPI - -## What's Missing / Incomplete - -### Critical Missing Components: -1. **Database Configuration**: - - No database provider configured (SQL Server, PostgreSQL, SQLite, etc.) - - No connection string configuration - - No migrations created - - DbContext not registered in dependency injection - -2. **Dependency Injection Setup**: - - Program.cs has no DI registration for: - - MediatR - - OrbitDbContext - - IGenericRepository / GenericRepository - - IUnitOfWork / UnitOfWork - - IAiIntentService / AiIntentService - - No service lifetime configuration (Scoped, Transient, Singleton) - -3. **API Endpoints**: - - No controllers or minimal API endpoints for: - - User management - - Habit operations - - Task operations - - Chat/AI interaction - - Only default WeatherForecast example endpoint exists - -4. **AI Integration**: - - AiIntentService is stubbed - - No LLM client configured (OpenAI, Azure OpenAI, Semantic Kernel) - - No API keys or configuration for AI services - - No actual natural language processing - -5. **Application Layer Gaps**: - - No query handlers (all CQRS reads missing) - - No task-related commands (CreateTask, UpdateTask, etc.) - - No user management commands - - No validation layer beyond domain validation - -6. **Configuration**: - - appsettings.json likely needs configuration sections for: - - Database connection strings - - AI service credentials - - CORS policies - - Authentication/Authorization settings - -7. **Authentication & Authorization**: - - No user authentication implemented - - No JWT or session management - - No authorization policies - - UserId is passed directly in commands (insecure) - -8. **Testing**: - - No test projects - - No unit tests - - No integration tests - -9. **Error Handling & Logging**: - - No global exception handler - - No logging infrastructure (Serilog, NLog, etc.) - - No structured logging - -10. **API Documentation**: - - No README.md - - No API documentation - - No architecture diagrams - -## Deleted Files -As per git status, the following placeholder files were removed: -- `src/Orbit.Application/Class1.cs` -- `src/Orbit.Domain/Class1.cs` -- `src/Orbit.Infrastructure/Class1.cs` - -These were likely default template files replaced with the actual implementation. - -## Build Status -The projects have been built at least once (bin/obj directories exist with Debug/net10.0 artifacts), indicating the code compiles successfully. - -## Summary -The Orbit project has a **well-architected foundation** with: -- ✅ Complete domain model with rich business logic -- ✅ Complete domain entities with encapsulation and validation -- ✅ Full repository and Unit of Work implementation -- ✅ MediatR command handlers for core features -- ✅ Clean separation of concerns across layers - -However, the project is **not runnable** in its current state because: -- ❌ No database provider or migrations -- ❌ No dependency injection configuration -- ❌ No API endpoints exposed -- ❌ AI service is stubbed (no actual LLM integration) -- ❌ No authentication/authorization - -**Next Steps Required**: -1. Configure database provider and create migrations -2. Set up dependency injection in Program.cs -3. Create API endpoints/controllers -4. Implement actual AI service integration -5. Add authentication & authorization -6. Create query handlers for read operations -7. Add comprehensive error handling and logging From da55cdabe8add22663d6153c6deab5ab7a90171b Mon Sep 17 00:00:00 2001 From: Thomas Luizon Rodrigues Gregorio Date: Fri, 3 Jul 2026 19:48:38 -0300 Subject: [PATCH 2/2] chore(review): add FEATURES.md parity dimension (#14) to the pr-review rubric Mirror of the orbit-ui-mobile rubric addition (thomasluizon/orbit-ui-mobile#386): API diffs that change the user-facing feature surface (gating, Astra/MCP tools) must flag the required FEATURES.md update in the paired frontend PR. Co-Authored-By: Claude Fable 5 --- .claude/skills/pr-review/SKILL.md | 6 ++++-- .claude/skills/pr-review/rubric.md | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/.claude/skills/pr-review/SKILL.md b/.claude/skills/pr-review/SKILL.md index 4704e453..8e1fec86 100644 --- a/.claude/skills/pr-review/SKILL.md +++ b/.claude/skills/pr-review/SKILL.md @@ -98,11 +98,13 @@ Go dimension-by-dimension through `rubric.md` against the diff. For each, emit f in the rubric's finding template, tagged with a severity from the ladder. Honor the gates: skip a dimension whose surface the diff never touches (mark N/A — do not invent findings), and only run the UI dimension (DESIGN.md / AI-slop, #8) when `apps/*` UI -files changed, the backend hard rules (#13) only when `orbit-api` changed. +files changed, the backend hard rules (#13) only when `orbit-api` changed, and +FEATURES.md parity (#14) only when the diff changes the user-facing feature surface. The dimensions, in order: Correctness · Dead/stale code · SOLID/clean-arch · Comment policy · No-workaround · Type safety · No `console.log` · DESIGN.md/AI-slop · -Parity · i18n · Contract drift + backward-compat · Security · Backend hard rules. +Parity · i18n · Contract drift + backward-compat · Security · Backend hard rules · +FEATURES.md parity. Focus on changed code, not pre-existing issues — unless a pre-existing issue is Critical. diff --git a/.claude/skills/pr-review/rubric.md b/.claude/skills/pr-review/rubric.md index 55bdbefb..f4a7c808 100644 --- a/.claude/skills/pr-review/rubric.md +++ b/.claude/skills/pr-review/rubric.md @@ -298,6 +298,27 @@ options are enforced server-side. - **Tests**: every new command/query handler, validator, and service has a unit test (unit only — no integration or E2E suite exists). +### 14. FEATURES.md parity (feature inventory) + +> Reference: `FEATURES.md` at the orbit-ui-mobile repo root — the code-derived feature +> inventory (#378). **Gated: only when the diff changes the user-facing feature surface.** + +- Triggers: a feature added, materially changed, or removed — new screen/route/tab, new + or removed Astra (`IAiTool`) or MCP (`[McpServerTool]`) tool, plan-gating change + (`PayGateService` / `AppConstants`), platform-availability change, or locale-specific + behavior change. Pure refactors, bugfixes, and visual polish with no behavior change + are N/A. +- The same PR updates `FEATURES.md` — row added, edited, or removed, with the Gating / + Platform / Locale columns still accurate, and the stated tool counts corrected when + tools are added or removed. A missing update is **High** (same bar as a missing + web↔mobile mirror); a gating or platform claim the diff makes stale is **High** too. +- Headline-set features (Astra, MCP, social, core tracker) also surface in the in-app + feature guide (`onboarding.featureGuide.*`) — if the change makes the guide wrong or + incomplete, flag it (**Medium**). +- In the orbit-api repo the file is not in the checkout: do not verify — emit the + finding as "FEATURES.md update required in thomasluizon/orbit-ui-mobile" (**High**) + so it lands in the paired frontend PR. + --- ## Self-review note