Moves 45 documentation files from centralized /docs/ to subproject directories
following proximity-based organization principle. All moves use git mv to preserve history.
Changes:
- workflow/ docs: Move 27 files from docs/workflow/ to workflow/docs/
- DAG executor docs, workflow compliance, executor analysis, loaderv2 guides, etc.
- Result: workflow/docs/ now has 27 files
- dbal/ docs: Move 11 files from docs/dbal/ to dbal/docs/
- DBAL architecture, analysis, integration, and workflow integration docs
- Result: dbal/docs/ now has 18 files (11 new + 7 pre-existing)
- gameengine/ docs: Move 7 files from docs/gameengine/ to gameengine/docs/
- GameEngine compliance audits, packages, Quake3, soundboard, engine tester
- Result: gameengine/docs/ now has 20 files (7 new + 13 pre-existing)
Benefits:
- Docs are now closer to their code (easier to keep in sync)
- Reduces /docs/ clutter
- Establishes pattern for per-subproject documentation
- All git history preserved via git mv
Next phases:
- Phase 2: Move package-specific docs to /packages/{id}/docs/
- Phase 3: Separate N8N compliance docs by scope
- Phase 4: Organize UI documentation
- Phase 5: Create cross-project indices
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
16 KiB
DBAL Documentation Index
Complete analysis of the Database Abstraction Layer, architecture, and extension points.
Documents in This Analysis
1. DBAL_ANALYSIS_SUMMARY.md ⭐ START HERE
- Purpose: Executive summary and quick overview
- Length: ~600 lines
- Best for: Understanding DBAL at high level
- Contains:
- What is DBAL?
- Architecture overview
- Core findings (5 key insights)
- Recommended implementation approach
- Key insight tables
- File structure summary
- FAQ section
Start here if: You have 10 minutes and want to understand the system
2. DBAL_QUICK_REFERENCE.md ⭐ FOR DEVELOPERS
- Purpose: Fast lookup reference guide
- Length: ~400 lines
- Best for: Looking up specific code locations and patterns
- Contains:
- File map with line counts
- Key interface definitions
- Entity operations pattern
- Multi-tenant filtering code
- Adapter composition chain
- Error code reference
- Validation pattern
- Testing helpers
- Common queries
Start here if: You're implementing features and need to find code
3. DBAL_ARCHITECTURE_ANALYSIS.md ⭐ FOR DEEP UNDERSTANDING
- Purpose: Comprehensive architectural analysis
- Length: ~1,200 lines
- Best for: Understanding every detail of the system
- Contains:
- Complete DBAL client structure
- Detailed adapter pattern explanation
- All 4 adapter implementations
- Adapter composition via factory
- Entity operations pattern with example
- Validation layer architecture
- Multi-tenant filtering mechanism
- Tenant context and permission checks
- All 19 entity types documented
- Workflow integration deep dive
- Error handling architecture
- Performance characteristics table
- Extension points identified
- Recommended next steps
Start here if: You need to understand architecture for design decisions
4. DBAL_INTEGRATION_GUIDE.md ⭐ FOR IMPLEMENTATION
- Purpose: Step-by-step guide to implement validation registry
- Length: ~600 lines
- Best for: Actually building the ValidationAdapter
- Contains:
- Architecture diagram (ASCII)
- Workflow validation process diagram
- Step-by-step implementation:
- Create ValidationAdapter class (complete code)
- Create ValidationRegistry (complete code)
- Update adapter factory
- Update config (optional)
- Create tests
- Usage examples
- Integration checklist
- Performance considerations
- Testing strategy
Start here if: You're ready to implement the validation system
Quick Navigation by Use Case
"I need to understand the DBAL in 10 minutes"
→ Read: DBAL_ANALYSIS_SUMMARY.md
- Start with "Core Findings" section
- Skim "Architecture at a Glance"
- Check "Key Insights"
"I'm implementing a new feature using DBAL"
→ Read: DBAL_QUICK_REFERENCE.md
- Use "Core Files Map" to find code
- Check "Entity Operations Pattern" for template
- See "Multi-Tenant Filtering" for copy-paste code
- Look up "Error Code Reference" when needed
"I need to implement the ValidationAdapter"
→ Read: DBAL_INTEGRATION_GUIDE.md
- Follow "Implementation Steps" section
- Use complete code snippets provided
- Check "Integration Checklist"
- Copy test examples
"I'm designing a new system that uses DBAL"
→ Read: DBAL_ARCHITECTURE_ANALYSIS.md
- Read "Architecture Overview" for high-level view
- Study "Adapter Pattern Deep Dive" for extension strategy
- Review "Extension Points for Workflow Validation Registry"
- Check "Performance Characteristics" for load estimates
"I need to debug a multi-tenant issue"
→ Read: DBAL_QUICK_REFERENCE.md → "Multi-Tenant Filtering"
- Then: DBAL_ARCHITECTURE_ANALYSIS.md → "Multi-Tenant Filtering Mechanism"
"I'm reviewing DBAL code in a PR"
→ Read: DBAL_QUICK_REFERENCE.md → "File Structure Summary"
- Then: DBAL_QUICK_REFERENCE.md → "Key Interfaces at a Glance"
File Structure Map
DBAL System Root
├── /dbal/development/src/
│ ├── index.ts # Public API
│ │
│ ├── core/
│ │ ├── client/
│ │ │ ├── client.ts # DBALClient main class ⭐
│ │ │ ├── adapter-factory.ts # Adapter composition ⭐
│ │ │ ├── builders.ts # Entity operations factory
│ │ │ ├── factory.ts # Singleton factory
│ │ │ └── mappers.ts # Config normalization
│ │ │
│ │ ├── entities/
│ │ │ ├── index.ts # Barrel exports
│ │ │ ├── operations/
│ │ │ │ ├── core/
│ │ │ │ │ ├── user-operations.ts
│ │ │ │ │ ├── workflow-operations.ts ⭐ (6.7KB)
│ │ │ │ │ └── session-operations.ts
│ │ │ │ └── system/
│ │ │ │ ├── page-operations.ts
│ │ │ │ ├── component-operations.ts
│ │ │ │ └── package-operations.ts
│ │ │ └── workflow/
│ │ │ ├── crud/
│ │ │ │ ├── create-workflow.ts
│ │ │ │ ├── read-workflow.ts
│ │ │ │ ├── update-workflow.ts
│ │ │ │ └── list-workflows.ts
│ │ │ ├── validation/
│ │ │ └── store/
│ │ │
│ │ ├── foundation/
│ │ │ ├── types/
│ │ │ │ ├── types.generated.ts # All 19 entity interfaces ⭐
│ │ │ │ ├── entities.ts
│ │ │ │ ├── operations.ts
│ │ │ │ ├── events.ts
│ │ │ │ └── [category folders]
│ │ │ │
│ │ │ ├── validation/
│ │ │ │ ├── index.ts # Validation exports
│ │ │ │ ├── entities/
│ │ │ │ │ ├── user/
│ │ │ │ │ ├── workflow/
│ │ │ │ │ └── [other entities]
│ │ │ │ └── predicates/ # Type helpers
│ │ │ │
│ │ │ ├── errors.ts # DBALError definitions ⭐
│ │ │ ├── tenant-context.ts
│ │ │ └── tenant/
│ │ │ ├── tenant-types.ts # TenantContext, TenantIdentity
│ │ │ ├── permission-checks.ts # RBAC functions
│ │ │ └── quota-checks.ts
│ │
│ ├── adapters/
│ │ ├── adapter.ts # Base interface ⭐
│ │ │
│ │ ├── prisma/
│ │ │ ├── index.ts # PrismaAdapter class
│ │ │ ├── context.ts # Prisma client config
│ │ │ ├── types.ts
│ │ │ └── operations/
│ │ │ ├── crud.ts
│ │ │ ├── bulk.ts
│ │ │ ├── query.ts
│ │ │ └── capabilities.ts
│ │ │
│ │ ├── memory/
│ │ │ └── index.ts # MemoryAdapter implementation
│ │ │
│ │ ├── acl-adapter/
│ │ │ ├── acl-adapter.ts # ACLAdapter class
│ │ │ ├── context.ts
│ │ │ ├── read-strategy.ts
│ │ │ ├── write-strategy.ts
│ │ │ ├── guards.ts
│ │ │ └── types.ts
│ │ │
│ │ ├── acl/
│ │ │ └── default-rules.ts
│ │ │
│ │ └── validation-adapter/ (TO BE CREATED)
│ │ ├── validation-adapter.ts # NEW ⭐
│ │ └── __tests__/
│ │
│ ├── workflow/
│ │ ├── types.ts # Workflow types ⭐
│ │ ├── dag-executor.ts # DAG execution engine ⭐
│ │ ├── node-executor-registry.ts # Plugin registry system ⭐
│ │ ├── priority-queue.ts # Task scheduling
│ │ ├── validation-registry.ts (TO BE CREATED) # NEW ⭐
│ │ └── executors/
│ │ ├── ts/
│ │ └── [other languages]
│ │
│ ├── runtime/
│ │ ├── config.ts # DBALConfig interface ⭐
│ │ └── prisma-client.ts
│ │
│ ├── blob/
│ │ └── [storage implementation]
│ │
│ ├── bridges/
│ │ └── websocket-bridge.ts # Remote connection
│ │
│ └── seeds/
│ └── [database seeding]
│
└── Related Directories
├── /workflow/executor/ # Workflow execution runtime
├── /workflow/plugins/ # Node plugins
└── /codegen/ # CodeForge IDE (uses DBAL)
Key Code Locations Cheat Sheet
| What | Location | Lines |
|---|---|---|
| Main client class | core/client/client.ts |
88 |
| Adapter factory | core/client/adapter-factory.ts |
66 |
| Base adapter interface | adapters/adapter.ts |
35 |
| Workflow operations | core/entities/operations/core/workflow-operations.ts |
175 |
| Entity types | core/foundation/types/types.generated.ts |
299 |
| Error definitions | core/foundation/errors.ts |
91 |
| Workflow types | workflow/types.ts |
341 |
| DAG executor | workflow/dag-executor.ts |
300+ |
| Node registry | workflow/node-executor-registry.ts |
130 |
| Prisma adapter | adapters/prisma/index.ts |
108 |
| Memory adapter | adapters/memory/index.ts |
260 |
| ACL adapter | adapters/acl-adapter/acl-adapter.ts |
87 |
| Config interface | runtime/config.ts |
35 |
Architecture Decision Records (ADRs)
ADR-1: Adapter Pattern for Storage
Status: ✅ Implemented
Decision: Use DBALAdapter interface with composable implementations
Rationale: Supports multiple backends, easy to add new adapters
Location: core/client/adapter-factory.ts
ADR-2: Multi-Tenant First
Status: ✅ Implemented
Decision: All queries must filter by tenantId; error if missing
Rationale: Prevents cross-tenant data leaks
Location: core/entities/operations/*/operations.ts
ADR-3: Entity Operations Pattern
Status: ✅ Implemented
Decision: Each entity has dedicated operations factory
Rationale: Single responsibility, consistent patterns, easy to extend
Location: core/entities/operations/
ADR-4: Validation Registry (Proposed)
Status: 🚀 Recommended Implementation
Decision: ValidationAdapter wraps base adapter, calls registry for Workflow entity
Rationale: Non-invasive, composable with other adapters, testable in isolation
Location: To be implemented in adapters/validation-adapter/
ADR-5: Error Codes
Status: ✅ Implemented
Decision: Standardized DBALError codes mapped to HTTP status codes
Rationale: Clear error semantics, easy client handling, audit logging
Location: core/foundation/errors.ts
Common Patterns
Pattern: Validate & Persist
// Step 1: Validate input (in entity operations)
const errors = validateWorkflowCreate(data)
if (errors.length > 0) {
throw DBALError.validationError('Invalid workflow', errors.map(e => ({ field: 'workflow', error: e })))
}
// Step 2: Validate business rules (in ValidationAdapter)
const result = await registry.validate(data)
if (!result.valid) {
throw DBALError.validationError('Validation failed', ...)
}
// Step 3: Persist (in base adapter)
return baseAdapter.create('Workflow', data)
Pattern: Multi-Tenant Filtering
// Always resolve tenant ID
const resolvedTenantId = resolveTenantId(configuredTenantId, data?.tenantId)
if (!resolvedTenantId) {
throw DBALError.validationError('Tenant ID is required', ...)
}
// Always include in filters
const filter = { ...options.filter, tenantId: resolvedTenantId }
return adapter.list('Entity', { ...options, filter })
Pattern: Adapter Composition
let adapter = createBaseAdapter(config) // Prisma, Memory, etc.
if (config.security?.enableWorkflowValidation) {
adapter = new ValidationAdapter(adapter) // Wrap with validation
}
if (config.auth?.user) {
adapter = new ACLAdapter(adapter, config.auth.user) // Wrap with ACL
}
return adapter
Testing Patterns
Use MemoryAdapter for Unit Tests
const adapter = new MemoryAdapter()
const client = new DBALClient({ mode: 'development', adapter: 'memory', tenantId: 'test' })
// Use like normal DBAL client
Test Validation Rules
const registry = new WorkflowValidationRegistry()
registerDefaultRules(registry)
const result = await registry.validate(testWorkflow)
expect(result.valid).toBe(false)
expect(result.errors).toContain('expected error message')
Test Multi-Tenant Isolation
const client1 = new DBALClient({ ..., tenantId: 'tenant-1' })
const client2 = new DBALClient({ ..., tenantId: 'tenant-2' })
const wf1 = await client1.workflows.create(...)
const list2 = await client2.workflows.list()
expect(list2.items).not.toContain(wf1) // Should not see cross-tenant data
Performance Guidelines
- Add validation sparingly: ~1-5ms per operation
- Use indexes on tenantId: Essential for multi-tenant performance
- Batch operations: Use createMany/updateMany for bulk work
- Connection pooling: Configured in PrismaAdapter
- Query timeouts: Configurable in DBALConfig
Frequently Referenced Sections
When working on...
New Entity Type → See: DBAL_ARCHITECTURE_ANALYSIS.md > "Entity Operations Pattern" → Also: DBAL_QUICK_REFERENCE.md > "Entity Operations Pattern"
Validation Rules → See: DBAL_INTEGRATION_GUIDE.md > "Step 2: Create Validation Registry" → Also: DBAL_ARCHITECTURE_ANALYSIS.md > "Extension Point: Adding Workflow Validation Adapter"
Multi-Tenant Workflows → See: DBAL_QUICK_REFERENCE.md > "Multi-Tenant Filtering" → Also: DBAL_ARCHITECTURE_ANALYSIS.md > "Multi-Tenant Filtering Mechanism"
New Adapter → See: DBAL_ARCHITECTURE_ANALYSIS.md > "Adapter Pattern Deep Dive" → Also: DBAL_QUICK_REFERENCE.md > "Adapter Composition Chain"
Error Handling → See: DBAL_QUICK_REFERENCE.md > "Error Code Reference" → Also: DBAL_ARCHITECTURE_ANALYSIS.md > "Error Handling Architecture"
Workflow Execution → See: DBAL_ARCHITECTURE_ANALYSIS.md > "Workflow Integration Points" → Also: DBAL_QUICK_REFERENCE.md > "Workflow Command"
Related Code Repositories
- Main DBAL:
/dbal/development/← Focus of this analysis - Shared Schemas:
/dbal/shared/api/schema/(YAML entity definitions) - Workflow Executor:
/workflow/executor/(Execution runtime) - Workflow Plugins:
/workflow/plugins/(Node implementations) - CodeForge IDE:
/codegen/(Uses DBAL for persistence) - Database:
/prisma/(Prisma schema definition)
Feedback & Updates
This analysis is current as of 2026-01-22. The DBAL is:
- ✅ Phase 2 Complete (TypeScript development)
- 🚀 Ready for ValidationAdapter implementation
- 📋 Documented and analyzable from source code
For updates:
- Check if changes were made to
/dbal/development/src/ - Review new files in
/dbal/development/src/core/entities/operations/ - Check adapter implementations for new capabilities
- Review
/dbal/development/package.jsonfor dependency updates
Summary
This documentation suite provides:
- 4 complementary documents covering different depths
- ~3,000 total lines of analysis and code
- Complete file map with locations
- Step-by-step implementation guide for ValidationAdapter
- Quick reference for developers
- Architectural insights for designers
Start with: DBAL_ANALYSIS_SUMMARY.md (10 min read) Then read: DBAL_QUICK_REFERENCE.md (as needed) For implementation: DBAL_INTEGRATION_GUIDE.md For deep understanding: DBAL_ARCHITECTURE_ANALYSIS.md