aios-core
Version:
Synkra AIOS: AI-Orchestrated System for Full Stack Development - Core Framework
664 lines (502 loc) • 16.7 kB
Markdown
# Database Integration Analysis for Squad
> Task ID: db-Squad-integration
> Agent: DB Sage (Database Architect)
> Version: 1.0.0
## Execution Modes
**Choose your execution mode:**
### 1. YOLO Mode - Fast, Autonomous (0-1 prompts)
- Autonomous decision making with logging
- Minimal user interaction
- **Best for:** Simple, deterministic tasks
### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]**
- Explicit decision checkpoints
- Educational explanations
- **Best for:** Learning, complex decisions
### 3. Pre-Flight Planning - Comprehensive Upfront Planning
- Task analysis phase (identify all ambiguities)
- Zero ambiguity execution
- **Best for:** Ambiguous requirements, critical work
**Parameter:** `mode` (optional, default: `interactive`)
## Task Definition (AIOS Task Format V1.0)
```yaml
task: dbExpansionPackIntegration()
responsável: Dara (Sage)
responsavel_type: Agente
atomic_layer: Strategy
**Entrada:**
- campo: query
tipo: string
origem: User Input
obrigatório: true
validação: Valid SQL query
- campo: params
tipo: object
origem: User Input
obrigatório: false
validação: Query parameters
- campo: connection
tipo: object
origem: config
obrigatório: true
validação: Valid PostgreSQL connection via Supabase
**Saída:**
- campo: query_result
tipo: array
destino: Memory
persistido: false
- campo: records_affected
tipo: number
destino: Return value
persistido: false
- campo: execution_time
tipo: number
destino: Memory
persistido: false
```
## Pre-Conditions
**Purpose:** Validate prerequisites BEFORE task execution (blocking)
**Checklist:**
```yaml
pre-conditions:
- [ ] Database connection established; query syntax valid
tipo: pre-condition
blocker: true
validação: |
Check database connection established; query syntax valid
error_message: "Pre-condition failed: Database connection established; query syntax valid"
```
## Post-Conditions
**Purpose:** Validate execution success AFTER task completes
**Checklist:**
```yaml
post-conditions:
- [ ] Query executed; results returned; transaction committed
tipo: post-condition
blocker: true
validação: |
Verify query executed; results returned; transaction committed
error_message: "Post-condition failed: Query executed; results returned; transaction committed"
```
## Acceptance Criteria
**Purpose:** Definitive pass/fail criteria for task completion
**Checklist:**
```yaml
acceptance-criteria:
- [ ] Data persisted correctly; constraints respected; no orphaned data
tipo: acceptance-criterion
blocker: true
validação: |
Assert data persisted correctly; constraints respected; no orphaned data
error_message: "Acceptance criterion not met: Data persisted correctly; constraints respected; no orphaned data"
```
## Tools
**External/shared resources used by this task:**
- **Tool:** neo4j-driver
- **Purpose:** Neo4j database connection and query execution
- **Source:** npm: neo4j-driver
- **Tool:** query-validator
- **Purpose:** Cypher query syntax validation
- **Source:** .aios-core/utils/db-query-validator.js
## Scripts
**Agent-specific code for this task:**
- **Script:** db-query.js
- **Purpose:** Execute Neo4j queries with error handling
- **Language:** JavaScript
- **Location:** .aios-core/scripts/db-query.js
## Error Handling
**Strategy:** retry
**Common Errors:**
1. **Error:** Connection Failed
- **Cause:** Unable to connect to Neo4j database
- **Resolution:** Check connection string, credentials, network
- **Recovery:** Retry with exponential backoff (max 3 attempts)
2. **Error:** Query Syntax Error
- **Cause:** Invalid Cypher query syntax
- **Resolution:** Validate query syntax before execution
- **Recovery:** Return detailed syntax error, suggest fix
3. **Error:** Transaction Rollback
- **Cause:** Query violates constraints or timeout
- **Resolution:** Review query logic and constraints
- **Recovery:** Automatic rollback, preserve data integrity
## Performance
**Expected Metrics:**
```yaml
duration_expected: 5-20 min (estimated)
cost_estimated: $0.003-0.015
token_usage: ~2,000-8,000 tokens
```
**Optimization Notes:**
- Iterative analysis with depth limits; cache intermediate results; batch similar operations
## Metadata
```yaml
story: N/A
version: 1.0.0
dependencies:
- N/A
tags:
- database
- infrastructure
updated_at: 2025-11-17
```
## Description
Analyze an squad's data requirements and design database integration strategy. Maps pack inputs/outputs/state to database schema, proposes tables/relationships, and generates migration plan.
## Prerequisites
- Squad installed and accessible
- Database connection configured (*env-check passed)
- Current schema documented or accessible
## Workflow
### Step 1: Identify Target Squad
**Elicit from user:**
- Which squad? (mmos, creator-os, innerlens, etc.)
- Path to squad directory
**Actions:**
- Verify pack exists and has config.yaml
- Load pack metadata (name, version, description)
### Step 2: Audit Squad Data Flows
**Scan pack structure for data touchpoints:**
```bash
# Look for data indicators
- Config files (*.yaml, *.json, .env.example)
- Input directories (sources/, inputs/, uploads/)
- Output directories (outputs/, generated/, artifacts/)
- State files (state.json, .cache/, db/)
- Scripts that read/write data
- API endpoints that handle data
```
**Document findings:**
```yaml
expansion_pack_audit:
name: mmos
version: 2.0.0
data_inputs:
- type: user_interview_transcript
format: markdown
location: sources/interviews/
volume: ~50 files per mind
- type: configuration
format: yaml
location: config/mind-config.yaml
fields: [name, personality_type, communication_style]
data_outputs:
- type: cognitive_model
format: yaml
location: outputs/minds/{slug}/analysis/
persistence_need: high (reusable artifact)
- type: system_prompt
format: markdown
location: outputs/minds/{slug}/system_prompts/
persistence_need: high (versioned, queryable)
- type: knowledge_chunks
format: json
location: outputs/minds/{slug}/kb/
persistence_need: high (searchable, referenceable)
state_requirements:
- processing_status: [pending, in_progress, completed, failed]
- last_run_timestamp
- version_tracking
- validation_scores
relationships:
- One mind → many system_prompts (versioned)
- One mind → many knowledge_chunks
- One user → many minds
```
### Step 3: Analyze Current Database Schema
**Connect to database and inspect:**
```sql
-- List all tables
SELECT table_name, table_type
FROM information_schema.tables
WHERE table_schema = 'public';
-- Check for related tables
SELECT * FROM pg_tables WHERE schemaname = 'public';
-- Look for existing patterns
-- Users, projects, assets, metadata tables?
```
**Document current schema:**
```yaml
current_schema:
tables:
- name: users
has_auth: true
fields: [id, email, created_at]
- name: projects
fields: [id, user_id, name, type, created_at]
foreign_keys: [user_id → users.id]
patterns_found:
- Multi-tenancy via user_id
- UUID primary keys
- created_at/updated_at timestamps
- RLS enabled on most tables
```
### Step 4: Design Integration Schema
**Map pack data to database tables:**
```yaml
proposed_schema:
new_tables:
# MMOS example
- name: minds
purpose: Store cognitive clone definitions
fields:
- id: uuid PRIMARY KEY
- user_id: uuid REFERENCES users(id)
- slug: text UNIQUE NOT NULL
- name: text NOT NULL
- personality_type: text
- status: mind_status_enum
- version: integer DEFAULT 1
- created_at: timestamptz
- updated_at: timestamptz
indexes:
- (user_id, slug) UNIQUE
- (status) WHERE status = 'active'
rls: "Users can only access their own minds"
- name: mind_system_prompts
purpose: Version-controlled system prompts
fields:
- id: uuid PRIMARY KEY
- mind_id: uuid REFERENCES minds(id) ON DELETE CASCADE
- version: integer NOT NULL
- prompt_type: text (generalista, specialist, etc.)
- content: text NOT NULL
- metadata: jsonb
- created_at: timestamptz
indexes:
- (mind_id, version, prompt_type) UNIQUE
rls: "Inherit from minds table via mind_id"
- name: mind_knowledge_chunks
purpose: RAG-ready knowledge base
fields:
- id: uuid PRIMARY KEY
- mind_id: uuid REFERENCES minds(id) ON DELETE CASCADE
- chunk_text: text NOT NULL
- embedding: vector(1536) # OpenAI embeddings
- metadata: jsonb (source_file, chunk_index, etc.)
- created_at: timestamptz
indexes:
- (mind_id)
- GiST (embedding vector_cosine_ops) # For similarity search
rls: "Inherit from minds table"
modified_tables: []
enums:
- name: mind_status_enum
values: [pending, processing, completed, failed, archived]
functions:
- name: search_mind_knowledge(mind_id uuid, query_embedding vector)
purpose: Vector similarity search for RAG
returns: TABLE(chunk_id uuid, chunk_text text, similarity float)
```
### Step 5: Validate Integration Design
**Run checks:**
- [ ] All pack outputs have storage strategy
- [ ] All pack inputs can be referenced (user uploads → table?)
- [ ] State requirements mapped to fields
- [ ] Foreign keys enforce relationships
- [ ] RLS policies defined for all tables
- [ ] Indexes support expected queries (list minds, search KB, version lookup)
- [ ] No orphaned data (CASCADE on deletes)
- [ ] Follows existing schema patterns (user_id, timestamps, etc.)
**KISS Gate check:**
- Is database even needed? (If pack works fine with filesystem, stop here)
- What problem does this solve? (searchability? multi-user? versioning?)
- Can existing tables be extended instead? (e.g., generic `projects` table?)
- Minimum viable schema? (Start with 1 table, expand later if needed)
### Step 6: Generate Migration Plan
**Create migration strategy:**
```yaml
migration_plan:
phase_1_foundation:
- Create enums (mind_status_enum)
- Create base table (minds)
- Add RLS policies to minds
- Create seed data (test mind)
phase_2_extensions:
- Create related tables (mind_system_prompts, mind_knowledge_chunks)
- Add foreign keys
- Add indexes
- Enable RLS on related tables
phase_3_functions:
- Create vector search function
- Create helper views (active_minds, latest_prompts)
rollback_strategy:
- Snapshot before each phase
- Rollback scripts generated
- Test on staging first
risk_assessment:
- Low risk: New tables, no existing data affected
- Medium risk: If modifying existing tables
- High risk: If changing core auth/users tables
```
**Generate actual migration files:**
```bash
# Use template to generate
*create-migration-plan
# Then scaffold files
supabase/migrations/20251027_001_create_minds_table.sql
supabase/migrations/20251027_002_create_mind_prompts_table.sql
supabase/migrations/20251027_003_create_mind_kb_table.sql
supabase/migrations/20251027_004_add_vector_search.sql
```
### Step 7: Generate Integration Documentation
**Create docs/mmos/database-integration.md:**
```markdown
# MMOS Database Integration
## Overview
MMOS cognitive clones are now persisted in Supabase with full RLS, versioning, and vector search.
## Schema
### minds table
- Stores core mind definition
- One per cognitive clone
- User-scoped via RLS
### mind_system_prompts table
- Version-controlled prompts
- Many per mind
- Allows A/B testing and rollback
### mind_knowledge_chunks table
- RAG-ready knowledge base
- Vector embeddings for similarity search
- Efficient retrieval during clone interaction
## Usage
### Creating a mind
```sql
INSERT INTO minds (user_id, slug, name, personality_type)
VALUES (auth.uid(), 'joao-lozano', 'João Lozano', 'ENTJ');
```
### Storing system prompt
```sql
INSERT INTO mind_system_prompts (mind_id, version, prompt_type, content)
VALUES (:mind_id, 1, 'generalista', :prompt_content);
```
### Searching knowledge base
```sql
SELECT * FROM search_mind_knowledge(
:mind_id,
:query_embedding::vector(1536)
)
LIMIT 10;
```
## Migration Path
1. Run migrations in order (see supabase/migrations/)
2. Backfill existing minds from outputs/ directory
3. Update MMOS scripts to read/write database
4. Keep filesystem outputs as backup during transition
```
### Step 8: Output Integration Report
**Generate Squads/{pack-name}/database-integration-report.yaml:**
```yaml
integration_analysis:
expansion_pack: mmos
database: supabase_production
analysis_date: 2025-10-27
analyst: DB Sage
summary:
recommendation: "Integrate with database"
rationale: |
- Multi-user access required (MMOS will be SaaS)
- Version tracking needed (system prompt evolution)
- Vector search needed (RAG for clone responses)
- Filesystem alone cannot support these requirements
tables_added: 3
tables_modified: 0
migration_risk: low
estimated_effort: 4 hours (design + migrate + test)
schema_design:
file: docs/mmos/database-schema.yaml
erd: docs/mmos/database-erd.png (generate with *create-schema)
migration_plan:
file: docs/mmos/migration-plan.yaml
migrations_directory: supabase/migrations/
rollback_scripts: supabase/rollback/
next_steps:
- [ ] Review schema design with team
- [ ] Approve migration plan
- [ ] Run *snapshot baseline
- [ ] Execute migrations (*migrate)
- [ ] Test integration (*smoke-test)
- [ ] Update MMOS scripts to use database
- [ ] Deploy to staging
- [ ] Monitor for 48h
- [ ] Deploy to production
```
## Success Criteria
- [ ] Squad data flows fully documented
- [ ] Current schema analyzed
- [ ] Integration schema designed (follows patterns, has RLS)
- [ ] KISS Gate validation passed (database is actually needed)
- [ ] Migration plan generated with rollback strategy
- [ ] Integration documentation created
- [ ] Report generated with clear next steps
## Output Files
```
Squads/{pack-name}/
├── database-integration-report.yaml ← Main output
├── data-flow-audit.yaml ← Step 2 findings
└── schema-design.yaml ← Step 4 design
docs/{pack-name}/
├── database-integration.md ← Usage guide
├── database-schema.yaml ← Schema definition
└── migration-plan.yaml ← Migration strategy
supabase/migrations/
└── 2025MMDD_NNN_{pack}_*.sql ← Ready to apply
```
## Examples
### CreatorOS Integration
```yaml
# CreatorOS generates courses → needs to store:
# - Course metadata (title, description, status)
# - Curriculum structure (modules, lessons)
# - Generated content (video scripts, quizzes)
# - User progress (if multi-user platform)
proposed_schema:
- courses table (id, user_id, slug, title, status)
- course_modules table (id, course_id, order, title)
- course_lessons table (id, module_id, order, title, content_type)
- course_content table (id, lesson_id, content, generated_at)
```
### InnerLens Integration
```yaml
# InnerLens does psychometric assessments → needs to store:
# - Assessment definitions (Big5, MBTI, etc.)
# - User responses (answers, timestamps)
# - Computed results (personality profiles)
proposed_schema:
- assessments table (id, name, type, questions_jsonb)
- user_assessments table (id, user_id, assessment_id, completed_at)
- assessment_responses table (id, user_assessment_id, question_id, response)
- assessment_results table (id, user_assessment_id, results_jsonb)
```
## Notes
- **Always run KISS Gate validation** - database might not be needed
- **Follow existing patterns** - don't reinvent (user_id, timestamps, RLS)
- **Start minimal** - can always add tables later
- **Think about queries** - indexes should match access patterns
- **Plan for scale** - vector search, partitioning if needed
- **RLS from day 1** - security cannot be retrofitted easily
- **Document everything** - future maintainers will thank you
## Related Tasks
- `*validate-kiss` - Run before this task (MANDATORY)
- `*create-schema` - Generate full schema documentation with ERD
- `*create-migration-plan` - Generate detailed migration strategy
- `*migrate` - Execute the actual migrations
- `*smoke-test` - Validate integration after migration