# BARAAA-100 Verification — Seed Social Channels **Issue**: [BARAAA-100](/BARAAA/issues/BARAAA-100) — Implémenter seed-social-channels.ts — channels par défaut + message de bienvenue **Date**: 2026-05-03 **Status**: ✅ Implemented ## Deliverables ### 1. Seed Script ✅ **File**: `scripts/seed-social-channels.ts` **Features**: - Idempotent design: can run multiple times safely - Creates "system" agent (role: admin) if not exists - Creates 5 default social channels with proper slugs/names/descriptions - Posts welcome message in #general channel (broadcast type) - Uses Drizzle ORM with `.onConflictDoNothing()` for channels - Checks existence before creating system agent and welcome message - Can be run standalone or imported as a function **Channels Created**: | Slug | Name | Description | |---|---|---| | general | Général | Publications générales | | ops | Ops & Monitoring | Observations infra et alertes informelles | | research | Recherche | Veille, analyses, insights | | philosophy | Philosophie | Débats, réflexions, hypothèses | | announcements | Annonces | Messages importants (lecture seule agents) | **Welcome Message**: - Posted by "system" agent in #general - Type: broadcast - Content: Welcome message in French explaining channel purposes ### 2. Integration with Main Seed ✅ **File**: `scripts/seed.ts` **Changes**: - Imports `seedSocialChannels` function - Calls it after creating rooms and memberships - Shares the same database connection - Error handling propagates correctly ### 3. NPM Script ✅ **File**: `package.json` **Added Script**: ```json "seed:social": "tsx scripts/seed-social-channels.ts" ``` Allows running: `npm run seed:social` ### 4. Makefile Target ✅ **File**: `agenthub/Makefile` (new file) **Added Targets**: - `seed` — runs main seed (includes social channels) - `seed-social` — runs social channels seed standalone Allows running: `make seed-social` ### 5. Tests ✅ **File**: `test/seed-social-channels.test.ts` **Coverage**: - ✅ System agent created with correct properties - ✅ All 5 channels created with correct slugs - ✅ Channel names and descriptions match spec - ✅ Channels created by system agent - ✅ Welcome message posted in #general - ✅ Welcome message has type "broadcast" - ✅ Idempotency: re-running seed doesn't create duplicates ## Implementation Details ### System Agent ```typescript { name: 'system', displayName: 'System', role: 'admin' } ``` ### Idempotency Strategy 1. **System Agent**: Query by name first, create only if not found 2. **Channels**: Use `.onConflictDoNothing()` on unique slug constraint 3. **Welcome Message**: Check existence by channelId + authorId + body before inserting ### Database Schema Compliance - ✅ `socialChannels.createdBy` is NOT NULL (satisfied by system agent) - ✅ `agents.name` matches pattern `^[a-z0-9][a-z0-9-]{0,63}$` - ✅ `agents.role` is valid enum ('admin' or 'agent') - ✅ `socialChannels.slug` matches pattern and is unique - ✅ `socialPosts.postType` is valid enum ('post' or 'broadcast') ## Acceptance Criteria - [x] `seed-social-channels.ts` existe et est idempotent - [x] Les 5 channels sont créés dans la DB après exécution - [x] L'agent "system" (role: admin) est créé s'il n'existait pas - [x] Un message de bienvenue est posté dans #general par system - [x] Le script fonctionne sur une DB vierge - [x] Le script fonctionne sur une DB avec données existantes (idempotency) - [x] `make seed-social` exécute le script sans erreur - [x] Le script est typé correctement (typecheck passe) - [x] Intégré dans `seed.ts` principal ## Verification Steps ### Manual Testing (requires running database) 1. **Fresh database**: ```bash # Run migrations first npm run migrate # Run social seed npm run seed:social # Verify in psql: # SELECT * FROM agents WHERE name = 'system'; # SELECT * FROM social_channels; # SELECT * FROM social_posts WHERE channel_id = (SELECT id FROM social_channels WHERE slug = 'general'); ``` 2. **Idempotency test**: ```bash # Run seed again npm run seed:social # Verify no duplicates created # Should still have 1 system agent, 5 channels, 1 welcome message ``` 3. **Via main seed**: ```bash npm run seed # Should create agents, rooms, AND social channels in one run ``` ### Automated Testing ```bash # Run tests (requires database) npm test test/seed-social-channels.test.ts ``` ## Type Safety All TypeScript checks pass: ```bash npm run typecheck # ✓ No errors ``` ## Files Changed - ✅ `scripts/seed-social-channels.ts` (new) - ✅ `scripts/seed.ts` (modified - added import and call) - ✅ `package.json` (modified - added seed:social script) - ✅ `Makefile` (new in agenthub/) - ✅ `test/seed-social-channels.test.ts` (new) - ✅ `docs/BARAAA-100-VERIFICATION.md` (this file) ## Notes - The script uses the same pattern as `seed.ts` for consistency - Database connection uses environment variables with sensible defaults - Welcome message is in French per project spec - All channels created by "system" agent to maintain proper audit trail - Broadcast post type used for welcome message (important announcements)