learning_ai_common_plat/docs/ECOSYSTEM_CONSISTENCY_AUDIT.md

309 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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) | ✅ 40104019 + 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 |