Initialize project structure with core files, environment settings, and basic configurations

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
2026-04-23 17:19:55 -04:00
commit 14a07bca7a
12 changed files with 622 additions and 0 deletions

367
project.md Normal file
View File

@@ -0,0 +1,367 @@
# CharacterGarden AI-Oriented Design Spec (Copilot-Ready)
## 0. Purpose
This document defines **hard contracts and system boundaries** for CharacterGarden.
Goal: enable an AI coding assistant (e.g. Copilot) to implement the system step-by-step without ambiguity.
Core principle:
> The application owns truth. The LLM only translates and narrates.
---
## 1. System Overview
### Pipeline
```
Prose Input
→ Intent Extraction
→ Canonical Actions
→ Truth Engine Validation
→ State Changes + Events
→ Memory Storage
→ Narration Output
```
---
## 2. Core Contracts (STRICT)
### 2.1 Entity
```
Entity {
id: string
type: string
name: string
attributes: object
}
```
### 2.2 Action (Canonical)
```
Action {
actor: string (entity id)
verb: string (enum)
target?: string (entity id)
params?: object
}
```
Allowed verbs (MVP):
```
move, open, close, take, drop, use, inspect, speak
```
### 2.3 Validation Result
```
ValidationResult {
accepted: Action[]
rejected: { action: Action, reason: string }[]
state_changes: StateChange[]
}
```
### 2.4 State Change
```
StateChange {
entity_id: string
field: string
old_value: any
new_value: any
}
```
### 2.5 Event
```
Event {
id: string
turn: number
action: Action
result: "success" | "fail"
timestamp: number
}
```
---
## 3. Truth Rules
1. Only the **Truth Engine** can modify world state
2. LLM output is NEVER directly trusted
3. Every state change must be traceable to an Event
4. Invalid actions must return explicit failure reasons
---
## 4. Memory Model
Memory is NOT a single blob.
### Types
#### 4.1 Turn
Raw input/output
#### 4.2 Event
Accepted or rejected actions
#### 4.3 Fact
Current world state (derived, not duplicated)
#### 4.4 Belief
```
Belief {
entity_id: string
claim: string
confidence: number
}
```
#### 4.5 Summary
Compressed narrative context
---
## 5. Services
### 5.1 App (Core Service)
Responsibilities:
* orchestrate turns
* call LLM (optional)
* run truth engine
* manage memory
Tech: Node.js (Express or Fastify)
---
### 5.2 Truth Engine (Module inside App)
Responsibilities:
* validate actions
* enforce rules
* apply state changes
* emit events
NO LLM USAGE
---
### 5.3 LLM Adapter (Optional)
Responsibilities:
* extract actions from prose
* resolve references
* generate narration
* summarize memory
Backend: Ollama
---
### 5.4 Frontend
Responsibilities:
* send input
* display output
* optionally inspect state/events
Minimal React or Vue app
---
## 6. Turn Flow (IMPLEMENT EXACTLY)
```
1. Receive user input (string)
2. Store raw turn
3. Extract actions (LLM or fallback parser)
4. Validate actions (truth engine)
5. Apply accepted changes
6. Store events
7. Generate narration
8. Return response
```
---
## 7. Storage
### SQLite (MVP)
Tables:
* entities
* events
* turns
* beliefs
* summaries
File location:
```
/data/sqlite/app.db
```
---
## 8. Docker Design
### Services
```
services:
app
frontend
ollama (optional)
```
### Principles
* No host dependencies beyond Docker
* Persist only `/data`
* Use `.env` for config
* No hidden setup scripts
---
## 9. Folder Structure
```
charactergarden/
docker-compose.yml
.env
app/
frontend/
data/
sqlite/
```
---
## 10. MVP Scope
STRICT LIMITS:
* 12 rooms
* ≤3 characters
* ≤10 actions
* no complex AI autonomy
* no multi-agent loops yet
---
## 11. Non-Goals (DO NOT BUILD YET)
* microservices
* distributed systems
* plugin frameworks
* advanced agent loops
* cloud dependencies
---
## 12. Development Workflow Rule
A root-level file named `thoughts.md` must exist and be maintained throughout development.
Purpose of `thoughts.md`:
* record current implementation status
* record the next planned steps
* record blockers, assumptions, and unresolved questions
* summarize architectural decisions already made
* preserve continuity across editor sessions or context loss
Rules for `thoughts.md`:
* update it after each meaningful implementation step
* keep entries concise and factual
* do not use it for chain-of-thought dumping or vague brainstorming
* use it as a project progress log and working memory
* when resuming work, review `thoughts.md` first before making changes
* when changing architecture, record what changed and why
* when a task is incomplete, note exactly what remains
Recommended structure:
```md
# thoughts.md
## Current Status
- what is implemented
- what is partially implemented
- what is broken or unverified
## Current Architecture Decisions
- key decisions and constraints
## Next Steps
- ordered checklist of immediate tasks
## Open Questions
- unresolved design or implementation questions
## Session Notes
- short dated notes describing recent progress
```
Copilot instruction:
> Before starting work, read `thoughts.md`. After completing any meaningful change, update `thoughts.md` to reflect current status, next steps, and any unresolved issues.
## 13. Development Order
1. Define entities + actions
2. Implement truth engine
3. Add SQLite persistence
4. Build API endpoints
5. Add minimal UI
6. Add LLM integration
---
## 14. Key Rule
> If the system works without an LLM, the architecture is correct.
---
## 15. Expected Behavior
* deterministic state
* explainable failures
* replayable sessions
* inspectable memory
---
## 16. Future Extensions (NOT NOW)
* branching timelines
* advanced belief systems
* multi-agent arbitration
* long-term memory compression
---
## END SPEC