saravanakumardb1
3a14f87814
chore(platform-service): wire P2+P3 modules into server + cosmos-init
...
- server.ts: register cdnRoutes, searchRoutes, dunningRoutes (P2)
- server.ts: register tenantRoutes, retentionRoutes, backupRoutes, apiVersioningRoutes (P3)
- cosmos-init.ts: 17 new containers across 7 modules:
CDN: cdn_assets, cdn_purge_requests, cdn_origin_configs
Search: search_index, search_suggestions
Dunning: dunning_campaigns, dunning_policies
Tenants: tenants, tenant_members, tenant_invites
Retention: retention_policies, retention_jobs
Backups: backups, restores, backup_configs
API Versioning: api_versions, api_version_pins
- Total platform-service modules: ~41, tests: 1239
2026-03-19 23:50:38 -07:00
saravanakumardb1
946390f378
feat(api-versioning): add API versioning — lifecycle, pins, deprecation
...
- types.ts: ApiVersionDoc, ClientVersionPinDoc + 4 Zod schemas
- repository.ts: version CRUD, client pin CRUD, active version lookup
- routes.ts: 10 endpoints (version lifecycle, current, pins CRUD)
- api-versioning.test.ts: 13 schema tests
- draft → active → deprecated → sunset lifecycle
- Client version pinning with auto-upgrade scheduling
- Cosmos containers: api_versions, api_version_pins
2026-03-19 23:50:23 -07:00
saravanakumardb1
b5c83b1874
feat(backups): add backup/restore module — on-demand + config
...
- types.ts: BackupDoc, RestoreDoc, BackupConfigDoc + 3 Zod schemas
- repository.ts: backup/restore CRUD, config singleton per product
- routes.ts: 9 endpoints (backup CRUD, restore, history, config)
- backups.test.ts: 11 schema tests
- Supports full/incremental/selective types with expiry
- Cosmos containers: backups, restores, backup_configs
2026-03-19 23:50:09 -07:00
saravanakumardb1
c638555069
feat(retention): add data retention policies — policy CRUD, enforce, jobs
...
- types.ts: RetentionPolicyDoc, RetentionJobDoc + 2 schemas + getCutoffDate helper
- repository.ts: policy CRUD, enabled policies query, job audit trail, stats
- routes.ts: 7 endpoints (policy CRUD, enforce with dry-run, job history, stats)
- retention.test.ts: 12 schema + helper tests
- Supports delete/archive/anonymize actions with configurable date fields
- Cosmos containers: retention_policies, retention_jobs
2026-03-19 23:49:56 -07:00
saravanakumardb1
33e5fd70ce
feat(tenants): add multi-tenant module — tenant CRUD, members, invites
...
- types.ts: TenantDoc, TenantMemberDoc, TenantInviteDoc + 4 Zod schemas
- repository.ts: tenant CRUD, member CRUD, invite lifecycle, slug uniqueness
- routes.ts: 10 endpoints (tenant CRUD, invite, accept, member role, remove)
- tenants.test.ts: 16 schema + plan-limits tests
- Plan limits: free(5), starter(25), pro(100), enterprise(10k) members
- SHA-256 hashed invite tokens with 7-day expiry
- Cosmos containers: tenants, tenant_members, tenant_invites
2026-03-19 23:49:41 -07:00
saravanakumardb1
797f5e4318
feat(dunning): add billing dunning module — campaigns, policies, retries
...
- types.ts: DunningCampaignDoc, DunningPolicyDoc + 3 Zod schemas + helpers
- repository.ts: campaign CRUD, policy management, retry scheduling
- routes.ts: 11 endpoints (campaign lifecycle, policy CRUD, retry, grace period)
- dunning.test.ts: 20 schema + helper tests (getNextRetryTime, isGracePeriodExpired)
- Configurable retry schedules, grace periods, auto-downgrade
- Campaign status lifecycle: active → resolved/escalated
- Cosmos containers: dunning_campaigns, dunning_policies
2026-03-19 23:49:25 -07:00
saravanakumardb1
e9cb6b2a38
feat(search): add full-text search module — index, query, suggestions
...
- types.ts: SearchIndexDoc, SearchSuggestion + 3 Zod schemas
- repository.ts: index/remove entities, search with CONTAINS, prefix suggestions
- routes.ts: 6 endpoints (search, suggest, index entity, reindex, delete by type:id)
- search.test.ts: 15 schema validation tests
- Parameterized queries (no manual quote escaping)
- Composite doc ID format: entityType:entityId
- Cosmos containers: search_index, search_suggestions
2026-03-19 23:49:02 -07:00
saravanakumardb1
7b43a02126
feat(cdn): add CDN asset pipeline module — upload, purge, origin config
...
- types.ts: CdnAsset, PurgeRequest, OriginConfig + 3 Zod schemas
- repository.ts: asset CRUD, purge request tracking, origin config management
- routes.ts: 9 endpoints (asset upload/list/get/delete, purge, origin config CRUD)
- cdn.test.ts: 15 schema validation tests
- Supports categories (image/video/font/script/style/document/other)
- SHA-256 content hash tracking, size limits, TTL-based purge requests
- Cosmos containers: cdn_assets, cdn_purge_requests, cdn_origin_configs
2026-03-19 23:47:59 -07:00
saravanakumardb1
4071429871
fix(platform-service): fix OFFSET/LIMIT pairing, survey analytics productId, unused imports
...
- broadcasts/repository: fix OFFSET/LIMIT must be paired (Cosmos SQL requires both)
- broadcasts/repository: remove unused TargetingContext import
- surveys/repository: fix OFFSET/LIMIT in listSurveys + listResponsesForSurvey
- surveys/repository: fix getSurveyAnalytics to accept and pass productId
- surveys/repository: fix isComplete boolean param cast for Cosmos SDK types
- surveys/routes: fix parseInt safety for limit/offset query params (NaN guard)
- surveys/routes: pass productId to getSurveyAnalytics call
2026-03-19 23:47:43 -07:00
saravanakumardb1
652a8e5d15
fix(platform-service): missing cosmos containers + NaN guard in cross-product limit
...
- cosmos-init.ts: add onboarding_events + onboarding_completions containers
(onboarding repository references them but they were never registered)
- telemetry cross-product route: parseInt(limit) could produce NaN when
given non-numeric input — now clamps to 1-100 with default 20
2026-03-19 22:20:31 -07:00
saravanakumardb1
4e7401d164
test(platform-service): add broadcast + survey module tests — 43 tests
...
Broadcasts (23 tests): schema validation, targeting engine (segments,
platform, version range, country, specific users, percentage rollout),
query builder, context extraction.
Surveys (20 tests): schema validation (create, update, question, answer,
triggers), completion rate, answer type validation (NPS, text, rating,
dropdown, scale, ranking), length/range constraints.
2026-03-19 22:16:28 -07:00
saravanakumardb1
0352ea5383
feat(platform-service): pre-built Stripe checkout flow (Phase 4.4) — 6 tests
...
New modules/billing-checkout/ — higher-level POST /billing/checkout with:
- Zod-validated input (plan OR explicit priceId)
- Tax collection support (automatic_tax)
- Customer email pre-fill
- Arbitrary metadata passthrough
- Trial period and promo code support
- 6 tests: plan, priceId, missing both, invalid plan, optional fields, URL validation
2026-03-19 22:10:32 -07:00
saravanakumardb1
0e880fd40d
feat(platform-service): shared onboarding analytics module (Phase 4.3) — 8 tests
...
New modules/onboarding/ with standard pattern (types → repository → routes):
- POST /onboarding/step — track step completion (any auth)
- POST /onboarding/complete — track onboarding completion (any auth)
- GET /onboarding/funnel — funnel conversion rates (admin)
- GET /onboarding/user/:userId — user progress (admin)
- Cosmos containers: onboarding_events, onboarding_completions
- Funnel: per-step unique users, conversion rates, avg duration
- 8 tests: schema validation, funnel, date filter, user progress, empty product
2026-03-19 22:07:03 -07:00
saravanakumardb1
d900df3dc8
feat(platform-service): cross-product telemetry endpoint (Phase 4.2) — 6 tests
...
GET /telemetry/cross-product?products=a,b,c — admin-only endpoint for
multi-product telemetry comparison:
- Per-product summary: totalEvents, errorEvents, errorRate, topModules, platforms
- Daily event counts per product (for stacked bar charts)
- Top error clusters across products (merged + sorted by count)
- Date range filtering via from/to query params
- 6 tests: summary, daily breakdown, clusters, date filter, unknown product, limit
2026-03-19 22:04:00 -07:00
saravanakumardb1
1fe1e75999
feat(platform-service): auto-registration on first request (Phase 4.1) — 8 tests
...
Zero-touch product provisioning: when a request arrives with an unknown
productId and a valid JWT, auto-create a minimal ProductDoc instead of
rejecting. Enables new products to use platform-service immediately.
- auto-register.ts: auto-create ProductDoc with sensible defaults
- Rate limited: max 10 auto-registrations per minute
- Requires valid JWT (unauthenticated requests still rejected)
- Audit logged as product.auto_registered
- request-context.ts: exported extractProductIdAsync with auto-register
- 8 tests: register, duplicate, format validation, rate limit
2026-03-19 22:00:57 -07:00
saravanakumardb1
0f299231cc
feat(platform-service): declarative YAML module loader (4.4) — 34 tests
...
New files:
- src/lib/declarative-schema.ts — YAML schema + Zod validation
- ModuleSchema, FieldSchema, EndpointSchema
- fieldToZodSchema, buildCreateSchema, buildUpdateSchema, defaultEndpoints
- src/lib/declarative-loader.ts — runtime route generator
- parseModuleYaml, registerModuleRoutes, loadDeclarativeModules
- MemoryStore with filtering, sorting, pagination
- Auth enforcement (none/user/admin), custom endpoint support
- src/lib/declarative-loader.test.ts — 34 tests
- Schema validation, field conversion, endpoint generation
- MemoryStore CRUD, route integration with full lifecycle
Dependency: yaml (npm)
2026-03-19 21:16:58 -07:00
saravanakumardb1
6ba86e0bf4
fix: replace corepack pnpm with pnpm in pretest/predev scripts
...
Node 25 removed corepack as a built-in. Replace all 'corepack pnpm'
invocations with direct 'pnpm' calls since pnpm is installed globally.
Affected: platform-service, tracker-web, blob, testing, LLM dashboard
2026-03-19 19:57:16 -07:00
saravanakumardb1
16dc1c4a79
feat(platform-service): overhaul module generator with auto-patching
...
- Rewrote gen-module.ts to match actual codebase patterns
- Repository uses getRegisteredContainer from @bytelyst/cosmos
- Routes use req.jwtPayload?.sub for auth (not req.user)
- Routes register with explicit /name paths under /api prefix
- Auto-patches cosmos-init.ts with container definition
- Auto-patches server.ts with import + route registration
- Proper parenthesis-aware field splitter for enum(a,b,c)
- Test template generates per-field validation tests
- Checks for existing module directory before overwriting
- Pascal/camel case helpers handle hyphenated module names
- Dry-run shows auto-patch previews
2026-03-19 19:52:06 -07:00
saravanakumardb1
1ad8660dd8
fix(platform): fix 2 type errors found in typecheck sweep
...
- api-key-auth.ts: Record<string, unknown> → FilterMap (import from @bytelyst/datastore)
- reviews/notifications.ts: raw subject/html/text → templateId + variables (match dispatchEmail signature)
2026-03-19 19:02:57 -07:00
saravanakumardb1
548f7199bf
fix(extraction-service): fix QueueJob generic type mismatch in createJob
...
enqueue() returns QueueJob<TPayload, unknown> since no result exists at
enqueue time. mapQueueJob expects ExtractionJobResult. Cast at the call
site since newly enqueued jobs have undefined result and all accesses
use optional chaining.
2026-03-19 18:12:34 -07:00
root
e996962b64
feat(mcp-server): add team provisioning follow-up hooks
2026-03-15 09:59:35 +00:00
root
8976caa966
feat(mcp-server): add org review follow-up hooks
2026-03-15 09:56:04 +00:00
root
7c5999ce5a
feat(mcp-server): wire a2a governance hooks
2026-03-15 09:51:00 +00:00
root
d93ada4037
docs(config): align rate limit settings
2026-03-15 09:42:42 +00:00
root
e4bff5a2fe
feat(platform-service): add support case management foundation
2026-03-15 09:39:20 +00:00
root
14346fbd5d
feat(ratelimit): back api throttles with datastore
2026-03-15 09:37:03 +00:00
root
8b99b7a9a7
feat(platform-service): add scim provisioning foundation
2026-03-15 09:36:27 +00:00
root
66d0bf53a9
feat(platform-service): add shared knowledge foundation
2026-03-15 09:33:17 +00:00
root
728d8f2484
feat(platform-service): add ai budget governance
2026-03-15 09:30:16 +00:00
root
3f06427038
feat(platform-service): add agent evaluation governance
2026-03-15 09:26:40 +00:00
root
8d78b6ce59
feat(api-key): audit security events
2026-03-15 09:24:01 +00:00
root
2f7163b856
feat(api-key): restrict job operations to service tokens
2026-03-15 09:08:38 +00:00
root
95261acb92
feat(api-key): log auth and throttling rejects
2026-03-15 09:06:51 +00:00
root
798c1b9fad
feat(platform-service): add agent registry foundation
2026-03-15 09:05:39 +00:00
root
473b7310d5
fix(tokens): tighten machine credential issuance
2026-03-15 06:28:50 +00:00
root
57abfa5b03
feat(api-key): add per-product throttling
2026-03-15 06:26:42 +00:00
root
8240f6060d
feat(api-key): restrict ops routes to service tokens
2026-03-15 06:24:08 +00:00
root
d1b3faae8b
fix(tokens): issue machine-ready defaults
2026-03-15 06:19:48 +00:00
root
eac633e1e7
fix(api-key): enforce machine token policy
2026-03-15 06:16:15 +00:00
root
507f0fdd1f
feat(tokens): classify machine credentials
2026-03-15 06:09:42 +00:00
root
3398d1400f
feat(platform-service): add human review queue
2026-03-15 06:08:23 +00:00
root
33c5a5a5ce
feat(platform-service): add org workspace foundation
2026-03-15 06:03:08 +00:00
root
841d2f5129
fix(api-key): enforce requested product binding
2026-03-15 06:01:17 +00:00
root
daec38faf7
feat(a2a): persist incident pipeline runs
2026-03-15 05:58:15 +00:00
root
07e9475b70
fix(tokens): align api token storage with cosmos partitioning
2026-03-15 05:57:34 +00:00
root
a76b932502
feat(platform-service): add durable run tracking
2026-03-14 16:08:07 +00:00
root
885ee2d504
feat(events): add durable event bus worker path
2026-03-14 16:02:40 +00:00
root
8de22f9f22
feat(platform-service): allow scoped api keys on webhook routes
2026-03-14 15:38:42 +00:00
root
da744ab116
feat(platform-service): allow scoped api keys on ops routes
2026-03-14 14:58:08 +00:00
root
0ad6703961
feat(platform-service): add api key auth context and throttling guard
2026-03-14 14:55:23 +00:00
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