mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-24 13:54:57 +00:00
refactor: Move seed and Prisma schema into DBAL (Architecture Restructure Phase 0)
MOVED: - /seed/ → /dbal/shared/seeds/ - database/ (installed_packages.yaml, package_permissions.yaml) - config/ (bootstrap.yaml, package-repo.yaml) - packages/ (core-packages.yaml) - /prisma/schema.prisma → /dbal/development/prisma/schema.prisma UPDATED: - Root package.json: db:* scripts delegate to dbal/development - Frontend package.json: db:* scripts delegate to dbal/development - DBAL package.json: Added db:migrate and db:seed scripts - /dbal/development/src/seeds/index.ts: Updated paths to new seed location - /dbal/shared/tools/codegen/gen_prisma_schema.js: Output to new schema location - /config/package.json: Updated schema path references DELETED: - /seed/ folder (moved to DBAL) - /prisma/ folder (moved to DBAL) BENEFITS: - DBAL is now self-contained and independently deployable - Single source of truth for seeds and schema - Clear separation: database logic in DBAL, frontend in /frontends/ - All db:* commands now go through DBAL, not duplicated in frontend This restructure is MANDATORY FIRST STEP before CODEBASE_RECOVERY_PLAN execution. Architecture must be fixed before code cleanup happens. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -9,8 +9,8 @@
|
||||
"extract:auto": "cd frontends/nextjs && npm run extract:auto",
|
||||
"extract:all": "cd frontends/nextjs && npm run extract:all",
|
||||
"extract:help": "cd frontends/nextjs && npm run extract:help",
|
||||
"db:generate": "npx prisma generate --schema=../prisma/schema.prisma",
|
||||
"db:migrate": "npx prisma migrate dev --schema=../prisma/schema.prisma"
|
||||
"db:generate": "npx prisma generate --schema=../dbal/development/prisma/schema.prisma",
|
||||
"db:migrate": "npx prisma migrate dev --schema=../dbal/development/prisma/schema.prisma"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@prisma/client": "^7.2.0",
|
||||
|
||||
@@ -19,7 +19,9 @@
|
||||
"generate-types": "node ../shared/tools/codegen/generate-types.js",
|
||||
"db:generate": "prisma generate --schema=prisma/schema.prisma",
|
||||
"db:push": "prisma db push --schema=prisma/schema.prisma",
|
||||
"db:studio": "prisma studio --schema=prisma/schema.prisma"
|
||||
"db:migrate": "prisma migrate deploy --schema=prisma/schema.prisma",
|
||||
"db:studio": "prisma studio --schema=prisma/schema.prisma",
|
||||
"db:seed": "tsx ../shared/seeds/load-and-apply.ts"
|
||||
},
|
||||
"keywords": [
|
||||
"database",
|
||||
|
||||
@@ -2,13 +2,15 @@
|
||||
* @file seeds/index.ts
|
||||
* @description Database Seed Orchestration
|
||||
*
|
||||
* Orchestrates loading and applying seed data from the /seed/ folder.
|
||||
* DBAL does NOT define what to seed - that lives in /seed/ folder as data files.
|
||||
* Orchestrates loading and applying seed data from /dbal/shared/seeds/ folder.
|
||||
* DBAL does NOT define what to seed - that lives in /dbal/shared/seeds/ as data files.
|
||||
* DBAL only manages the loading and application of that seed data.
|
||||
*
|
||||
* Seed data hierarchy:
|
||||
* 1. /seed/database - Base system bootstrap data (YAML format)
|
||||
* 2. packages/[packageId]/seed/metadata.json - Package-specific seed data
|
||||
* 1. /dbal/shared/seeds/database - Base system bootstrap data (YAML format)
|
||||
* 2. /dbal/shared/seeds/config - Bootstrap configuration (YAML format)
|
||||
* 3. /dbal/shared/seeds/packages - Package installation order (YAML format)
|
||||
* 4. packages/[packageId]/seed/metadata.json - Package-specific seed data
|
||||
*/
|
||||
|
||||
import type { DBALClient } from '../core/client'
|
||||
@@ -22,16 +24,17 @@ import type { DBALClient } from '../core/client'
|
||||
* @param dbal DBALClient instance for database access
|
||||
*/
|
||||
export async function seedDatabase(dbal: DBALClient): Promise<void> {
|
||||
// TODO: Implement seed loading from /seed/ folder
|
||||
// TODO: Implement seed loading from /dbal/shared/seeds/ folder
|
||||
// For now, this is a placeholder that can be expanded when seed data
|
||||
// structure and format is finalized.
|
||||
//
|
||||
// Expected implementation:
|
||||
// 1. Load /seed/database/installed_packages.yaml
|
||||
// 2. Load /seed/database/package_permissions.yaml
|
||||
// 3. Load /seed/config/bootstrap.yaml
|
||||
// 4. Load package-specific seeds from packages/*/seed/metadata.json
|
||||
// 5. Apply each using DBALClient entity operations
|
||||
// 1. Load /dbal/shared/seeds/database/installed_packages.yaml
|
||||
// 2. Load /dbal/shared/seeds/database/package_permissions.yaml
|
||||
// 3. Load /dbal/shared/seeds/config/bootstrap.yaml
|
||||
// 4. Load /dbal/shared/seeds/packages/core-packages.yaml
|
||||
// 5. Load package-specific seeds from packages/[packageId]/seed/metadata.json
|
||||
// 6. Apply each using DBALClient entity operations
|
||||
|
||||
console.log('Seed database orchestration ready (awaiting seed data implementation)')
|
||||
}
|
||||
|
||||
@@ -165,6 +165,6 @@ const renderModel = (model) => {
|
||||
}
|
||||
|
||||
const schema = [header, models.map(renderModel).join('\n\n')].join('\n\n')
|
||||
const outputPath = path.resolve(__dirname, '../../../../prisma/schema.prisma')
|
||||
const outputPath = path.resolve(__dirname, '../../../development/prisma/schema.prisma')
|
||||
fs.writeFileSync(outputPath, schema + '\n', 'utf8')
|
||||
console.log(`Prisma schema written to ${outputPath}`)
|
||||
|
||||
@@ -22,9 +22,10 @@
|
||||
"test:e2e:debug": "playwright test --config=../../playwright.config.ts --debug",
|
||||
"test:e2e:report": "playwright show-report",
|
||||
"test:e2e:dbal-daemon": "playwright test --config=../../e2e/playwright.dbal-daemon.config.ts",
|
||||
"db:generate": "prisma generate --schema=../../prisma/schema.prisma",
|
||||
"db:push": "prisma db push --schema=../../prisma/schema.prisma",
|
||||
"db:migrate": "prisma migrate deploy --schema=../../prisma/schema.prisma"
|
||||
"db:generate": "npm --prefix ../../dbal/development run db:generate",
|
||||
"db:push": "npm --prefix ../../dbal/development run db:push",
|
||||
"db:migrate": "npm --prefix ../../dbal/development run db:migrate",
|
||||
"db:seed": "npm --prefix ../../dbal/development run db:seed"
|
||||
},
|
||||
"dependencies": {
|
||||
"@metabuilder/dbal": "file:../../dbal/development",
|
||||
|
||||
@@ -4,9 +4,10 @@
|
||||
"version": "0.0.0",
|
||||
"description": "MetaBuilder - Data-driven multi-tenant platform",
|
||||
"scripts": {
|
||||
"db:generate": "npm --prefix frontends/nextjs run db:generate",
|
||||
"db:push": "npm --prefix frontends/nextjs run db:push",
|
||||
"db:migrate": "npm --prefix frontends/nextjs run db:migrate",
|
||||
"db:generate": "npm --prefix dbal/development run db:generate",
|
||||
"db:push": "npm --prefix dbal/development run db:push",
|
||||
"db:migrate": "npm --prefix dbal/development run db:migrate",
|
||||
"db:seed": "npm --prefix dbal/development run db:seed",
|
||||
"dev": "npm --prefix frontends/nextjs run dev",
|
||||
"build": "npm --prefix frontends/nextjs run build",
|
||||
"typecheck": "npm --prefix frontends/nextjs run typecheck",
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
# Prisma Database Configuration
|
||||
|
||||
This directory contains the Prisma database schema and migrations.
|
||||
The schema is generated from DBAL and should not be edited manually.
|
||||
|
||||
## 📋 Files
|
||||
|
||||
- `schema.prisma` - Database schema definition
|
||||
- `migrations/` - Database migration history
|
||||
|
||||
## 🚀 Quick Start
|
||||
|
||||
### Generate Prisma Client
|
||||
|
||||
```bash
|
||||
npm --prefix dbal/development run codegen:prisma
|
||||
npm run db:generate
|
||||
```
|
||||
|
||||
Regenerate the Prisma client after schema changes.
|
||||
|
||||
### Apply Migrations
|
||||
|
||||
```bash
|
||||
npm run db:push
|
||||
```
|
||||
|
||||
Apply pending schema changes to database.
|
||||
|
||||
### View Database
|
||||
|
||||
```bash
|
||||
npm run db:studio
|
||||
```
|
||||
|
||||
Opens Prisma Studio for visual database management.
|
||||
|
||||
## 📝 Database Schema
|
||||
|
||||
Key entities defined in `schema.prisma`:
|
||||
|
||||
- **User** - Core user identity
|
||||
- **Credential** - Authentication hashes
|
||||
- **Session** - Active sessions
|
||||
- **PageConfig** - Routes and page metadata
|
||||
- **ComponentNode** - Component tree nodes
|
||||
- **ComponentConfig** - Component configuration payloads
|
||||
- **Workflow** - Automation workflows
|
||||
- **InstalledPackage** - Installed package metadata
|
||||
- **PackageData** - Package data payloads
|
||||
|
||||
## 📚 Migrations
|
||||
|
||||
Migration files track schema changes:
|
||||
|
||||
```bash
|
||||
# List migrations
|
||||
ls migrations/
|
||||
|
||||
# Create new migration
|
||||
npx prisma migrate dev --name add_feature
|
||||
|
||||
# Reset database (dev only!)
|
||||
npx prisma migrate reset
|
||||
```
|
||||
|
||||
## 🔗 Related
|
||||
|
||||
- [Database Architecture](../docs/architecture/database.md)
|
||||
- [API Development](../docs/guides/api-development.md)
|
||||
- [Security Guidelines](../docs/SECURITY.md)
|
||||
- [Getting Started](../docs/guides/getting-started.md)
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"entities": {},
|
||||
"migrationQueue": []
|
||||
}
|
||||
9
seed/.gitignore
vendored
9
seed/.gitignore
vendored
@@ -1,9 +0,0 @@
|
||||
# Ignore log files
|
||||
logs/*.log
|
||||
logs/*.json
|
||||
|
||||
# Ignore cache
|
||||
.cache/
|
||||
|
||||
# Keep directory structure
|
||||
!logs/.gitkeep
|
||||
272
seed/INDEX.md
272
seed/INDEX.md
@@ -1,272 +0,0 @@
|
||||
# Seed Directory Index
|
||||
|
||||
Quick reference for all seed files and their purposes.
|
||||
|
||||
## File Structure
|
||||
|
||||
```
|
||||
seed/
|
||||
├── README.md # Main documentation
|
||||
├── INDEX.md # This file - quick reference
|
||||
├── .gitignore # Git ignore rules for logs/cache
|
||||
│
|
||||
├── packages/ # Package manifests
|
||||
│ └── core-packages.yaml # Core packages to auto-install
|
||||
│
|
||||
├── database/ # DBAL-format database seeds
|
||||
│ ├── installed_packages.yaml # InstalledPackage table records
|
||||
│ └── package_permissions.yaml # PackagePermission table records
|
||||
│
|
||||
├── config/ # Bootstrap configuration
|
||||
│ ├── bootstrap.yaml # Bootstrap behavior and phases
|
||||
│ └── package-repo.yaml # Package source and validation config
|
||||
│
|
||||
└── logs/ # Bootstrap execution logs
|
||||
└── .gitkeep # Keep directory in git
|
||||
```
|
||||
|
||||
## Quick Links
|
||||
|
||||
| File | Purpose | Lines | Key Sections |
|
||||
|------|---------|-------|--------------|
|
||||
| [README.md](README.md) | Main documentation | ~400 | Usage, integration, troubleshooting |
|
||||
| [packages/core-packages.yaml](packages/core-packages.yaml) | Package definitions | ~150 | packages, recommended, development, bootstrap_order |
|
||||
| [database/installed_packages.yaml](database/installed_packages.yaml) | Package install records | ~130 | records (11 packages) |
|
||||
| [database/package_permissions.yaml](database/package_permissions.yaml) | Package ACL records | ~200 | records (~20 permissions), permission_levels |
|
||||
| [config/bootstrap.yaml](config/bootstrap.yaml) | Bootstrap config | ~170 | bootstrap, phases, database, hooks, environments |
|
||||
| [config/package-repo.yaml](config/package-repo.yaml) | Repository config | ~250 | sources, discovery, validation, conflicts, security |
|
||||
|
||||
## Usage Cheat Sheet
|
||||
|
||||
### Bootstrap Commands (DBAL CLI)
|
||||
|
||||
```bash
|
||||
# Full bootstrap
|
||||
dbal bootstrap --config seed/config/bootstrap.yaml
|
||||
|
||||
# Dry run
|
||||
dbal bootstrap --dry-run
|
||||
|
||||
# Production mode
|
||||
dbal bootstrap --env production
|
||||
|
||||
# Development with verbose output
|
||||
dbal bootstrap --env development --verbose
|
||||
```
|
||||
|
||||
### Seed Database
|
||||
|
||||
```bash
|
||||
# Seed all
|
||||
dbal seed --dir seed/database
|
||||
|
||||
# Seed specific table
|
||||
dbal seed seed/database/installed_packages.yaml
|
||||
dbal seed seed/database/package_permissions.yaml
|
||||
|
||||
# Force re-seed
|
||||
dbal seed --force
|
||||
```
|
||||
|
||||
### Validation
|
||||
|
||||
```bash
|
||||
# Validate all seed files
|
||||
dbal validate --dir seed
|
||||
|
||||
# Validate packages
|
||||
dbal validate seed/packages/core-packages.yaml
|
||||
|
||||
# Check schema compatibility
|
||||
dbal validate-schema seed/database/*.yaml
|
||||
```
|
||||
|
||||
## File Details
|
||||
|
||||
### packages/core-packages.yaml
|
||||
|
||||
**11 Core Packages:**
|
||||
1. package_manager (priority 1) - Required
|
||||
2. ui_header, ui_footer, ui_auth, ui_login (priority 2) - Required
|
||||
3. dashboard (priority 3) - Required
|
||||
4. user_manager, role_editor (priority 4) - Required
|
||||
5. admin_dialog (priority 5) - Optional
|
||||
6. database_manager, schema_editor (priority 6) - Optional
|
||||
|
||||
**6 Recommended Packages:**
|
||||
- notification_center, audit_log, data_table, form_builder, quick_guide
|
||||
|
||||
**5 Development Packages:**
|
||||
- testing, package_validator, component_editor, theme_editor, code_editor
|
||||
|
||||
### database/installed_packages.yaml
|
||||
|
||||
**Fields per record:**
|
||||
- packageId (PK)
|
||||
- tenantId (null = system-wide)
|
||||
- installedAt (0 = use current timestamp)
|
||||
- version (semver)
|
||||
- enabled (boolean)
|
||||
- config (JSON string with package settings)
|
||||
|
||||
**Special config flags:**
|
||||
- systemPackage: true → Cannot uninstall
|
||||
- uninstallProtection: true → Extra confirmation required
|
||||
- minLevel: 4-5 → Permission level requirement
|
||||
- dangerousOperations: true → Can modify system
|
||||
|
||||
### database/package_permissions.yaml
|
||||
|
||||
**Permission levels:**
|
||||
- 0: public → ui_auth, ui_login
|
||||
- 1: user → ui_header, ui_footer, dashboard
|
||||
- 3: admin → user_manager
|
||||
- 4: god → package_manager, role_editor
|
||||
- 5: supergod → database_manager, schema_editor
|
||||
|
||||
**Permission types:**
|
||||
- read → View/access
|
||||
- write → Modify data
|
||||
- execute → Run scripts
|
||||
- admin → Full control
|
||||
|
||||
### config/bootstrap.yaml
|
||||
|
||||
**6 Installation Phases:**
|
||||
1. Core System (package_manager)
|
||||
2. Base UI (ui components)
|
||||
3. Essential Features (dashboard)
|
||||
4. Administration (user/role management)
|
||||
5. Admin Tools (database/schema tools)
|
||||
6. Recommended (optional packages)
|
||||
7. Development (dev-only tools)
|
||||
|
||||
**Hooks:**
|
||||
- preBootstrap → Before start
|
||||
- postBootstrap → After success (runs validate-schema, verify-packages)
|
||||
- onError → On failure (runs rollback-seed)
|
||||
- prePhase/postPhase → Around each phase
|
||||
|
||||
**Environment configs:**
|
||||
- development → Verbose, include dev tools
|
||||
- production → Strict validation, exclude dev tools
|
||||
- test → Always re-seed, use transactions
|
||||
|
||||
### config/package-repo.yaml
|
||||
|
||||
**Sources:**
|
||||
- local (/packages, priority 0)
|
||||
- Future: remote registries, git repos
|
||||
|
||||
**Validation:**
|
||||
- Required fields: packageId, name, version, description, author, license
|
||||
- packageId pattern: ^[a-z][a-z0-9_]*$ (snake_case)
|
||||
- Version format: semver
|
||||
- Schema: https://metabuilder.dev/schemas/package-metadata.schema.json
|
||||
|
||||
**Conflict resolution:**
|
||||
- Strategy: priority (lowest priority number wins)
|
||||
- Duplicate versions: newest
|
||||
|
||||
**Security:**
|
||||
- Sandbox package scripts
|
||||
- Disallow: eval, Function, require, import
|
||||
- Trust only: local source
|
||||
|
||||
## Integration Points
|
||||
|
||||
### Database Schema
|
||||
- [prisma/schema.prisma:327](../prisma/schema.prisma#L327) → InstalledPackage
|
||||
- [prisma/schema.prisma:1637](../prisma/schema.prisma#L1637) → PackagePermission
|
||||
|
||||
### DBAL Schema
|
||||
- [dbal/shared/api/schema/entities/core/package.yaml](../dbal/shared/api/schema/entities/core/package.yaml)
|
||||
|
||||
### Frontend Integration
|
||||
- [frontends/nextjs/src/lib/db/packages](../frontends/nextjs/src/lib/db/packages) → CRUD
|
||||
- [frontends/nextjs/src/lib/packages](../frontends/nextjs/src/lib/packages) → Loading
|
||||
|
||||
### Package Sources
|
||||
- [packages/](../packages/) → Local package directory
|
||||
|
||||
## Modification Guide
|
||||
|
||||
### Add a Core Package
|
||||
|
||||
1. Add to [packages/core-packages.yaml](packages/core-packages.yaml):
|
||||
```yaml
|
||||
- packageId: my_package
|
||||
version: "1.0.0"
|
||||
enabled: true
|
||||
priority: 10
|
||||
required: false
|
||||
```
|
||||
|
||||
2. Add to [database/installed_packages.yaml](database/installed_packages.yaml):
|
||||
```yaml
|
||||
- packageId: my_package
|
||||
tenantId: null
|
||||
installedAt: 0
|
||||
version: "1.0.0"
|
||||
enabled: true
|
||||
config: |
|
||||
{
|
||||
"systemPackage": false
|
||||
}
|
||||
```
|
||||
|
||||
3. Add to [database/package_permissions.yaml](database/package_permissions.yaml):
|
||||
```yaml
|
||||
- id: perm_my_package_user_read
|
||||
packageId: my_package
|
||||
role: user
|
||||
permission: read
|
||||
granted: true
|
||||
```
|
||||
|
||||
### Add a Bootstrap Phase
|
||||
|
||||
Edit [config/bootstrap.yaml](config/bootstrap.yaml):
|
||||
|
||||
```yaml
|
||||
phases:
|
||||
- id: 8
|
||||
name: "Custom Phase"
|
||||
required: false
|
||||
packages:
|
||||
source: core-packages.yaml
|
||||
filter: priority=100
|
||||
```
|
||||
|
||||
### Add a Package Source
|
||||
|
||||
Edit [config/package-repo.yaml](config/package-repo.yaml):
|
||||
|
||||
```yaml
|
||||
sources:
|
||||
- id: custom-source
|
||||
name: "Custom Packages"
|
||||
type: git
|
||||
url: https://github.com/org/packages.git
|
||||
priority: 10
|
||||
enabled: true
|
||||
```
|
||||
|
||||
## Logs
|
||||
|
||||
Bootstrap logs are written to:
|
||||
- `logs/bootstrap.log` - Main execution log
|
||||
- Format: JSON (structured logging)
|
||||
- Retention: 30 days (configurable in bootstrap.yaml)
|
||||
|
||||
Log levels:
|
||||
- `debug` - Verbose debugging
|
||||
- `info` - Normal operations (default)
|
||||
- `warn` - Warnings and non-critical issues
|
||||
- `error` - Failures and critical problems
|
||||
|
||||
---
|
||||
|
||||
**Last Updated:** 2026-01-03
|
||||
**Bootstrap Version:** 1.0
|
||||
**Generated with Claude Code**
|
||||
@@ -1,424 +0,0 @@
|
||||
# Landing Page Verification
|
||||
|
||||
## ✅ Guest Landing Page Components - READY!
|
||||
|
||||
The seed system is configured to render a complete guest landing page at `/` with header, hero, features, about, contact, and footer sections.
|
||||
|
||||
---
|
||||
|
||||
## Package: `ui_home`
|
||||
|
||||
**Location**: [`packages/ui_home/`](../packages/ui_home/)
|
||||
**Status**: ✅ EXISTS
|
||||
**Bootstrap**: ✅ INCLUDED IN SEED
|
||||
|
||||
### Components Included:
|
||||
|
||||
```
|
||||
HomePage (main layout)
|
||||
├── HeroSection
|
||||
│ ├── Title: "Build Anything, Visually"
|
||||
│ ├── Subtitle: "A 6-level meta-architecture..."
|
||||
│ └── CTA Buttons
|
||||
│ ├── "Get Started" (primary)
|
||||
│ └── "Watch Demo" (secondary)
|
||||
│
|
||||
├── FeaturesSection ("Six Levels of Power")
|
||||
│ ├── FeatureCard1 - Level 1: Public Website
|
||||
│ ├── FeatureCard2 - Level 2: User Area
|
||||
│ ├── FeatureCard3 - Level 3: Moderator Panel
|
||||
│ ├── FeatureCard4 - Level 4: Admin Panel
|
||||
│ ├── FeatureCard5 - Level 5: God-Tier Builder
|
||||
│ └── FeatureCard6 - Level 6: Super God Panel
|
||||
│
|
||||
├── AboutSection
|
||||
│ ├── Title: "About MetaBuilder"
|
||||
│ └── Description (2 paragraphs)
|
||||
│
|
||||
└── ContactSection
|
||||
└── Contact Form
|
||||
├── Name field
|
||||
├── Email field
|
||||
├── Message textarea
|
||||
└── "Send Message" button
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Supporting Packages
|
||||
|
||||
### ui_header ✅
|
||||
**Bootstrap**: ✅ Priority 2
|
||||
**Permission**: User (level 1+)
|
||||
Provides navigation header
|
||||
|
||||
### ui_footer ✅
|
||||
**Bootstrap**: ✅ Priority 2
|
||||
**Permission**: User (level 1+)
|
||||
Provides footer with links
|
||||
|
||||
### ui_auth ✅
|
||||
**Bootstrap**: ✅ Priority 2
|
||||
**Permission**: Public (level 0)
|
||||
Authentication components
|
||||
|
||||
### ui_login ✅
|
||||
**Bootstrap**: ✅ Priority 2
|
||||
**Permission**: Public (level 0)
|
||||
Login page
|
||||
|
||||
---
|
||||
|
||||
## Seed Configuration
|
||||
|
||||
### 1. Core Packages List
|
||||
|
||||
**File**: [`seed/packages/core-packages.yaml`](packages/core-packages.yaml)
|
||||
|
||||
```yaml
|
||||
# Line 30-35
|
||||
- packageId: ui_home
|
||||
version: "1.0.0"
|
||||
enabled: true
|
||||
priority: 2
|
||||
required: true
|
||||
description: "Home/landing page with hero, features, about, and contact sections"
|
||||
```
|
||||
|
||||
✅ **Included** in Phase 2 (Base UI) with priority 2
|
||||
|
||||
### 2. Database Seed
|
||||
|
||||
**File**: [`seed/database/installed_packages.yaml`](database/installed_packages.yaml)
|
||||
|
||||
```yaml
|
||||
# Lines 44-54
|
||||
- packageId: ui_home
|
||||
tenantId: null # System-wide
|
||||
installedAt: 0 # Bootstrap time
|
||||
version: "1.0.0"
|
||||
enabled: true
|
||||
config: |
|
||||
{
|
||||
"systemPackage": true,
|
||||
"defaultRoute": "/", # Maps to root
|
||||
"publicAccess": true # No auth required
|
||||
}
|
||||
```
|
||||
|
||||
✅ **Configured** as system package with public access
|
||||
|
||||
### 3. Permissions
|
||||
|
||||
**File**: [`seed/database/package_permissions.yaml`](database/package_permissions.yaml)
|
||||
|
||||
```yaml
|
||||
# Lines 72-80
|
||||
- id: perm_ui_home_public_read
|
||||
packageId: ui_home
|
||||
tenantId: null
|
||||
userId: null
|
||||
role: public # Level 0 - unauthenticated
|
||||
permission: read
|
||||
resource: null
|
||||
granted: true
|
||||
```
|
||||
|
||||
✅ **Public access** - no login required
|
||||
|
||||
### 4. Bootstrap Script
|
||||
|
||||
**File**: [`deployment/scripts/bootstrap-system.sh`](../deployment/scripts/bootstrap-system.sh)
|
||||
|
||||
```bash
|
||||
# Lines 160-173
|
||||
CORE_PACKAGES=(
|
||||
"package_manager"
|
||||
"ui_header"
|
||||
"ui_footer"
|
||||
"ui_home" # ← Added!
|
||||
"ui_auth"
|
||||
"ui_login"
|
||||
"dashboard"
|
||||
"user_manager"
|
||||
"role_editor"
|
||||
"admin_dialog"
|
||||
"database_manager"
|
||||
"schema_editor"
|
||||
)
|
||||
```
|
||||
|
||||
✅ **Included** in bootstrap installation list
|
||||
|
||||
---
|
||||
|
||||
## Package Contents
|
||||
|
||||
### Component Definitions
|
||||
|
||||
**File**: [`packages/ui_home/components/ui.json`](../packages/ui_home/components/ui.json)
|
||||
|
||||
- ✅ 641 lines of declarative UI definition
|
||||
- ✅ JSON-based components (no TypeScript required!)
|
||||
- ✅ MUI (Material-UI) components
|
||||
- ✅ Responsive design (xs, sm, md, lg breakpoints)
|
||||
- ✅ Gradient backgrounds and modern styling
|
||||
- ✅ Interactive hover effects
|
||||
|
||||
### Package Metadata
|
||||
|
||||
**File**: [`packages/ui_home/package.json`](../packages/ui_home/package.json)
|
||||
|
||||
```json
|
||||
{
|
||||
"packageId": "ui_home",
|
||||
"name": "Home Page",
|
||||
"minLevel": 1, // Public access
|
||||
"primary": true, // Can own routes
|
||||
"dependencies": {
|
||||
"ui_permissions": "*",
|
||||
"ui_header": "*",
|
||||
"ui_footer": "*"
|
||||
},
|
||||
"exports": {
|
||||
"pages": ["level1"],
|
||||
"components": [
|
||||
"home_page", "hero_section", "features_section",
|
||||
"feature_card_1", "feature_card_2", "feature_card_3",
|
||||
"feature_card_4", "feature_card_5", "feature_card_6",
|
||||
"about_section", "contact_section"
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
✅ **Dependencies declared** - header and footer will be installed first
|
||||
|
||||
---
|
||||
|
||||
## Visual Preview
|
||||
|
||||
When deployed, guests visiting `/` will see:
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────────┐
|
||||
│ HEADER (ui_header) │
|
||||
│ Logo | Home | Features | About | Contact │
|
||||
└────────────────────────────────────────────────┘
|
||||
│ │
|
||||
│ HERO SECTION │
|
||||
│ ┌────────────────────────────────────┐ │
|
||||
│ │ Build Anything, Visually │ │
|
||||
│ │ A 6-level meta-architecture... │ │
|
||||
│ │ │ │
|
||||
│ │ [Get Started] [Watch Demo] │ │
|
||||
│ └────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ FEATURES SECTION │
|
||||
│ Six Levels of Power │
|
||||
│ ┌──────┐ ┌──────┐ ┌──────┐ │
|
||||
│ │ 1 │ │ 2 │ │ 3 │ │
|
||||
│ │Public│ │ User │ │ Mod │ │
|
||||
│ └──────┘ └──────┘ └──────┘ │
|
||||
│ ┌──────┐ ┌──────┐ ┌──────┐ │
|
||||
│ │ 4 │ │ 5 │ │ 6 │ │
|
||||
│ │Admin │ │ God │ │Super │ │
|
||||
│ └──────┘ └──────┘ └──────┘ │
|
||||
│ │
|
||||
│ ABOUT SECTION │
|
||||
│ About MetaBuilder │
|
||||
│ MetaBuilder is a revolutionary platform... │
|
||||
│ │
|
||||
│ CONTACT SECTION │
|
||||
│ ┌────────────────────────────┐ │
|
||||
│ │ Get in Touch │ │
|
||||
│ │ [Name field] │ │
|
||||
│ │ [Email field] │ │
|
||||
│ │ [Message textarea] │ │
|
||||
│ │ [Send Message button] │ │
|
||||
│ └────────────────────────────┘ │
|
||||
│ │
|
||||
┌────────────────────────────────────────────────┐
|
||||
│ FOOTER (ui_footer) │
|
||||
│ © 2026 MetaBuilder | Privacy | Terms │
|
||||
└────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## What Happens on Bootstrap
|
||||
|
||||
### Step-by-Step Installation
|
||||
|
||||
1. **Phase 1**: Install `package_manager`
|
||||
2. **Phase 2**: Install Base UI packages
|
||||
- `ui_header` ✅
|
||||
- `ui_footer` ✅
|
||||
- **`ui_home`** ✅ **← Landing page!**
|
||||
- `ui_auth` ✅
|
||||
- `ui_login` ✅
|
||||
|
||||
3. **Database Records Created**:
|
||||
- InstalledPackage record for `ui_home`
|
||||
- PackagePermission record: `public` role can `read`
|
||||
|
||||
4. **Result**:
|
||||
- Landing page components registered
|
||||
- Route `/` mapped to `ui_home`
|
||||
- Public access granted
|
||||
- Header and footer available
|
||||
|
||||
---
|
||||
|
||||
## Verification Checklist
|
||||
|
||||
Before deploying, verify:
|
||||
|
||||
- [x] `ui_home` package exists in `/packages/ui_home/`
|
||||
- [x] `components/ui.json` contains all UI definitions
|
||||
- [x] `package.json` declares dependencies
|
||||
- [x] Seed file includes `ui_home` in core packages
|
||||
- [x] Database seed includes InstalledPackage record
|
||||
- [x] Database seed includes PackagePermission (public read)
|
||||
- [x] Bootstrap script includes `ui_home` in CORE_PACKAGES array
|
||||
- [x] Priority 2 (installs early, with other UI)
|
||||
- [x] `publicAccess: true` in config
|
||||
- [x] `defaultRoute: "/"` configured
|
||||
|
||||
**Status**: ✅ **ALL CHECKS PASS**
|
||||
|
||||
---
|
||||
|
||||
## Testing After Bootstrap
|
||||
|
||||
### 1. Check Package Installation
|
||||
|
||||
```bash
|
||||
docker-compose -f deployment/docker/docker-compose.production.yml \
|
||||
exec postgres \
|
||||
psql -U metabuilder metabuilder -c \
|
||||
"SELECT \"packageId\", enabled FROM \"InstalledPackage\" WHERE \"packageId\" = 'ui_home';"
|
||||
|
||||
# Expected output:
|
||||
# packageId | enabled
|
||||
# -----------+---------
|
||||
# ui_home | t
|
||||
```
|
||||
|
||||
### 2. Check Database Records
|
||||
|
||||
```bash
|
||||
# Check InstalledPackage
|
||||
docker-compose -f deployment/docker/docker-compose.production.yml \
|
||||
exec postgres \
|
||||
psql -U metabuilder metabuilder -c \
|
||||
"SELECT \"packageId\", enabled FROM \"InstalledPackage\" WHERE \"packageId\" = 'ui_home';"
|
||||
|
||||
# Expected:
|
||||
# packageId | enabled
|
||||
# -----------+---------
|
||||
# ui_home | t
|
||||
```
|
||||
|
||||
### 3. Visit Landing Page
|
||||
|
||||
```bash
|
||||
# Open in browser
|
||||
open http://localhost:3000/
|
||||
|
||||
# Expected: See complete landing page with:
|
||||
# - Header navigation
|
||||
# - Hero section with gradient title
|
||||
# - Six feature cards
|
||||
# - About section
|
||||
# - Contact form
|
||||
# - Footer
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Landing Page Not Showing
|
||||
|
||||
**Check 1**: Package installed?
|
||||
```bash
|
||||
docker-compose -f deployment/docker/docker-compose.production.yml \
|
||||
exec postgres \
|
||||
psql -U metabuilder metabuilder -c \
|
||||
"SELECT \"packageId\", enabled FROM \"InstalledPackage\" WHERE \"packageId\" = 'ui_home';"
|
||||
```
|
||||
|
||||
**Check 2**: Database record exists?
|
||||
```sql
|
||||
SELECT * FROM "InstalledPackage" WHERE "packageId" = 'ui_home';
|
||||
```
|
||||
|
||||
**Check 3**: Permission granted?
|
||||
```sql
|
||||
SELECT * FROM "PackagePermission"
|
||||
WHERE "packageId" = 'ui_home'
|
||||
AND role = 'public';
|
||||
```
|
||||
|
||||
**Check 4**: Package enabled?
|
||||
```sql
|
||||
UPDATE "InstalledPackage"
|
||||
SET enabled = true
|
||||
WHERE "packageId" = 'ui_home';
|
||||
```
|
||||
|
||||
**Check 5**: Component files exist?
|
||||
```bash
|
||||
ls -la packages/ui_home/components/ui.json
|
||||
cat packages/ui_home/components/ui.json | jq '.components | length'
|
||||
# Expected: 10 (components)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Dependencies Flow
|
||||
|
||||
```
|
||||
ui_home
|
||||
├─ requires ui_header (installed in same phase)
|
||||
├─ requires ui_footer (installed in same phase)
|
||||
└─ requires ui_permissions (installed in same phase)
|
||||
|
||||
All dependencies satisfied ✅
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Summary
|
||||
|
||||
### What You Get After Bootstrap:
|
||||
|
||||
✅ **Complete landing page** at `/`
|
||||
✅ **No authentication required** (public access)
|
||||
✅ **Header navigation** (ui_header)
|
||||
✅ **Hero section** with CTA buttons
|
||||
✅ **6 feature cards** explaining the levels
|
||||
✅ **About section** describing MetaBuilder
|
||||
✅ **Contact form** for inquiries
|
||||
✅ **Footer** with links
|
||||
✅ **Responsive design** (mobile, tablet, desktop)
|
||||
✅ **Modern styling** (gradients, hover effects)
|
||||
✅ **System package** (cannot be uninstalled)
|
||||
|
||||
### Components: **10 total**
|
||||
- HomePage (main container)
|
||||
- HeroSection
|
||||
- FeaturesSection
|
||||
- FeatureCard1-6 (six levels)
|
||||
- AboutSection
|
||||
- ContactSection
|
||||
|
||||
### Lines of Code: **641 lines** of declarative UI in JSON
|
||||
|
||||
**Your worry is addressed!** 🎉 The landing page is fully configured and will render beautifully on first deployment.
|
||||
|
||||
---
|
||||
|
||||
**Last Updated**: 2026-01-03
|
||||
**Verified by**: Claude Code
|
||||
392
seed/README.md
392
seed/README.md
@@ -1,392 +0,0 @@
|
||||
# Seed - Package System Bootstrap
|
||||
|
||||
This directory contains seed data and configuration for bootstrapping the MetaBuilder package system.
|
||||
|
||||
## Directory Structure
|
||||
|
||||
```
|
||||
seed/
|
||||
├── packages/ # Package installation manifests
|
||||
│ └── core-packages.yaml
|
||||
├── database/ # Database seed data (DBAL format)
|
||||
│ ├── installed_packages.yaml
|
||||
│ └── package_permissions.yaml
|
||||
├── config/ # System configuration
|
||||
│ ├── bootstrap.yaml
|
||||
│ └── package-repo.yaml
|
||||
└── README.md
|
||||
```
|
||||
|
||||
## Purpose
|
||||
|
||||
The seed system provides:
|
||||
|
||||
1. **Core Package Definitions** - Which packages to auto-install on first boot
|
||||
2. **Database Seeds** - Initial records for `InstalledPackage` and `PackagePermission` tables
|
||||
3. **Bootstrap Configuration** - How the package system initializes
|
||||
4. **Repository Configuration** - Where packages are loaded from and how conflicts are resolved
|
||||
|
||||
## Files
|
||||
|
||||
### packages/core-packages.yaml
|
||||
|
||||
Defines the packages that should be automatically installed during system bootstrap.
|
||||
|
||||
**Categories:**
|
||||
- **packages** - Core required packages (package_manager, ui components, dashboard, etc.)
|
||||
- **recommended** - Optional but recommended packages (notifications, audit log, etc.)
|
||||
- **development** - Dev-only tools (testing framework, validators, editors)
|
||||
|
||||
**Fields:**
|
||||
- `packageId` - Unique package identifier (snake_case)
|
||||
- `version` - Semantic version (e.g., "1.0.0")
|
||||
- `enabled` - Whether package is active by default
|
||||
- `priority` - Installation order (lower = earlier)
|
||||
- `required` - Whether bootstrap fails if this package can't be installed
|
||||
|
||||
**Bootstrap Phases:**
|
||||
1. Core System (package_manager)
|
||||
2. Base UI (header, footer, auth, login)
|
||||
3. Essential Features (dashboard)
|
||||
4. Administration (user_manager, role_editor)
|
||||
5. Admin Tools (database_manager, schema_editor)
|
||||
6. Recommended Packages (optional)
|
||||
|
||||
### database/installed_packages.yaml
|
||||
|
||||
Seed data for the `InstalledPackage` table matching the Prisma schema at [prisma/schema.prisma:327](prisma/schema.prisma#L327).
|
||||
|
||||
**Fields:**
|
||||
- `packageId` - Unique identifier (primary key)
|
||||
- `tenantId` - Tenant isolation (null = system-wide)
|
||||
- `installedAt` - Timestamp (0 = use current time)
|
||||
- `version` - Package version
|
||||
- `enabled` - Whether package is active
|
||||
- `config` - JSON configuration specific to each package
|
||||
|
||||
**Special Flags:**
|
||||
- `systemPackage: true` - Core packages that cannot be uninstalled
|
||||
- `uninstallProtection: true` - Prevents accidental removal
|
||||
- `minLevel` - Minimum permission level to access (1-5)
|
||||
- `dangerousOperations: true` - Packages that can modify system
|
||||
|
||||
### database/package_permissions.yaml
|
||||
|
||||
Seed data for the `PackagePermission` table matching [prisma/schema.prisma:1637](prisma/schema.prisma#L1637).
|
||||
|
||||
**Permission Levels (MetaBuilder 6-level system):**
|
||||
- 0: `public` - Unauthenticated users
|
||||
- 1: `user` - Authenticated users
|
||||
- 2: `moderator` - Content moderators
|
||||
- 3: `admin` - Tenant administrators
|
||||
- 4: `god` - System administrators
|
||||
- 5: `supergod` - Super administrators
|
||||
|
||||
**Permission Types:**
|
||||
- `read` - View/access package features
|
||||
- `write` - Modify package data
|
||||
- `execute` - Execute package scripts
|
||||
- `admin` - Full package administration
|
||||
|
||||
**Default Permissions:**
|
||||
- UI packages (header, footer, login) → `public` or `user` level
|
||||
- Dashboard → `user` level
|
||||
- User management → `admin` level
|
||||
- Package management → `god` level
|
||||
- Database/schema tools → `supergod` only
|
||||
|
||||
### config/bootstrap.yaml
|
||||
|
||||
Controls how the package system initializes.
|
||||
|
||||
**Key Sections:**
|
||||
|
||||
**bootstrap:**
|
||||
- `mode` - auto | manual | interactive
|
||||
- `failOnError` - Continue if optional packages fail
|
||||
- `validatePackages` - Verify package.json before installing
|
||||
- `skipBrokenPackages` - Skip invalid packages
|
||||
|
||||
**phases:**
|
||||
Defines installation phases that map to core-packages.yaml priorities.
|
||||
|
||||
**database:**
|
||||
- `seedFiles` - YAML files to load into database
|
||||
- `skipIfPopulated` - Don't re-seed existing data
|
||||
- `useTransactions` - Rollback on failure
|
||||
|
||||
**hooks:**
|
||||
DBAL CLI commands to run at various stages:
|
||||
- `preBootstrap` - Before any operations
|
||||
- `postBootstrap` - After successful completion
|
||||
- `onError` - If bootstrap fails
|
||||
- `prePhase/postPhase` - Around each installation phase
|
||||
|
||||
**Environment Overrides:**
|
||||
- `development` - Verbose logging, include dev tools
|
||||
- `production` - Fail on errors, exclude dev tools
|
||||
- `test` - Always re-seed, use transactions
|
||||
|
||||
### config/package-repo.yaml
|
||||
|
||||
Package repository configuration.
|
||||
|
||||
**Key Sections:**
|
||||
|
||||
**sources:**
|
||||
Where to load packages from (priority order):
|
||||
- `local` - /packages directory (priority 0)
|
||||
- Future: remote registries, git repositories
|
||||
|
||||
**discovery:**
|
||||
- `scanPatterns` - Glob patterns to find packages
|
||||
- `excludePatterns` - Directories to ignore
|
||||
- `maxConcurrent` - Parallel discovery limit
|
||||
|
||||
**validation:**
|
||||
- `requiredFields` - Must be present in package.json
|
||||
- `schemaUrl` - JSON schema for validation
|
||||
- `packageIdPattern` - Regex for valid IDs (snake_case)
|
||||
|
||||
**dependencies:**
|
||||
- `missingDependencies` - error | warn | ignore
|
||||
- `detectCircular` - Find circular dependency chains
|
||||
|
||||
**conflicts:**
|
||||
- `strategy: priority` - Use lowest-priority source
|
||||
- `duplicateVersions: newest` - Pick latest version
|
||||
|
||||
**security:**
|
||||
- `sandboxPackageScripts` - Isolate package code
|
||||
- `disallowedPatterns` - Prevent dangerous code
|
||||
|
||||
## Usage
|
||||
|
||||
### Bootstrap with DBAL CLI
|
||||
|
||||
```bash
|
||||
# Run bootstrap process
|
||||
dbal bootstrap --config seed/config/bootstrap.yaml
|
||||
|
||||
# Dry run (simulate without changes)
|
||||
dbal bootstrap --dry-run
|
||||
|
||||
# Interactive mode
|
||||
dbal bootstrap --interactive
|
||||
|
||||
# Specific environment
|
||||
dbal bootstrap --env production
|
||||
```
|
||||
|
||||
### Seed Database Only
|
||||
|
||||
```bash
|
||||
# Seed all database files
|
||||
dbal seed --dir seed/database
|
||||
|
||||
# Seed specific file
|
||||
dbal seed seed/database/installed_packages.yaml
|
||||
|
||||
# Force re-seed (ignore skipIfExists)
|
||||
dbal seed --force
|
||||
```
|
||||
|
||||
### Validate Configuration
|
||||
|
||||
```bash
|
||||
# Validate all seed files
|
||||
dbal validate --dir seed
|
||||
|
||||
# Validate package definitions
|
||||
dbal validate seed/packages/core-packages.yaml
|
||||
|
||||
# Check database seeds against schema
|
||||
dbal validate-schema seed/database/*.yaml
|
||||
```
|
||||
|
||||
### Install Specific Packages
|
||||
|
||||
```bash
|
||||
# Install core packages only
|
||||
dbal install-packages --manifest seed/packages/core-packages.yaml --filter priority=1-3
|
||||
|
||||
# Install recommended packages
|
||||
dbal install-packages --manifest seed/packages/core-packages.yaml --filter section=recommended
|
||||
|
||||
# Install development tools
|
||||
dbal install-packages --manifest seed/packages/core-packages.yaml --filter section=development
|
||||
```
|
||||
|
||||
## Bootstrap Process Flow
|
||||
|
||||
1. **Pre-bootstrap hooks** - Run preparation commands
|
||||
2. **Validate configuration** - Check seed files and package definitions
|
||||
3. **Phase 1: Core System**
|
||||
- Install package_manager
|
||||
- Seed database records
|
||||
- Verify installation
|
||||
4. **Phase 2: Base UI**
|
||||
- Install ui_header, ui_footer, ui_auth, ui_login
|
||||
- Set up permissions
|
||||
5. **Phase 3-5: Features & Admin**
|
||||
- Install dashboard, user management, admin tools
|
||||
6. **Phase 6: Recommended** (optional)
|
||||
- Install notification_center, audit_log, etc.
|
||||
7. **Phase 7: Development** (dev only)
|
||||
- Install testing, validators, editors
|
||||
8. **Post-bootstrap hooks** - Verification and cleanup
|
||||
9. **Logging** - Record installation to logs/bootstrap.log
|
||||
|
||||
## Integration with Existing System
|
||||
|
||||
### Frontend Integration
|
||||
|
||||
The bootstrap system integrates with:
|
||||
- [frontends/nextjs/src/lib/db/packages](frontends/nextjs/src/lib/db/packages) - Package CRUD operations
|
||||
- [frontends/nextjs/src/lib/packages](frontends/nextjs/src/lib/packages) - Package loading and discovery
|
||||
|
||||
### DBAL Integration
|
||||
|
||||
Seed files use DBAL entity schemas:
|
||||
- [dbal/shared/api/schema/entities/core/package.yaml](dbal/shared/api/schema/entities/core/package.yaml)
|
||||
- Package CRUD operations in [dbal/development/src/core/entities/package](dbal/development/src/core/entities/package)
|
||||
|
||||
### Database Schema
|
||||
|
||||
Seed data matches Prisma schema:
|
||||
- [prisma/schema.prisma:327](prisma/schema.prisma#L327) - `InstalledPackage` model
|
||||
- [prisma/schema.prisma:1637](prisma/schema.prisma#L1637) - `PackagePermission` model
|
||||
|
||||
## Customization
|
||||
|
||||
### Adding Custom Packages to Bootstrap
|
||||
|
||||
1. Edit [seed/packages/core-packages.yaml](seed/packages/core-packages.yaml):
|
||||
|
||||
```yaml
|
||||
packages:
|
||||
- packageId: my_custom_package
|
||||
version: "1.0.0"
|
||||
enabled: true
|
||||
priority: 10
|
||||
required: false
|
||||
description: "My custom functionality"
|
||||
```
|
||||
|
||||
2. Add database seed in [seed/database/installed_packages.yaml](seed/database/installed_packages.yaml):
|
||||
|
||||
```yaml
|
||||
records:
|
||||
- packageId: my_custom_package
|
||||
tenantId: null
|
||||
installedAt: 0
|
||||
version: "1.0.0"
|
||||
enabled: true
|
||||
config: |
|
||||
{
|
||||
"customSetting": "value"
|
||||
}
|
||||
```
|
||||
|
||||
3. Add permissions in [seed/database/package_permissions.yaml](seed/database/package_permissions.yaml):
|
||||
|
||||
```yaml
|
||||
records:
|
||||
- id: perm_my_custom_user_read
|
||||
packageId: my_custom_package
|
||||
role: user
|
||||
permission: read
|
||||
granted: true
|
||||
```
|
||||
|
||||
### Environment-Specific Bootstrapping
|
||||
|
||||
Modify [seed/config/bootstrap.yaml](seed/config/bootstrap.yaml):
|
||||
|
||||
```yaml
|
||||
environments:
|
||||
staging:
|
||||
bootstrap:
|
||||
verbose: true
|
||||
failOnError: false
|
||||
phases:
|
||||
- id: 7
|
||||
enabled: true # Include dev tools in staging
|
||||
```
|
||||
|
||||
### Custom Package Sources
|
||||
|
||||
Edit [seed/config/package-repo.yaml](seed/config/package-repo.yaml):
|
||||
|
||||
```yaml
|
||||
sources:
|
||||
- id: company-packages
|
||||
name: "Company Private Packages"
|
||||
type: git
|
||||
url: https://github.com/company/metabuilder-packages.git
|
||||
priority: 5
|
||||
enabled: true
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Bootstrap Fails
|
||||
|
||||
Check logs:
|
||||
```bash
|
||||
cat logs/bootstrap.log
|
||||
```
|
||||
|
||||
Common issues:
|
||||
- Missing package directories → Verify /packages exists
|
||||
- Database connection → Check DBAL daemon is running
|
||||
- Permission denied → Ensure user has supergod role
|
||||
- Version conflicts → Check package versions in core-packages.yaml
|
||||
|
||||
### Package Not Installing
|
||||
|
||||
```bash
|
||||
# Validate package
|
||||
dbal validate packages/my_package/package.json
|
||||
|
||||
# Check for errors
|
||||
dbal install-package my_package --verbose
|
||||
|
||||
# Verify dependencies
|
||||
dbal check-dependencies my_package
|
||||
```
|
||||
|
||||
### Re-running Bootstrap
|
||||
|
||||
Bootstrap is idempotent with `skipIfPopulated: true`. To force re-bootstrap:
|
||||
|
||||
```bash
|
||||
# Clear package data
|
||||
dbal seed --force seed/database/installed_packages.yaml
|
||||
|
||||
# Re-run bootstrap
|
||||
dbal bootstrap --force
|
||||
```
|
||||
|
||||
## Future Enhancements
|
||||
|
||||
- [ ] Remote package registry support
|
||||
- [ ] Package signing and verification
|
||||
- [ ] Automatic dependency resolution
|
||||
- [ ] Package update notifications
|
||||
- [ ] Rollback capabilities
|
||||
- [ ] Multi-environment sync
|
||||
- [ ] Package health checks
|
||||
- [ ] Usage analytics
|
||||
|
||||
## See Also
|
||||
|
||||
- [Main README](../README.md) - Project overview
|
||||
- [Package System Documentation](../README.md#package-system) - Package architecture
|
||||
- [DBAL Documentation](../dbal/README.md) - Database layer
|
||||
- [Package Schema Examples](../schemas/package-schemas/examples/README.md) - Package examples
|
||||
- [6-Level Permission System](../README.md#6-level-permission-system) - Access control
|
||||
|
||||
---
|
||||
|
||||
**Generated with Claude Code**
|
||||
Reference in New Issue
Block a user