root
7616901683
test(workspace): harden service bootstrap and sync coverage
2026-03-14 06:40:10 +00:00
root
2b4fccb744
feat(queue): add durable worker runtime and extraction integration
2026-03-14 06:25:10 +00:00
root
91885f0d4f
Add Mailpit-backed prototype email sandbox
2026-03-14 06:16:28 +00:00
root
a27a822fc2
Add prototype storage diagnostics and smoke test
2026-03-14 06:06:35 +00:00
root
114240c79a
feat(platform-service): add telegram and slack delivery
2026-03-14 06:01:59 +00:00
root
db9ae4a573
feat(platform-service): add smtp email delivery and postal setup
2026-03-14 05:52:28 +00:00
root
19b58b3ea0
Fix prototype service runtime dependencies
2026-03-14 05:32:21 +00:00
root
a5e8890df2
Add Cosmos emulator prototype support
2026-03-14 05:24:01 +00:00
saravanakumardb1
2b3130821c
fix(auth): register magic_link event type + use admin productId for enterprise IdP
...
- Register 'auth.magic_link_requested' in @bytelyst/events PlatformEventSchemas
- Remove any-cast from magic-link/routes.ts — now properly typed
- Enterprise IdP creation uses admin's JWT productId instead of hardcoded 'smartauth'
- All 53 auth tests passing
2026-03-12 15:55:09 -07:00
saravanakumardb1
b0e1a54481
fix(auth): enterprise SSO bcrypt hash + upgrade cost 10→12
...
- Enterprise SAML/OIDC callbacks used raw 'sso_xxx' string as passwordHash
which would crash bcrypt.compare(). Now uses userRepo.hashPassword(randomUUID())
- Added updateLastLogin() for existing enterprise SSO users
- Upgraded bcrypt cost factor from 10 to 12 per PRD spec
- All 53 auth tests passing
2026-03-12 15:35:00 -07:00
saravanakumardb1
0c4e53a0ed
feat(auth): Phase 6 — enterprise SAML/OIDC, magic link, HIBP, E2E specs
...
6A: Enterprise IdP CRUD, SAML callback, OIDC callback, email domain lookup
6B: Magic link send/verify (15min TTL, anti-enumeration), HIBP breach check
6D: 3 new E2E specs (account-linking, step-up, enterprise) — total 8 SmartAuth specs
- All 53 auth tests passing
2026-03-12 15:25:28 -07:00
saravanakumardb1
f4b9124065
feat(auth): add Phase 5C-5E endpoints + SDK methods — TOTP secret, push approvals, QR auth
...
- GET /auth/mfa/totp/secret — retrieve decrypted TOTP secret for auth app
- POST /auth/mfa/push/create, GET /pending, POST /:id/respond, GET /:id/status
- POST /auth/qr/create, POST /auth/qr/confirm, GET /auth/qr/:id/status
- Kotlin SDK: getTotpSecret, getPendingApprovals, respondToApproval, confirmQrLogin
- Swift SDK: getTotpSecret, getPendingApprovals, respondToApproval, confirmQrLogin
- All 53 auth tests passing
2026-03-12 15:01:51 -07:00
saravanakumardb1
ae13abfab2
fix(auth): address SmartAuth agent review gaps — Swift mock wiring, passkey SDK consistency, device list parity, JSDoc, SSR docs
2026-03-12 12:27:08 -07:00
saravanakumardb1
a613cf1bf9
test(auth): add SmartAuth integration tests + fix auth.routes.test mocks
...
- Add 5 new tests: MFA challenge integration, risk scorer edge cases, login events wiring, device trust pure function
- Fix auth.routes.test.ts: add vi.mock stubs for login-events, risk-scorer, mfa, devices, config, event-bus
- Change afterEach from restoreAllMocks to clearAllMocks (preserves mock implementations between tests)
- Total: 42 smartauth tests, 951 platform-service tests all passing
2026-03-12 11:27:50 -07:00
saravanakumardb1
0f4be0c325
feat(auth): wire login events into OAuth login helper
...
- Record success login event with risk scoring after OAuth token issuance
- Import login-events repo + risk-scorer into oauth/routes
- Best-effort recording — never blocks OAuth login flow
2026-03-12 11:19:11 -07:00
saravanakumardb1
82d7f157d9
feat(auth): wire login events + MFA challenge into login handler
...
- Add recordLoginEvent() helper with risk scoring via scoreLoginRisk()
- On failed login: record 'failed' event with risk assessment
- On MFA-required: issue challenge token, record 'mfa_required' event
- On success: record 'success' event with risk assessment
- Import login-events repo, risk-scorer, mfa repo, challenge store, device repo
2026-03-12 11:17:23 -07:00
saravanakumardb1
bdb3e95e00
fix(auth): clean up MFA routes — remove redundant imports, use userRepo.update()
...
- Remove redundant dynamic import('node:crypto'), use top-level nodeCrypto
- Remove getCollection import, use userRepo.update() for mfaEnabled/mfaMethods
- Expand update() Pick type to include mfaEnabled, mfaMethods, emailVerified
- Remove unused _reply param from MFA policy PUT handler
2026-03-12 11:12:33 -07:00
saravanakumardb1
362b915ea9
feat(auth): SmartAuth backend core — OAuth, MFA, passkeys, device trust, login events
...
Phase 0A: OneAuth schema extension — UserDoc evolution + auth_providers container
Phase 0B: Progressive lockout + IP rate limiting on login
Phase 1A-1B: Google/Microsoft/Apple OAuth + account linking
Phase 1D: Enhanced /auth/me — products, providers, MFA status
Phase 2A-2C: TOTP MFA + challenge flow + admin policies
Phase 3A-3B: WebAuthn passkeys + device trust
Phase 4A: Login events + rule-based risk scoring
New sub-modules: oauth/, mfa/, passkeys/, devices/, login-events/
New containers: auth_providers, auth_mfa, auth_mfa_policies, auth_passkeys, auth_devices, auth_login_events
Tests: 37 new (946 total, all passing), typecheck clean
2026-03-12 10:55:41 -07:00
saravanakumardb1
aff78c55a4
fix(mcp-server): align notes tool outputs with contracts
2026-03-10 09:54:08 -07:00
saravanakumardb1
ec3dd4bd66
feat(mcp-server): add notes tool integration
2026-03-10 09:39:07 -07:00
saravanakumardb1
49db2cd2af
fix(platform-service): pin vitest pool to threads
2026-03-06 13:52:44 -08:00
saravanakumardb1
63b0d20b07
fix(fastify-core): address jwt rollout review findings
2026-03-06 13:44:22 -08:00
saravanakumardb1
e4baa2fc16
refactor(platform-service): use shared optional jwt context
2026-03-06 12:57:00 -08:00
saravanakumardb1
cfca118c71
feat(fastify-core): add shared optional jwt context
2026-03-06 12:52:49 -08:00
saravanakumardb1
d365bc59d6
refactor(mcp-server): tighten MCP tool typing after review
2026-03-05 22:37:53 -08:00
saravanakumardb1
b199ea7976
fix(mcp-server): align secret and experiment tools with real services
2026-03-05 22:36:30 -08:00
saravanakumardb1
53f34851df
fix(mcp-server): resolve lint blockers in new MCP tools
2026-03-05 22:30:39 -08:00
saravanakumardb1
3a7139790c
fix(mcp-server): Improve error handling in A2A pipelines
...
- regression-watch-pipeline.ts: Add try/catch around session creation, continue on failures
- post-incident-cleanup-pipeline.ts: Add try/catch around policy deletion and audit export
- Fix extractionResetProductRateLimit optional parameter pattern
- Update return values to use actual counts instead of targets
- All pipelines now continue processing individual items instead of failing entirely
- Add proper type casting for audit response events array
2026-03-05 22:09:56 -08:00
saravanakumardb1
40db19a389
feat(mcp-server): Add 2 high-priority A2A pipelines
...
- regression-watch-pipeline.ts: Monitor error clusters and auto-create diagnostics sessions
- post-incident-cleanup-pipeline.ts: Resolve clusters, delete policies, export audit logs
- a2a-tools.ts: Register both pipelines as MCP tools (a2a.regressionWatch, a2a.postIncidentCleanup)
- Fix platform-client function names and TelemetryCluster interface usage
- Both pipelines support dryRun mode and proper error handling
- Fix ESLint warnings: remove unused imports, add proper types
All tools require admin role and use existing platform-service endpoints.
2026-03-05 22:07:42 -08:00
saravanakumardb1
c8fafbb564
feat(mcp-server): Add 7 missing extraction async jobs tools
...
- extraction.extractBatch: batch extraction with shared config
- extraction.submitJob: async job submission with webhook support
- extraction.getJob: get job status/results by ID
- extraction.listJobs: list recent async jobs
- extraction.getProductRateLimitStatus: per-product or summary rate limits
- extraction.resetProductRateLimit: admin rate limit reset
- extraction.sidecarMonitoringState: detailed sidecar circuit breaker state
All tools require admin role and map to existing extraction-service endpoints.
Fixes TypeScript optional parameter error in extractionGetProductRateLimitStatus.
2026-03-05 22:05:00 -08:00
saravanakumardb1
3f296a8e72
feat(mcp-server): fill 12 DOMAIN_PRODUCTS.md MCP tool gaps + client fn additions
...
Bug fix (committed separately):
social-fast-coordinator: stage_transition used non-existent currentStage
New client functions:
nomgap-client: nomgapFastingCreateSession, nomgapProtocolGet,
nomgapSocialListGroupFasts (+ GroupFastDoc)
peakpulse-client: peakpulseRoutesList, peakpulseSyncStatus
lysnrai-client: lysnraiApiTokenCreate, lysnraiSessionsStats,
lysnraiTranscriptsExportBatch
chronomind-client: chronomindRoutineGet, chronomindSharedTimerShare
New MCP tools (12):
mindlyst.briefs.generate — trigger daily brief via mindlystBriefCreate
mindlyst.memory.getTriageResult — extract TriageResult sub-doc only
nomgap.fasting.createSession — start new fast with protocolId
nomgap.protocols.get — single protocol lookup
nomgap.social.listGroupFasts — list group fast sessions
peakpulse.routes.list — list GPS r
Bug fix (committed separately):
social-fast-coordinator: stage_transition used non-existent currentStage
ats social-fast-coordinator: staon
New client functions:
nomgap-client: nomgapFastingCreateSession, nomgarai nomgaens.rotate nomgapSocialListGroupFasts (+ GroupFastDoc)
d. peakpulse-client: peakpulseRoutesList, peakpulseSyncStaturg lysnrai-client: lysnraiApiTokenCreate, lysnraiSessionsStati lysnraiTranscriptsExpor us chronomind-client: chronomindRoutineGet, chrerver total: 126 tools across 17 namespaces
2026-03-05 18:19:04 -08:00
saravanakumardb1
1da3394caf
fix(mcp-server): social-fast-coordinator-pipeline — stage_transition used non-existent currentStage field
...
FastingSessionDoc has stages: unknown[] not currentStage: string.
- Replace currentStage cast with hasStages check (session.stages.length > 0)
- Fix protocolId extraction to use direct field (session?.protocolId)
- Report currentStage derived from stages.length as 'stage_N' indicator
2026-03-05 18:13:28 -08:00
saravanakumardb1
0a6950216a
feat(mcp-server): A2A batch-5 — GoalCoachingAgent + SkiRunAnalystAgent (peakpulse) + OrgProvisioningAgent (lysnrai) + ProtocolTuningAgent (nomgap) + CalendarImportAgent (chronomind)
...
goal-coaching-pipeline.ts: peakpulse.goals.coach
- SessionHistoryAgent -> GoalAnalysisAgent -> GoalReportAgent
- Computes duration/distance/elevation/speed trends across recent sessions
- Classifies user as beginner/intermediate/advanced; generates metric-specific goal suggestions
ski-run-analyst-pipeline.ts: peakpulse.ski.analyze
- SkiSessionCollectorAgent -> RunQualityAnalystAgent -> SkiReportAgent
- Computes runDensity, verticalPerRun, skiToLiftRatio per session
- Flags: low_run_density, high_lift_ratio, short_session, vertical_drop vs baseline
org-provisioning-pipeline.ts: lysnrai.orgs.provision
- OrgInspectorAgent -> ProvisioningActionAgent -> OrgReportAgent
- Checks API tokens + session activity; classifies as new_org/needs_attention/complete
protocol-tuning-pipeline.ts: nomgap.protocols.tune
- ProtocolStatsCollectorAgent -> AbandonmentAnalysisAgent -> TuningReportAgent
- Finds protocols with >40% abandonment; runs extraction for pattern analysis
- Proposes duration reduction, milestone notifications, or variant creation
calendar-import-pipeline.ts: chronomind.calendar.import
- EventValidatorAgent -> ConflictDetectorAgent -> ImportReportAgent
- Validates dtstart/dtend; detects time overlaps vs existing timers
- Creates alarm timers for conflict-free events; dryRun support
MCP server total: 110 tools
2026-03-05 18:07:59 -08:00
saravanakumardb1
acadc3551e
feat(mcp-server): A2A batch-4 — RoutineQualityAgent (chronomind) + SocialFastCoordinatorAgent (nomgap) + TeamProvisioningAgent (jarvis)
...
routine-quality-pipeline.ts: chronomind.routines.checkQuality
- RoutineInventoryAgent -> QualityCheckAgent -> QualityReportAgent
- Flags: duration_overflow, never_completed, empty_steps, no_category
- Per-routine issue list + remediation suggestions; configurable maxDurationMinutes
social-fast-coordinator-pipeline.ts: nomgap.social.coordinateFast
- GroupMemberResolverAgent -> NotificationDispatchAgent -> CoordinationReportAgent
- Fires social_invite + stage_transition push to each group member
- Sends weekly_digest to session owner; per-member outcome tracking
team-provisioning-pipeline.ts: jarvis.teams.provision
- NewMemberDetectorAgent -> OnboardingAgent -> ProvisioningReportAgent
- Detects invited + recently joined members (configurable sinceHours window)
- Recommends starter agents by member role, seeds context memory in each agent
- Marks check-in as scheduled after successful memory seed
MCP server total: 105 tools
2026-03-05 16:39:36 -08:00
saravanakumardb1
7ed4a105b7
feat(mcp-server): A2A batch-3 — ReflectionSynthesisAgent (mindlyst) + KeyboardDiagnosticsAgent (lysnrai) + NLParserEvalAgent (chronomind)
...
reflection-synthesis-pipeline.ts: mindlyst.reflections.synthesize
- ReflectionCollectorAgent -> ThemeExtractionAgent -> SynthesisReportAgent
- Fetches recent reflections, runs reflection-enrichment extraction, surfaces themes by frequency
- Proposes weekly summary text; max 52 reflections (1 year lookback)
keyboard-diagnostics-pipeline.ts: lysnrai.keyboard.diagnose
- KeyboardErrorScannerAgent -> DiagnosticsSessionAgent -> BugReportDraftAgent
- Scans error telemetry filtered to keyboard surface, groups by anonymousInstallId
- Opens diagnostics session per erroring install; drafts severity-ranked bug reports
- 48h default window, configurable minErrors threshold
nl-parser-eval-pipeline.ts: chronomind.nlParser.eval
- PhraseSamplerAgent -> ParseEvalAgent -> RegressionReportAgent
- 10-phrase canonical test suite + optional custom phrases
- Submits to extraction-service timer-parse task, validates parsed field presence
- Returns pass/fail/partial scorecard with regression list
MCP server total: 102 tools
2026-03-05 16:36:19 -08:00
saravanakumardb1
b8e230f018
feat(mcp-server): A2A batch-2 — STTFallbackMonitorAgent (lysnrai) + ProgressAnalystAgent (jarvis) + BrainOverflowAgent (mindlyst)
...
stt-fallback-monitor-pipeline.ts: lysnrai.stt.monitorFallback
- STTEventScannerAgent -> DiagnosticsLaunchAgent -> FallbackReportAgent
- Queries stt_completed telemetry, splits azure vs whisper events, computes offline rate
- Opens diagnostics session if rate exceeds threshold (default 20%); 6h default window
progress-analyst-pipeline.ts: jarvis.progress.analyze
- SessionMetricsCollectorAgent -> PlateauDetectorAgent -> ProgressReportAgent
- Collects skillMetrics timeseries per agent from recent sessions
- Detects plateau (delta < threshold), recommends increase_difficulty or supplementary_agent
brain-overflow-pipeline.ts: mindlyst.brains.checkOverflow
- BrainInventoryAgent -> OverflowDetectorAgent -> OverflowReportAgent
- Flags brains above item count threshold with no acted-on items in N days
- Per-brain suggestion: archive / reassign / review
MCP server total: 99 tools
2026-03-05 16:31:32 -08:00
saravanakumardb1
e4d489d40c
fix(triage-quality-pipeline): remove unused MemoryItemDoc import
2026-03-05 16:18:54 -08:00
saravanakumardb1
d7aa90b021
feat(mcp-server): 4 MCP tool gaps + 3 new A2A pipelines (Priority 3/6/7)
...
MCP tool gaps filled (DOMAIN_PRODUCTS.md alignment):
- jarvis.memory.create — POST /jarvis/agents/:agentId/memory (sessionId, type, content, importance, tags, expiresAt)
- jarvis.teams.listMembers — GET /jarvis/teams/:teamId/members (role, status, joinedAt)
- nomgap.fasting.getSession — GET /fasting/sessions/:id (client func already existed, MCP tool was missing)
- peakpulse.weather.getSnapshot — extracts weather field from peakpulseSessionGet response
New A2A pipelines (all registered in server.ts):
- transcript-extraction-pipeline.ts: lysnrai.transcripts.runExtractionPipeline
- TranscriptCollectorAgent -> ExtractionBatchAgent -> ExtractionReportAgent
- Queries transcripts missing extractedAt, runs extraction, returns batch report + dryRun support
- sync-conflict-pipeline.ts: chronomind.sync.diagnoseConflicts
- ConflictDetectorAgent -> SyncStateInspectorAgent -> DiagnosticsSessionAgent -> ConflictReportAgent
- Queries telemetry for sync_conflict events, classifies pattern, creates diagnostics session on conflict
- route-safety-pipeline.ts: peakpulse.sessions.assessSafety
- SessionDataAgent -> RouteProfileAgent -> SafetyAnalysisAgent -> SafetyReportAgent
- Fetches GPS + weather, evaluates UV/wind/altitude/speed risk factors, enriches with extraction entities
Client additions (jarvis-client.ts):
jarvisMemoryCreate, jarvisTeamsListMembers + JarvisTeamMemberDoc interface
MCP server total: 93 tools across 17 namespaces
2026-03-05 15:18:21 -08:00
saravanakumardb1
7e47151918
fix(mcp-server): 3 A2A pipeline bug fixes from audit
...
- nomgap-client: add electrolyte_reminder + extended_fast_warning to PushTriggerType; rename scheduledAt → scheduledFor to match backend schema; fix startedAt type string → number (backend stores epoch ms)
- nomgap-tools: rename scheduledAt → scheduledFor in nomgap.push.fire tool schema + execute call
- safety-monitor-pipeline: fix FastStateResult.startedAt type number; use epoch ms directly instead of new Date(string)
- sync-diagnostics-pipeline: remove peakpulseGetStats (returns aggregate stats not sync queue); derive queueDepth from recentFailureCount telemetry; add lastSuccessfulSync derivation from events
2026-03-05 14:54:21 -08:00
saravanakumardb1
ea16f8df19
feat(mcp-server): add 6 platform.schemas.* + platform.sdks.* tools from DOMAIN_PACKAGES_AND_SDKS.md
...
- platform.schemas.telemetryEvent: TelemetryEventDoc field schema + clustering keys + privacy rules
- platform.schemas.diagnosticsSession: DebugSession schema + full endpoint map
- platform.sdks.swiftCapabilities: ByteLystPlatformSDK 13 modules with phase + description
- platform.sdks.kotlinCapabilities: Android/KMP SDK feature inventory + KMP adoption
- platform.sdks.crossProductAdoption: 8 capabilities x 6 products adoption matrix + known gaps
- platform.sdks.auditActivity: live telemetry query to verify SDK wired + event breakdown per platform/module
- MCP server now at 97 tools across 16 namespaces
2026-03-05 14:25:01 -08:00
saravanakumardb1
654de4ed2e
feat(mcp-server): add 4 A2A pipelines — DailyBrief, MarketplaceCert, SafetyMonitor, SyncDiagnostics
...
- DailyBriefGenerationPipeline (mindlyst.brief.generate): fans out memory items across all brains, runs memory-insight extraction per brain, assembles and stores DailyBriefDoc
- MarketplaceCertificationPipeline (jarvis.marketplace.runCertification): ingestion validation, content safety via triage extraction, heuristic quality scoring, approve/reject/pending_human_review decision
- SafetyMonitorAgent (nomgap.safety.check + nomgap.safety.getThresholds): 5-tier threshold table, push notifications, A2A handoff for 72h+ fasts
- SyncDiagnosticsAgent (peakpulse.sync.diagnose): failure pattern classification from telemetry, conditional platform diagnostics session, log/trace capture, root cause + extraction entity report
- Add 3 missing client functions: mindlystBriefCreate, nomgapFastingSessionGet, jarvisMarketplaceGetListing
- MCP server now at 91 tools across 16 namespaces
2026-03-05 14:22:25 -08:00
saravanakumardb1
26a9868380
feat(mcp-server): add 5 missing tools for existing backend routes
...
New tools backed by routes that existed but had no MCP surface:
- maintenance.getSchedule: GET /settings/maintenance/schedule (list upcoming windows)
- maintenance.deleteWindow: DELETE /settings/maintenance/schedule/:id (cancel window)
- lysnrai.apiTokens.revoke: DELETE /api-tokens/:id (revoke token by ID)
New client functions:
- maintenanceGetSchedule, maintenanceDeleteWindow (platform-client.ts)
- lysnraiApiTokenRevoke (lysnrai-client.ts)
2026-03-05 14:09:00 -08:00
saravanakumardb1
5a3987bd9f
fix(mcp-server): jarvis.marketplace.certify routes to wrong endpoint on rejection
...
The backend has two separate endpoints:
POST /marketplace/admin/:id/approve
POST /marketplace/admin/:id/reject
Previously jarvisMarketplaceCertify always called /approve regardless of
the decision field — rejections would silently approve listings.
Fix: derive action from decision.decision ('approved' → 'approve', else 'reject')
and use the correct endpoint path.
2026-03-05 14:06:19 -08:00
saravanakumardb1
f70001de74
fix(mcp-server): audit fixes — 3 bugs + 2 new tools
...
Bug fixes:
- lysnrai: add lysnrai.sessions.get tool (GET /sessions/:id existed but had no MCP surface)
- nomgap: add nomgap.autophagyConfidence tool (POST /fasting/autophagy-confidence had no tool)
- chronomind: fix syncStatus description 'paused' -> 'pending' (wrong field name)
New client functions: lysnraiSessionGet, nomgapAutophagyConfidence (with typed interfaces)
Root bug fixed in learning_voice_ai_agent commit 42aa931:
GET /transcripts/:id was missing from backend — lysnrai.transcripts.get was always 404-ing
2026-03-05 14:05:03 -08:00
saravanakumardb1
0f57a48168
feat(mcp-server): add 19 platform ops tools — flags.*, jobs.*, maintenance.*, settings.*, webhooks.*
...
flags (5): list, get, upsert (create-or-update), delete, killSwitch
jobs (4): list, get, trigger, listRuns
maintenance (3): getCurrent (admin full), set, scheduleWindow
settings (3): get, update, checkKillSwitch
webhooks (7): listSubscriptions, create, get, update, delete, listDeliveries, test, rotateSecret
All backed by existing platform-service endpoints — no new backend changes.
MCP server now has 84 tools across 16 namespaces.
2026-03-05 13:46:15 -08:00
saravanakumardb1
33dd530d5f
feat(mcp-server): add tracker.* namespace — 13 tools for items, votes, comments, public roadmap
...
- tracker-client functions appended to platform-client.ts (tracker is part of platform-service)
- tracker.items.{stats,list,get,create,updateStatus,delete}
- tracker.votes.{toggle,list}
- tracker.comments.{list,add,delete}
- tracker.public.{roadmap,stats}
- All 13 tools require admin role; productId forwarded as x-product-id
2026-03-05 13:36:55 -08:00
saravanakumardb1
481760fba1
feat(mcp-server): fill DOMAIN_PRODUCTS.md tool gaps — +17 tools across 6 products
...
- mindlyst: +memory.get (single item with full TriageResult)
- lysnrai: +transcripts.get, +orgs.get
- jarvis: +agents.create, +marketplace.listPending/certify/suspend/feature
- chronomind: +timers.create, +households.list
- nomgap: +protocols.list, +bodyStages.list
- peakpulse: +sessions.get
2026-03-05 13:15:22 -08:00
saravanakumardb1
c9022665d6
fix(mcp-server): add /api prefix to all product backend clients (critical — all routes 404 without it)
2026-03-05 13:10:08 -08:00
saravanakumardb1
fcb3befa23
feat(mcp-server): Phase 3 — product namespaces for ChronoMind, NomGap, PeakPulse (13 more tools)
2026-03-05 13:05:03 -08:00
saravanakumardb1
f780f0b409
feat(mcp-server): Phase 3 — product namespaces for MindLyst, LysnrAI, JarvisJr (22 new tools)
2026-03-05 13:01:05 -08:00
saravanakumardb1
852cb18a5c
refactor(mcp-server): replace redundant CreatedSession local interface with imported DebugSession in diagnostics-orchestrator
2026-03-05 12:40:06 -08:00
saravanakumardb1
00b0555c97
fix(fastify-core,mcp-server): add logLevel to ServiceAppOptions and wire config.LOG_LEVEL so log verbosity is actually honoured at runtime
2026-03-05 12:38:09 -08:00
saravanakumardb1
44800ed36b
fix(mcp-server): correct stale port comment 4006→4007 in server.ts; document CORS_ORIGIN and query limit vars in .env.example
2026-03-05 12:36:26 -08:00
saravanakumardb1
3e37b3d5a0
fix(mcp-server): handle ZodDefault in zodToJsonSchema so boolean/object fields with defaults emit correct JSON Schema types; clean up inline import in debug-pack
2026-03-05 12:35:27 -08:00
saravanakumardb1
c04c78aff4
fix(mcp-server): fix debug-pack cluster rendering to use correct field names, tighten TelemetryCluster type; fix test mock to include all required fields
2026-03-05 12:33:43 -08:00
saravanakumardb1
6cee9c20af
fix(mcp-server): correct TelemetryCluster type, remove productId QS dead code from telemetryClusters, remove redundant extend() in pipeline-tool
2026-03-05 12:32:34 -08:00
saravanakumardb1
0f044830fa
feat(mcp-server): Phase 2 A2A orchestration — DispatcherAgent, TelemetryAnalystAgent, DiagnosticsOrchestratorAgent, ReportWriterAgent, runIncidentPipeline runner + support.runIncidentPipeline MCP tool (10 tests)
2026-03-05 12:23:53 -08:00
saravanakumardb1
d1d643f782
feat(mcp-server): Milestone B — telemetry policy CRUD, cluster status, diagnostics cancel, extraction sidecar health; enforce expiresAt on createPolicy
2026-03-05 12:17:15 -08:00
saravanakumardb1
26d3403d5a
fix(mcp-server): zodToJsonSchema emits correct JSON type for number/boolean/array fields (was always string)
2026-03-05 12:09:38 -08:00
saravanakumardb1
22ad88dd13
fix(mcp-server): Dockerfile — copy all 33 workspace package.json files for complete pnpm --frozen-lockfile resolution
2026-03-05 12:07:03 -08:00
saravanakumardb1
9a298d50ef
fix(mcp-server): add missing jose + @fastify/cors deps; use ServiceError subclasses for 401/403; remove swagger option that crashed startup; add AbortSignal.timeout to platformFetch
2026-03-05 12:06:54 -08:00
saravanakumardb1
3bc8e0e14c
fix(mcp-server): move default port 4006 → 4007 (conflict with extraction-service Python sidecar); add Dockerfile + docker-compose service + CI workflow
2026-03-05 11:56:35 -08:00
saravanakumardb1
027e2163a0
feat(mcp-server): scaffold @bytelyst/mcp-server on port 4006 with 10 tools across 4 namespaces
...
- platform.telemetry.{query,clusters,metrics}
- platform.diagnostics.sessions.{list,create,get,update,getLogs,getTraces}
- extraction.{run,models,cacheStats}
- support.createDebugPack (compound: clusters + optional diag session + markdown summary)
- Role-gated (viewer/admin/super_admin), JWT auth via platform-service secret
- Proxies to platform-service:4003 and extraction-service:4005
- 4 Vitest tests passing, tsc --noEmit clean
2026-03-05 11:47:08 -08:00
saravanakumardb1
a31fdfe55a
feat(predictive-analytics): complete admin UI for churn prediction and health scoring
...
- Add health-dashboard page with 6-dimension health cards and anomaly detection
- Add predictive/at-risk page with user risk profiles and segmentation
- Add predictive/campaigns page with campaign management and stats
- Add predictive-client.ts API client with full type coverage
- Update all 3 roadmaps to reflect complete implementation status
2026-03-03 13:48:37 -08:00
saravanakumardb1
dfeed4c10f
fix(diagnostics): add missing crypto import for randomUUID [BUG-5]
2026-03-03 12:27:03 -08:00
saravanakumardb1
8749aa211d
fix(feedback-client): update tests to use fetch instead of post
2026-03-03 12:26:02 -08:00
saravanakumardb1
7552b8c8e8
fix(diagnostics): remove unused updateSessionStats import [BUG-4]
2026-03-03 12:25:55 -08:00
saravanakumardb1
eb83b83035
fix(diagnostics): resolve FilterMap type error in performance-profile-repository [BUG-3]
2026-03-03 12:24:54 -08:00
saravanakumardb1
7714ab51fb
fix(events): add missing platform event schemas for campaign engine and notifications
2026-03-03 12:24:39 -08:00
saravanakumardb1
d80cf075a3
fix(diagnostics): add missing session_replays and performance_profiles cosmos containers [BUG-1]
2026-03-03 12:24:05 -08:00
saravanakumardb1
03cda3a74f
fix(platform-service): resolve type errors in diagnostics and ab-testing modules
2026-03-03 12:22:35 -08:00
saravanakumardb1
914e344a92
fix(feedback-client): correct ApiClient method usage and types
2026-03-03 12:20:43 -08:00
saravanakumardb1
05ad9dbedc
feat(diagnostics): Phase 4 - automated triggers, crash sessions, session replay, profiling [4.1][4.2][4.3][4.4]
2026-03-03 12:18:58 -08:00
saravanakumardb1
eab854375e
feat(ai-diagnostics): add proactive alerts API and complete [4.3]
2026-03-03 12:17:11 -08:00
saravanakumardb1
460ed6d0c0
feat(ai-diagnostics): add admin UI insights page [4.1]
2026-03-03 12:15:09 -08:00
saravanakumardb1
1cba69948f
feat(ai-diagnostics): add REST API routes [3.3]
2026-03-03 11:57:00 -08:00
saravanakumardb1
71cbb570ef
feat(ai-diagnostics): add query parser and executor [3.1-3.2]
2026-03-03 11:53:59 -08:00
saravanakumardb1
44fa045ec5
feat(ab-testing): AI hypothesis generation and admin dashboard UI [3.1][3.2][3.3][4.1][4.2][4.3]
2026-03-03 11:53:48 -08:00
saravanakumardb1
97b3ffb21d
feat(ai-diagnostics): add LLM analyzer with prompts and insight generation [2.1-2.2]
2026-03-03 11:52:12 -08:00
saravanakumardb1
1ff02934fa
feat(ai-diagnostics): add telemetry linking and context enrichment [1.3]
2026-03-03 11:50:28 -08:00
saravanakumardb1
8951ab2c92
feat(ai-diagnostics): add HDBSCAN clustering algorithm [1.2.3]
2026-03-03 11:49:05 -08:00
saravanakumardb1
783067e17d
feat(ab-testing): bucketing, statistics, guardrails, routes [1.2][2.1][2.2]
2026-03-03 11:48:50 -08:00
saravanakumardb1
917ea03af9
feat(ai-diagnostics): add vector search repository with cosmos integration [1.2.2]
2026-03-03 11:48:12 -08:00
saravanakumardb1
50b7e22985
feat(ai-diagnostics): add Azure OpenAI embedding pipeline [1.2.1]
2026-03-03 11:47:12 -08:00
saravanakumardb1
8cdddd7c23
feat(ai-diagnostics): implement error normalization and fingerprinting [1.1.3]
2026-03-03 11:45:52 -08:00
saravanakumardb1
a9b224749c
feat(ab-testing): add experiment types and cosmos containers [1.1]
2026-03-03 11:44:33 -08:00
saravanakumardb1
4de01269b5
feat(ai-diagnostics): add error clustering types and cosmos containers [1.1.1-1.1.2]
2026-03-03 11:44:23 -08:00
saravanakumardb1
fcbae17866
feat(platform-service): implement P0-1 - Module generator script (pnpm gen:module)
...
- Add gen-module.ts with full CLI interface
- Generate types.ts, repository.ts, routes.ts, and test.ts
- Support field types: string, number, boolean, date, datetime, enum, string[], number[]
- Add --dry-run flag for preview
- Register script in package.json
2026-03-03 10:05:55 -08:00
saravanakumardb1
8e90358960
feat(platform): PII Redaction library (Appendix D.1)
...
- 8 PII patterns: email, SSN, credit card, phone, IP, password/token, JWT, API key
- redactPII() for string redaction
- redactObject() for recursive object redaction
- redactLogMessage() for log entries with context
- containsPII() and getPIITypes() detection helpers
- Custom pattern registration
- Preset configurations: minimal, standard, aggressive
2026-03-03 09:37:53 -08:00
saravanakumardb1
3efdd97057
feat(broadcasts): Rich media support in backend types
...
- BroadcastMedia interface for image/video/gif/audio
- Extended BroadcastMetrics with media engagement tracking
- Updated CreateBroadcastSchema with media array validation
2026-03-03 08:36:00 -08:00
saravanakumardb1
30583a1768
feat(diagnostics): implement Phase 1.5 — event bus, audit, rate limiting
...
1.5.2 Event Bus: Add warn to noopLog, update comments
1.5.3 Audit: Already implemented in all handlers
1.5.4 Rate Limiting: Add diagnostics keys (10/hr, 12/min, 100/min)
Delivery Templates: Add 4 diagnostics email templates (ready for wiring)
Tests: Update count to 12 templates (was 8)
All 839 tests passing
2026-03-03 08:19:41 -08:00
saravanakumardb1
4bf18f4d4f
feat(platform-service): Phase 4.4 - Push notification wiring (FCM/APNS)
...
- push-notifications.ts: FCM and APNS delivery services
- Device token registration/management
- sendPushNotification() for bulk delivery
- Automatic token deactivation on APNS 410 responses
2026-03-03 08:05:21 -08:00
saravanakumardb1
8614e3f0f1
fix(feedback): address 6 bugs/gaps from systematic review
...
- Fix search icon positioning (add relative container)
- Fix toast variant from 'destructive' to 'error'
- Remove non-existent screenshotUrl fields from delete endpoint
- Fix misleading blob path comment (blob stays at initial location)
- Add download screenshot function and button
- Add pointer-events-none to search icon
2026-03-03 07:03:27 -08:00
saravanakumardb1
3ded5ad751
fix(diagnostics,test): fix flaky test and test configuration
...
- Add DB_PROVIDER=memory to vitest config for diagnostics tests
- Fix flaky timestamp comparison in 'should update a session' test
- Add 10ms delay between create and update
- Use toBeGreaterThanOrEqual instead of strict inequality
- All 17 diagnostics tests now pass
2026-03-03 00:01:20 -08:00
saravanakumardb1
fdaffdb13c
docs(feedback): fix 8 bugs/gaps identified in systematic review
...
- Fix inconsistent screenshotUrl fields (removed, SAS generated on-demand)
- Fix blob path pattern to match feedbackScreenshots container
- Clarify flow: direct upload to final container (no temp/move)
- Add rate limiting specs to endpoint table
- Clarify access control: users submit but cannot view (security)
- Remove sas.ts from appendix (not created)
- Align size limits to 5MB consistently
- Add missing screenshotContentType and screenshotSizeBytes
2026-03-03 00:00:14 -08:00
saravanakumardb1
6f9b799cc4
fix(jobs): add missing 'warn' method to logger type in runner.ts
...
The JobContext type requires log.warn but runner.ts loggers only
defined info/error. This caused TypeScript errors when passing log
to job handlers.
- Add warn: (...a: unknown[]) => void to startRunner log param
- Add warn: (...a: unknown[]) => void to tick log param
- Add warn: (...a: unknown[]) => void to executeJob log param
2026-03-02 23:57:21 -08:00
saravanakumardb1
e712968d3d
test(feedback): Phase 1.5 - add screenshot and deviceContext schema tests
2026-03-02 23:56:59 -08:00
saravanakumardb1
ecb9f67c99
fix(broadcasts): Fix percentage rollout bucketing logic
...
- Use userId only as seed instead of userId + percentage
- Prevents users from being re-bucketed when rollout % increases
- Ensures deterministic assignment for phased rollouts
2026-03-02 23:56:42 -08:00
saravanakumardb1
e4681fbbb2
fix(broadcasts): Fix metrics increment bug in updateBroadcastMetrics
...
- Change from merge pattern to explicit increment pattern
- Each metric field is properly incremented instead of overwritten
- Prevents race condition data loss
2026-03-02 23:56:09 -08:00
saravanakumardb1
cfbaa92539
feat(feedback): Phase 1.3 - add SAS endpoint and screenshot view/delete routes
2026-03-02 23:55:47 -08:00
saravanakumardb1
b5fb2b683b
fix(surveys): Create missing surveys module
...
- types.ts: Survey, Question, SurveyResponse, conditional logic, validation
- repository.ts: CRUD + analytics + CSV export with proper type casting
- routes.ts: Admin CRUD + public endpoints (13 routes)
Fixes missing module from Phase 1 implementation
2026-03-02 23:54:59 -08:00
saravanakumardb1
8d2ba9c1cc
feat(feedback): Phase 1.2 - extend repository with screenshot support and blob path generation
2026-03-02 23:52:57 -08:00
saravanakumardb1
acfbd7c9d7
feat(feedback): Phase 1.1 - add screenshot fields and deviceContext to FeedbackDoc
2026-03-02 23:52:18 -08:00
saravanakumardb1
1b11db3f6f
feat(broadcasts,surveys): Phase 1 complete - backend modules
...
- broadcasts/types.ts: Broadcast, BroadcastTarget, BroadcastMetrics, InAppMessage
- broadcasts/repository.ts: CRUD + delivery tracking + read receipts
- broadcasts/targeting.ts: evaluateTarget(), semver, FNV-1a hash
- broadcasts/routes.ts: Admin CRUD + public endpoints (14 routes)
- surveys/types.ts: Survey, Question, SurveyResponse, conditional logic
- surveys/repository.ts: CRUD + analytics + CSV export
- surveys/routes.ts: Admin CRUD + public endpoints (13 routes)
- cosmos-init.ts: 7 new containers with TTL policies
- server.ts: Register broadcastRoutes + surveyRoutes
Implements Phase 1 of platform_BROADCAST_SURVEY_ROADMAP.md
2026-03-02 23:51:23 -08:00
saravanakumardb1
6a23a02cd4
fix(diagnostics): BUG-4, BUG-5, BUG-7, BUG-8 - race condition, transactions, test isolation, auth validation
...
- BUG-4: Add optimistic concurrency control with retry to updateSessionStats
- BUG-5: Document transaction limitations in batch operations
- BUG-7: Fix test isolation with unique productIds per test run
- BUG-8: Add session ownership validation to ingest endpoints
2026-03-02 23:47:14 -08:00
saravanakumardb1
4ffb28d8d2
fix(diagnostics): BUG-3 - add authentication check to /diagnostics/config endpoint
2026-03-02 23:45:36 -08:00
saravanakumardb1
4cb8b499af
fix(diagnostics): BUG-1, BUG-2 - DRY violation - centralize generateId and buildPk in types.ts
2026-03-02 23:43:11 -08:00
saravanakumardb1
fb71981e53
test(diagnostics): add diagnostics.test.ts with 14+ tests for Phase 1
2026-03-02 23:38:21 -08:00
saravanakumardb1
d444a8dfea
feat(diagnostics): wire routes into server.ts
2026-03-02 23:37:34 -08:00
saravanakumardb1
a66a689d7d
feat(diagnostics): Phase 1 complete - types, repository, routes
...
- types.ts: Session, Trace, Log, Screenshot schemas with Zod validation
- repository.ts: CRUD operations with composite partition keys
- routes.ts: REST endpoints for session management and data ingest
TODOs for Phase 2:
- TODO-1: Event bus integration
- TODO-2: PII redaction implementation
- TODO-6: PII redaction in log ingest
- TODO-7: Fatal log alerting
- TODO-8: Blob SAS token generation
2026-03-02 23:36:59 -08:00
saravanakumardb1
f272a44bbe
feat(diagnostics): add repository.ts with session, trace, log, screenshot CRUD
2026-03-02 23:34:35 -08:00
saravanakumardb1
dea1521dd5
feat(diagnostics): add 4 Cosmos containers (sessions, traces, logs, screenshots) with TTL
2026-03-02 23:32:49 -08:00
saravanakumardb1
f51c352452
feat(diagnostics): add types.ts with session, trace, log, screenshot schemas
2026-03-02 23:32:27 -08:00
saravanakumardb1
038cf30aca
fix(jobs): implement stub job handlers with actual functionality
2026-03-02 10:19:15 -08:00
saravanakumardb1
41b32a840f
fix(extraction-service): export rate limit cleanup functions for graceful shutdown
2026-03-02 10:16:24 -08:00
saravanakumardb1
aeae62027f
fix(telemetry): remove redundant event.userId check in cluster affected users dedup
2026-03-02 10:13:47 -08:00
saravanakumardb1
e943f14608
fix(marketplace): prevent duplicate votes with vote tracking collection
...
- Add marketplace_votes container to cosmos-init.ts
- Add MarketplaceVoteDoc type and vote repository functions
- Fix vote endpoint to toggle votes (prevent unlimited voting)
- Fix listMyReports to filter by productId for data isolation
- Update report routes to pass productId to listMyReports
2026-03-02 10:12:33 -08:00
saravanakumardb1
770bc5ae51
feat(referrals): partition key migration to /referrerId with dual-write backfill
2026-03-02 10:04:57 -08:00
saravanakumardb1
3e05260a6f
feat(marketplace): generic template marketplace with listings, reviews, installs, certification
2026-03-02 10:02:54 -08:00
saravanakumardb1
ee9d4b358d
feat(cloud-agnostic): complete Sprints 4-6 — secrets consumer migration, @bytelyst/speech package, push verified
2026-03-02 09:46:24 -08:00
saravanakumardb1
7ca2139418
refactor(storage): migrate to storage abstraction
2026-03-02 09:07:33 -08:00
saravanakumardb1
5401fad419
refactor(platform-service): migrate webhooks/routes and migrations/runner from cosmos.js to datastore
2026-03-02 02:02:47 -08:00
saravanakumardb1
b69abf44c7
refactor(platform-service): migrate remaining 14 repositories to @bytelyst/datastore
...
Migrated modules: audit, auth, invitations, items, jobs, licenses,
maintenance, notifications, subscriptions, telemetry, tokens, usage,
waitlist, webhooks.
Updated 4 test files (notifications, subscriptions, tokens, usage) from
Cosmos SDK mocks to MemoryDatastoreProvider.
Zero cosmos.js imports remain in modules/. All 66 test files pass (746 tests).
2026-03-02 01:06:24 -08:00
saravanakumardb1
e355cb0c1b
feat(platform-service): migrate 7 more repositories to @bytelyst/datastore (exports, plans, status, sessions, referrals, ip-rules, delivery) — 753/753 tests pass
2026-03-02 00:54:55 -08:00
saravanakumardb1
4d126cb051
feat(platform-service): migrate 6 repositories to @bytelyst/datastore (flags, settings, comments, votes, products, themes) — 756/756 tests pass
2026-03-02 00:51:03 -08:00
saravanakumardb1
b33d3cf2b3
feat(platform): add webhook subscriptions module, DB migration runner, Swagger UI — complete 23/25 roadmap items
2026-03-01 23:38:48 -08:00
saravanakumardb1
24d7896599
refactor(platform-service): migrate product-specific modules to product repo backends
...
Remove 23 product-specific module directories from platform-service:
- ChronoMind: timers, routines, households, shared-timers, webhooks
- JarvisJr: jarvis-agents, jarvis-sessions, jarvis-memory, jarvis-teams, marketplace
- NomGap: fasting-sessions, fasting-protocols, body-stages, social-fasting, meal-log, push-triggers
- PeakPulse: peak-sessions, peak-routes
- MindLyst: brains, memory, reflections, daily-briefs, streaks
Update server.ts: remove product module imports and registrations
Update cosmos-init.ts: remove product-specific container definitions
Clean up server.test.ts: remove 5 stale vi.mock() calls
Update AGENTS.md: add section 13 (product backends), update test counts
Platform-service tests: 759 passing (platform-common only)
Product backends: PeakPulse 32, ChronoMind 171, JarvisJr 198, NomGap 152, MindLyst 59
2026-03-01 20:38:32 -08:00
saravanakumardb1
92a6929238
fix(delivery): replace hardcoded product URL/name maps with dynamic product cache lookup
2026-03-01 17:44:54 -08:00
saravanakumardb1
2f199cb67a
fix(auth): replace hardcoded product ID lists with dynamic getAllProducts() in reset-password and verify-email
2026-03-01 17:43:32 -08:00
saravanakumardb1
bd7e78641e
fix(platform): replace Math.random() IDs with crypto.randomUUID() in 5 P2 modules
2026-03-01 17:42:28 -08:00
saravanakumardb1
a2461fc26a
fix(platform): replace 3 console.* calls with process.stdout/stderr in cosmos-init + server startup
2026-03-01 17:41:02 -08:00
saravanakumardb1
f97f7a0adb
fix(marketplace): validate agentListingIds/individualPrices length match in buildAgentPack (18 tests)
2026-03-01 17:04:28 -08:00
saravanakumardb1
573f54888c
fix(jarvis-teams): enforce maxMembers capacity in addMember, return null on full/missing team (25 tests)
2026-03-01 17:03:49 -08:00
saravanakumardb1
5088507400
feat(marketplace): verified creator program — applications, badges, agent pack bundles with discount validation (17 tests)
2026-03-01 16:50:38 -08:00
saravanakumardb1
66d6aa7b5b
feat(jarvis-teams): enterprise teams module — team CRUD, member management, shared agents, analytics (23 tests)
2026-03-01 16:48:26 -08:00
saravanakumardb1
d0cb3a2238
feat(marketplace): purchase repository — build/complete/refund docs, 70/30 revenue share, author earnings aggregation (15 tests)
2026-03-01 16:39:38 -08:00
saravanakumardb1
063efa8e41
feat(marketplace): automated certification — prompt-safety, content-policy, payload-validator, engine (25 tests)
2026-03-01 14:26:23 -08:00
saravanakumardb1
59552712a8
feat(platform): wire marketplace routes into server.ts + add server test mock
2026-03-01 08:06:12 -08:00
saravanakumardb1
7aed0ebec3
feat(platform): marketplace routes — 30 Fastify endpoints (catalog, consumer, author, admin)
2026-03-01 08:04:39 -08:00
saravanakumardb1
761a0c17f4
feat(platform): marketplace module — types, repository, 52 tests passing
2026-03-01 08:01:45 -08:00
saravanakumardb1
383a8dad32
feat(peak-sessions): add clientId for idempotent sync, findByClientId repo method, explicit 204 returns
2026-03-01 07:55:02 -08:00
saravanakumardb1
d10b898ba5
feat(peak-routes): add PeakPulse track point storage module — types, repository, routes, 10 tests
2026-03-01 07:40:19 -08:00
saravanakumardb1
b20e1c6165
feat(peak-sessions): add PeakPulse session sync module — types, repository, routes, 20 tests
2026-03-01 07:12:28 -08:00
saravanakumardb1
dcabe46de2
feat(jarvis): add jarvis-agents, jarvis-sessions, jarvis-memory modules (63 tests)
2026-03-01 07:09:12 -08:00
saravanakumardb1
33160a5daa
feat(platform-service): add brains, daily-briefs, reflections, streaks modules
2026-02-28 20:24:06 -08:00
saravanakumardb1
a97b730a89
feat(flags): seed default feature flags for all products on startup
2026-02-28 19:33:22 -08:00
saravanakumardb1
711621e3d9
fix(telemetry): add 'native' to ChannelEnum for mobile app clients
2026-02-28 19:26:52 -08:00
saravanakumardb1
1b2a5d5483
fix(platform-service): register 13 missing MindLyst Cosmos containers
...
Add containers used by MindLyst web API routes to platform-service
cosmos-init so the shared database has a single authoritative registry:
share_cards, notification_log, analytics_events, brain_packs,
chat_sessions, ab_experiments, waitlist_entries, email_captures,
engagement_campaigns, context_triggers, monitoring_reports,
nudge_state, triage_retries
Note: 'referrals' is intentionally skipped — the growth module already
registers it with /id partition key, but MindLyst uses /userId. This
partition key mismatch requires a separate data migration to reconcile.
All 1141 platform-service tests pass.
2026-02-28 19:23:04 -08:00
saravanakumardb1
ba2641c552
feat(platform-service): add push notification triggers module (6 endpoints, 22 tests)
...
- 7 trigger types: streak_risk, fast_milestone, stage_transition, social_invite, weekly_digest, achievement_unlocked, refeeding_reminder
- Built-in templates with variable interpolation
- CRUD + batch create + pending trigger query + status updates + stats
- push_triggers container (TTL 30d)
- 1,112 total platform-service tests passing
2026-02-28 14:10:11 -08:00
saravanakumardb1
20e0ef2201
feat(platform-service): add P2 Product Intelligence modules (5 modules, 61 tests)
...
- experiments: A/B testing with FNV-1a deterministic variant assignment (7 endpoints, 15 tests)
- analytics: metric ingest + daily/weekly/monthly rollup queries (3 endpoints, 14 tests)
- feedback: in-app bug/feature/praise submission + admin triage (6 endpoints, 14 tests)
- impersonation: admin user impersonation with audit trail (4 endpoints, 6 tests)
- changelog: public product changelog with admin CRUD (6 endpoints, 12 tests)
- 6 new Cosmos containers added to cosmos-init.ts
- All 5 route modules registered in server.ts
- 1,090 total platform-service tests passing
2026-02-28 14:04:07 -08:00
saravanakumardb1
7d5ed86724
feat: add universal prep-consumer.sh for portable Docker/CI builds + fix tsc errors
2026-02-28 12:32:11 -08:00
saravanakumardb1
4e94ecd721
feat(auth): add forgot-password/change-password API routes to admin dashboard + wire email delivery
...
Admin dashboard:
- platform-client.ts: Added forgotPasswordViaService, changePasswordViaService, deleteAccountViaService
- app/api/auth/forgot-password/route.ts: New API route proxying to platform-service
- app/api/auth/change-password/route.ts: New API route for authenticated password change
Platform-service (from prior session):
- auth/routes.ts: Added /auth/change-password and DELETE /auth/account endpoints, wired email verification on register
- auth/types.ts: Added ChangePasswordSchema and DeleteAccountSchema
- delivery/subscribers.ts: Updated password reset subscriber, added email verification subscriber
- delivery/channels/email.ts: Added ByteLyst email API provider (sendViaBytelyst)
- delivery/types.ts: Added 'bytelyst' provider
- events/types.ts: Added resetToken/displayName to user.password_reset, added user.email_verification_requested event
2026-02-28 04:17:04 -08:00
saravanakumardb1
27f271d983
feat(platform): add P1 operational maturity modules — sessions, maintenance, exports, IP rules
...
- modules/sessions: device session tracking, revoke one/all, admin force-revoke (9 tests)
- modules/maintenance: 4 modes (off/read_only/maintenance/emergency), bypass roles/IPs, scheduled windows (14 tests)
- modules/exports: GDPR data export jobs for users/audit/telemetry/usage/subscriptions/licenses (10 tests)
- modules/ip-rules: IP allow/deny with CIDR matching, temporary blocks with expiry (10 tests)
- cosmos-init: 4 new containers (sessions, ip_rules, export_jobs, maintenance_windows)
- 1029 platform-service tests passing across 74 test files
2026-02-28 02:47:22 -08:00
saravanakumardb1
069d1ffda9
docs: add 19 reusable AI coding agent skills + sessions module scaffold
2026-02-28 02:41:22 -08:00
saravanakumardb1
662d417267
feat(platform): add email delivery module, wire event bus into auth, update roadmap
...
- modules/delivery: 8 email templates, renderer, SendGrid/Postmark/console adapters, dispatcher, delivery log, 21 tests
- modules/delivery/subscribers: event bus listeners for user.created, password_reset, email_verified
- auth/routes: emit bus events on register, forgot-password, verify-email (fire-and-forget)
- cosmos-init: delivery_log container (pk /pk, 90d TTL)
- roadmap: updated inventory (30 modules, 14 packages, 988 tests), marked P0 items complete
- 988 platform-service + 14 events = 1002 total tests passing
2026-02-28 02:36:58 -08:00
saravanakumardb1
772f428967
feat(platform): add P0 foundational modules — event bus, scheduled jobs, password reset, email verification, status page
2026-02-28 02:29:08 -08:00
saravanakumardb1
9a5e93bf05
feat(nomgap): add social-fasting + meal-log modules (47 tests, 2 Cosmos containers)
2026-02-28 00:37:46 -08:00
saravanakumardb1
5e8f133816
feat(webhooks): add webhook subscriptions module — 15 event types, HMAC signing, retry delivery
2026-02-28 00:27:32 -08:00
saravanakumardb1
b4237acaa2
feat(chronomind): add routines, households, shared-timers modules (88 new tests, 847 total)
2026-02-28 00:05:18 -08:00
saravanakumardb1
c1a1f86cd6
feat(timers): add timer CRUD endpoints for ChronoMind cloud sync (42 new tests, 759 total)
2026-02-27 23:48:31 -08:00
saravanakumardb1
89b6588e1d
feat(extraction): add timer-parse built-in task for ChronoMind NL parsing — 6 classes, 3 examples
2026-02-27 23:16:27 -08:00
saravanakumardb1
1744bcf63f
feat(api): NomGap fasting modules — sessions CRUD + stats, 14 built-in protocols + custom CRUD, body stages + autophagy confidence (47 new tests, 717 total)
2026-02-27 22:32:28 -08:00
saravanakumardb1
0c4210f5ff
docs(local-llm): update original setup doc to redirect to docs/ structure
...
- LOCAL_LLMs_setup_mac_m4_48gb.md: replace 279-line monolith with quick start
+ documentation index linking to 9 topic-specific docs in docs/
- Add .gitignore for extraction-service eval logs (generated artifacts)
2026-02-19 13:01:35 -08:00
saravanakumardb1
798a85e88b
fix(extraction-service): fix Ollama eval assertions — 19/19 passing (100%)
...
Two root causes fixed:
1. promptfoo javascript assertions must be single expressions — replaced
'const r=...; return ...;' blocks with function(e){return ...} expressions
2. llama3.1:8b under-extracts secondary classes (person, entity, brain_signal)
— relaxed assertions to accept equivalent classes or matching text content
while preserving meaningful signal checks
Result: 0/19 → 10/19 (syntax fix) → 16/19 → 19/19 (model behavior tuning)
2026-02-19 12:54:34 -08:00
saravanakumardb1
f0accc0946
feat(extraction-service): add unattended eval runner with structured logging
...
- Add evals/run-ollama-evals-logged.sh: self-logging eval script that runs
without babysitting; writes timestamped log to evals/logs/; includes
Ollama health check, model availability check (auto-pulls if missing),
JSON smoke test, cache clear, full promptfoo run, pass-rate summary,
and macOS notification on completion
- Update package.json scripts: add eval, eval:ci, eval:task, eval:json,
eval:ollama, eval:compare
2026-02-19 12:19:34 -08:00
saravanakumardb1
da9ca9dc1a
feat(extraction-service): add Ollama local model eval config and compare script
...
- Add evals/promptfoo.ollama.yaml: same 19 cases hitting Ollama OpenAI-compat
API directly (no extraction-service needed); all assertions use inline
JSON.parse(output) to handle raw string response from Ollama
- Add evals/compare-evals.sh: runs Gemini + Ollama evals back-to-back and
prints side-by-side pass-rate comparison table
- Supports OLLAMA_MODEL env var (default: llama3.1:8b)
2026-02-19 12:19:24 -08:00
saravanakumardb1
acd4c3542b
feat(extraction-service): scaffold promptfoo eval suite with 19 test cases
...
- Add evals/promptfoo.yaml: HTTP provider hitting extraction-service API
covering all 5 built-in tasks (transcript, triage, memory-insight,
reflection-enrichment, bug-report-extraction)
- Add evals/fixtures/golden.json: machine-readable golden input/output fixtures
- Add evals/run-evals.sh: shell runner with health checks, auth token
handling, task filtering, and CI mode
- Add evals/README.md: usage docs, prerequisites, cost estimates, CI integration
2026-02-19 12:19:16 -08:00
saravanakumardb1
ca70a05e1d
feat(flags): add region, osVersion targeting to feature flags
...
- Add OsVersionRange interface + Zod schema (platform, minVersion?, maxVersion?)
- Add regions[] and osVersions[] to FeatureFlagDoc, CreateFlagSchema, UpdateFlagSchema
- Add compareVersions() helper for dot-separated semver comparison
- Extend GET /flags/poll with ?region and ?osVersion query params
- Region targeting: flag only returned if client region is in flag's regions list
- OS version targeting: per-platform min/max version range filtering
- Add 10 new tests (schema validation, compareVersions edge cases)
- 634 tests passing, tsc clean
2026-02-17 20:53:48 -08:00
saravanakumardb1
6f7299aa7a
fix(monitoring): update health-check endpoints for consolidated services
...
- Remove defunct growth-service (4001), billing-service (4002), tracker-service (4004)
- Add backend API (8000), extraction sidecar (4006), all 3 dashboards (3001-3003)
- Reorder: backend → services → dashboards → infra
2026-02-17 20:53:37 -08:00
ff4cc14a46
fix(extraction-service): run python sidecar on railway
2026-02-17 11:32:40 -08:00
saravanakumardb1
51e2ecdec8
test(telemetry): Phase 3 regression tests — UpdateClusterSchema, ClusterStatusEnum, extractClientIp (614→624 tests)
2026-02-17 11:24:59 -08:00
saravanakumardb1
788ee57935
docs(telemetry): update routes doc comment with all 14 endpoints
2026-02-17 11:23:38 -08:00
saravanakumardb1
08b9642408
fix(telemetry): 3 bugs — Slack Block Kit text key, cluster reopen clears resolution, affectedInstallIds uses correct ID
2026-02-17 11:22:13 -08:00
saravanakumardb1
0bfd4bdf22
feat(telemetry): geo distribution endpoint (GET /telemetry/geo) with Cosmos GROUP BY aggregation
2026-02-17 11:13:55 -08:00
saravanakumardb1
61c919a916
feat(telemetry): Phase 3 — policy preview endpoint (count matching clients from recent events)
2026-02-17 10:59:13 -08:00
saravanakumardb1
2f61ea517c
feat(telemetry): Phase 3 — geo enrichment, Prometheus metrics export endpoint
2026-02-17 10:56:19 -08:00
saravanakumardb1
80a4459f81
docs: update documentation
2026-02-17 10:49:14 -08:00
saravanakumardb1
2fb341048e
feat(telemetry): Phase 3 — rate limiting, batch dedup, ETag config caching (614 tests)
2026-02-17 10:24:07 -08:00
saravanakumardb1
20f77d5a50
test(telemetry): add route-logic tests — containsPII, computePk, normalizeMessage, fingerprint, policyMatch, mergePolicies (34→77 tests)
2026-02-17 09:42:57 -08:00
saravanakumardb1
ce4c4ff53d
feat(telemetry): add telemetry module — ingest, config, query, clusters, policies (34 tests)
2026-02-17 09:06:43 -08:00
saravanakumardb1
18a5b342d9
fix(request-context): block sunset products in public productId resolver
2026-02-16 23:45:17 -08:00
saravanakumardb1
b0e8304d59
test(server): update @bytelyst/config mock for loadProductIdentity
2026-02-16 23:28:52 -08:00
saravanakumardb1
c7480661eb
fix(waitlist): harden public endpoints and unsubscribe validation
...
- Block sunset products on public waitlist join/count/config endpoints
- Verify unsubscribe email matches unsubscribeToken before status change
- Keep idempotent join behavior explicit for existing entries (200 path)
- Escape CSV newline/carriage-return values to prevent malformed exports
- Refactor request productId extraction to shared helper in request-context
- Guard prelaunchConfig merge with safe default object in products update route
2026-02-16 23:28:32 -08:00
saravanakumardb1
6a996cc11d
test(waitlist): add 45 unit tests + update doc checkboxes with commit links
...
- 45 tests: schema validation, email normalization, status transitions, route exports
- Update Phase 1, 2, 3, 4 checkboxes in PRE_LAUNCH_SIGNUP_SYSTEM.md with commit SHAs
- Add webhook env vars to .env.example
2026-02-16 22:49:42 -08:00
saravanakumardb1
2692c918ce
feat(waitlist): add pre-launch waitlist module (types, repo, routes)
...
- Create waitlist/types.ts: WaitlistEntryDoc, Zod schemas for join/status/unsubscribe/admin
- Create waitlist/repository.ts: full CRUD, dedup by emailNormalized, position assignment, stats
- Create waitlist/routes.ts: 5 public endpoints + 7 admin endpoints with role guard
- Add waitlist container to cosmos-init.ts (+ 13 previously missing containers)
- Add dispatchWaitlistJoined webhook to webhooks.ts
- Register waitlistRoutes in server.ts
- Public: join, check status, count, config, unsubscribe
- Admin: list, stats, get, update, delete, batch invite, CSV export
2026-02-16 22:45:14 -08:00
saravanakumardb1
66e657a646
feat(products): extend product status lifecycle + prelaunch config
...
- Add 6 product statuses: draft, pre_launch, beta, active, sunset, disabled
- Add PrelaunchConfig with customFields, CAPTCHA, tagline, maxSignups
- Add isValidStatusTransition() helper for safe status changes
- Update getRequestProductId() to block draft/sunset/disabled
- Add getRequestProductIdForPublic() for pre_launch waitlist routes
- Add status transition validation to product update route
- Add PRE_LAUNCH_SIGNUP_SYSTEM.md design doc with full roadmap
2026-02-16 22:36:53 -08:00
saravanakumardb1
209213b50d
test(server): cover platform bootstrap wiring and hooks
2026-02-16 15:25:27 -08:00
saravanakumardb1
1df94103ea
test(cosmos): add init path coverage for platform-service
2026-02-16 15:22:38 -08:00
saravanakumardb1
e3f173c164
test(config): add env schema coverage for platform-service
2026-02-16 15:20:04 -08:00
saravanakumardb1
9fbaf60ba8
test(platform-service): add route coverage for items invitations audit
2026-02-16 15:00:13 -08:00
saravanakumardb1
7179f1e7c4
test(platform-service): add promos route-level tests
2026-02-16 12:46:40 -08:00
saravanakumardb1
e4ee23aab4
test(platform-service): add comments route-level tests
2026-02-16 12:43:56 -08:00
saravanakumardb1
3e1647ae96
test(platform-service): add tokens route-level tests
2026-02-16 12:41:34 -08:00
saravanakumardb1
dc0cf6d8b4
test(platform-service): add referrals route-level tests
2026-02-16 12:38:42 -08:00
saravanakumardb1
783b9792df
test(platform-service): add memory route-level tests
2026-02-16 12:36:27 -08:00
saravanakumardb1
8576fe2e91
test(platform-service): add route tests for settings, votes, and public modules
2026-02-16 12:33:17 -08:00
saravanakumardb1
c7934af227
test(platform-service): add subscriptions route-level tests — 395 tests, 39.6% stmts
2026-02-16 12:17:00 -08:00
saravanakumardb1
1cb9af3ae4
test(platform-service): add usage route-level tests — 386 tests, 37.9% stmts
2026-02-16 12:15:40 -08:00
saravanakumardb1
149d97dd9f
test(platform-service): add route-level tests for plans + notifications — 379 tests, 35.4% stmts
2026-02-16 12:14:42 -08:00
saravanakumardb1
87f7d76915
test(platform-service): add products, cache, votes repository tests — 362 tests, 32.6% stmts
2026-02-16 12:08:40 -08:00