saravanakumardb1
dba594d4eb
fix(admin-web): GDPR export routes — create exports proxy + fix page paths
...
- Create /api/exports/[...path] proxy route for platform-service exports module
- Fix gdpr-export page: /api/maintenance/gdpr-exports → /api/exports/list|create
- Old path routed to settings/maintenance which has no export endpoints
2026-03-21 20:18:37 -07:00
saravanakumardb1
7b6aa53d68
fix(admin-web): proxy route path mismatches + missing HTTP methods
...
- maintenance: fix path /api/maintenance → /api/settings/maintenance
- maintenance: replace PATCH with PUT + add DELETE (matches backend API)
- ip-rules: fix path /api/ip-rules → /api/ratelimit/ip-rules
- jobs: add missing PUT handler for job updates
2026-03-21 20:12:24 -07:00
saravanakumardb1
633fe855bf
fix(admin-web): runs proxy route — same DELETE body-forwarding fix
2026-03-21 18:19:28 -07:00
saravanakumardb1
b6f9636171
fix(admin-web): proxy routes forward body on DELETE — use method !== GET/HEAD guard
2026-03-21 18:18:26 -07:00
saravanakumardb1
e712113c30
fix(admin-web): remove 38 unused imports across 13 dashboard pages
2026-03-21 18:13:29 -07:00
saravanakumardb1
e0bc38c365
feat(admin-web): Phase 4 — event-subscriptions, ip-rules, maintenance, sessions, status, gdpr-export pages
2026-03-21 18:05:14 -07:00
saravanakumardb1
aaceba2ee5
feat(admin-web): Phase 2 — webhooks, knowledge, agent-evals, reviews, marketplace, delivery, jobs pages
2026-03-21 17:53:44 -07:00
saravanakumardb1
aa33b12f8c
feat(admin-web): Phase 1 — organizations, support, AI budgets, waitlist pages
2026-03-21 17:47:41 -07:00
saravanakumardb1
d1d01727e4
fix(platform): register ai-diagnostics routes + wire 6 hidden sidebar pages
...
Phase 0 from DASHBOARD_UI_COVERAGE_ROADMAP:
- Register ai-diagnostics routes in server.ts (671-line module was never mounted)
- Add 6 hidden pages to admin sidebar-nav.tsx:
Debug Sessions, Health Dashboard, Extraction, Experiments,
Predictive, AI Diagnostics
- /users was already in sidebar (no change needed)
- Kill switch verified: already per-product via productId query param
- Admin sidebar now has 33 items (was 27)
2026-03-21 17:40:35 -07:00
saravanakumardb1
6f9ff2a5a4
docs: fix 10 bugs in dashboard UI coverage roadmap — self-audit corrections
...
Systematic review found and corrected:
- R1: Gap 1.2.3 (predictive campaigns) missing — added as Phase 4.12
- R2: Gap 1.2.4 (kill switch for all products) missing — added as Phase 0.3
- R3: Phase 1 labeled '1 week' but effort is 10 days — fixed to '2 weeks'
- R4: Admin sidebar target 59 wrong — corrected to 52
- R5: Phase 4 sidebar count 9 wrong — fixed to 7 new + 5 expanded
- R6: Dependency graph incorrect — Phase 4 can start after Phase 1
- R7: Success metrics denominator misleading — clarified
- R8: No grand total effort — added ~60 dev-days
- R9: No completion tracking — noted
- R10: Phase 2 API route count unexplained — added note
All 55 gap analysis items now verified covered across phases 0-6.
2026-03-21 17:35:30 -07:00
saravanakumardb1
d1a4db29a4
docs: add dashboard UI coverage roadmap — 6-phase execution plan to close 55 gaps
...
Converts gap analysis findings into concrete phased roadmap:
- Phase 0: Fix ai-diagnostics backend bug + wire 7 hidden sidebar items (1 day)
- Phase 1: 4 critical admin pages — orgs, support, AI budgets, waitlist (1 week)
- Phase 2: 7 high-value admin pages — webhooks, knowledge, evals, reviews, marketplace, delivery, jobs (2 weeks)
- Phase 3: User dashboard security hub + 5 missing pages (1.5 weeks)
- Phase 4: 11 operational admin features — event bus, SCIM, IP rules, backups, etc. (2 weeks)
- Phase 5: User polish — feedback, org membership, marketplace, GDPR export (1 week)
- Phase 6: 14 backlog items triggered by product needs
Includes dependency graph, per-page template, effort estimates,
acceptance criteria, success metrics, and risk register.
2026-03-21 17:31:19 -07:00
saravanakumardb1
827934124d
docs: add comprehensive dashboard UI gap analysis — 55 hidden/underexposed features identified
...
Systematic scan of platform-service (43+ modules, 511+ endpoints) vs admin-web
(27 sidebar items, 38 pages) and user-dashboard-web (11 pages, 39 API routes).
Key findings:
- 28 backend modules completely missing from admin UI
- 7 admin pages built but missing from sidebar (undiscoverable)
- 12 user-dashboard features completely missing
- 1 critical backend bug: ai-diagnostics routes.ts not registered in server.ts
- 26 missing admin API proxy routes
- 10 errata items self-audited and corrected in-place
Includes 79-row module-to-UI matrix, auth sub-module gap detail,
prioritized 6-sprint action plan, and cross-cutting gap tables.
2026-03-21 17:18:06 -07:00
saravanakumardb1
267f8af3a4
test(ai-diagnostics): add 94 tests for error-normalization, clustering, query-parser
2026-03-21 17:06:24 -07:00
saravanakumardb1
9471d4c56f
fix(test): add @vitest-environment happy-dom to React UI test files
...
6 test files across 4 packages (auth-ui, dashboard-components,
dashboard-shell, react-auth) failed with 'document is not defined'
when run from the monorepo root because the root vitest config uses
environment: 'node'. The package-local configs set happy-dom but are
ignored when vitest is invoked from root.
Fix: Add per-file '// @vitest-environment happy-dom' annotations,
which is the recommended vitest pattern for mixed-environment monorepos.
This ensures tests work regardless of which config is loaded.
Recovers 148 tests across 6 files.
2026-03-21 16:21:42 -07:00
saravanakumardb1
22780b0e7e
fix(scripts): add tsconfig.json — fixes pnpm typecheck failure
...
The scripts/ workspace member had no tsconfig.json, so 'tsc --noEmit'
printed help text and exited 1, breaking 'pnpm typecheck' across the
entire monorepo.
2026-03-21 15:55:27 -07:00
saravanakumardb1
2c6397272f
fix(test): add env defaults to platform-service vitest config
...
Aligns service-local vitest.config.ts with root config so tests pass
both via 'pnpm test' (uses service config) and 'npx vitest run' (uses root).
Fixes telemetry.test.ts which fails because its import chain eagerly
loads config.ts → envSchema.parse() requiring COSMOS_ENDPOINT/KEY/JWT_SECRET.
Added: RATE_LIMIT_STORE_MODE=memory, COSMOS_ENDPOINT, COSMOS_KEY, JWT_SECRET
(all test-safe placeholders, never used at runtime with DB_PROVIDER=memory)
2026-03-21 15:32:14 -07:00
saravanakumardb1
7613d6890f
feat(field-encrypt): admin-panel encryption toggle via feature flags
...
- FieldEncryptorConfig.enabled: false returns NullFieldEncryptor (no-op)
- NullFieldEncryptor stores plaintext as-is, decrypt returns ct directly
- 7 new tests for toggle behavior (50/50 total)
- encryption_enabled added to COMMON_FLAGS (seeded for all 10 products)
2026-03-21 15:24:19 -07:00
saravanakumardb1
4de3974a26
docs(agents): add scripts/ workspace member + encryption migration CLI to AGENTS.md
...
- scripts/ directory in repo layout with encrypt-migrate.ts + package.json
- pnpm-workspace.yaml now includes scripts
- Encryption migration CLI commands in build/test section
2026-03-21 13:46:08 -07:00
saravanakumardb1
b1af8e550a
docs(e2ee): detailed SQLCipher + AKV implementation plan for LocalMemGPT Sprint 5.4
...
- Decision: SQLCipher full-DB encryption (preserves FTS5 search)
- Key hierarchy: AKV secret > env var > auto-generated file > unencrypted dev
- Existing DB migration via sqlcipher_export
- 6 implementation steps documented
2026-03-21 13:39:01 -07:00
saravanakumardb1
10b48a3800
feat(admin-web): add ActionTrail integration page
...
- New /actiontrail page with 4 tabs: Timeline, Agents, Alerts, Approvals
- Summary cards: total actions, critical/high count, pending approvals, active alerts
- Risk-level filtering on timeline, color-coded risk badges
- Server-side API proxy route (/api/actiontrail) to ActionTrail backend (port 4018)
- actiontrail-client.ts: typed API client using @bytelyst/api-client
- Sidebar nav item with Crosshair icon
- ACTIONTRAIL_SERVICE_URL added to .env.example
- Graceful fallback when ActionTrail service is unavailable
2026-03-21 13:20:15 -07:00
saravanakumardb1
c252cfd198
feat(devops): encryption migration CLI with embedded product configs
...
- scripts/encrypt-migrate.ts — batch-encrypt existing plaintext Cosmos docs
- scripts/ added as pnpm workspace member for clean @bytelyst/* imports
- 10 product configs, 20 containers, 40+ fields
- --dry-run, --product, --container, --batch-size, --verbose flags
- Idempotent via __encrypted sentinel (migrateDocuments helper)
- Updated E2EE roadmap Sprint 6.2 as complete
2026-03-21 13:19:55 -07:00
saravanakumardb1
cf9617cda5
docs(workspace): add health dashboard prompt
2026-03-21 12:40:51 -07:00
saravanakumardb1
bb1069930b
docs(workspace): add coverage remediation prompt
2026-03-21 12:40:38 -07:00
saravanakumardb1
89b38cadfa
docs(workspace): add coverage audit prompt
2026-03-21 12:40:12 -07:00
saravanakumardb1
4a47db72ae
fix(flags): SSE stream endpoint + client — pass productId via query string
...
EventSource API cannot set custom headers, so the SSE /flags/stream
endpoint and feature-flag-client were broken for streaming mode:
- Server: accept productId and token from query string as fallback
when x-product-id / authorization headers are absent
- Client: pass productId (and optional auth token) as query params
when constructing the EventSource URL
2026-03-21 12:12:14 -07:00
saravanakumardb1
0b16cb4d63
fix(test): add test env defaults to root vitest config — fixes 35 pre-existing failures
...
Root vitest.config.ts now sets:
- DB_PROVIDER=memory — datastore uses MemoryDatastoreProvider (no Cosmos needed)
- RATE_LIMIT_STORE_MODE=memory — ratelimit store uses in-memory sliding window
- COSMOS_ENDPOINT, COSMOS_KEY, JWT_SECRET — test-safe placeholders so config.ts
Zod parse succeeds (never used at runtime with DB_PROVIDER=memory)
This fixes 35 pre-existing test failures across 6 files when running from root:
- ratelimit.test.ts (15 tests) — was hitting Cosmos path
- diagnostics.test.ts (4 tests) — was hitting Cosmos path
- auto-register.test.ts (8 tests) — config parse failed
- onboarding.test.ts (1 test) — config parse failed
- telemetry.test.ts (suite) — config parse failed via event-bus import chain
- cross-product.test.ts (6 tests) — config parse failed
Platform-service: 117/117 files, 1389/1389 tests (was 1251 passing)
2026-03-21 12:06:34 -07:00
saravanakumardb1
32afe8dde7
docs(e2ee): update roadmap — ChronoMind + PeakPulse backends encrypted (9 total)
...
- ChronoMind: timers.description, routines.description, routines.steps[].notes (182 tests)
- PeakPulse: peak-sessions.notes (65 tests)
- Only MindLyst (KMP) and LocalMemGPT (SQLite) deferred
2026-03-21 12:04:10 -07:00
saravanakumardb1
1e1ee969dc
feat(flags): add seed flags for 6 missing products + 6 new evaluator edge-case tests
...
- seed.ts: add default flags for jarvisjr (3), peakpulse (3), flowmonk (2), notelett (2), actiontrail (2), localmemgpt (2)
Previously only chronomind, nomgap, mindlyst, smartauth, lysnrai had seed flags — common flags (maintenance_mode, telemetry_enabled) were not seeded for newer products
- flags.test.ts: 63 → 69 tests (+6):
- anonymous user with partial percentage returns off
- partial rule rollout (0%) skips even matching users
- neq operator (not equal)
- contains operator
- gte + lt numeric range on custom attributes
- missing context attribute returns off
2026-03-21 11:52:08 -07:00
saravanakumardb1
dd113b96c9
fix(flags): critical partition key bug + audit snapshot integrity + anonymous rollout
...
- repository.ts: update() and remove() now require productId as partition key
(was passing 'id' as both params — works with memory provider but fails on Cosmos DB)
- repository.ts: updateSegment() and removeSegment() also fixed
- routes.ts: all repo.update/remove calls updated to pass productId
- routes.ts: audit 'before' snapshots now use JSON deep copy instead of shallow spread
(prevents nested object mutation from corrupting audit trail)
- routes.ts: kill switch audit now uses repo.update() return value for 'after' snapshot
- evaluator.ts: anonymous users (no userId) with partial percentage (0 < pct < 100)
now correctly return 'off' instead of falling through to default variation
(can't deterministically hash without a userId)
2026-03-21 11:50:08 -07:00
saravanakumardb1
ca6a4d41d8
feat(flags): production-grade feature flag system — multi-variate, segments, audit, SSE, scheduling, prerequisites
...
- types.ts: multi-variate flags (boolean/string/number/JSON), targeting rules with 18 operators, scheduling (enableAt/disableAt/gradual rollout), prerequisites, segments, audit log, evaluation context
- evaluator.ts: pure evaluation engine — schedule checking, prerequisite dependencies (circular detection), individual targeting, targeting rules (AND clauses), segment matching, percentage rollout (FNV-1a), OS version/platform/region filtering
- repository.ts: 3 collections — feature_flags, flag_segments, flag_audit_log
- routes.ts: 18 endpoints — flag CRUD, toggle, archive, kill switch (with tag filter), segment CRUD, audit log, POST /flags/evaluate (multi-variate), SSE /flags/stream, legacy /flags/poll backward-compat
- seed.ts: updated to produce full FeatureFlagDoc with variations, version
- flags.test.ts: 63 tests — schema validation, evaluator engine, targeting rules, segments, prerequisites, scheduling, gradual rollouts, multi-variate, version comparison, deterministic hashing
- @bytelyst/events: added flag.created, flag.updated, flag.deleted, flag.kill_switch event types
- @bytelyst/feature-flag-client: multi-variate support (getValue, getEvaluation, getAllEvaluations), SSE streaming mode, onChange listeners, auth token injection
- event-dispatcher.ts + webhooks/types.ts: wired new flag events
2026-03-21 11:44:49 -07:00
saravanakumardb1
d11f84da5f
docs(e2ee): update roadmap — Sprint 4 complete
...
- 4.1.2: Swift Keychain key derivation ✓
- 4.2.2: Kotlin SecureStore key derivation ✓
- 4.3: @bytelyst/client-encrypt (22 tests) ✓
- 4.4.1: @bytelyst/secure-storage-web (16 tests) ✓
- 4.5: FlowMonk tasks.description encrypted (211 tests) ✓
- Only 4.4.2 (auth-client migration) deferred to Sprint 5
2026-03-21 11:23:26 -07:00
saravanakumardb1
ce08587680
feat(secure-storage-web): create @bytelyst/secure-storage-web — encrypted IndexedDB storage
...
- IndexedDB-backed key-value store with non-extractable AES-256-GCM CryptoKey
- Key material never leaves browser crypto subsystem
- API: set, get, delete, clear, has, keys — all async
- Namespace isolation for multi-app usage
- Falls back to localStorage when SubtleCrypto unavailable
- 16 Vitest tests (fake-indexeddb), all passing
- Add IndexedDB globals to root ESLint config
2026-03-21 11:19:19 -07:00
saravanakumardb1
1bce981f43
feat(client-encrypt): create @bytelyst/client-encrypt — Web Crypto API encryption
...
- AES-256-GCM via SubtleCrypto (browsers + React Native with polyfill)
- Wire-compatible EncryptedField with @bytelyst/field-encrypt (server) and
BLFieldEncrypt (Swift/Kotlin native SDKs)
- encryptField, decryptField, generateKey, keyFromHex, keyToHex
- PBKDF2 key derivation (600k iterations per OWASP 2023)
- isEncryptedField type guard, toHex/fromHex helpers
- 22 Vitest tests, all passing
- Add Web Crypto globals to root ESLint config
2026-03-21 11:15:27 -07:00
saravanakumardb1
9bb322113a
feat(native-sdks): add Keychain/SecureStore key derivation to BLFieldEncrypt
...
- Swift: getOrCreateKey(service:account:), loadKey(), deleteKey()
- Generates random AES-256 key, persists as hex in BLKeychain
- Subsequent calls return the same key for stable per-device DEK
- Kotlin: getOrCreateKey(store:account:), loadKey(), deleteKey()
- Generates random AES-256 key, persists as hex in BLSecureStore
- Uses EncryptedSharedPreferences for at-rest protection
- All existing tests still pass (21/21 Kotlin)
2026-03-21 11:10:02 -07:00
saravanakumardb1
e59dcdb9ac
docs(e2ee): update roadmap — Sprint 4.1/4.2 native SDKs complete
...
- Swift BLFieldEncrypt: 22 XCTest tests, CryptoKit AES-256-GCM
- Kotlin BLFieldEncrypt: 21/21 JUnit5 tests, javax.crypto AES-256-GCM
- Both wire-compatible with @bytelyst/field-encrypt EncryptedField JSON
2026-03-21 10:58:47 -07:00
saravanakumardb1
ee762b4612
feat(native-sdks): add BLFieldEncrypt to Swift + Kotlin platform SDKs
...
- Swift: BLFieldEncrypt.swift + BLFieldEncryptTests.swift (22 tests)
- CryptoKit AES-256-GCM, BLEncryptedField Codable struct
- encrypt/decrypt, AAD support, generateKey, keyFromHex, isEncrypted
- Data hex helpers (hexString, init?(hexString:))
- Kotlin: BLFieldEncrypt.kt + BLFieldEncryptTest.kt (21 tests)
- javax.crypto AES-256-GCM, BLEncryptedField data class
- encrypt/decrypt, AAD support, generateKey, keyFromHex, isEncrypted
- ByteArray/String hex extension functions
- Wire-compatible: same EncryptedField JSON structure as @bytelyst/field-encrypt (TS)
- { __encrypted: true, v: 1, alg: 'aes-256-gcm', ct, iv, tag, dekId }
- All hex-encoded, 12-byte IV, 16-byte auth tag
- Fix: ByteLystPlatform.kt getString() → read() (pre-existing compile error)
2026-03-21 10:58:02 -07:00
saravanakumardb1
b8ce14c259
test(broadcast-client): cover deep links and client
2026-03-21 10:56:49 -07:00
saravanakumardb1
5fe891f472
docs: update workspace + common-plat inventory with accurate scan data
...
- Package count: 53 → 58 (added backend-config, backend-flags,
backend-telemetry, fastify-auth, field-encrypt)
- New §2.6 Security section for @bytelyst/field-encrypt
- Product table: added Encrypted column (5 backends using field-encrypt)
- Test summary: replaced vague estimates with actual file counts (538 total)
- LocalMemGPT: fixed stack from 'React, Express' → 'Fastify 5, Next.js 16,
SQLite, Ollama' and added to product table (port 4019)
- Architecture diagram: 9→10 products, 53→58 packages, added LocalMemGPT
- Updated notes about SmartAuth (docs-only), temp_uxlab (empty)
- Bumped last-updated dates to 2026-03-21
2026-03-21 10:52:31 -07:00
saravanakumardb1
d6de30ee57
docs(devops): refresh backend audit baseline
2026-03-21 10:45:55 -07:00
saravanakumardb1
26283b402a
test(platform-service): cover ai diagnostics routes
2026-03-21 10:45:41 -07:00
saravanakumardb1
7c99f5a5fa
docs(e2ee): update roadmap — Phase 1 + Sprint 3 complete, 6 backends encrypted
...
- Sprint 1: @bytelyst/field-encrypt package — all items complete
- Sprint 2: LysnrAI + JarvisJr encrypted, MFA refactor deferred (data format risk)
- Sprint 3: NoteLett + NomGap + ActionTrail encrypted
- MindLyst deferred (KMP/Gradle repo, not Fastify backend pattern)
- Total: 6 product backends with field-level encryption, all tests green
2026-03-21 09:36:39 -07:00
saravanakumardb1
bb3f5385fc
feat(field-encrypt): create @bytelyst/field-encrypt package with AES-256-GCM envelope encryption
...
- 10 source files: types, aes-gcm, 3 key providers (memory/env/akv), envelope, key-cache, dek-store, guards, migration, factory
- 42 Vitest tests: AES-GCM roundtrips, tamper detection, unicode, 100KB payloads, key providers, DEK cache TTL/LRU, envelope lifecycle, migration (dry-run + idempotent), config validation
- AKV MEK creation script (scripts/create-encryption-keys.sh) for 10 product MEKs
- .env.example updated with FIELD_ENCRYPT_* vars
2026-03-21 09:18:10 -07:00
saravanakumardb1
8af997ba0f
docs(devops): update stale mywisprai/MyWisprAI branding across 5 AKV docs
...
- BytelystAI → ByteLyst in titles
- MyWisprAI → LysnrAI (legacy) for wispr-* secret references
- Added 'legacy resource name' annotations to Azure resource names
(kv-mywisprai, cosmos-mywisprai, etc. cannot be renamed)
- Updated dashboard paths (admin-web moved to dashboards/)
- Fixed telemetry role name: mywisprai-admin → lysnrai-admin
- Updated last-updated dates to 2026-03-21
Files: AZURE_KEY_VAULT_AND_SECRETS_ROTATION.md,
AZURE_PORTAL_SETUP.md, AZURE_RESOURCE_INVENTORY.md,
ENVIRONMENT_VARIABLES_AND_KEYVAULT_AUDIT.md,
END_TO_END_ENCRYPTION_ROADMAP.md
2026-03-21 09:15:30 -07:00
saravanakumardb1
5b2c6f2874
docs: add cross-repo automation playbook reference to AGENTS.md and CLAUDE.md
2026-03-21 09:11:48 -07:00
saravanakumardb1
2e35334e13
docs(devops): add coding agent automation playbook
...
- 11 cross-repo automation tasks for AI coding agents
- Workspace hygiene, test suites, coverage gaps, typecheck, deps, secrets
- Baseline test counts: 1,457 backend + 864 web = 2,321 total
- Priority matrix, quick-start commands, existing workflow references
2026-03-21 09:04:35 -07:00
saravanakumardb1
af5684587d
docs(devops): fix 14 bugs/gaps in E2EE design + roadmap after codebase review
2026-03-21 09:01:35 -07:00
saravanakumardb1
b6a1d637fb
docs(devops): add E2EE design document and implementation roadmap
2026-03-21 08:51:43 -07:00
saravanakumardb1
6856d23a2e
fix(swift-sdk): resolve BLAuditLogger + BLCrashReporter build errors in ByteLystPlatform
...
- BLAuditLogger is an enum (static API) — cannot be constructed; use .Type reference + configure()
- BLCrashReporter is @MainActor — defer construction to start() via Task { @MainActor }
2026-03-20 23:28:47 -07:00
saravanakumardb1
2eadf480dc
docs: Add post-implementation review fixes section to roadmap
...
Systematic review found 7 bugs across 7 repos:
1. LysnrAI Android: SettingsStore.kt incorrectly deleted (ada3d43)
2. Android kill switch: result.killed → result.disabled (3 repos)
3. Auth App iOS: BLKillSwitchClient.check() returns Void (215e7c9)
4. ChronoMind iOS: nonexistent BLKillSwitchResult (d3c3aff)
5. MindLyst iOS: KillSwitch + CrashReporter wrong API (cd78597)
6. JarvisJr iOS: KillSwitchResponse decoded 'killed' not 'disabled' (2a3cc7e)
7. NoteLett Mobile: createDiagnosticsClient doesn't exist (0b5c224)
2026-03-20 23:16:19 -07:00
saravanakumardb1
76e05f836a
docs: Update MOBILE_DRY_REFACTORING_ROADMAP with all 9 phases completed
...
Phases 1-9 complete with commit links and checked boxes:
- Phase 1: ChronoMind Android (2060a83)
- Phase 2: JarvisJr Android (336535a)
- Phase 3: FlowMonk Mobile RN (ce70d8c)
- Phase 4: LysnrAI Android (24a09a2) — 11 dead services deleted
- Phase 5: NomGap RN (63bd34b) — billingFetch replaced
- Phase 6: LysnrAI iOS (862e981) — 5 dead services deleted
- Phase 7: Auth App Android (5b65215) — telemetry/flags/killswitch added
- Phase 8: Auth App iOS (4a84050) — telemetry/flags/killswitch added
- Phase 9A: ChronoMind iOS (c328216) — Config + KillSwitch wrappers
- Phase 9B: NoteLett Mobile (c2d6414) — diagnostics-client added
- Phase 9C: MindLyst iOS (dce9e22) — Config + KillSwitch + CrashReporter
- Phase 9D: JarvisJr iOS — no changes needed (sync manager active)
Total: ~2,700 lines of dead code removed across 6 repos.
13 TODOs logged for build verification and deferred migrations.
2026-03-20 22:53:26 -07:00