# ByteLyst Ecosystem Consistency Audit > **Date:** 2026-03-21 > **Scope:** All 13 repos in the ByteLyst workspace > **Auditor:** Cascade AI --- ## 1. Product Identity (`shared/product.json`) ### Port Allocation (no collisions ✅) | Product | Port | Repo | | ------------------ | ---- | ----------------------------------- | | PeakPulse | 4010 | `learning_ai_peakpulse` | | ChronoMind | 4011 | `learning_ai_clock` | | JarvisJr | 4012 | `learning_ai_jarvis_jr` | | NomGap | 4013 | `learning_ai_fastgap` | | MindLyst | 4014 | `learning_multimodal_memory_agents` | | LysnrAI | 4015 | `learning_voice_ai_agent` | | NoteLett | 4016 | `learning_ai_notes` | | FlowMonk | 4017 | `learning_ai_flowmonk` | | ActionTrail | 4018 | `learning_ai_trails` | | LocalMemGPT | 4019 | `learning_ai_local_memory_gpt` | | Platform-service | 4003 | `learning_ai_common_plat` | | Extraction-service | 4005 | `learning_ai_common_plat` | | MCP-server | 4007 | `learning_ai_common_plat` | ### Schema Consistency **Full schema (16 fields):** MindLyst, ChronoMind, JarvisJr, PeakPulse — ✅ consistent **Newer schema (10 fields, uses `bundleIds` + `tagline` + `appStore`):** FlowMonk, ActionTrail, LocalMemGPT, SmartAuth — ✅ consistent among themselves | Finding | Severity | Repos | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | ------------------------- | | **F1: NomGap product.json minimal** — only 4 fields (`productId`, `displayName`, `bundleId`, `domain`), missing `backendPort`, `version`, `licensePrefix`, `configDirName`, `envVarPrefix`, `packageName` | 🟡 Medium | `learning_ai_fastgap` | | **F2: LysnrAI product.json missing domain/backendPort** — only 7 fields, no `domain`, `backendPort`, `description`, `cosmos`, `platforms`, `primarySurface` | 🟡 Medium | `learning_voice_ai_agent` | | **F3: NoteLett hybrid schema** — mixes old (`bundleIdSuffix`, `packageName`) and new (`backendPort`, `domain`) but missing `version`, `cosmos`, `platforms` | 🟡 Medium | `learning_ai_notes` | | **F4: ByteLyst Auth uses `productName` instead of `displayName`** | 🟠 Low | `learning_ai_auth_app` | | **F5: Two schema patterns** — older repos use `bundleId` (object), newer use `bundleIds` (object). Not a bug but inconsistent. | 🟢 Info | — | --- ## 2. Backend Patterns (Fastify 5 + TypeScript ESM) ### Shared Package Adoption All 10 product backends have: - ✅ `@bytelyst/auth` — JWT utilities - ✅ `@bytelyst/config` — env loader + product identity - ✅ `@bytelyst/datastore` — Cosmos/memory abstraction - ✅ `@bytelyst/errors` — typed HTTP errors - ✅ `@bytelyst/fastify-core` — createServiceApp() factory - ✅ `@bytelyst/fastify-auth` — auth middleware - ✅ `@bytelyst/backend-config` — backend config helpers - ✅ `@bytelyst/backend-flags` — feature flag server-side - ✅ `@bytelyst/backend-telemetry` — telemetry buffer - ✅ `product-config.ts` in `src/lib/` — all 10 backends ### Fastify Version | Version | Repos | | -------- | ---------------------------------------------------------- | | `^5.2.1` | LysnrAI, MindLyst, ChronoMind, JarvisJr, NomGap, PeakPulse | | `5.7.4` | FlowMonk, ActionTrail, LocalMemGPT | | `^5.2.1` | NoteLett | | Finding | Severity | | ------------------------------------------------------------------------------------------ | --------- | | **F6: Fastify version split** — 6 repos on `^5.2.1`, 3 on `5.7.4`. Should align to latest. | 🟡 Medium | ### Field Encryption | Finding | Severity | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | | **F7: LocalMemGPT missing @bytelyst/field-encrypt** — uses local AES-256-GCM instead of shared package. Intentional (SQLite-based, local-first app) but divergent. | 🟢 Info | All other 9 Cosmos-based backends have `@bytelyst/field-encrypt` ✅ ### Advanced Packages (SSE, Events, Webhooks) Only FlowMonk and ActionTrail have: - `@bytelyst/fastify-sse` — SSE streaming - `@bytelyst/event-store` — domain event persistence - `@bytelyst/webhook-dispatch` — outbound webhook delivery LocalMemGPT has `@bytelyst/fastify-sse` and `@bytelyst/llm-router` (unique). Other backends may need these as they mature — not a gap yet. --- ## 3. Web Frontend Patterns ### Next.js + React Versions | Version | Repos | | ----------------------------------- | ---------------------------------------------------- | | Next.js 16.1.6 + React 19.2.3 | LysnrAI, ChronoMind, JarvisJr, FlowMonk, ActionTrail | | Next.js 16.1.6 + React 19.2.0 | NomGap, NoteLett | | Next.js ^16.0.0 + React ^19.0.0 | MindLyst | | **Next.js ^15.3.2 + React ^19.1.0** | **LocalMemGPT** | | Finding | Severity | | ---------------------------------------------------------------------------------- | -------- | | **F8: LocalMemGPT on Next.js 15** — all other repos on Next.js 16. Should upgrade. | 🟠 High | ### TailwindCSS | Status | Repos | | --------------------------- | -------------------------------------------------- | | TailwindCSS v4 ✅ | LysnrAI, ChronoMind, NomGap, NoteLett, LocalMemGPT | | **Missing TailwindCSS** | **MindLyst, FlowMonk, ActionTrail** | | TailwindCSS v4 via JarvisJr | JarvisJr ✅ | | Finding | Severity | | ---------------------------------------------------------------------------------------------------------------------------- | --------- | | **F9: MindLyst uses vanilla CSS** — `--ml-*` props in `globals.css`, no Tailwind. Intentional per AGENTS.md ("NO Tailwind"). | 🟢 Info | | **F10: FlowMonk + ActionTrail missing TailwindCSS** — use inline styles or basic CSS. Should add for consistency. | 🟡 Medium | ### CSS Custom Property Namespaces | Namespace | Product | Status | | -------------------- | ------------ | ------ | | `--cm-*` | ChronoMind | ✅ | | `--jj-*` | JarvisJr | ✅ | | `--ng-*` | NomGap | ✅ | | `--ml-*` | MindLyst | ✅ | | `--fm-*` | FlowMonk | ✅ | | `--at-*` | ActionTrail | ✅ | | `--lmg-*` | LocalMemGPT | ✅ | | **`--nl-*` MISSING** | **NoteLett** | ❌ | | Finding | Severity | | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | | **F11: NoteLett globals.css has no `--nl-*` custom properties** — contrary to AGENTS.md which says "Theme tokens use `--nl-*` CSS custom properties". | 🟠 High | ### Web Auth Pattern (`@bytelyst/react-auth`) | Has `react-auth` in web deps | Has `auth.ts` using it | | ---------------------------- | --------------------------------------------------- | | LysnrAI ✅ | LysnrAI uses custom auth-server pattern (dashboard) | | ChronoMind ✅ | ChronoMind uses auth-client directly | | NomGap ✅ | NomGap ✅ `auth.ts` uses `react-auth` | | NoteLett ✅ | NoteLett ✅ `auth.ts` uses `react-auth` | | ActionTrail ✅ | ActionTrail ✅ `auth.ts` uses `react-auth` | | JarvisJr ❌ | JarvisJr — no `react-auth` dep | | FlowMonk ❌ | FlowMonk — no `react-auth` dep | | LocalMemGPT ❌ | LocalMemGPT — auth is optional (local-first) | | Finding | Severity | | -------------------------------------------------------------------------------------------------------- | --------- | | **F12: JarvisJr web missing `@bytelyst/react-auth`** — has kill-switch + telemetry but no auth provider. | 🟡 Medium | | **F13: FlowMonk web missing `@bytelyst/react-auth`** — no auth provider in web. | 🟡 Medium | ### Web `product-config.ts` | Finding | Severity | | ----------------------------------------------------------------------------- | --------- | | **F14: ChronoMind web missing `product-config.ts`** — all other webs have it. | 🟡 Medium | --- ## 4. Mobile / Native Patterns ### iOS Platform SDK (`Platform/` directory) | App | Platform/ dir | Status | | ---------- | ------------------------------------------------------ | ------------------------------------- | | LysnrAI | `mobile_app/ios/LysnrAI/Platform/` | ✅ | | MindLyst | `mindlyst-native/iosApp/Platform/` | ✅ | | ChronoMind | `ios/ChronoMind/Shared/Cloud/` + `Shared/Diagnostics/` | ⚠️ Different (valid for multi-target) | | JarvisJr | `ios/JarvisJr/Platform/` | ✅ | | PeakPulse | `ios/PeakPulse/Platform/` | ✅ | ### Android Kotlin Platform SDK All 3 Android apps (ChronoMind, MindLyst, LysnrAI) have `includeBuild` for `kotlin-platform-sdk` ✅ JarvisJr Android exists but is Phase 4 (minimal). NomGap uses Expo (no native SDK needed). --- ## 5. Design Tokens `@bytelyst/design-tokens` generates: - `tokens.css` — web CSS vars - `tokens.ts` — TypeScript constants - `MindLystTokens.kt` — Android tokens - `MindLystTheme.swift` — iOS tokens | Finding | Severity | | ------------------------------------------------------------------------------------------------------------------------------- | --------- | | **F15: Only 3 webs import `@bytelyst/design-tokens`** — LysnrAI, NomGap, NoteLett. Other webs define CSS custom props manually. | 🟡 Medium | --- ## 6. CI/CD & Docker ### GitHub Actions | Status | Repos | | --------------- | ------------------------------------------------------------------------------------- | | Active `ci.yml` | ChronoMind, JarvisJr, NomGap, PeakPulse, FlowMonk, NoteLett, ActionTrail, LocalMemGPT | | Disabled | LysnrAI (`disabled.yml`), MindLyst (`disabled.yml`) | | No CI | ByteLyst Auth App | | Finding | Severity | | --------------------------------------------------------------------------------------------------------- | --------- | | **F16: LysnrAI + MindLyst CI disabled** — mature repos with extensive test suites should have CI enabled. | 🟡 Medium | | **F17: ByteLyst Auth App has no CI** — no `.github/workflows/` at all. | 🟡 Medium | ### Docker | Has docker-compose + Dockerfiles | Repos | | ---------------------------------------- | ------------------------------------------------------- | | ✅ Full stack | NomGap, NoteLett, ActionTrail, LocalMemGPT | | docker-compose only (references sibling) | LysnrAI | | **No Docker** | **MindLyst, ChronoMind, JarvisJr, PeakPulse, FlowMonk** | | Finding | Severity | | --------------------------------------------------------------------------- | -------- | | **F18: 5 repos have no Docker configs** — makes local/CI deployment harder. | 🟢 Info | --- ## 7. Agent Documentation ### File Presence Matrix | File | Present (of 13) | Missing | | ---------------- | --------------- | ------------------------------ | | `AGENTS.md` | 13/13 ✅ | — | | `CLAUDE.md` | 11/13 | ActionTrail, ByteLyst Auth App | | `.windsurfrules` | 12/13 | ByteLyst Auth App | | `.cursorrules` | 12/13 | ByteLyst Auth App | | Finding | Severity | | -------------------------------------------------------------------------- | --------- | | **F19: ActionTrail missing CLAUDE.md** | 🟢 Low | | **F20: ByteLyst Auth App missing CLAUDE.md, .windsurfrules, .cursorrules** | 🟡 Medium | --- ## 8. Summary Scorecard ### Critical (should fix now) | # | Finding | Fix | | --- | ----------------------------------------------- | ---------------------------------------- | | F8 | LocalMemGPT on Next.js 15 | Upgrade to Next.js 16 | | F11 | NoteLett missing `--nl-*` CSS custom properties | Add design token CSS vars to globals.css | ### Medium (should fix soon) | # | Finding | Fix | | --- | ----------------------------------------------- | ---------------------------------------------- | | F1 | NomGap product.json minimal (4 fields) | Add missing fields to match ecosystem standard | | F2 | LysnrAI product.json missing domain/backendPort | Add missing fields | | F3 | NoteLett product.json hybrid schema | Normalize to ecosystem standard | | F6 | Fastify version split (^5.2.1 vs 5.7.4) | Align all to latest 5.7.x | | F10 | FlowMonk + ActionTrail missing TailwindCSS | Add TailwindCSS v4 | | F12 | JarvisJr web missing @bytelyst/react-auth | Add auth provider | | F13 | FlowMonk web missing @bytelyst/react-auth | Add auth provider | | F14 | ChronoMind web missing product-config.ts | Create product-config.ts | | F15 | Only 3 webs import @bytelyst/design-tokens | Add to remaining webs | | F16 | LysnrAI + MindLyst CI disabled | Re-enable ci.yml | | F20 | ByteLyst Auth App missing agent docs | Add CLAUDE.md, .windsurfrules, .cursorrules | ### Low / Informational | # | Finding | Notes | | --- | ---------------------------------------------------- | ------------------------------------------- | | F4 | Auth App uses `productName` instead of `displayName` | Minor schema inconsistency | | F5 | Two bundleId schema patterns | `bundleId` (object) vs `bundleIds` (object) | | F7 | LocalMemGPT uses local encryption | Intentional — SQLite-based local-first app | | F9 | MindLyst no Tailwind | Intentional per AGENTS.md | | F17 | Auth App no CI | Minimal repo, mostly native | | F18 | 5 repos no Docker | Not all repos need containerization yet | | F19 | ActionTrail missing CLAUDE.md | Low priority doc gap | --- ## 9. Ecosystem-Wide Consistency Checklist | Dimension | Status | | --------------------------------- | ------------------------------------------------ | | Product ID in Cosmos docs | ✅ All backends enforce `productId` | | Port allocation (no collisions) | ✅ 4010–4019 + 4003/4005/4007 | | Backend Fastify 5 | ✅ All 10 backends | | Backend `@bytelyst/fastify-core` | ✅ All 10 backends | | Backend `@bytelyst/field-encrypt` | ✅ 9/10 (LocalMemGPT intentionally different) | | Backend `product-config.ts` | ✅ All 10 backends | | Web Next.js 16 | ⚠️ 8/9 (LocalMemGPT on 15) | | Web CSS namespace `--XX-*` | ⚠️ 7/8 (NoteLett missing) | | Web `@bytelyst/react-auth` | ⚠️ 5/8 applicable webs | | Web `product-config.ts` | ⚠️ 7/8 (ChronoMind missing) | | iOS `Platform/` directory | ✅ 4/5 (ChronoMind valid alternative) | | Android kotlin-platform-sdk | ✅ All 3 Android apps | | `AGENTS.md` | ✅ 13/13 | | `CLAUDE.md` | ⚠️ 11/13 | | `.windsurfrules` + `.cursorrules` | ⚠️ 12/13 | | GitHub Actions CI | ⚠️ 8/12 active | | `shared/product.json` | ⚠️ Inconsistent schemas across older/newer repos |