Commit Graph

203 Commits

Author SHA1 Message Date
saravanakumardb1
d22e73fa0f fix(widgets): add .privacySensitive() to timer label and countdown views 2026-03-27 13:57:15 -07:00
saravanakumardb1
e9e96ba18a fix(e2e): upgrade shallow specs with page.route() API mocking and error state tests 2026-03-27 13:32:05 -07:00
saravanakumardb1
5453cb131a chore(web): add Dockerfile, service worker, and e2e test scaffolds 2026-03-27 11:28:33 -07:00
saravanakumardb1
d179c4c624 feat(watch,mac): complete watchOS + macOS companion targets
- watchOS: add WatchSessionManager (WCSession bridge), WatchNotificationHandler
  (snooze/dismiss actions), recommendations() for AppIntentTimelineProvider
- watchOS: WatchTimerStore tick loop with cascade haptics, App Group sync
- macOS: CreateTimerSheet (countdown/alarm/pomodoro), launch-at-login toggle
- macOS: MenuBarState showCreateSheet, MacSettingsView data tab
- Xcode project updated with new file references
2026-03-27 11:28:13 -07:00
saravanakumardb1
a865b9d655 chore: add standalone docker-compose.yml for local dev 2026-03-26 23:12:22 -07:00
saravanakumardb1
38dbed80ef chore(backend): add eslint config and lint script 2026-03-26 22:59:50 -07:00
saravanakumardb1
2ca292c983 chore: .npmrc use ${GITEA_NPM_HOST}:3300 instead of hardcoded localhost
Enables NETWORK-aware Gitea registry resolution:
- NETWORK=corp → localhost (local Gitea)
- NETWORK=home → Azure VM host (from ~/.gitea_vm_host)

switch-network.sh in common-plat sets GITEA_NPM_HOST accordingly.
Matches existing .npmrc.docker pattern used during Docker builds.
2026-03-24 15:46:33 -07:00
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