saravanakumardb1
c6e83f991d
fix(docker): correct web Dockerfile EXPOSE/PORT to 3030 matching docker-compose
2026-03-24 11:45:29 -07:00
saravanakumardb1
5c67bed5a6
fix(docker): remove hardcoded corporate proxy and jfrog registry from Dockerfiles
2026-03-24 11:12:38 -07:00
saravanakumardb1
c1ffb3c222
chore: remove docker-prep.sh — replaced by Gitea registry-backed Dockerfiles
2026-03-24 06:21:04 -07:00
saravanakumardb1
3b32b78c35
fix(ci): remove stale common-plat build step — packages from Gitea registry now
2026-03-24 05:54:50 -07:00
saravanakumardb1
bfbca2b820
feat(docker): migrate to Gitea registry-backed Docker pattern
...
- Convert all @bytelyst/* file: refs to semver ^0.1.0
- Remove sibling common-plat workspace references
- Add .npmrc and .npmrc.docker for local Gitea registry
- Rewrite Dockerfiles: pnpm + BuildKit secret mount
- Verified: pnpm install + backend typecheck pass
2026-03-23 20:57:37 -07:00
saravanakumardb1
1168da3ce2
fix(ci): fix ESLint flat config plugin resolution
...
- Override react-hooks rules within the same config object that defines the plugin
- Avoids 'Cannot redefine plugin' error in ESLint 9 flat config
2026-03-22 21:20:23 -07:00
saravanakumardb1
7cca057831
fix(ci): fix ESLint errors + workflow for Gitea CI
...
- Move theme detection into useState initializer (fixes set-state-in-effect)
- Downgrade React 19 strict ESLint rules to warnings
- Skip pnpm install in common-plat build step, add HUSKY=0
2026-03-22 21:11:44 -07:00
saravanakumardb1
7242c83998
fix(ci): build only @bytelyst/* packages in common-plat
...
- Use pnpm -r --filter './packages/**' build to avoid dashboard/service builds
- Fixes .next/lock conflict from parallel jobs building common-plat
2026-03-22 20:33:50 -07:00
saravanakumardb1
41b7760ebf
fix(ci): use local paths for host-mode Gitea runner
...
- Replace actions/checkout with git pull + local working-directory
- Fixes corp proxy blocking GitHub action downloads
2026-03-22 20:23:02 -07:00
saravanakumardb1
fcc9207385
chore(ci): migrate to Gitea local CI, disable GitHub Actions
...
- Add .gitea/workflows/ci.yml for self-hosted Gitea runner
- Disable .github/workflows/ci.yml (GitHub billing blocked)
2026-03-22 20:13:18 -07:00
saravanakumardb1
582936ad65
feat(repo): migrate chronomind workspace to pnpm
...
- Add pnpm-workspace.yaml (backend + web + common-plat packages)
- Add root package.json with workspace scripts and pnpm config
- Add packageManager: pnpm@10.6.5 to backend/web manifests
- Remove package-lock.json files, generate pnpm-lock.yaml
- Add root .gitignore (was missing)
- Update CI to use pnpm workspace commands
- Add transpilePackages + webpack symlinks to next.config.ts
- Update docker-prep.sh for backend + web consumers
- Rewrite backend/web Dockerfiles to .docker-deps consumer pattern
- Add .dockerignore
Verified: typecheck + 576 tests (182 backend + 394 web) + builds pass
Docker: backend + web smoke builds pass
2026-03-22 19:11:01 -07:00
saravanakumardb1
ab400fbb6a
chore: update project files
2026-03-22 14:06:48 -07:00
saravanakumardb1
cb684fa086
chore(docker): add backend + web Dockerfiles, add standalone output to next.config.ts
2026-03-22 00:20:20 -07:00
saravanakumardb1
5e8c46b5f3
fix(ios): correct iPad sidebar filter closure indentation
2026-03-21 20:56:58 -07:00
saravanakumardb1
b16a6614d4
feat(android): gate Focus tab behind focus_mode_enabled feature flag
2026-03-21 20:42:01 -07:00
saravanakumardb1
39f8a70b6b
feat(ios): gate Focus tab behind focus_mode_enabled feature flag
2026-03-21 20:39:56 -07:00
saravanakumardb1
f6c85ede9e
fix: align Fastify to 5.7.4 + add web product-config.ts
2026-03-21 20:31:26 -07:00
saravanakumardb1
a606617c1d
feat(web): wire feature flag checks into Dashboard UI
...
Gate Focus Mode and Routines nav links behind focus_mode_enabled
and routines_enabled flags. Fix inverted routines_disabled check
to use the actual seeded flag key routines_enabled.
2026-03-21 20:30:49 -07:00
saravanakumardb1
09310b7eb8
feat(web): upgrade feature-flag-client to SSE streaming + getValue()
2026-03-21 17:40:43 -07:00
saravanakumardb1
8c90d863a8
feat(backend): admin-panel encryption toggle via initEncryption()
...
- FIELD_ENCRYPT_ENABLED env var (default: true, fallback only)
- initEncryption(productId) polls encryption_enabled from platform-service
- Admin panel toggle takes precedence, 3s timeout graceful fallback
2026-03-21 15:24:58 -07:00
saravanakumardb1
253a9db0ea
feat(backend): encrypt sensitive fields across all modules
...
- timers: description
- routines: description, steps[].notes
- shared-timers: description
- webhooks: secret, description
- Add @bytelyst/field-encrypt dep + chronomind-mek config
- field-encrypt singleton (getEncryptor lazy pattern)
- Encrypt on create/update/batchUpsert, decrypt on read/list/since
- Backward-compatible via isEncryptedField guard
- 182/182 tests passing, typecheck clean
2026-03-21 12:11:39 -07:00
saravanakumardb1
7a1be12ef5
docs: add cross-repo automation playbook reference
2026-03-21 09:12:18 -07:00
saravanakumardb1
995cdb8e7d
fix(ios): align tests with current PomodoroConfig/PomodoroState/CreateCountdownParams signatures
...
- PomodoroConfig: add longBreakMinutes parameter
- PomodoroState: add isLongBreak, completedRounds parameters; remove roundStartedAt
- CreateCountdownParams: duration → durationSeconds
- RescheduleEngineTests: compare timeIntervalSince1970 (not Date) with accuracy
2026-03-21 08:34:50 -07:00
saravanakumardb1
d3c3affc1b
fix(ios): Fix KillSwitchService — BLKillSwitchClient.check() returns Void
...
Swift BLKillSwitchClient.check() sets isDisabled/maintenanceMessage as
properties on the client, not a returned result. Expose isDisabled and
maintenanceMessage as computed properties on the wrapper.
2026-03-20 23:09:36 -07:00
saravanakumardb1
151d8361ed
fix(android): KillSwitchResult uses 'disabled' not 'killed'
...
BLKillSwitchClient.KillSwitchResult has field 'disabled: Boolean',
not 'killed'. Fix property access in kill switch check.
2026-03-20 22:59:10 -07:00
saravanakumardb1
c328216a0e
refactor(ios): Phase 9A — Add Config.swift + KillSwitchService.swift
...
- Create Shared/Cloud/Config.swift with shared BLPlatformConfig for ChronoMind
- Create Shared/Cloud/KillSwitchService.swift thin wrapper over BLKillSwitchClient
Part of Mobile DRY Refactoring Roadmap Phase 9A.
2026-03-20 22:48:34 -07:00
saravanakumardb1
2060a831bf
refactor(android): Phase 1 — delete dead services, migrate sync to OkHttp, wire kill switch
...
- Delete auth/AuthService.kt (328 LOC dead code — LoginScreen already uses BLAuthClient)
- Delete telemetry/TelemetryService.kt (178 LOC dead code — TimerViewModel already uses BLTelemetryClient)
- Delete telemetry/FeatureFlagService.kt (89 LOC dead code — PlatformModule provides BLFeatureFlagClient)
- Migrate sync/PlatformApiClient.kt from raw HttpURLConnection to OkHttp (consistent with kotlin-platform-sdk)
- Migrate sync/SyncRepository.kt to use BLSecureStore for auth token instead of manual SharedPreferences
- Wire BLKillSwitchClient in MainActivity.kt with kill switch check on app start
- Update AppModule.kt to inject BLSecureStore into SyncRepository
Part of Mobile DRY Refactoring Roadmap Phase 1.
2026-03-20 22:19:11 -07:00
saravanakumardb1
f7356706cd
feat(backend): add GET /api/bootstrap route + test
...
- Returns productId, displayName, backendPort for client bootstrapping
- Integration test validates response shape and types
2026-03-20 21:15:40 -07:00
saravanakumardb1
fd4d35b308
feat(backend): add GET /health test to diagnostics suite
...
- Validates standard health response shape: status, service, version, timestamp
- Ensures consistent health endpoint contract across ecosystem
2026-03-20 21:06:56 -07:00
saravanakumardb1
62f94be845
feat(backend): add GET /api/diagnostics/config route + test
...
- Returns sanitized config: productId, serviceName, port, nodeEnv, dbProvider, telemetryEnabled, featureFlagsEnabled
- Integration test validates response shape
2026-03-20 19:36:04 -07:00
saravanakumardb1
95c2f9426a
test(backend): add diagnostics route integration tests
...
- 3 tests: GET /diagnostics/flags, GET /diagnostics/telemetry, POST /diagnostics/telemetry/flush
- All tests pass
2026-03-20 19:28:09 -07:00
saravanakumardb1
d1f2587cc3
feat(backend): add /diagnostics/flags + /diagnostics/telemetry routes
...
- GET /api/diagnostics/flags — returns all feature flags
- GET /api/diagnostics/telemetry — returns buffered telemetry events
- POST /api/diagnostics/telemetry/flush — flush telemetry buffer
- No auth required (diagnostics endpoints)
2026-03-20 19:12:27 -07:00
saravanakumardb1
f2450b6e2e
refactor(web): migrate telemetry + diagnostics to createWebTelemetry/createWebDiagnostics
...
- telemetry.ts: 54 → 42 lines via createWebTelemetry() (keeps product-specific trackTimerEvent)
- diagnostics.ts: 53 → 22 lines via createWebDiagnostics()
- 394/394 web tests pass, typecheck clean
2026-03-20 18:54:11 -07:00
saravanakumardb1
bc735dfdb9
feat(backend): add @bytelyst/backend-flags + backend-telemetry, fix config defaults
...
- Add @bytelyst/backend-flags and @bytelyst/backend-telemetry packages
- Create feature-flags.ts and telemetry.ts wrappers using shared packages
- Add TELEMETRY_ENABLED and FEATURE_FLAGS_ENABLED config fields
- Default DB_PROVIDER to memory (fixes test failures without env vars)
- Add JWT_SECRET dev default and PLATFORM_SERVICE_URL
- 176/176 tests pass
2026-03-20 17:31:01 -07:00
saravanakumardb1
15f34c1c80
feat(ci): add backend CI job with common-plat checkout, upgrade Node to 22
...
- Backend: common-plat checkout, pnpm build, typecheck, 135 tests
- Web: upgrade Node 20→22, add concurrency group
2026-03-20 15:19:28 -07:00
saravanakumardb1
6acc97bf8a
fix(backend): use config.DB_PROVIDER instead of process.env.DB_PROVIDER in datastore.ts
...
- Reads validated DB_PROVIDER from Zod config instead of raw env
- Removes stale isTest fallback logic (now handled by config defaults)
2026-03-20 08:29:36 -07:00
saravanakumardb1
ea508b1fdc
fix(backend): make COSMOS_ENDPOINT/KEY validation conditional on DB_PROVIDER
...
- Only require Cosmos credentials when DB_PROVIDER=cosmos
- Standardize to .refine() pattern matching all other repos
2026-03-20 08:26:07 -07:00
saravanakumardb1
0bda7dd9dc
refactor(backend): migrate config.ts to @bytelyst/backend-config base schema
...
- Extends baseBackendConfigSchema with product-specific overrides
- DB_PROVIDER now declared in all repos (was missing in 3)
2026-03-20 07:56:29 -07:00
saravanakumardb1
a7b0ae9cdc
refactor(backend): migrate auth.ts + request-context.ts to @bytelyst/fastify-auth
...
- auth.ts: 80→18 lines, delegates to createAuthMiddleware()
- request-context.ts: delegates to createRequestContext()
- Re-exports JwtPayload, AuthPayload from shared package
2026-03-20 07:45:58 -07:00
saravanakumardb1
30872465d3
refactor(backend): load product identity from shared/product.json
2026-03-20 07:23:31 -07:00
saravanakumardb1
b4a6c62e15
refactor(backend): remove errors.ts re-export, import @bytelyst/errors directly
2026-03-20 07:19:29 -07:00
saravanakumardb1
c362fa61cf
chore: update dependencies
2026-03-19 21:25:38 -07:00
saravanakumardb1
ead99e7729
feat: add product.json manifest (chronomind, port 4011)
2026-03-19 19:44:05 -07:00
saravanakumardb1
83e54c29be
fix(web): append /api to baseUrl for shared clients
...
getBaseUrl() returns 'http://localhost:4003 ' without /api suffix.
Shared feature-flag-client and subscription-client expect the API
prefix in the URL. Without this fix, requests hit /flags/poll and
/subscriptions/me instead of /api/flags/poll and /api/subscriptions/me.
2026-03-19 17:08:44 -07:00
saravanakumardb1
6dd31490b2
fix(android): complete ChronoMind Android compile fixes — all tests pass
...
- Fix SyncRepository.timerToDTO: timer.pomodoro → timer.pomodoroConfig/pomodoroState
- Fix SyncRepository.dtoToEntity: add missing TimerEntity fields (dismissedAt, snoozedUntil,
snoozeCount, elapsedBeforePause, category), fix non-nullable cascadePreset/cascadeIntervalsJson
- Fix PomodoroDTO field mapping: focusMinutes→workMinutes, shortBreakMinutes→breakMinutes, etc.
- ChronoMind Android now compiles and all tests pass
2026-03-19 17:07:57 -07:00
saravanakumardb1
9f2325078d
fix(android): partial compile fixes for ChronoMind Android
...
- Fix AuthService: add MapSerializer/serializer imports, replace fully-qualified calls
- Fix CMColors: add missing textPrimary and textTertiary tokens
- Fix TimerWidget: add Glance clickable/ColorProvider imports, add night param
- Fix SyncRepository: replace pomodoroJson with individual pomodoro fields
- Note: SyncRepository still has CMTimer model drift errors (deferred)
2026-03-19 17:02:16 -07:00
saravanakumardb1
f49ef788a2
feat(web): migrate billing-client + feature-flags to shared packages
...
- billing-client.ts: hand-rolled fetch → @bytelyst/subscription-client
wrapper with backwards-compatible Subscription type adapter
- feature-flags.ts: hand-rolled polling → @bytelyst/feature-flag-client
(71→42 lines, same public API)
- providers.tsx: remove platform param (now configured at client level)
- ChronoMind-specific usage API stays as local fetch call
2026-03-19 16:52:47 -07:00
saravanakumardb1
b7bb6ec53f
docs: add corporate network/Gradle proxy section to AGENTS.md
2026-03-19 15:22:41 -07:00
saravanakumardb1
c49829cd3e
fix(android): add gradlew + wrapper JAR, fix dependencyResolutionManagement
2026-03-19 15:14:11 -07:00
saravanakumardb1
424e804396
fix(ios): resolve Swift compile errors for iOS 26 / Xcode 26
...
- Fix CloudKitSyncManager deinit concurrency violation
- Replace deprecated List(selection:) with VStack+ForEach sidebar
- Replace removed Animation.none with Animation.linear(duration: 0)
- Fix CountdownRing initializer parameter mismatch
- Unwrap optional timer.duration in ShareableTimerManager and DataExportManager
- Add missing .event case to exhaustive switch
- Change CascadeWarning.scheduledTime from let to var
- Fix CalendarSyncManager CMTimer init (add elapsedBeforePause, remove non-existent params)
- Add missing UserNotifications import in SleepManager
- Remove parameterized App Intents phrases (iOS 26 restriction)
- Temporarily remove watchOS target dependency for iOS build
2026-03-19 14:22:50 -07:00