learning_ai_common_plat/reports/rule-violations-baseline.md
saravanakumardb1 d5d30ed912 feat(scripts): scanner precision tweaks + Phase 2b complete (8 repos clean)
Scanner refinements eliminate 3 false-positive categories:

1. tailwind.config.{ts,js,cjs,mjs} \u2014 these declare color palettes
   for downstream Tailwind classes; the hex is the definition.
2. **/backend/** files \u2014 backend modules don't do UI styling. Hex
   values there are domain data (theme presets, zone colors, agent
   accent colors) stored in Cosmos / sent to clients as data.
3. /tools/{color-picker,markdown-preview,qr-code,image-to-base64,
   regex-tester}/ pages in productivity_web \u2014 these tools manipulate
   hex/color values as their primary content, not for styling.
4. HTML numeric character references like 📄 \u2014 they encode
   Unicode characters, not hex colors (digits subset of hex fool regex).
5. themeColor: metadata in Next.js layouts (PWA manifest spec).

Phase 2b fixes pushed to:
- learning_ai_jarvis_jr        (1 hex \u2192 0)  commit bf9e1c7
- oss/learning_ai_claw-cowork  (2 real hex \u2192 0) commit 9017dd8
(productivity_web 9 \u2192 0 and voice_ai_agent 16 \u2192 0 cleared automatically
by the scanner refinement, no source changes needed in those repos.)

Cumulative progress:
  Total findings:  2548 (Phase 0 start) \u2192 1577 (-38%)
  web-hardcoded-hex: 465 \u2192 406 (-13%)

Repos at 0 hex findings (8/19):
- learning_ai_smart_auth     learning_ai_auth_app
- learning_ai_talk2obsidian  learning_ai_local_memory_gpt
- learning_ai_trails         learning_ai_local_llms
- learning_ai_jarvis_jr      learning_ai_productivity_web
- learning_voice_ai_agent    oss/learning_ai_claw-cowork

Remaining hex-heavy repos:
- learning_ai_flowmonk           107
- learning_multimodal_memory      94
- learning_ai_fastgap             89
- learning_ai_common_plat         59
- learning_ai_efforise            39
- learning_ai_mac_tooling         18
2026-05-23 14:23:55 -07:00

1694 lines
166 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Rule Violations Report — 2026-05-23
> Generated by `scripts/check-rule-violations.sh` against canonical rules in
> [`AI.dev/SKILLS/agent-behavior-guidelines.md`](../AI.dev/SKILLS/agent-behavior-guidelines.md).
Severity legend: **critical** = data/security risk · **major** = rule violation · **minor** = style
## `learning_ai_common_plat`
**Counts:** critical=0 · major=139 · minor=86 · total=225
- **[major]** `packages/logger/src/logger.ts:40` — console.log: console.log(`${prefix} ${message}${extras}`);
- **[major]** `packages/create-app/src/scaffolder.ts:60` — console.log: console.log(`
- **[major]** `packages/create-app/src/scaffolder.ts:115` — console.log: console.log('\n📦 ByteLyst Product Scaffolder\n');
- **[major]** `packages/create-app/src/scaffolder.ts:126` — console.log: console.log('\nPlatforms (comma-separated: web, mobile, ios, android)');
- **[major]** `packages/create-app/src/scaffolder.ts:135` — console.log: console.log('\nFeatures (comma-separated: auth, billing, telemetry, flags, syn
- **[major]** `packages/create-app/src/scaffolder.ts:257` — console.log: console.log(`\n🚀 Scaffolding ${manifest.displayName}`);
- **[major]** `packages/create-app/src/scaffolder.ts:259` — console.log: console.log(` Product ID: ${manifest.productId}`);
- **[major]** `packages/create-app/src/scaffolder.ts:261` — console.log: console.log(` Output: ${outPath}`);
- **[major]** `packages/create-app/src/scaffolder.ts:263` — console.log: console.log(` Platforms: ${manifest.platforms.join(', ')}`);
- **[major]** `packages/create-app/src/scaffolder.ts:265` — console.log: console.log(` Features: ${manifest.features.join(', ')}`);
- **[major]** `packages/create-app/src/scaffolder.ts:268` — console.log: console.log(' ⚠️ DRY RUN\n');
- **[major]** `packages/create-app/src/scaffolder.ts:275` — console.log: console.log(`📄 ${files.length} files would be generated:\n`);
- **[major]** `packages/create-app/src/scaffolder.ts:278` — console.log: console.log(`── ${file.path} ──────────────────────────────────────`);
- **[major]** `packages/create-app/src/scaffolder.ts:280` — console.log: console.log(file.content);
- **[major]** `packages/create-app/src/scaffolder.ts:283` — console.log: console.log(`\n✨ Dry run complete. Re-run without --dry-run to write files.`
- **[major]** `packages/create-app/src/scaffolder.ts:293` — console.log: console.log(` ✅ ${file.path}`);
- **[major]** `packages/create-app/src/scaffolder.ts:297` — console.log: console.log(`\n✨ ${manifest.displayName} scaffolded at ${outPath}`);
- **[major]** `packages/create-app/src/scaffolder.ts:299` — console.log: console.log(`\nNext steps:`);
- **[major]** `packages/create-app/src/scaffolder.ts:301` — console.log: console.log(` cd ${outDir}/backend && npm install && npm run dev`);
- **[major]** `packages/create-app/src/scaffolder.ts:304` — console.log: console.log(` cd ${outDir}/web && npm install && npm run dev`);
- **[major]** `packages/create-app/src/generators/agents-md.ts:49` — console.log: console.log(`
- **[major]** `packages/create-app/src/generators/agents-md.ts:528` — console.log: console.log(` 📝 Would create symlink: ${target} → AGENTS.md`);
- **[major]** `packages/create-app/src/generators/agents-md.ts:533` — console.log: console.log(` ✅ ${target} → AGENTS.md`);
- **[major]** `packages/create-app/src/generators/agents-md.ts:535` — console.log: console.log(
- **[major]** `packages/create-app/src/generators/agents-md.ts:549` — console.log: console.log(`\n📄 AGENTS.md Generator`);
- **[major]** `packages/create-app/src/generators/agents-md.ts:550` — console.log: console.log(` Repo: ${repoPath}`);
- **[major]** `packages/create-app/src/generators/agents-md.ts:551` — console.log: if (dryRun) console.log(' ⚠️ DRY RUN — no files will be written\n');
- **[major]** `packages/create-app/src/generators/agents-md.ts:552` — console.log: if (update) console.log(' 🔄 UPDATE mode — preserving custom sections\n');
- **[major]** `packages/create-app/src/generators/agents-md.ts:556` — console.log: console.log(` Product: ${manifest.displayName} (${manifest.productId})`);
- **[major]** `packages/create-app/src/generators/agents-md.ts:560` — console.log: console.log(` Backend modules: ${info.backendModules.length}`);
- **[major]** `packages/create-app/src/generators/agents-md.ts:561` — console.log: console.log(` Tests: ~${info.backendTestCount + info.webTestCount + info.mob
- **[major]** `packages/create-app/src/generators/agents-md.ts:562` — console.log: console.log('');
- **[major]** `packages/create-app/src/generators/agents-md.ts:574` — console.log: console.log(` 🔄 Preserving ${customSections.size} custom section(s)`);
- **[major]** `packages/create-app/src/generators/agents-md.ts:578` — console.log: console.log(' No existing AGENTS.md to preserve custom sections from
- **[major]** `packages/create-app/src/generators/agents-md.ts:583` — console.log: console.log('── AGENTS.md ──────────────────────────────────────');
- **[major]** `packages/create-app/src/generators/agents-md.ts:584` — console.log: console.log(content);
- **[major]** `packages/create-app/src/generators/agents-md.ts:585` — console.log: console.log('\n── Symlinks ──────────────────────────────────────');
- **[major]** `packages/create-app/src/generators/agents-md.ts:587` — console.log: console.log('\n✨ Dry run complete.');
- **[major]** `packages/create-app/src/generators/agents-md.ts:594` — console.log: console.log(` ✅ AGENTS.md written`);
- **[major]** `packages/create-app/src/generators/agents-md.ts:599` — console.log: console.log(`\n✨ AGENTS.md generated for ${manifest.displayName}.`);
- **[major]** `packages/create-app/src/generators/api-routes.ts:92` — console.log: console.log(`
- **[major]** `packages/create-app/src/generators/api-routes.ts:670` — console.log: console.log(`\n🚀 Generating API routes: ${name}`);
- **[major]** `packages/create-app/src/generators/api-routes.ts:671` — console.log: console.log(` Mode: ${mode}`);
- **[major]** `packages/create-app/src/generators/api-routes.ts:672` — console.log: console.log(` Methods: ${methods.join(', ')}`);
- **[major]** `packages/create-app/src/generators/api-routes.ts:673` — console.log: console.log(` Target: ${target}`);
- **[major]** `packages/create-app/src/generators/api-routes.ts:674` — console.log: if (fields) console.log(` Fields: ${fields}`);
- **[major]** `packages/create-app/src/generators/api-routes.ts:675` — console.log: if (dryRun) console.log(' ⚠️ DRY RUN — no files will be written\n');
- **[major]** `packages/create-app/src/generators/api-routes.ts:725` — console.log: console.log('📄 Generated files:\n');
- **[major]** `packages/create-app/src/generators/api-routes.ts:727` — console.log: console.log(`── ${file.path} ──────────────────────────────────────`);
- **[major]** `packages/create-app/src/generators/api-routes.ts:728` — console.log: console.log(file.content);
- **[major]** `packages/create-app/src/generators/api-routes.ts:730` — console.log: console.log(`\n✨ Dry run complete. Re-run without --dry-run to write files.`
- **[major]** `packages/create-app/src/generators/api-routes.ts:742` — console.log: console.log(` ⚠️ SKIP ${file.path} (already exists)`);
- **[major]** `packages/create-app/src/generators/api-routes.ts:749` — console.log: console.log(` ✅ ${file.path}`);
- **[major]** `packages/create-app/src/generators/api-routes.ts:752` — console.log: console.log(`\n✨ API routes generated for "${name}".`);
- **[major]** `packages/create-app/src/generators/api-routes.ts:754` — console.log: console.log(`\nPrerequisites (if not already present):`);
- **[major]** `packages/create-app/src/generators/api-routes.ts:755` — console.log: console.log(` - lib/auth-server.ts — getCurrentUser(authHeader) function`)
- **[major]** `packages/create-app/src/generators/api-routes.ts:756` — console.log: console.log(` - lib/api-handler.ts — withErrorHandler HOF`);
- **[major]** `packages/create-app/src/generators/api-routes.ts:757` — console.log: console.log(` - lib/datastore.ts — getCosmosContainer + PRODUCT_ID`);
- **[major]** `packages/create-app/src/generators/api-routes.ts:758` — console.log: console.log(` - zod installed — npm install zod`);
- **[major]** `packages/create-app/src/generators/api-routes.ts:760` — console.log: console.log(`\nPrerequisites (if not already present):`);
- **[major]** `packages/create-app/src/generators/api-routes.ts:761` — console.log: console.log(` - lib/api-helpers.ts — getAccessToken(req) function`);
- **[major]** `packages/create-app/src/generators/api-routes.ts:762` — console.log: console.log(` - lib/api-handler.ts — withErrorHandler HOF`);
- **[major]** `packages/create-app/src/generators/api-routes.ts:763` — console.log: console.log(` - NEXT_PUBLIC_BACKEND_URL env var (or defaults to localhost:
- **[major]** `packages/mcp-client/src/index.ts:51` — console.log: console.log(
- **[major]** `packages/mcp-client/src/index.ts:76` — console.log: console.log('[MCP] Successfully connected to MCP server');
- **[major]** `packages/mcp-client/src/index.ts:102` — console.log: console.log('[MCP] Disconnected from MCP server');
- **[major]** `packages/mcp-client/src/index.ts:155` — console.log: console.log(`[MCP] Tool ${toolName} executed successfully`);
- **[major]** `packages/mcp-client/src/index.ts:321` — console.log: console.log(`[MCP-AUDIT] Tool called: ${toolName}, Args: ${JSON.stringify(sa
- **[major]** `packages/mcp-client/src/index.ts:325` — console.log: console.log(`[MCP-AUDIT] Tool succeeded: ${toolName}`);
- **[major]** `services/extraction-service/src/modules/extract/product-rate-limit.ts:408` — console.log: console.log(`[product-rate-limit] Cleaned up ${cleaned} expired entries`
- **[major]** `services/extraction-service/src/modules/extract/sidecar-monitor.ts:295` — console.log: console.log(
- **[major]** `services/monitoring/health-check.ts:39` — console.log: console.log(`🩺 Monitoring dashboard running on http://localhost:${PORT}`);
- **[major]** `services/monitoring/health-check.ts:40` — console.log: console.log(` Checking ${DEFAULT_SERVICES.length} services every request`)
- **[major]** `services/monitoring/health-check.ts:46` — console.log: console.log(`\n${icon[report.overall]} Overall: ${report.overall.toUpperCase()
- **[major]** `services/monitoring/health-check.ts:50` — console.log: console.log(
- **[major]** `services/monitoring/health-check.ts:55` — console.log: console.log(`\nHealthy: ${report.summary.healthy}/${report.summary.total}`);
- **[major]** `packages/swift-diagnostics/Sources/ByteLystDiagnostics/Core/Configuration.swift:88` — Swift print(): print("[DEBUG] \(message)")
- **[major]** `packages/swift-diagnostics/Sources/ByteLystDiagnostics/Core/Configuration.swift:93` — Swift print(): print("[INFO] \(message)")
- **[major]** `packages/swift-diagnostics/Sources/ByteLystDiagnostics/Core/Configuration.swift:97` — Swift print(): print("[WARN] \(message)")
- **[major]** `packages/swift-diagnostics/Sources/ByteLystDiagnostics/Core/Configuration.swift:101` — Swift print(): print("[ERROR] \(message)")
- **[minor]** `dashboards/admin-web/src/app/(dashboard)/ops/ab-testing/page.tsx:135` — any type: return <Badge variant={config.variant as any}>{config.label}</Badge>;
- **[minor]** `packages/mcp-client/src/index.ts:16` — any type: inputSchema?: any;
- **[minor]** `packages/mcp-client/src/index.ts:20` — any type: data: any;
- **[minor]** `packages/mcp-client/src/index.ts:77` — any type: } catch (error: any) {
- **[minor]** `packages/mcp-client/src/index.ts:103` — any type: } catch (error: any) {
- **[minor]** `packages/mcp-client/src/index.ts:109` — any type: async callTool(toolName: string, args: any = {}): Promise<any> {
- **[minor]** `packages/mcp-client/src/index.ts:143` — any type: const response = result.content as any[];
- **[minor]** `packages/mcp-client/src/index.ts:160` — any type: } catch (error: any) {
- **[minor]** `packages/mcp-client/src/index.ts:190` — any type: return response.tools.map((tool: any) => ({
- **[minor]** `packages/mcp-client/src/index.ts:195` — any type: } catch (error: any) {
- **[minor]** `packages/mcp-client/src/index.ts:225` — any type: private getCacheKey(toolName: string, args: any): string {
- **[minor]** `packages/mcp-client/src/index.ts:229` — any type: private getFromCache(key: string): any | null {
- **[minor]** `packages/mcp-client/src/index.ts:244` — any type: private setCache(key: string, data: any): void {
- **[minor]** `packages/mcp-client/src/index.ts:269` — any type: private isNonRetriableError(error: any): boolean {
- **[minor]** `packages/mcp-client/src/index.ts:318` — any type: private auditLogToolCall(toolName: string, args: any): void {
- **[minor]** `packages/mcp-client/src/index.ts:332` — any type: private sanitizeArgs(args: any): any {
- **[minor]** `services/platform-service/src/server.ts:304` — any type: const auth = (request as any).auth;
- **[minor]** `services/platform-service/src/server.ts:335` — any type: } catch (error: any) {
- **[minor]** `services/extraction-service/src/modules/transcribe/routes.ts:5` — any type: * Product-agnostic: any product backend can call this endpoint.
- **[major]** `dashboards/admin-web/src/app/api/themes/active/route.ts:30` — Hardcoded hex color: #5A8CFF
- **[major]** `dashboards/admin-web/src/app/login/page.tsx:205` — Hardcoded hex color: #4285F4
- **[major]** `dashboards/admin-web/src/app/login/page.tsx:209` — Hardcoded hex color: #34A853
- **[major]** `dashboards/admin-web/src/app/login/page.tsx:213` — Hardcoded hex color: #FBBC05
- **[major]** `dashboards/admin-web/src/app/login/page.tsx:217` — Hardcoded hex color: #EA4335
- **[major]** `dashboards/admin-web/src/components/ThemeEditor.tsx:78` — Hardcoded hex color: #5A8CFF
- **[major]** `dashboards/admin-web/src/components/ThemeEditor.tsx:127` — Hardcoded hex color: #5A8CFF
- **[major]** `dashboards/tracker-web/src/app/health/page.tsx:43` — Hardcoded hex color: #dc2626
- **[major]** `dashboards/tracker-web/src/app/health/page.tsx:56` — Hardcoded hex color: #6b7280
- **[major]** `dashboards/tracker-web/src/app/health/page.tsx:61` — Hardcoded hex color: #16a34a
- **[major]** `dashboards/tracker-web/src/app/health/page.tsx:74` — Hardcoded hex color: #e5e7eb
- **[major]** `dashboards/tracker-web/src/app/health/page.tsx:82` — Hardcoded hex color: #e5e7eb
- **[major]** `dashboards/tracker-web/src/app/health/page.tsx:85` — Hardcoded hex color: #6b7280
- **[major]** `dashboards/tracker-web/src/app/login/page.tsx:310` — Hardcoded hex color: #4285F4
- **[major]** `dashboards/tracker-web/src/app/login/page.tsx:314` — Hardcoded hex color: #34A853
- **[major]** `dashboards/tracker-web/src/app/login/page.tsx:318` — Hardcoded hex color: #FBBC05
- **[major]** `dashboards/tracker-web/src/app/login/page.tsx:322` — Hardcoded hex color: #EA4335
- **[major]** `packages/ui/.storybook/preview.ts:8` — Hardcoded hex color: #06070A
- **[major]** `packages/ui/.storybook/preview.ts:9` — Hardcoded hex color: #0E1118
- **[major]** `packages/ui/.storybook/preview.ts:10` — Hardcoded hex color: #F8F9FC
- **[major]** `packages/devops/src/ui.tsx:409` — Hardcoded hex color: #10b981
- **[major]** `packages/devops/src/ui.tsx:410` — Hardcoded hex color: #10b981
- **[major]** `packages/devops/src/ui.tsx:413` — Hardcoded hex color: #ef4444
- **[major]** `packages/devops/src/ui.tsx:414` — Hardcoded hex color: #ef4444
- **[major]** `packages/config/src/product-manifest.ts:23` — Hardcoded hex color: #5AE68C
- **[major]** `packages/config/src/product-manifest.ts:229` — Hardcoded hex color: #5AE68C
- **[major]** `packages/config/src/product-manifest.ts:230` — Hardcoded hex color: #5A8CFF
- **[major]** `packages/config/src/product-manifest.ts:231` — Hardcoded hex color: #2EE6D6
- **[major]** `packages/config/src/product-manifest.ts:232` — Hardcoded hex color: #06070A
- **[major]** `packages/config/src/product-manifest.ts:233` — Hardcoded hex color: #121725
- **[major]** `packages/config/src/product-manifest.ts:234` — Hardcoded hex color: #EFF4FF
- **[major]** `packages/config/src/product-manifest.ts:235` — Hardcoded hex color: #FF6E6E
- **[major]** `packages/config/src/product-manifest.ts:236` — Hardcoded hex color: #F59E0B
- **[major]** `packages/config/src/product-manifest.ts:237` — Hardcoded hex color: #34D399
- **[major]** `packages/auth-ui/src/VerifyEmailForm.tsx:85` — Hardcoded hex color: #fff
- **[major]** `packages/auth-ui/src/MfaChallenge.tsx:82` — Hardcoded hex color: #fff
- **[major]** `packages/auth-ui/src/ForgotPasswordForm.tsx:80` — Hardcoded hex color: #fff
- **[major]** `packages/auth-ui/src/LoginForm.tsx:80` — Hardcoded hex color: #fff
- **[major]** `packages/auth-ui/src/RegisterForm.tsx:192` — Hardcoded hex color: #fff
- **[major]** `packages/auth-ui/src/ResetPasswordForm.tsx:119` — Hardcoded hex color: #fff
- **[major]** `packages/auth-ui/src/OnboardingShell.tsx:137` — Hardcoded hex color: #fff
- **[major]** `packages/dashboard-shell/src/TopBar.tsx:114` — Hardcoded hex color: #fff
- **[major]** `packages/dashboard-shell/src/ProfilePage.tsx:52` — Hardcoded hex color: #fff
- **[major]** `packages/dashboard-shell/src/ProfilePage.tsx:138` — Hardcoded hex color: #fff
- **[major]** `packages/create-app/src/lib/templates.ts:455` — Hardcoded hex color: #666
- **[major]** `services/platform-service/src/modules/status/routes.ts:33` — Hardcoded hex color: #f7f4ec
- **[major]** `services/platform-service/src/modules/delivery/templates.ts:205` — Hardcoded hex color: #dc3545
- **[major]** `services/platform-service/src/modules/themes/routes.ts:24` — Hardcoded hex color: #4caf50
- **[major]** `services/platform-service/src/modules/themes/routes.ts:25` — Hardcoded hex color: #2e7d32
- **[major]** `services/platform-service/src/modules/themes/routes.ts:26` — Hardcoded hex color: #66bb6a
- **[major]** `services/platform-service/src/modules/themes/routes.ts:27` — Hardcoded hex color: #ffffff
- **[major]** `services/platform-service/src/modules/themes/routes.ts:28` — Hardcoded hex color: #f5f5f5
- **[major]** `services/platform-service/src/modules/themes/routes.ts:29` — Hardcoded hex color: #f44336
- **[major]** `services/platform-service/src/modules/themes/routes.ts:30` — Hardcoded hex color: #ff9800
- **[major]** `services/platform-service/src/modules/themes/routes.ts:31` — Hardcoded hex color: #4caf50
- **[major]** `services/platform-service/src/modules/themes/routes.ts:36` — Hardcoded hex color: #4caf50
- **[major]** `services/platform-service/src/modules/themes/routes.ts:37` — Hardcoded hex color: #e94560
- **[major]** `services/platform-service/src/modules/themes/routes.ts:38` — Hardcoded hex color: #f5a623
- **[major]** `services/platform-service/src/modules/themes/routes.ts:39` — Hardcoded hex color: #9e9e9e
- **[minor]** `dashboards/admin-web/src/app/(dashboard)/surveys/[id]/page.tsx:21` — Emoji in code: 📊
- **[minor]** `dashboards/admin-web/src/app/(dashboard)/surveys/[id]/page.tsx:22` — Emoji in code: 📝
- **[minor]** `dashboards/admin-web/src/app/(dashboard)/surveys/[id]/page.tsx:23` — Emoji in code: 📄
- **[minor]** `dashboards/tracker-web/src/app/roadmap/page.tsx:513` — Emoji in code: 💬
- **[minor]** `dashboards/tracker-web/src/app/roadmap/page.tsx:569` — Emoji in code: 💬
- **[minor]** `dashboards/tracker-web/src/app/dashboard/items/[id]/page.tsx:232` — Emoji in code: 🌐
- **[minor]** `scripts/encrypt-migrate.ts:507` — Emoji in code: 📦
- **[minor]** `scripts/encrypt-migrate.ts:510` — Emoji in code: 🔐
- **[minor]** `scripts/encrypt-migrate.ts:589` — Emoji in code: 🏢
- **[minor]** `packages/dashboard-shell/src/TopBar.tsx:80` — Emoji in code: 🔔
- **[minor]** `packages/celebrations/src/index.ts:7` — Emoji in code: 👏
- **[minor]** `packages/celebrations/src/index.ts:12` — Emoji in code: 🎉
- **[minor]** `packages/celebrations/src/index.ts:14` — Emoji in code: 🔥
- **[minor]** `packages/celebrations/src/index.ts:15` — Emoji in code: 🏆
- **[minor]** `packages/swift-platform-sdk/Tests/BLFieldEncryptTests.swift:32` — Emoji in code: 🌍
- **[minor]** `packages/create-app/src/scaffolder.ts:115` — Emoji in code: 📦
- **[minor]** `packages/create-app/src/scaffolder.ts:257` — Emoji in code: 🚀
- **[minor]** `packages/create-app/src/scaffolder.ts:275` — Emoji in code: 📄
- **[minor]** `packages/create-app/src/generators/agents-md.ts:528` — Emoji in code: 📝
- **[minor]** `packages/create-app/src/generators/agents-md.ts:549` — Emoji in code: 📄
- **[minor]** `packages/create-app/src/generators/agents-md.ts:552` — Emoji in code: 🔄
- **[minor]** `packages/create-app/src/generators/agents-md.ts:574` — Emoji in code: 🔄
- **[minor]** `packages/create-app/src/generators/api-routes.ts:670` — Emoji in code: 🚀
- **[minor]** `packages/create-app/src/generators/api-routes.ts:725` — Emoji in code: 📄
- **[minor]** `packages/time-references/src/client.ts:16` — Emoji in code: 🎵
- **[minor]** `packages/time-references/src/client.ts:23` — Emoji in code: 📺
- **[minor]** `packages/time-references/src/client.ts:24` — Emoji in code: 🚶
- **[minor]** `packages/time-references/src/client.ts:31` — Emoji in code: 🧘
- **[minor]** `packages/time-references/src/client.ts:32` — Emoji in code: 📺
- **[minor]** `packages/time-references/src/client.ts:39` — Emoji in code: 🎬
- **[minor]** `packages/time-references/src/client.ts:40` — Emoji in code: 🚴
- **[minor]** `packages/time-references/src/client.ts:47` — Emoji in code: 🚗
- **[minor]** `packages/time-references/src/client.ts:48` — Emoji in code: 📺
- **[minor]** `packages/time-references/src/client.ts:55` — Emoji in code: 💼
- **[minor]** `packages/time-references/src/client.ts:56` — Emoji in code: 😴
- **[minor]** `packages/time-references/src/client.ts:64` — Emoji in code: 🌅
- **[minor]** `packages/time-references/src/client.ts:74` — Emoji in code: 🧙
- **[minor]** `packages/time-references/src/client.ts:83` — Emoji in code: 🌍
- **[minor]** `packages/time-references/src/client.ts:84` — Emoji in code: 🥾
- **[minor]** `packages/time-references/src/client.ts:91` — Emoji in code: 🏆
- **[minor]** `packages/time-references/src/client.ts:99` — Emoji in code: 🌟
- **[minor]** `packages/time-references/src/index.ts:11` — Emoji in code: 🎬
- **[minor]** `packages/time-references/src/index.ts:17` — Emoji in code: 🌙
- **[minor]** `packages/time-references/src/index.ts:20` — Emoji in code: 🏔
- **[minor]** `packages/time-references/src/index.ts:23` — Emoji in code: 🌍
- **[minor]** `packages/time-references/src/index.ts:26` — Emoji in code: 🚂
- **[minor]** `packages/time-references/src/index.ts:31` — Emoji in code: 🏕
- **[minor]** `services/mcp-server/src/modules/dev/changelog-tools.ts:156` — Emoji in code: 📊
- **[minor]** `services/mcp-server/src/modules/dev/changelog-tools.ts:164` — Emoji in code: 🚨
- **[minor]** `services/mcp-server/src/modules/dev/changelog-tools.ts:183` — Emoji in code: 🐛
- **[minor]** `services/mcp-server/src/modules/dev/changelog-tools.ts:185` — Emoji in code: 📚
- **[minor]** `services/mcp-server/src/modules/dev/changelog-tools.ts:186` — Emoji in code: 🧪
- **[minor]** `services/mcp-server/src/modules/dev/changelog-tools.ts:187` — Emoji in code: 🔧
- **[minor]** `services/mcp-server/src/modules/dev/changelog-tools.ts:189` — Emoji in code: 🎨
- **[minor]** `services/mcp-server/src/modules/dev/changelog-tools.ts:190` — Emoji in code: 🔄
- **[minor]** `services/mcp-server/src/modules/dev/changelog-tools.ts:191` — Emoji in code: 📝
- **[minor]** `services/platform-service/scripts/gen-module.ts:515` — Emoji in code: 📝
- **[minor]** `services/platform-service/scripts/gen-module.ts:551` — Emoji in code: 📝
- **[minor]** `services/platform-service/scripts/gen-module.ts:608` — Emoji in code: 🚀
- **[minor]** `services/platform-service/scripts/gen-module.ts:636` — Emoji in code: 📄
- **[minor]** `services/platform-service/src/modules/predictive-analytics/campaign-engine.ts:451` — Emoji in code: 🚨
- **[minor]** `services/platform-service/src/modules/diagnostics/auto-triggers.ts:393` — Emoji in code: 🚨
- **[minor]** `services/platform-service/src/modules/diagnostics/auto-triggers.ts:427` — Emoji in code: 🚨
- **[minor]** `services/platform-service/src/modules/delivery/templates.ts:203` — Emoji in code: 🚨
- **[minor]** `services/platform-service/src/modules/delivery/templates.ts:205` — Emoji in code: 🚨
- **[minor]** `services/platform-service/src/modules/delivery/templates.ts:214` — Emoji in code: 🚨
- **[minor]** `services/monitoring/health-check.ts:39` — Emoji in code: 🩺
## `learning_voice_ai_agent`
**Counts:** critical=2 · major=5 · minor=89 · total=96
- **[major]** `src/audio/sounds.py:115` — Python print(): print("\a", end="", flush=True)
- **[major]** `src/audio/sounds.py:120` — Python print(): print("\a", end="", flush=True)
- **[major]** `src/hotkey/fn_listener.py:93` — Python print(): print(
- **[major]** `src/cli_output.py:30` — Python print(): print(message) # noqa: T201 — intentional CLI output
- **[major]** `src/cli_output.py:36` — Python print(): print(message, file=sys.stderr) # noqa: T201 — intentional CLI output
- **[minor]** `user-dashboard-web/src/lib/api-handler.ts:10` — any type: type RouteHandler = (req: NextRequest, ctx: any) => Promise<Response | NextRespo
- **[critical]** `scripts/churn-alert.ts:25` Hardcoded product ID: const PRODUCT_ID = "lysnrai";
- **[critical]** `scripts/churn-alert.ts:44` Hardcoded product ID: database: process.env.COSMOS_DATABASE || "lysnrai",
- **[minor]** `mobile_app/ios/LysnrKeyboard/KeyboardViewController.swift:572` Emoji in code: 🌐
- **[minor]** `mobile_app/ios/LysnrAI/Views/SessionDetailView.swift:759` Emoji in code: 👍
- **[minor]** `mobile_app/common/kill_switch.py:58` Emoji in code: 📱
- **[minor]** `mobile_app/common/kill_switch.py:66` Emoji in code: 🛑
- **[minor]** `user-dashboard-web/src/app/(portal)/sessions/[id]/page.tsx:932` Emoji in code: 👍
- **[minor]** `scripts/test_stress.py:46` Emoji in code: 🏋
- **[minor]** `scripts/test_stress.py:110` Emoji in code: 📊
- **[minor]** `scripts/test_security.py:136` Emoji in code: 🔒
- **[minor]** `scripts/test_security.py:140` Emoji in code: 🔑
- **[minor]** `scripts/test_security.py:148` Emoji in code: 📝
- **[minor]** `scripts/test_security.py:156` Emoji in code: 📁
- **[minor]** `scripts/test_security.py:163` Emoji in code: 💥
- **[minor]** `scripts/test_security.py:176` Emoji in code: 🔐
- **[minor]** `scripts/churn-alert.ts:196` Emoji in code: 📊
- **[minor]** `scripts/churn-alert.ts:206` Emoji in code: 🔵
- **[minor]** `scripts/churn-alert.ts:229` Emoji in code: 🔍
- **[minor]** `scripts/test_multi_app_paste.py:75` Emoji in code: 🧪
- **[minor]** `scripts/test_multi_app_paste.py:92` Emoji in code: 📋
- **[minor]** `scripts/prove_kill_switch.py:97` Emoji in code: 🔌
- **[minor]** `scripts/prove_kill_switch.py:108` Emoji in code: 📖
- **[minor]** `scripts/prove_kill_switch.py:119` Emoji in code: 🔴
- **[minor]** `scripts/test_ui_crossplatform.py:42` Emoji in code: 🖥
- **[minor]** `scripts/test_ui_crossplatform.py:46` Emoji in code: 🪟
- **[minor]** `scripts/test_ui_crossplatform.py:60` Emoji in code: 🎯
- **[minor]** `scripts/test_ui_crossplatform.py:96` Emoji in code: 🎨
- **[minor]** `scripts/test_ui_crossplatform.py:126` Emoji in code: 🔧
- **[minor]** `scripts/prove_cosmos_rw.py:92` Emoji in code: 📖
- **[minor]** `scripts/prove_cosmos_rw.py:100` Emoji in code: 🗑
- **[minor]** `scripts/prove_cosmos_rw.py:111` Emoji in code: 🔬
- **[minor]** `scripts/test_accessibility.py:45` Emoji in code: 📢
- **[minor]** `scripts/test_accessibility.py:57` Emoji in code: 🎨
- **[minor]** `scripts/test_accessibility.py:80` Emoji in code: 🎯
- **[minor]** `scripts/test_accessibility.py:92` Emoji in code: 🪟
- **[minor]** `scripts/test_accessibility.py:102` Emoji in code: 🔊
- **[minor]** `scripts/test_accessibility.py:113` Emoji in code: 📏
- **[minor]** `assets/generate-store-assets.py:165` Emoji in code: 📱
- **[minor]** `assets/generate-store-assets.py:214` Emoji in code: 🎙
- **[minor]** `assets/generate-store-assets.py:443` Emoji in code: 🔑
- **[minor]** `assets/generate-store-assets.py:444` Emoji in code: 🚪
- **[minor]** `assets/generate-store-assets.py:447` Emoji in code: 🌐
- **[minor]** `assets/generate-store-assets.py:448` Emoji in code: 🎛
- **[minor]** `assets/generate-store-assets.py:449` Emoji in code: 🔊
- **[minor]** `assets/generate-store-assets.py:450` Emoji in code: 📋
- **[minor]** `assets/generate-store-assets.py:512` Emoji in code: 🔍
- **[minor]** `assets/generate-store-assets.py:581` Emoji in code: 📸
- **[minor]** `assets/generate-store-assets.py:623` Emoji in code: 🎨
- **[minor]** `assets/generate-store-assets.py:670` Emoji in code: 💫
- **[minor]** `assets/generate-store-assets.py:731` Emoji in code: 📁
- **[minor]** `src/main.py:150` Emoji in code: 🎙
- **[minor]** `src/main.py:154` Emoji in code: 🎙
- **[minor]** `src/main.py:234` Emoji in code: 🎙
- **[minor]** `src/main.py:310` Emoji in code: 🔵
- **[minor]** `src/main.py:324` Emoji in code: 🔇
- **[minor]** `src/main.py:326` Emoji in code: 🔴
- **[minor]** `src/main.py:331` Emoji in code: 🔴
- **[minor]** `src/main.py:682` Emoji in code: 📎
- **[minor]** `src/main.py:692` Emoji in code: 📎
- **[minor]** `src/main.py:883` Emoji in code: 📝
- **[minor]** `src/main.py:900` Emoji in code: 📝
- **[minor]** `src/main.py:1200` Emoji in code: 🧙
- **[minor]** `src/main.py:1225` Emoji in code: 🛑
- **[minor]** `src/main.py:1292` Emoji in code: 🛑
- **[minor]** `src/main.py:1306` Emoji in code: 👋
- **[minor]** `src/ui/overlay.py:238` Emoji in code: 🔴
- **[minor]** `src/ui/overlay.py:475` Emoji in code: 🔄
- **[minor]** `src/ui/history_viewer.py:72` Emoji in code: 🔍
- **[minor]** `src/ui/first_run.py:161` Emoji in code: 🎙
- **[minor]** `src/ui/macos_menubar.py:37` Emoji in code: 🎙
- **[minor]** `src/ui/macos_menubar.py:38` Emoji in code: 🔴
- **[minor]** `src/ui/macos_menubar.py:40` Emoji in code: 📡
- **[minor]** `src/ui/macos_menubar.py:119` Emoji in code: 🎙
- **[minor]** `src/ui/tray.py:136` Emoji in code: 🎙
- **[minor]** `src/ui/stats_dashboard.py:78` Emoji in code: 📊
- **[minor]** `src/ui/about.py:59` Emoji in code: 🎙
- **[minor]** `src/ui/update_dialog.py:47` Emoji in code: 🔄
- **[minor]** `src/ui/unified_window.py:166` Emoji in code: 🎙
- **[minor]** `src/ui/unified_window.py:172` Emoji in code: 📜
- **[minor]** `src/ui/unified_window.py:173` Emoji in code: 📊
- **[minor]** `src/ui/unified_window.py:250` Emoji in code: 🗣
- **[minor]** `src/ui/unified_window.py:260` Emoji in code: 🤖
- **[minor]** `src/ui/unified_window.py:273` Emoji in code: 🎛
- **[minor]** `src/ui/unified_window.py:1028` Emoji in code: 🎙
- **[minor]** `src/ui/unified_window.py:1029` Emoji in code: 📝
- **[minor]** `src/ui/unified_window.py:1031` Emoji in code: 🔥
- **[minor]** `src/ui/unified_window.py:1140` Emoji in code: 🌐
- **[minor]** `src/ui/unified_window.py:1347` Emoji in code: 🎙
- **[minor]** `src/hotkey/fn_listener.py:3` Emoji in code: 🌐
- **[minor]** `src/hotkey/fn_listener.py:8` Emoji in code: 🌐
## `learning_multimodal_memory_agents`
**Counts:** critical=11 · major=95 · minor=32 · total=138
- **[major]** `mindlyst-native/iosApp/Models/MemoryStore.swift:64` Swift print(): print("[MemoryStore] Failed to persist items: \(error)")
- **[major]** `mindlyst-native/iosApp/Models/MemoryStore.swift:76` Swift print(): print("[MemoryStore] Failed to decode stored items: \(error)")
- **[major]** `mindlyst-native/iosApp/Screens/CaptureScreen.swift:143` Swift print(): print("[CaptureScreen] Failed to persist to plat
- **[minor]** `backend/src/modules/brains/repository.ts:30` any type: const decrypted = await getEncryptor().decrypt(doc.rolePrompt as any, {
- **[minor]** `backend/src/modules/reflections/repository.ts:28` any type: const decrypted = await enc.decrypt(val as any, { userId, context });
- **[minor]** `backend/src/modules/reflections/repository.ts:36` any type: result.repeatedThemes = await encryptStringArray(result.repeatedThemes, uid, '
- **[minor]** `backend/src/modules/reflections/repository.ts:37` any type: result.postponedItems = await encryptStringArray(result.postponedItems, uid, '
- **[minor]** `backend/src/modules/reflections/repository.ts:38` any type: result.roleImbalanceSignals = await encryptStringArray(result.roleImbalanceSig
- **[minor]** `backend/src/modules/reflections/repository.ts:39` any type: result.suggestedAdjustments = await encryptStringArray(result.suggestedAdjustm
- **[minor]** `backend/src/modules/reflections/repository.ts:61` any type: const decrypted = await enc.decrypt(result.vsLastWeek!.summary as any, { use
- **[minor]** `backend/src/modules/memory/repository.ts:42` any type: const decrypted = await enc.decrypt(result.rawContent as any, ctx);
- **[minor]** `backend/src/modules/memory/repository.ts:47` any type: const decrypted = await enc.decrypt(result.triageResult.summary as any, { ..
- **[minor]** `backend/src/modules/palace/repository.ts:59` any type: const decrypted = await getEncryptor().decrypt(doc.content as any, {
- **[minor]** `backend/src/modules/daily-briefs/repository.ts:29` any type: result.priorityItems = encrypted as any;
- **[minor]** `backend/src/modules/daily-briefs/repository.ts:34` any type: result.brainSummaries = encrypted as any;
- **[minor]** `backend/src/modules/daily-briefs/repository.ts:56` any type: result.greeting = await enc.decrypt(result.greeting as any, ctx);
- **[minor]** `backend/src/modules/daily-briefs/repository.ts:60` any type: const decrypted = await enc.decrypt(result.priorityItems as any, { ...ctx, c
- **[minor]** `backend/src/modules/daily-briefs/repository.ts:65` any type: const decrypted = await enc.decrypt(result.brainSummaries as any, { ...ctx,
- **[minor]** `backend/src/modules/daily-briefs/repository.ts:70` any type: result.streakMessage = await enc.decrypt(result.streakMessage as any, { ...c
- **[minor]** `backend/src/modules/daily-briefs/repository.ts:74` any type: result.motivationalQuote = await enc.decrypt(result.motivationalQuote as any
- **[minor]** `mindlyst-native/web/src/lib/api-handler.ts:9` any type: type RouteHandler = (req: NextRequest, ctx: any) => Promise<Response | NextRespo
- **[major]** `mindlyst-native/web/src/app/brain-packs/page.tsx:22` Hardcoded hex color: #E67E22
- **[major]** `mindlyst-native/web/src/app/brain-packs/page.tsx:23` Hardcoded hex color: #E74C3C
- **[major]** `mindlyst-native/web/src/app/brain-packs/page.tsx:24` Hardcoded hex color: #9B59B6
- **[major]** `mindlyst-native/web/src/app/brain-packs/page.tsx:25` Hardcoded hex color: #F39C12
- **[major]** `mindlyst-native/web/src/app/brain-packs/page.tsx:26` Hardcoded hex color: #1ABC9C
- **[major]** `mindlyst-native/web/src/app/brain-packs/page.tsx:27` Hardcoded hex color: #2ECC71
- **[major]** `mindlyst-native/web/src/app/brain-packs/page.tsx:28` Hardcoded hex color: #3498DB
- **[major]** `mindlyst-native/web/src/app/brain-packs/page.tsx:29` Hardcoded hex color: #A29BFE
- **[major]** `mindlyst-native/web/src/app/brain-packs/page.tsx:30` Hardcoded hex color: #00CEC9
- **[major]** `mindlyst-native/web/src/app/brain-packs/page.tsx:31` Hardcoded hex color: #FDCB6E
- **[major]** `mindlyst-native/web/src/app/settings/page.tsx:8` Hardcoded hex color: #5A8CFF
- **[major]** `mindlyst-native/web/src/app/settings/page.tsx:9` Hardcoded hex color: #FF6E6E
- **[major]** `mindlyst-native/web/src/app/settings/page.tsx:10` Hardcoded hex color: #34D399
- **[major]** `mindlyst-native/web/src/app/settings/page.tsx:11` Hardcoded hex color: #2EE6D6
- **[major]** `mindlyst-native/web/src/app/settings/page.tsx:12` Hardcoded hex color: #7D8FB4
- **[major]** `mindlyst-native/web/src/app/settings/page.tsx:275` Hardcoded hex color: #A5B1C7
- **[major]** `mindlyst-native/web/src/app/settings/page.tsx:276` Hardcoded hex color: #6C7C98
- **[major]** `mindlyst-native/web/src/app/settings/page.tsx:290` Hardcoded hex color: #9B59B6
- **[major]** `mindlyst-native/web/src/app/settings/page.tsx:291` Hardcoded hex color: #E67E22
- **[major]** `mindlyst-native/web/src/app/settings/page.tsx:292` Hardcoded hex color: #1ABC9C
- **[major]** `mindlyst-native/web/src/app/settings/page.tsx:293` Hardcoded hex color: #E74C3C
- **[major]** `mindlyst-native/web/src/app/dashboard/page.tsx:10` Hardcoded hex color: #5A8CFF
- **[major]** `mindlyst-native/web/src/app/dashboard/page.tsx:11` Hardcoded hex color: #FF6E6E
- **[major]** `mindlyst-native/web/src/app/dashboard/page.tsx:12` Hardcoded hex color: #34D399
- **[major]** `mindlyst-native/web/src/app/dashboard/page.tsx:13` Hardcoded hex color: #2EE6D6
- **[major]** `mindlyst-native/web/src/app/dashboard/page.tsx:14` Hardcoded hex color: #7D8FB4
- **[major]** `mindlyst-native/web/src/app/dashboard/page.tsx:18` Hardcoded hex color: #5A8CFF
- **[major]** `mindlyst-native/web/src/app/dashboard/page.tsx:19` Hardcoded hex color: #FFD166
- **[major]** `mindlyst-native/web/src/app/dashboard/page.tsx:20` Hardcoded hex color: #FF6E6E
- **[major]** `mindlyst-native/web/src/app/dashboard/page.tsx:21` Hardcoded hex color: #2EE6D6
- **[major]** `mindlyst-native/web/src/app/dashboard/page.tsx:22` Hardcoded hex color: #A5B1C7
- **[major]** `mindlyst-native/web/src/app/dashboard/page.tsx:23` Hardcoded hex color: #34D399
- **[major]** `mindlyst-native/web/src/app/dashboard/page.tsx:27` Hardcoded hex color: #5A8CFF
- **[major]** `mindlyst-native/web/src/app/dashboard/page.tsx:28` Hardcoded hex color: #FF6E6E
- **[major]** `mindlyst-native/web/src/app/dashboard/page.tsx:29` Hardcoded hex color: #34D399
- **[major]** `mindlyst-native/web/src/app/dashboard/page.tsx:30` Hardcoded hex color: #2EE6D6
- **[major]** `mindlyst-native/web/src/app/dashboard/page.tsx:31` Hardcoded hex color: #7D8FB4
- **[major]** `mindlyst-native/web/src/app/dashboard/page.tsx:640` Hardcoded hex color: #A5B1C7
- **[major]** `mindlyst-native/web/src/app/dashboard/page.tsx:641` Hardcoded hex color: #A5B1C7
- **[major]** `mindlyst-native/web/src/app/dashboard/page.tsx:677` Hardcoded hex color: #7D8FB4
- **[major]** `mindlyst-native/web/src/app/palace/page.tsx:20` Hardcoded hex color: #5A8CFF
- **[major]** `mindlyst-native/web/src/app/palace/page.tsx:21` Hardcoded hex color: #2EE6D6
- **[major]** `mindlyst-native/web/src/app/palace/page.tsx:22` Hardcoded hex color: #34D399
- **[major]** `mindlyst-native/web/src/app/palace/page.tsx:23` Hardcoded hex color: #FFD166
- **[major]** `mindlyst-native/web/src/app/palace/page.tsx:24` Hardcoded hex color: #A78BFA
- **[major]** `mindlyst-native/web/src/app/palace/page.tsx:25` Hardcoded hex color: #FF6E6E
- **[major]** `mindlyst-native/web/src/app/palace/page.tsx:26` Hardcoded hex color: #F59E0B
- **[major]** `mindlyst-native/web/src/app/palace/page.tsx:27` Hardcoded hex color: #EF4444
- **[major]** `mindlyst-native/web/src/app/palace/page.tsx:28` Hardcoded hex color: #8B5CF6
- **[major]** `mindlyst-native/web/src/app/palace/page.tsx:309` Hardcoded hex color: #fff
- **[major]** `mindlyst-native/web/src/app/palace/page.tsx:459` Hardcoded hex color: #6c7c98
- **[major]** `mindlyst-native/web/src/app/api/brain-packs/route.ts:86` Hardcoded hex color: #5A8CFF
- **[major]** `mindlyst-native/web/src/app/api/brain-packs/route.ts:87` Hardcoded hex color: #2EE6D6
- **[major]** `mindlyst-native/web/src/app/api/brain-packs/route.ts:107` Hardcoded hex color: #5A8CFF
- **[major]** `mindlyst-native/web/src/app/api/brain-packs/route.ts:108` Hardcoded hex color: #2EE6D6
- **[major]** `mindlyst-native/web/src/app/api/brain-packs/route.ts:131` Hardcoded hex color: #5A8CFF
- **[major]** `mindlyst-native/web/src/app/api/brain-packs/route.ts:132` Hardcoded hex color: #2EE6D6
- **[major]** `mindlyst-native/web/src/app/api/brains/route.ts:35` Hardcoded hex color: #5A8CFF
- **[major]** `mindlyst-native/web/src/app/api/brains/route.ts:36` Hardcoded hex color: #FF6E6E
- **[major]** `mindlyst-native/web/src/app/api/brains/route.ts:37` Hardcoded hex color: #34D399
- **[major]** `mindlyst-native/web/src/app/api/brains/route.ts:38` Hardcoded hex color: #2EE6D6
- **[major]** `mindlyst-native/web/src/app/api/brains/route.ts:39` Hardcoded hex color: #7D8FB4
- **[major]** `mindlyst-native/web/src/app/api/brains/route.ts:112` Hardcoded hex color: #A5B1C7
- **[major]** `mindlyst-native/web/src/app/api/brains/route.ts:113` Hardcoded hex color: #6C7C98
- **[major]** `mindlyst-native/web/src/app/api/accessibility-config/route.ts:125` Hardcoded hex color: #EFF4FF
- **[major]** `mindlyst-native/web/src/app/api/capture-config/route.ts:115` Hardcoded hex color: #06070A
- **[major]** `mindlyst-native/web/src/app/api/capture-config/route.ts:133` Hardcoded hex color: #5A8CFF
- **[major]** `mindlyst-native/web/src/app/api/capture-config/route.ts:134` Hardcoded hex color: #FF6E6E
- **[major]** `mindlyst-native/web/src/app/api/capture-config/route.ts:135` Hardcoded hex color: #34D399
- **[major]** `mindlyst-native/web/src/app/api/capture-config/route.ts:136` Hardcoded hex color: #2EE6D6
- **[major]** `mindlyst-native/web/src/app/api/capture-config/route.ts:137` Hardcoded hex color: #7D8FB4
- **[major]** `mindlyst-native/web/src/app/api/share-card/route.ts:146` Hardcoded hex color: #06070A
- **[major]** `mindlyst-native/web/src/app/api/share-card/route.ts:147` Hardcoded hex color: #5A8CFF
- **[major]** `mindlyst-native/web/src/app/challenge/page.tsx:92` Hardcoded hex color: #fff
- **[major]** `mindlyst-native/web/src/app/page.tsx:34` Hardcoded hex color: #5A8CFF
- **[major]** `mindlyst-native/web/src/app/page.tsx:35` Hardcoded hex color: #FF6E6E
- **[major]** `mindlyst-native/web/src/app/page.tsx:36` Hardcoded hex color: #34D399
- **[major]** `mindlyst-native/web/src/app/page.tsx:37` Hardcoded hex color: #2EE6D6
- **[major]** `mindlyst-native/web/src/app/onboarding/page.tsx:8` Hardcoded hex color: #5A8CFF
- **[major]** `mindlyst-native/web/src/app/onboarding/page.tsx:9` Hardcoded hex color: #FF6E6E
- **[major]** `mindlyst-native/web/src/app/onboarding/page.tsx:10` Hardcoded hex color: #34D399
- **[major]** `mindlyst-native/web/src/app/onboarding/page.tsx:11` Hardcoded hex color: #2EE6D6
- **[major]** `mindlyst-native/web/src/app/onboarding/page.tsx:20` Hardcoded hex color: #5A8CFF
- **[major]** `mindlyst-native/web/src/app/onboarding/page.tsx:21` Hardcoded hex color: #2EE6D6
- **[major]** `mindlyst-native/web/src/app/onboarding/page.tsx:205` Hardcoded hex color: #A5B1C7
- **[major]** `mindlyst-native/web/src/app/onboarding/page.tsx:206` Hardcoded hex color: #A5B1C7
- **[major]** `mindlyst-native/web/src/app/onboarding/page.tsx:217` Hardcoded hex color: #7D8FB4
- **[major]** `mindlyst-native/web/src/app/onboarding/page.tsx:248` Hardcoded hex color: #6C7C98
- **[major]** `mindlyst-native/web/src/app/reflection/page.tsx:13` Hardcoded hex color: #5A8CFF
- **[major]** `mindlyst-native/web/src/app/reflection/page.tsx:14` Hardcoded hex color: #2EE6D6
- **[major]** `mindlyst-native/web/src/app/reflection/page.tsx:141` Hardcoded hex color: #A5B1C7
- **[major]** `mindlyst-native/web/src/app/reflection/page.tsx:149` Hardcoded hex color: #A5B1C7
- **[critical]** `mindlyst-native/web/src/lib/cosmos.ts:3` Hardcoded product ID: export const PRODUCT_ID = process.env.NEXT_PUBLIC_PRODUCT_ID ?? "mindlyst";
- **[critical]** `mindlyst-native/web/src/lib/ecosystem-phase3.ts:50` Hardcoded product ID: productId: "mindlyst";
- **[critical]** `mindlyst-native/web/src/lib/ecosystem-phase3.ts:101` Hardcoded product ID: productId: "mindlyst";
- **[critical]** `mindlyst-native/web/src/lib/ecosystem-phase3.ts:168` Hardcoded product ID: productId: "mindlyst",
- **[critical]** `mindlyst-native/web/src/lib/ecosystem-phase3.ts:201` Hardcoded product ID: productId: "mindlyst",
- **[critical]** `mindlyst-native/web/src/lib/ecosystem-phase3.ts:221` Hardcoded product ID: productId: "mindlyst",
- **[critical]** `mindlyst-native/web/src/lib/ecosystem-phase1.ts:50` Hardcoded product ID: productId: "mindlyst";
- **[critical]** `mindlyst-native/web/src/lib/ecosystem-phase1.ts:101` Hardcoded product ID: productId: "mindlyst";
- **[critical]** `mindlyst-native/web/src/lib/ecosystem-phase1.ts:168` Hardcoded product ID: productId: "mindlyst",
- **[critical]** `mindlyst-native/web/src/lib/ecosystem-phase1.ts:201` Hardcoded product ID: productId: "mindlyst",
- **[critical]** `mindlyst-native/web/src/lib/ecosystem-phase1.ts:221` Hardcoded product ID: productId: "mindlyst",
- **[minor]** `mindlyst-native/web/src/app/layout.tsx:13` Emoji in code: 🧠
- **[minor]** `mindlyst-native/web/src/app/api/launch/route.ts:124` Emoji in code: 👋
- **[minor]** `mindlyst-native/web/src/app/api/launch/route.ts:131` Emoji in code: 🧠
- **[minor]** `mindlyst-native/web/src/app/api/prompts/route.ts:66` Emoji in code: 📱
- **[minor]** `mindlyst-native/web/src/app/api/prompts/route.ts:99` Emoji in code: 🎤
- **[minor]** `mindlyst-native/web/src/app/api/prompts/route.ts:101` Emoji in code: 📷
- **[minor]** `mindlyst-native/web/src/app/api/store-listing/route.ts:61` Emoji in code: 🧠
- **[minor]** `mindlyst-native/web/src/app/api/store-listing/route.ts:78` Emoji in code: 🔒
- **[minor]** `mindlyst-native/web/src/app/api/store-listing/route.ts:83` Emoji in code: 🚀
- **[minor]** `mindlyst-native/iosApp/Screens/BrainDetailScreen.swift:11` Emoji in code: 🎙
- **[minor]** `mindlyst-native/iosApp/Screens/BrainDetailScreen.swift:12` Emoji in code: 📸
- **[minor]** `mindlyst-native/iosApp/Screens/BrainDetailScreen.swift:13` Emoji in code: 📧
- **[minor]** `mindlyst-native/iosApp/Screens/BrainDetailScreen.swift:14` Emoji in code: 🔗
- **[minor]** `mindlyst-native/androidApp/src/main/java/com/mindlyst/android/auth/LoginScreen.kt:92` Emoji in code: 🧠
## `learning_ai_clock`
**Counts:** critical=0 · major=0 · minor=22 · total=22
- **[minor]** `backend/src/modules/shared-timers/repository.ts:31` any type: const decrypted = await getEncryptor().decrypt(doc.description as any, {
- **[minor]** `backend/src/modules/timers/repository.ts:32` any type: const decrypted = await getEncryptor().decrypt(doc.description as any, {
- **[minor]** `backend/src/modules/routines/repository.ts:49` any type: const decrypted = await enc.decrypt(result.description as any, ctx);
- **[minor]** `backend/src/modules/routines/repository.ts:56` any type: const decrypted = await enc.decrypt(step.notes as any, { ...ctx, context
- **[minor]** `backend/src/modules/webhooks/repository.ts:46` any type: const decrypted = await enc.decrypt(result.secret as any, ctx);
- **[minor]** `backend/src/modules/webhooks/repository.ts:51` any type: const decrypted = await enc.decrypt(result.description as any, { ...ctx, con
- **[minor]** `web/src/components/Dashboard.tsx:103` Emoji in code: 🔔
- **[minor]** `web/src/components/StreakCard.tsx:80` Emoji in code: 🏆
- **[minor]** `web/src/components/StreakCard.tsx:82` Emoji in code: 🔥
- **[minor]** `web/src/components/PomodoroView.tsx:57` Emoji in code: 🎉
- **[minor]** `web/src/components/PomodoroView.tsx:86` Emoji in code: 🍅
- **[minor]** `web/src/components/TimerCard.tsx:243` Emoji in code: 💬
- **[minor]** `web/src/lib/notifications.ts:94` Emoji in code: 🔔
- **[minor]** `ios/ChronoMind/Shared/Wellness/MoodCheckInManager.swift:165` Emoji in code: 😴
- **[minor]** `ios/ChronoMind/Shared/Wellness/MoodCheckInManager.swift:166` Emoji in code: 😐
- **[minor]** `ios/ChronoMind/Shared/Wellness/MoodCheckInManager.swift:167` Emoji in code: 😊
- **[minor]** `ios/ChronoMind/Shared/Wellness/MoodCheckInManager.swift:168` Emoji in code: 🔥
- **[minor]** `ios/ChronoMind/Shared/Gamification/GamificationEngine.swift:55` Emoji in code: 🔥
- **[minor]** `ios/ChronoMind/Shared/Gamification/GamificationEngine.swift:57` Emoji in code: 👍
- **[minor]** `ios/ChronoMind/Shared/Gamification/GamificationEngine.swift:58` Emoji in code: 📈
- **[minor]** `ios/ChronoMind/Shared/Gamification/GamificationEngine.swift:59` Emoji in code: 💪
- **[minor]** `ios/ChronoMind/Shared/Notifications/NotificationScheduler.swift:100` Emoji in code: 🔔
## `learning_ai_fastgap`
**Counts:** critical=0 · major=92 · minor=212 · total=304
- **[major]** `plugins/withAndroidWidget.js:224` console.log: console.log(`
- **[major]** `plugins/withWatchApp.js:59` console.log: console.log(`
- **[major]** `plugins/withWidgetExtension.js:57` console.log: console.log(`
- **[major]** `web/src/app/(app)/settings/page.tsx:185` Hardcoded hex color: #FF6B6B
- **[major]** `web/src/app/(app)/social/page.tsx:194` Hardcoded hex color: #888
- **[major]** `web/src/app/(app)/simulator/page.tsx:265` Hardcoded hex color: #fff
- **[major]** `web/src/components/ShareCard.tsx:33` Hardcoded hex color: #0D1117
- **[major]** `web/src/components/ShareCard.tsx:34` Hardcoded hex color: #1A2332
- **[major]** `web/src/components/ShareCard.tsx:42` Hardcoded hex color: #5AE68C
- **[major]** `web/src/components/ShareCard.tsx:43` Hardcoded hex color: #4ECDC4
- **[major]** `web/src/components/ShareCard.tsx:48` Hardcoded hex color: #5AE68C
- **[major]** `web/src/components/ShareCard.tsx:53` Hardcoded hex color: #FFFFFF
- **[major]** `web/src/components/ShareCard.tsx:56` Hardcoded hex color: #8B949E
- **[major]** `web/src/components/ShareCard.tsx:76` Hardcoded hex color: #5AE68C
- **[major]** `web/src/components/ShareCard.tsx:80` Hardcoded hex color: #8B949E
- **[major]** `web/src/components/ShareCard.tsx:86` Hardcoded hex color: #484F58
- **[major]** `web/src/components/BodyCanvas.tsx:14` Hardcoded hex color: #FF9F43
- **[major]** `web/src/components/BodyCanvas.tsx:15` Hardcoded hex color: #5A8CFF
- **[major]** `web/src/components/BodyCanvas.tsx:48` Hardcoded hex color: #FECA57
- **[major]** `web/src/components/BodyCanvas.tsx:65` Hardcoded hex color: #1A2040
- **[major]** `web/src/components/BodyCanvas.tsx:75` Hardcoded hex color: #E85555
- **[major]** `web/src/components/BodyCanvas.tsx:83` Hardcoded hex color: #5AC0D0
- **[major]** `web/src/components/BodyCanvas.tsx:91` Hardcoded hex color: #5AC0D0
- **[major]** `web/src/components/BodyCanvas.tsx:99` Hardcoded hex color: #1E1A10
- **[major]** `web/src/components/BodyCanvas.tsx:107` Hardcoded hex color: #1E1810
- **[major]** `web/src/components/BodyCanvas.tsx:115` Hardcoded hex color: #E8C44A
- **[major]** `web/src/components/BodyCanvas.tsx:122` Hardcoded hex color: #D49A6A
- **[major]** `web/src/components/BodyCanvas.tsx:130` Hardcoded hex color: #C47A50
- **[major]** `web/src/components/BodyCanvas.tsx:139` Hardcoded hex color: #B06060
- **[major]** `web/src/components/BodyCanvas.tsx:147` Hardcoded hex color: #B06060
- **[major]** `web/src/components/BodyCanvas.tsx:155` Hardcoded hex color: #101820
- **[major]** `web/src/components/BodyCanvas.tsx:162` Hardcoded hex color: #101820
- **[major]** `web/src/components/BodyCanvas.tsx:169` Hardcoded hex color: #18142A
- **[major]** `web/src/components/BodyCanvas.tsx:181` Hardcoded hex color: #E8C44A
- **[major]** `web/src/components/BodyCanvas.tsx:182` Hardcoded hex color: #8899AA
- **[major]** `web/src/components/BodyCanvas.tsx:183` Hardcoded hex color: #80E0F0
- **[major]** `web/src/components/BodyCanvas.tsx:185` Hardcoded hex color: #C088FF
- **[major]** `web/src/components/BodyCanvas.tsx:186` Hardcoded hex color: #FFE066
- **[major]** `web/src/components/BodyCanvas.tsx:300` Hardcoded hex color: #C0D0E8
- **[major]** `web/src/components/BodyCanvas.tsx:304` Hardcoded hex color: #C0D0E8
- **[major]** `web/src/components/BodyCanvas.tsx:315` Hardcoded hex color: #C0D0E8
- **[major]** `web/src/components/BodyCanvas.tsx:476` Hardcoded hex color: #FFFFFF
- **[major]** `web/src/components/BodyCanvas.tsx:493` Hardcoded hex color: #7B8BA5
- **[major]** `web/src/components/BodyCanvas.tsx:504` Hardcoded hex color: #000000
- **[major]** `src/screens/protocol/ProtocolDetail.tsx:183` Hardcoded hex color: #1A2335
- **[major]** `src/components/platform/InAppBroadcastBanner.tsx:18` Hardcoded hex color: #ef4444
- **[major]** `src/components/platform/InAppBroadcastBanner.tsx:19` Hardcoded hex color: #f59e0b
- **[major]** `src/components/platform/InAppBroadcastBanner.tsx:20` Hardcoded hex color: #38bdf8
- **[major]** `src/components/platform/ActiveSurveyModal.tsx:188` Hardcoded hex color: #f87171
- **[major]** `src/theme/colors.ts:16` Hardcoded hex color: #FF9F43
- **[major]** `src/theme/colors.ts:17` Hardcoded hex color: #FECA57
- **[major]** `src/theme/colors.ts:18` Hardcoded hex color: #48DBFB
- **[major]** `src/theme/colors.ts:19` Hardcoded hex color: #5A8CFF
- **[major]** `src/theme/colors.ts:20` Hardcoded hex color: #A66BFF
- **[major]** `src/theme/colors.ts:21` Hardcoded hex color: #FFD700
- **[major]** `src/theme/colors.ts:39` Hardcoded hex color: #5AE68C
- **[major]** `src/theme/colors.ts:99` Hardcoded hex color: #5AE68C
- **[major]** `src/theme/colors.ts:100` Hardcoded hex color: #FECA57
- **[major]** `src/theme/colors.ts:101` Hardcoded hex color: #FF9F43
- **[major]** `src/theme/colors.ts:102` Hardcoded hex color: #FF6B6B
- **[major]** `src/theme/colors.ts:103` Hardcoded hex color: #A66BFF
- **[major]** `src/theme/spacing.ts:33` Hardcoded hex color: #000
- **[major]** `src/theme/spacing.ts:40` Hardcoded hex color: #000
- **[major]** `src/theme/spacing.ts:47` Hardcoded hex color: #000
- **[major]** `src/lib/organ-data.ts:47` Hardcoded hex color: #1A2040
- **[major]** `src/lib/organ-data.ts:63` Hardcoded hex color: #E85555
- **[major]** `src/lib/organ-data.ts:64` Hardcoded hex color: #2A1520
- **[major]** `src/lib/organ-data.ts:80` Hardcoded hex color: #5AC0D0
- **[major]** `src/lib/organ-data.ts:81` Hardcoded hex color: #14222A
- **[major]** `src/lib/organ-data.ts:96` Hardcoded hex color: #5AC0D0
- **[major]** `src/lib/organ-data.ts:97` Hardcoded hex color: #14222A
- **[major]** `src/lib/organ-data.ts:113` Hardcoded hex color: #1E1A10
- **[major]** `src/lib/organ-data.ts:130` Hardcoded hex color: #1E1810
- **[major]** `src/lib/organ-data.ts:144` Hardcoded hex color: #E8C44A
- **[major]** `src/lib/organ-data.ts:145` Hardcoded hex color: #1A1810
- **[major]** `src/lib/organ-data.ts:160` Hardcoded hex color: #D49A6A
- **[major]** `src/lib/organ-data.ts:161` Hardcoded hex color: #18140E
- **[major]** `src/lib/organ-data.ts:176` Hardcoded hex color: #C47A50
- **[major]** `src/lib/organ-data.ts:177` Hardcoded hex color: #18140E
- **[major]** `src/lib/organ-data.ts:192` Hardcoded hex color: #B06060
- **[major]** `src/lib/organ-data.ts:193` Hardcoded hex color: #1E1218
- **[major]** `src/lib/organ-data.ts:208` Hardcoded hex color: #B06060
- **[major]** `src/lib/organ-data.ts:209` Hardcoded hex color: #1E1218
- **[major]** `src/lib/organ-data.ts:225` Hardcoded hex color: #101820
- **[major]** `src/lib/organ-data.ts:243` Hardcoded hex color: #101820
- **[major]** `src/lib/organ-data.ts:261` Hardcoded hex color: #18142A
- **[major]** `src/lib/molecule-flows.ts:45` Hardcoded hex color: #E8C44A
- **[major]** `src/lib/molecule-flows.ts:49` Hardcoded hex color: #8899AA
- **[major]** `src/lib/molecule-flows.ts:53` Hardcoded hex color: #80E0F0
- **[major]** `src/lib/molecule-flows.ts:63` Hardcoded hex color: #C088FF
- **[major]** `src/lib/molecule-flows.ts:68` Hardcoded hex color: #FFE066
- **[major]** `src/lib/molecule-flows.ts:69` Hardcoded hex color: #C088FF
- **[minor]** `web/src/app/(app)/settings/page.tsx:109` Emoji in code: 🌙
- **[minor]** `web/src/app/(app)/social/page.tsx:231` Emoji in code: 🔥
- **[minor]** `web/src/app/(app)/tracking/page.tsx:126` Emoji in code: 💧
- **[minor]** `web/src/components/StreakCalendar.tsx:52` Emoji in code: 🔥
- **[minor]** `web/src/components/CoachingCard.tsx:11` Emoji in code: 📋
- **[minor]** `web/src/components/CoachingCard.tsx:13` Emoji in code: 💧
- **[minor]** `web/src/components/CoachingCard.tsx:14` Emoji in code: 🔥
- **[minor]** `web/src/components/CoachingCard.tsx:15` Emoji in code: 💪
- **[minor]** `web/src/components/CoachingCard.tsx:16` Emoji in code: 🎉
- **[minor]** `web/src/components/CoachingCard.tsx:17` Emoji in code: 📈
- **[minor]** `web/src/components/CoachingCard.tsx:50` Emoji in code: 💡
- **[minor]** `web/src/components/SafetyBanner.tsx:13` Emoji in code: 🔶
- **[minor]** `web/src/components/SafetyBanner.tsx:14` Emoji in code: 🛑
- **[minor]** `web/src/components/Sidebar.tsx:33` Emoji in code: 🧬
- **[minor]** `web/src/components/OnboardingFlow.tsx:30` Emoji in code: 🧬
- **[minor]** `web/src/components/OnboardingFlow.tsx:35` Emoji in code: 📋
- **[minor]** `web/src/components/OnboardingFlow.tsx:40` Emoji in code: 📊
- **[minor]** `web/src/components/OnboardingFlow.tsx:45` Emoji in code: 🛡
- **[minor]** `web/src/components/OnboardingFlow.tsx:50` Emoji in code: 🚀
- **[minor]** `web/src/lib/gamification.ts:78` Emoji in code: 🔥
- **[minor]** `web/src/lib/gamification.ts:80` Emoji in code: 💪
- **[minor]** `web/src/lib/gamification.ts:81` Emoji in code: 👑
- **[minor]** `web/src/lib/gamification.ts:85` Emoji in code: 🌙
- **[minor]** `web/src/lib/gamification.ts:86` Emoji in code: 💯
- **[minor]** `web/src/lib/gamification.ts:87` Emoji in code: 🏆
- **[minor]** `web/src/lib/gamification.ts:90` Emoji in code: 🌱
- **[minor]** `web/src/lib/gamification.ts:91` Emoji in code: 🎯
- **[minor]** `web/src/lib/gamification.ts:93` Emoji in code: 🌟
- **[minor]** `web/src/lib/gamification.ts:94` Emoji in code: 🏅
- **[minor]** `web/src/lib/gamification.ts:97` Emoji in code: 🔒
- **[minor]** `web/src/lib/gamification.ts:98` Emoji in code: 💎
- **[minor]** `web/src/lib/ai-coach.ts:61` Emoji in code: 🔥
- **[minor]** `ios-extensions/NomGapWidget/NomGapLiveActivity.swift:131` Emoji in code: 🧬
- **[minor]** `ios-extensions/NomGapWidget/NomGapLiveActivity.swift:139` Emoji in code: 💧
- **[minor]** `ios-extensions/NomGapWidget/NomGapLiveActivity.swift:171` Emoji in code: 🧬
- **[minor]** `ios-extensions/NomGapWidget/NomGapLiveActivity.swift:174` Emoji in code: 💧
- **[minor]** `ios-extensions/NomGapWidget/NomGapLockScreenWidget.swift:108` Emoji in code: 💧
- **[minor]** `ios-extensions/NomGapShortcuts/NomGapShortcuts.swift:31` Emoji in code: 💪
- **[minor]** `ios-extensions/NomGapShortcuts/NomGapShortcuts.swift:57` Emoji in code: 🎉
- **[minor]** `ios-extensions/NomGapShortcuts/NomGapShortcuts.swift:102` Emoji in code: 💧
- **[minor]** `ios-extensions/NomGapShortcuts/NomGapShortcuts.swift:104` Emoji in code: 💧
- **[minor]** `ios-extensions/NomGapShortcuts/NomGapShortcuts.swift:125` Emoji in code: 💪
- **[minor]** `watch/Shared/FastingState.swift:29` Emoji in code: 🍽
- **[minor]** `watch/Shared/FastingState.swift:31` Emoji in code: 🔥
- **[minor]** `watch/Shared/FastingState.swift:33` Emoji in code: 🧬
- **[minor]** `watch/Shared/FastingState.swift:34` Emoji in code: 🌟
- **[minor]** `watch/NomGapWatch/FastingTimerView.swift:287` Emoji in code: 🎉
- **[minor]** `watch/NomGapWatch/ComplicationProvider.swift:33` Emoji in code: 🔥
- **[minor]** `watch/NomGapWatch/StatsView.swift:20` Emoji in code: 🔥
- **[minor]** `watch/NomGapWatch/HydrationView.swift:18` Emoji in code: 💧
- **[minor]** `src/utils/shareCardExport.ts:24` Emoji in code: 🍽
- **[minor]** `src/utils/shareCardExport.ts:57` Emoji in code: 🍽
- **[minor]** `src/utils/shareCardExport.ts:58` Emoji in code: 🧬
- **[minor]** `src/utils/shareCardExport.ts:59` Emoji in code: 🔬
- **[minor]** `src/utils/shareCardExport.ts:60` Emoji in code: 💧
- **[minor]** `src/screens/learn/LearnScreen.tsx:24` Emoji in code: 💧
- **[minor]** `src/screens/learn/LearnScreen.tsx:34` Emoji in code: 🌊
- **[minor]** `src/screens/learn/LearnScreen.tsx:39` Emoji in code: 🍵
- **[minor]** `src/screens/learn/LearnScreen.tsx:44` Emoji in code: 😴
- **[minor]** `src/screens/learn/LearnScreen.tsx:49` Emoji in code: 🚶
- **[minor]** `src/screens/fast/TimerControls.tsx:63` Emoji in code: 🔥
- **[minor]** `src/screens/fast/TimerControls.tsx:103` Emoji in code: 🎉
- **[minor]** `src/screens/fast/FastCompletionModal.tsx:147` Emoji in code: 🎉
- **[minor]** `src/screens/fast/FastCompletionModal.tsx:170` Emoji in code: 💧
- **[minor]** `src/screens/fast/FastCompletionModal.tsx:208` Emoji in code: 🍽
- **[minor]** `src/screens/fast/FastCompletionModal.tsx:219` Emoji in code: 📤
- **[minor]** `src/screens/fast/SafetyBanner.tsx:29` Emoji in code: 🔶
- **[minor]** `src/screens/fast/SafetyBanner.tsx:30` Emoji in code: 🚨
- **[minor]** `src/screens/fast/SafetyBanner.tsx:109` Emoji in code: 🧂
- **[minor]** `src/screens/fast/SafetyBanner.tsx:129` Emoji in code: 🛑
- **[minor]** `src/screens/fast/CoachingTipsSheet.tsx:66` Emoji in code: 🤖
- **[minor]** `src/screens/fast/CoachingTipsSheet.tsx:83` Emoji in code: 🌱
- **[minor]** `src/screens/fast/MoodCheckinModal.tsx:150` Emoji in code: 😞
- **[minor]** `src/screens/fast/MoodCheckinModal.tsx:158` Emoji in code: 🪫
- **[minor]** `src/screens/fast/MoodCheckinModal.tsx:166` Emoji in code: 🍽
- **[minor]** `src/screens/fast/MoodCheckinModal.tsx:175` Emoji in code: 🌫
- **[minor]** `src/screens/protocol/ProtocolPicker.tsx:87` Emoji in code: 🔥
- **[minor]** `src/screens/protocol/ProtocolPicker.tsx:88` Emoji in code: 📅
- **[minor]** `src/screens/protocol/ProtocolPicker.tsx:89` Emoji in code: 🙏
- **[minor]** `src/screens/protocol/ProtocolPicker.tsx:188` Emoji in code: 🛠
- **[minor]** `src/screens/protocol/ProtocolPicker.tsx:289` Emoji in code: 📍
- **[minor]** `src/screens/protocol/ProtocolDetail.tsx:151` Emoji in code: 🕉
- **[minor]** `src/screens/protocol/ProtocolDetail.tsx:202` Emoji in code: 🔬
- **[minor]** `src/screens/protocol/ProtocolDetail.tsx:213` Emoji in code: 💡
- **[minor]** `src/screens/protocol/ProtocolDetail.tsx:238` Emoji in code: 🔥
- **[minor]** `src/screens/journey/StreakCalendar.tsx:88` Emoji in code: 🔥
- **[minor]** `src/screens/journey/StreakCalendar.tsx:131` Emoji in code: 🔥
- **[minor]** `src/screens/journey/StreakCalendar.tsx:152` Emoji in code: 🔥
- **[minor]** `src/screens/journey/MoodChart.tsx:18` Emoji in code: 😞
- **[minor]** `src/screens/journey/MoodChart.tsx:19` Emoji in code: 😐
- **[minor]** `src/screens/journey/MoodChart.tsx:20` Emoji in code: 🙂
- **[minor]** `src/screens/journey/MoodChart.tsx:21` Emoji in code: 😊
- **[minor]** `src/screens/journey/MoodChart.tsx:22` Emoji in code: 🤩
- **[minor]** `src/screens/journey/MoodChart.tsx:26` Emoji in code: 🪫
- **[minor]** `src/screens/journey/MoodChart.tsx:27` Emoji in code: 😴
- **[minor]** `src/screens/journey/MoodChart.tsx:29` Emoji in code: 💪
- **[minor]** `src/screens/journey/MoodChart.tsx:30` Emoji in code: 🔥
- **[minor]** `src/screens/journey/MoodChart.tsx:58` Emoji in code: 😊
- **[minor]** `src/screens/journey/MoodChart.tsx:68` Emoji in code: 🙂
- **[minor]** `src/screens/journey/MoodChart.tsx:83` Emoji in code: 🍽
- **[minor]** `src/screens/journey/MoodChart.tsx:96` Emoji in code: 🙂
- **[minor]** `src/screens/journey/InsightsCard.tsx:96` Emoji in code: 💡
- **[minor]** `src/screens/journey/InsightsCard.tsx:110` Emoji in code: 💡
- **[minor]** `src/screens/journey/InsightsCard.tsx:166` Emoji in code: 📈
- **[minor]** `src/screens/journey/InsightsCard.tsx:167` Emoji in code: 📉
- **[minor]** `src/screens/social/SocialScreen.tsx:241` Emoji in code: 🏆
- **[minor]** `src/screens/social/SocialScreen.tsx:264` Emoji in code: 🥇
- **[minor]** `src/screens/social/SocialScreen.tsx:276` Emoji in code: 👥
- **[minor]** `src/screens/profile/GoalSetting.tsx:34` Emoji in code: 🧬
- **[minor]** `src/screens/profile/GoalSetting.tsx:35` Emoji in code: 🧠
- **[minor]** `src/screens/profile/GoalSetting.tsx:37` Emoji in code: 🕊
- **[minor]** `src/screens/profile/GoalSetting.tsx:38` Emoji in code: 💪
- **[minor]** `src/screens/profile/ProfileScreen.tsx:104` Emoji in code: 🧬
- **[minor]** `src/screens/profile/AchievementShelf.tsx:95` Emoji in code: 🔒
- **[minor]** `src/screens/profile/AchievementShelf.tsx:119` Emoji in code: 🔒
- **[minor]** `src/screens/meal/MealLogScreen.tsx:35` Emoji in code: 🥩
- **[minor]** `src/screens/meal/MealLogScreen.tsx:36` Emoji in code: 🍞
- **[minor]** `src/screens/meal/MealLogScreen.tsx:37` Emoji in code: 🥑
- **[minor]** `src/screens/meal/MealLogScreen.tsx:38` Emoji in code: 🥗
- **[minor]** `src/screens/meal/MealLogScreen.tsx:39` Emoji in code: 🍎
- **[minor]** `src/screens/meal/MealLogScreen.tsx:40` Emoji in code: 🧀
- **[minor]** `src/screens/meal/MealLogScreen.tsx:41` Emoji in code: 🍲
- **[minor]** `src/screens/meal/MealLogScreen.tsx:42` Emoji in code: 🥜
- **[minor]** `src/screens/meal/MealLogScreen.tsx:51` Emoji in code: 🌅
- **[minor]** `src/screens/meal/MealLogScreen.tsx:57` Emoji in code: 🌙
- **[minor]** `src/screens/meal/MealLogScreen.tsx:63` Emoji in code: 🍽
- **[minor]** `src/screens/meal/MealLogScreen.tsx:69` Emoji in code: 🥜
- **[minor]** `src/screens/meal/MealLogScreen.tsx:275` Emoji in code: 💡
- **[minor]** `src/screens/onboarding/OnboardingScreen.tsx:34` Emoji in code: 🧬
- **[minor]** `src/screens/onboarding/OnboardingScreen.tsx:35` Emoji in code: 🧠
- **[minor]** `src/screens/onboarding/OnboardingScreen.tsx:36` Emoji in code: 🔥
- **[minor]** `src/screens/onboarding/OnboardingScreen.tsx:37` Emoji in code: 🕊
- **[minor]** `src/screens/onboarding/OnboardingScreen.tsx:38` Emoji in code: 💚
- **[minor]** `src/screens/onboarding/OnboardingScreen.tsx:109` Emoji in code: 🧬
- **[minor]** `src/screens/onboarding/OnboardingScreen.tsx:117` Emoji in code: 🔥
- **[minor]** `src/screens/onboarding/OnboardingScreen.tsx:118` Emoji in code: 🧠
- **[minor]** `src/screens/onboarding/OnboardingScreen.tsx:119` Emoji in code: 💧
- **[minor]** `src/screens/onboarding/OnboardingScreen.tsx:120` Emoji in code: 🏆
- **[minor]** `src/components/BodyVisualization/BiomarkerCards.tsx:58` Emoji in code: 🔬
- **[minor]** `src/components/BodyVisualization/BiomarkerCards.tsx:60` Emoji in code: 💪
- **[minor]** `src/components/BodyVisualization/BodyVisualizationFullScreen.tsx:267` Emoji in code: 📤
- **[minor]** `src/components/common/WaterTracker.tsx:42` Emoji in code: 💧
- **[minor]** `src/hooks/useLiveActivity.ts:71` Emoji in code: 🍽
- **[minor]** `src/hooks/useLiveActivity.ts:73` Emoji in code: 🔥
- **[minor]** `src/hooks/useLiveActivity.ts:75` Emoji in code: 🧬
- **[minor]** `src/hooks/useLiveActivity.ts:76` Emoji in code: 🌟
- **[minor]** `src/hooks/useLiveActivity.ts:86` Emoji in code: 🌟
- **[minor]** `src/lib/gamification.ts:41` Emoji in code: 🌱
- **[minor]** `src/lib/gamification.ts:50` Emoji in code: 💪
- **[minor]** `src/lib/gamification.ts:59` Emoji in code: 🏆
- **[minor]** `src/lib/gamification.ts:78` Emoji in code: 🔥
- **[minor]** `src/lib/gamification.ts:96` Emoji in code: 🧬
- **[minor]** `src/lib/gamification.ts:105` Emoji in code: 🛡
- **[minor]** `src/lib/gamification.ts:115` Emoji in code: 🔗
- **[minor]** `src/lib/gamification.ts:124` Emoji in code: 📅
- **[minor]** `src/lib/gamification.ts:133` Emoji in code: 👑
- **[minor]** `src/lib/gamification.ts:143` Emoji in code: 💧
- **[minor]** `src/lib/gamification.ts:153` Emoji in code: 😊
- **[minor]** `src/lib/gamification.ts:163` Emoji in code: 🦉
- **[minor]** `src/lib/gamification.ts:172` Emoji in code: 🐦
- **[minor]** `src/lib/gamification.ts:181` Emoji in code: 🗺
- **[minor]** `src/lib/gamification.ts:190` Emoji in code: 🦋
- **[minor]** `src/lib/gamification.ts:199` Emoji in code: 📤
- **[minor]** `src/lib/fasting-science.ts:110` Emoji in code: 💧
- **[minor]** `src/lib/fasting-science.ts:121` Emoji in code: 🚨
- **[minor]** `src/lib/insights.ts:156` Emoji in code: 📈
- **[minor]** `src/lib/insights.ts:165` Emoji in code: 📉
- **[minor]** `src/lib/insights.ts:179` Emoji in code: 🎯
- **[minor]** `src/lib/insights.ts:188` Emoji in code: 💪
- **[minor]** `src/lib/insights.ts:201` Emoji in code: 🧬
- **[minor]** `src/lib/insights.ts:213` Emoji in code: 📊
- **[minor]** `src/lib/insights.ts:289` Emoji in code: 📈
- **[minor]** `src/lib/insights.ts:298` Emoji in code: 📉
- **[minor]** `src/lib/insights.ts:310` Emoji in code: 🗺
- **[minor]** `src/lib/insights.ts:321` Emoji in code: 🏅
- **[minor]** `src/lib/insights.ts:332` Emoji in code: 📊
- **[minor]** `src/lib/insights.ts:504` Emoji in code: 🏆
- **[minor]** `src/lib/insights.ts:514` Emoji in code: 🔥
- **[minor]** `src/lib/insights.ts:524` Emoji in code: 🧬
- **[minor]** `src/lib/celebrations.ts:46` Emoji in code: 🚀
- **[minor]** `src/lib/celebrations.ts:49` Emoji in code: 🧬
- **[minor]** `src/lib/celebrations.ts:50` Emoji in code: 💧
- **[minor]** `src/lib/celebrations.ts:51` Emoji in code: 🧠
- **[minor]** `src/lib/celebrations.ts:52` Emoji in code: 🎯
- **[minor]** `src/lib/celebrations.ts:54` Emoji in code: 💪
- **[minor]** `src/lib/celebrations.ts:55` Emoji in code: 🔥
- **[minor]** `src/lib/celebrations.ts:59` Emoji in code: 🌟
- **[minor]** `src/lib/gentle-notifications.ts:42` Emoji in code: 💧
- **[minor]** `src/lib/hydration-reminders.ts:75` Emoji in code: 💧
- **[minor]** `src/lib/hydration-reminders.ts:76` Emoji in code: 💧
- **[minor]** `src/lib/hydration-reminders.ts:77` Emoji in code: 💧
- **[minor]** `src/lib/hydration-reminders.ts:78` Emoji in code: 💧
- **[minor]** `src/lib/hydration-reminders.ts:79` Emoji in code: 💧
- **[minor]** `src/lib/hydration-reminders.ts:80` Emoji in code: 💧
- **[minor]** `src/lib/hydration-reminders.ts:175` Emoji in code: 🎉
- **[minor]** `src/lib/ai-coach.ts:88` Emoji in code: 🚀
- **[minor]** `src/lib/ai-coach.ts:181` Emoji in code: 📅
- **[minor]** `src/lib/ai-coach.ts:196` Emoji in code: 🔥
- **[minor]** `src/lib/ai-coach.ts:206` Emoji in code: 🔥
- **[minor]** `src/lib/ai-coach.ts:216` Emoji in code: 👑
- **[minor]** `src/lib/ai-coach.ts:235` Emoji in code: 💧
- **[minor]** `src/lib/ai-coach.ts:245` Emoji in code: 🏆
- **[minor]** `src/lib/ai-coach.ts:286` Emoji in code: 🌱
- **[minor]** `src/lib/ai-coach.ts:297` Emoji in code: 😴
- **[minor]** `src/lib/ai-coach.ts:305` Emoji in code: 🧂
- **[minor]** `src/lib/ai-coach.ts:313` Emoji in code: 🏃
- **[minor]** `src/lib/streaks.ts:27` Emoji in code: 🔥
- **[minor]** `src/lib/streaks.ts:28` Emoji in code: 💪
- **[minor]** `src/lib/streaks.ts:29` Emoji in code: 👑
- **[minor]** `src/lib/streaks.ts:31` Emoji in code: 🏆
- **[minor]** `src/lib/streaks.ts:32` Emoji in code: 🌟
- **[minor]** `src/lib/streaks.ts:33` Emoji in code: 💎
## `learning_ai_jarvis_jr`
**Counts:** critical=0 · major=0 · minor=15 · total=15
- **[minor]** `web/src/app/(app)/settings/page.tsx:72` Emoji in code: 🌙
- **[minor]** `web/src/app/(app)/dashboard/page.tsx:20` Emoji in code: 🎯
- **[minor]** `web/src/app/(app)/dashboard/page.tsx:27` Emoji in code: 🌍
- **[minor]** `web/src/app/(app)/history/page.tsx:34` Emoji in code: 📋
- **[minor]** `web/src/components/Sidebar.tsx:8` Emoji in code: 👥
- **[minor]** `web/src/components/Sidebar.tsx:9` Emoji in code: 📋
- **[minor]** `web/src/components/Sidebar.tsx:10` Emoji in code: 📊
- **[minor]** `web/src/components/Sidebar.tsx:11` Emoji in code: 🏪
- **[minor]** `web/src/lib/share.ts:40` Emoji in code: 🏆
- **[minor]** `web/src/lib/share.ts:41` Emoji in code: 🔥
- **[minor]** `web/src/lib/share.ts:42` Emoji in code: 📊
- **[minor]** `web/src/lib/share.ts:44` Emoji in code: 📈
- **[minor]** `web/src/lib/share.ts:61` Emoji in code: 💡
- **[minor]** `android/app/src/main/java/com/jarvisjr/app/ui/screens/HistoryScreen.kt:33` Emoji in code: 📋
- **[minor]** `android/app/src/main/java/com/jarvisjr/app/ui/screens/ProgressScreen.kt:33` Emoji in code: 📊
## `learning_ai_peakpulse`
**Counts:** critical=0 · major=0 · minor=1 · total=1
- **[minor]** `backend/src/modules/peak-sessions/repository.ts:31` any type: const decrypted = await getEncryptor().decrypt(doc.notes as any, {
## `learning_ai_notes`
**Counts:** critical=0 · major=0 · minor=11 · total=11
- **[minor]** `web/src/app/(app)/workspaces/page.tsx:198` any type: <Badge variant="neutral">owner:any</Badge>
- **[minor]** `web/src/app/(app)/workspaces/page.tsx:199` — any type: <Badge variant="neutral">visibility:any</Badge>
- **[minor]** `backend/src/lib/request-context.ts:15` — any type: return _ctx.getRequestProductId(req as any);
- **[minor]** `backend/src/lib/request-context.ts:20` — any type: return _ctx.getUserId(req as any);
- **[minor]** `mobile/src/app/(tabs)/capture.tsx:16` — Emoji in code: 📷
- **[minor]** `mobile/src/app/(tabs)/capture.tsx:17` — Emoji in code: 🎙
- **[minor]** `mobile/src/app/(tabs)/capture.tsx:18` — Emoji in code: 🔗
- **[minor]** `mobile/src/app/(tabs)/capture.tsx:19` — Emoji in code: 📄
- **[minor]** `mobile/src/app/(tabs)/capture.tsx:20` — Emoji in code: 📋
- **[minor]** `mobile/src/app/(tabs)/capture/scan.tsx:21` — Emoji in code: 📄
- **[minor]** `mobile/src/app/(tabs)/capture/voice.tsx:22` — Emoji in code: 🎙
## `learning_ai_flowmonk`
**Counts:** critical=0 · major=107 · minor=4 · total=111
- **[minor]** `web/src/app/(app)/tasks/page.tsx:153` — any type: { value: '', label: 'Energy: any' },
- **[minor]** `backend/src/lib/scheduler/engine.ts:468` — any type: // Priority 3: any remaining slot (no zone match)
- **[minor]** `backend/src/modules/tasks/repository.ts:28` — any type: const decrypted = await getEncryptor().decrypt(task.description as any, {
- **[major]** `mobile/src/app/index.tsx:57` — Hardcoded hex color: #07111f
- **[major]** `mobile/src/app/index.tsx:59` — Hardcoded hex color: #5ae68c
- **[major]** `mobile/src/app/index.tsx:60` — Hardcoded hex color: #eff4ff
- **[major]** `mobile/src/app/index.tsx:61` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/index.tsx:64` — Hardcoded hex color: #0f1b2d
- **[major]** `mobile/src/app/index.tsx:68` — Hardcoded hex color: #eff4ff
- **[major]** `mobile/src/app/index.tsx:70` — Hardcoded hex color: #07111f
- **[major]** `mobile/src/app/index.tsx:73` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/urgent.tsx:39` — Hardcoded hex color: #ef4444
- **[major]** `mobile/src/app/urgent.tsx:69` — Hardcoded hex color: #07111f
- **[major]** `mobile/src/app/urgent.tsx:70` — Hardcoded hex color: #eff4ff
- **[major]** `mobile/src/app/urgent.tsx:71` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/urgent.tsx:74` — Hardcoded hex color: #22170a
- **[major]** `mobile/src/app/urgent.tsx:79` — Hardcoded hex color: #eff4ff
- **[major]** `mobile/src/app/urgent.tsx:80` — Hardcoded hex color: #d9c7a4
- **[major]** `mobile/src/app/urgent.tsx:81` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/urgent.tsx:83` — Hardcoded hex color: #5b4112
- **[major]** `mobile/src/app/urgent.tsx:84` — Hardcoded hex color: #5ae68c
- **[major]** `mobile/src/app/urgent.tsx:85` — Hardcoded hex color: #f59e0b
- **[major]** `mobile/src/app/urgent.tsx:86` — Hardcoded hex color: #5a8cff
- **[major]** `mobile/src/app/urgent.tsx:88` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/login.tsx:31` — Hardcoded hex color: #5a6a82
- **[major]** `mobile/src/app/login.tsx:40` — Hardcoded hex color: #5a6a82
- **[major]** `mobile/src/app/login.tsx:54` — Hardcoded hex color: #07111f
- **[major]** `mobile/src/app/login.tsx:55` — Hardcoded hex color: #0f1b2d
- **[major]** `mobile/src/app/login.tsx:56` — Hardcoded hex color: #5ae68c
- **[major]** `mobile/src/app/login.tsx:57` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/login.tsx:58` — Hardcoded hex color: #07111f
- **[major]** `mobile/src/app/login.tsx:59` — Hardcoded hex color: #5ae68c
- **[major]** `mobile/src/app/login.tsx:60` — Hardcoded hex color: #07111f
- **[major]** `mobile/src/app/tasks.tsx:7` — Hardcoded hex color: #ef4444
- **[major]** `mobile/src/app/tasks.tsx:8` — Hardcoded hex color: #f59e0b
- **[major]** `mobile/src/app/tasks.tsx:9` — Hardcoded hex color: #5a8cff
- **[major]** `mobile/src/app/tasks.tsx:10` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/tasks.tsx:69` — Hardcoded hex color: #5ae68c
- **[major]** `mobile/src/app/tasks.tsx:74` — Hardcoded hex color: #5a8cff
- **[major]** `mobile/src/app/tasks.tsx:79` — Hardcoded hex color: #f59e0b
- **[major]** `mobile/src/app/tasks.tsx:83` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/tasks.tsx:98` — Hardcoded hex color: #07111f
- **[major]** `mobile/src/app/tasks.tsx:99` — Hardcoded hex color: #eff4ff
- **[major]** `mobile/src/app/tasks.tsx:100` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/tasks.tsx:102` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/tasks.tsx:104` — Hardcoded hex color: #0f1b2d
- **[major]** `mobile/src/app/tasks.tsx:107` — Hardcoded hex color: #ef4444
- **[major]** `mobile/src/app/tasks.tsx:110` — Hardcoded hex color: #eff4ff
- **[major]** `mobile/src/app/tasks.tsx:111` — Hardcoded hex color: #fff
- **[major]** `mobile/src/app/tasks.tsx:112` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/tasks.tsx:114` — Hardcoded hex color: #24344d
- **[major]** `mobile/src/app/schedule.tsx:7` — Hardcoded hex color: #5a8cff
- **[major]** `mobile/src/app/schedule.tsx:8` — Hardcoded hex color: #5ae68c
- **[major]** `mobile/src/app/schedule.tsx:9` — Hardcoded hex color: #e879f9
- **[major]** `mobile/src/app/schedule.tsx:10` — Hardcoded hex color: #f59e0b
- **[major]** `mobile/src/app/schedule.tsx:71` — Hardcoded hex color: #24344d
- **[major]** `mobile/src/app/schedule.tsx:81` — Hardcoded hex color: #5ae68c
- **[major]** `mobile/src/app/schedule.tsx:84` — Hardcoded hex color: #f59e0b
- **[major]** `mobile/src/app/schedule.tsx:87` — Hardcoded hex color: #5a8cff
- **[major]** `mobile/src/app/schedule.tsx:105` — Hardcoded hex color: #07111f
- **[major]** `mobile/src/app/schedule.tsx:107` — Hardcoded hex color: #eff4ff
- **[major]** `mobile/src/app/schedule.tsx:108` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/schedule.tsx:109` — Hardcoded hex color: #5ae68c
- **[major]** `mobile/src/app/schedule.tsx:110` — Hardcoded hex color: #07111f
- **[major]** `mobile/src/app/schedule.tsx:113` — Hardcoded hex color: #0f1b2d
- **[major]** `mobile/src/app/schedule.tsx:117` — Hardcoded hex color: #5a8cff
- **[major]** `mobile/src/app/schedule.tsx:118` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/schedule.tsx:120` — Hardcoded hex color: #eff4ff
- **[major]** `mobile/src/app/schedule.tsx:121` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/schedule.tsx:123` — Hardcoded hex color: #24344d
- **[major]** `mobile/src/app/schedule.tsx:125` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/_layout.tsx:11` — Hardcoded hex color: #07111f
- **[major]** `mobile/src/app/flows.tsx:55` — Hardcoded hex color: #07111f
- **[major]** `mobile/src/app/flows.tsx:56` — Hardcoded hex color: #eff4ff
- **[major]** `mobile/src/app/flows.tsx:57` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/flows.tsx:60` — Hardcoded hex color: #0f1b2d
- **[major]** `mobile/src/app/flows.tsx:65` — Hardcoded hex color: #eff4ff
- **[major]** `mobile/src/app/flows.tsx:66` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/flows.tsx:67` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/flows.tsx:69` — Hardcoded hex color: #5a6a82
- **[major]** `mobile/src/app/flows.tsx:71` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/capture.tsx:44` — Hardcoded hex color: #5a6a82
- **[major]** `mobile/src/app/capture.tsx:71` — Hardcoded hex color: #5a6a82
- **[major]** `mobile/src/app/capture.tsx:83` — Hardcoded hex color: #07111f
- **[major]** `mobile/src/app/capture.tsx:84` — Hardcoded hex color: #eff4ff
- **[major]** `mobile/src/app/capture.tsx:86` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/capture.tsx:88` — Hardcoded hex color: #0f1b2d
- **[major]** `mobile/src/app/capture.tsx:89` — Hardcoded hex color: #eff4ff
- **[major]** `mobile/src/app/capture.tsx:94` — Hardcoded hex color: #24344d
- **[major]** `mobile/src/app/capture.tsx:96` — Hardcoded hex color: #5a8cff
- **[major]** `mobile/src/app/capture.tsx:97` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/capture.tsx:98` — Hardcoded hex color: #fff
- **[major]** `mobile/src/app/capture.tsx:100` — Hardcoded hex color: #5ae68c
- **[major]** `mobile/src/app/capture.tsx:102` — Hardcoded hex color: #07111f
- **[major]** `mobile/src/app/recommendations.tsx:7` — Hardcoded hex color: #ef4444
- **[major]** `mobile/src/app/recommendations.tsx:8` — Hardcoded hex color: #f59e0b
- **[major]** `mobile/src/app/recommendations.tsx:9` — Hardcoded hex color: #5a8cff
- **[major]** `mobile/src/app/recommendations.tsx:50` — Hardcoded hex color: #24344d
- **[major]** `mobile/src/app/recommendations.tsx:78` — Hardcoded hex color: #07111f
- **[major]** `mobile/src/app/recommendations.tsx:79` — Hardcoded hex color: #eff4ff
- **[major]** `mobile/src/app/recommendations.tsx:80` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/recommendations.tsx:83` — Hardcoded hex color: #0f1b2d
- **[major]** `mobile/src/app/recommendations.tsx:88` — Hardcoded hex color: #eff4ff
- **[major]** `mobile/src/app/recommendations.tsx:89` — Hardcoded hex color: #5a6a82
- **[major]** `mobile/src/app/recommendations.tsx:90` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/recommendations.tsx:92` — Hardcoded hex color: #5ae68c
- **[major]** `mobile/src/app/recommendations.tsx:93` — Hardcoded hex color: #07111f
- **[major]** `mobile/src/app/recommendations.tsx:94` — Hardcoded hex color: #24344d
- **[major]** `mobile/src/app/recommendations.tsx:95` — Hardcoded hex color: #a8b4c8
- **[major]** `mobile/src/app/recommendations.tsx:97` — Hardcoded hex color: #a8b4c8
- **[minor]** `web/src/app/(app)/settings/page.tsx:74` — Emoji in code: 🌙
## `learning_ai_trails`
**Counts:** critical=0 · major=0 · minor=1 · total=1
- **[minor]** `web/src/app/(app)/settings/page.tsx:42` — Emoji in code: 🌙
## `learning_ai_local_memory_gpt`
✅ No violations found.
## `learning_ai_efforise`
**Counts:** critical=0 · major=39 · minor=10 · total=49
- **[minor]** `backend/src/lib/request-context.ts:14` — any type: return _ctx.getRequestProductId(req as any);
- **[minor]** `backend/src/lib/request-context.ts:19` — any type: return _ctx.getUserId(req as any);
- **[minor]** `client/src/components/ui/dialog.tsx:107` — any type: const isCurrentlyComposing = (e as any).isComposing || isComposing();
- **[minor]** `client/src/components/ui/textarea.tsx:24` — any type: const isComposing = (e.nativeEvent as any).isComposing || dialogCompositio
- **[minor]** `client/src/components/ui/input.tsx:25` — any type: const isComposing = (e.nativeEvent as any).isComposing || dialogCompositio
- **[minor]** `client/src/hooks/usePersistFn.ts:3` — any type: type noop = (...args: any[]) => any;
- **[major]** `mobile/src/theme/colors.ts:3` — Hardcoded hex color: #0C0F0E
- **[major]** `mobile/src/theme/colors.ts:4` — Hardcoded hex color: #141A18
- **[major]** `mobile/src/theme/colors.ts:7` — Hardcoded hex color: #1A2320
- **[major]** `mobile/src/theme/colors.ts:8` — Hardcoded hex color: #243029
- **[major]** `mobile/src/theme/colors.ts:11` — Hardcoded hex color: #2D3B36
- **[major]** `mobile/src/theme/colors.ts:12` — Hardcoded hex color: #1E2B26
- **[major]** `mobile/src/theme/colors.ts:15` — Hardcoded hex color: #E8F0EC
- **[major]** `mobile/src/theme/colors.ts:16` — Hardcoded hex color: #8FA89C
- **[major]** `mobile/src/theme/colors.ts:17` — Hardcoded hex color: #5E7A6D
- **[major]** `mobile/src/theme/colors.ts:20` — Hardcoded hex color: #34D399
- **[major]** `mobile/src/theme/colors.ts:21` — Hardcoded hex color: #059669
- **[major]** `mobile/src/theme/colors.ts:24` — Hardcoded hex color: #34D399
- **[major]** `mobile/src/theme/colors.ts:25` — Hardcoded hex color: #FBBF24
- **[major]** `mobile/src/theme/colors.ts:26` — Hardcoded hex color: #F87171
- **[major]** `mobile/src/theme/colors.ts:29` — Hardcoded hex color: #6EE7B7
- **[major]** `mobile/src/theme/colors.ts:30` — Hardcoded hex color: #34D399
- **[major]** `mobile/src/theme/colors.ts:31` — Hardcoded hex color: #059669
- **[major]** `client/src/index.css:55` — Hardcoded hex color: #059669
- **[major]** `client/src/index.css:125` — Hardcoded hex color: #34d399
- **[major]** `client/src/components/ui/chart.tsx:56` — Hardcoded hex color: #ccc
- **[major]** `client/src/components/Sidebar.tsx:54` — Hardcoded hex color: #fff
- **[major]** `client/src/components/Sidebar.tsx:111` — Hardcoded hex color: #fff
- **[major]** `client/src/pages/app/Dashboard.tsx:49` — Hardcoded hex color: #fff
- **[major]** `client/src/pages/app/Dashboard.tsx:64` — Hardcoded hex color: #f59e0b
- **[major]** `client/src/pages/app/Dashboard.tsx:65` — Hardcoded hex color: #ef4444
- **[major]** `client/src/pages/app/Dashboard.tsx:66` — Hardcoded hex color: #8b5cf6
- **[major]** `client/src/pages/app/Dashboard.tsx:184` — Hardcoded hex color: #34d399
- **[major]** `client/src/pages/app/Dashboard.tsx:185` — Hardcoded hex color: #f59e0b
- **[major]** `client/src/pages/app/Dashboard.tsx:186` — Hardcoded hex color: #8b5cf6
- **[major]** `client/src/pages/app/Identity.tsx:7` — Hardcoded hex color: #059669
- **[major]** `client/src/pages/app/Identity.tsx:254` — Hardcoded hex color: #ef4444
- **[major]** `client/src/pages/app/Identity.tsx:279` — Hardcoded hex color: #ef4444
- **[major]** `client/src/pages/app/Insights.tsx:17` — Hardcoded hex color: #34d399
- **[major]** `client/src/pages/app/Insights.tsx:18` — Hardcoded hex color: #f59e0b
- **[major]** `client/src/pages/app/Insights.tsx:19` — Hardcoded hex color: #8b5cf6
- **[major]** `client/src/pages/app/Insights.tsx:104` — Hardcoded hex color: #f59e0b
- **[major]** `client/src/pages/app/Log.tsx:8` — Hardcoded hex color: #34d399
- **[major]** `client/src/pages/app/Log.tsx:9` — Hardcoded hex color: #f59e0b
- **[major]** `client/src/pages/app/Log.tsx:10` — Hardcoded hex color: #8b5cf6
- **[minor]** `client/src/pages/app/Dashboard.tsx:139` — Emoji in code: 🎯
- **[minor]** `client/src/pages/app/Identity.tsx:6` — Emoji in code: 🎯
- **[minor]** `client/src/pages/app/Identity.tsx:243` — Emoji in code: 🎯
- **[minor]** `client/src/pages/app/Identity.tsx:272` — Emoji in code: 🎯
## `learning_ai_local_llms`
**Counts:** critical=0 · major=0 · minor=1 · total=1
- **[minor]** `dashboard/src/app/lib/format.ts:61` — Emoji in code: 👁
## `learning_ai_talk2obsidian`
✅ No violations found.
## `learning_ai_smart_auth`
✅ No violations found.
## `learning_ai_auth_app`
✅ No violations found.
## `learning_ai_productivity_web`
**Counts:** critical=0 · major=0 · minor=6 · total=6
- **[minor]** `src/app/tools/markdown-preview/page.tsx:36` — Emoji in code: 🕐
- **[minor]** `src/lib/tools-registry.ts:27` — Emoji in code: 📝
- **[minor]** `src/lib/tools-registry.ts:28` — Emoji in code: 🔐
- **[minor]** `src/lib/tools-registry.ts:29` — Emoji in code: 🔄
- **[minor]** `src/lib/tools-registry.ts:30` — Emoji in code: 🎨
- **[minor]** `src/lib/tools-registry.ts:31` — Emoji in code: 📊
## `oss/learning_ai_claw-cowork`
**Counts:** critical=0 · major=14 · minor=5 · total=19
- **[major]** `plugins/bytelyst-scaffolder/main.js:182` — console.log: console.log(JSON.stringify({ error: "no input provided" }));
- **[major]** `plugins/bytelyst-scaffolder/main.js:190` — console.log: console.log(
- **[major]** `plugins/bytelyst-scaffolder/main.js:205` — console.log: console.log(JSON.stringify(result));
- **[major]** `plugins/bytelyst-scaffolder/main.js:207` — console.log: console.log(JSON.stringify({ error: e.message }));
- **[major]** `plugins/data-analyzer/main.js:152` — console.log: console.log(JSON.stringify({ error: "no input provided" }));
- **[major]** `plugins/data-analyzer/main.js:160` — console.log: console.log(JSON.stringify({ error: `invalid JSON input: ${e.message}` }));
- **[major]** `plugins/data-analyzer/main.js:171` — console.log: console.log(JSON.stringify({ error: "missing required parameters: file_p
- **[major]** `plugins/data-analyzer/main.js:177` — console.log: console.log(JSON.stringify({ error: "missing required parameter: file_pa
- **[major]** `plugins/data-analyzer/main.js:182` — console.log: console.log(JSON.stringify(result));
- **[major]** `plugins/data-analyzer/main.js:184` — console.log: console.log(JSON.stringify({ error: e.message }));
- **[major]** `plugins/product-backend-module/main.js:320` — console.log: console.log(JSON.stringify({ error: "no input provided" }));
- **[major]** `plugins/product-backend-module/main.js:328` — console.log: console.log(JSON.stringify({ error: `invalid JSON input: ${e.message}` }));
- **[major]** `plugins/product-backend-module/main.js:340` — console.log: console.log(JSON.stringify(result));
- **[major]** `plugins/product-backend-module/main.js:342` — console.log: console.log(JSON.stringify({ error: e.message }));
- **[minor]** `crates/cowork-desktop/src/components/ChatView.tsx:543` — any type: path: (f as any).path || f.name,
- **[minor]** `crates/cowork-desktop/src/components/ChatView.tsx:616` — any type: path: (f as any).path || f.name,
- **[minor]** `crates/cowork-desktop/src/App.tsx:84` — Emoji in code: 🚧
- **[minor]** `crates/cowork-desktop/src/cli.rs:39` — Emoji in code: 💭
- **[minor]** `crates/cowork-desktop/src/components/ChatView.tsx:141` — Emoji in code: 🔧
## `learning_ai_mac_tooling`
**Counts:** critical=0 · major=364 · minor=219 · total=583
- **[major]** `tools/network_transfer_audit.py:649` — Python print(): print(f" {YELLOW}⚠ LLM classification skipped: LLM_OPENAI_ENDPOINT or L
- **[major]** `tools/network_transfer_audit.py:708` — Python print(): print(f" {DIM}Classifying {len(to_classify)} unknown processes via LLM.
- **[major]** `tools/network_transfer_audit.py:729` — Python print(): print(f" {GREEN}✓ classified {len(classifications)} processes{RESET}")
- **[major]** `tools/network_transfer_audit.py:732` — Python print(): print(f" {RED}✗ LLM API error: {e}{RESET}")
- **[major]** `tools/network_transfer_audit.py:734` — Python print(): print(f" {RED}✗ Failed to parse LLM response: {e}{RESET}")
- **[major]** `tools/network_transfer_audit.py:1081` — Python print(): print(f"\n{BOLD}{CYAN}{'═' * 70}{RESET}")
- **[major]** `tools/network_transfer_audit.py:1082` — Python print(): print(f"{BOLD}{CYAN} Network Transfer Monitor{RESET}")
- **[major]** `tools/network_transfer_audit.py:1083` — Python print(): print(f"{BOLD}{CYAN}{'═' * 70}{RESET}")
- **[major]** `tools/network_transfer_audit.py:1085` — Python print(): print(f" {BOLD}Monitoring duration:{RESET} {mins:.0f} minutes")
- **[major]** `tools/network_transfer_audit.py:1086` — Python print(): print(f" {DIM}Taking initial nettop snapshot...{RESET}")
- **[major]** `tools/network_transfer_audit.py:1090` — Python print(): print(f" {GREEN}Start:{RESET} {from_dt.strftime('%Y-%m-%d %H:%M:%S')}")
- **[major]** `tools/network_transfer_audit.py:1091` — Python print(): print(f" {DIM}Monitoring network activity — waiting {mins:.0f} minutes...{R
- **[major]** `tools/network_transfer_audit.py:1107` — Python print(): print(f"\r {CYAN}[{bar}]{RESET} {pct:>3}% {r_min}m {r_sec:02d}s remain
- **[major]** `tools/network_transfer_audit.py:1109` — Python print(): print(f"\r {GREEN}[{'█' * 40}]{RESET} 100% Done! ")
- **[major]** `tools/network_transfer_audit.py:1111` — Python print(): print(f" {GREEN}End:{RESET} {to_dt.strftime('%Y-%m-%d %H:%M:%S')}")
- **[major]** `tools/network_transfer_audit.py:1113` — Python print(): print(f" {DIM}Taking final nettop snapshot...{RESET}")
- **[major]** `tools/network_transfer_audit.py:1135` — Python print(): print(f"\n {BOLD}Transfer during monitoring period:{RESET}")
- **[major]** `tools/network_transfer_audit.py:1136` — Python print(): print(f" {GREEN}↓ Inbound: {fmt_bytes(total_in)}{RESET}")
- **[major]** `tools/network_transfer_audit.py:1137` — Python print(): print(f" {YELLOW}↑ Outbound: {fmt_bytes(total_out)}{RESET}")
- **[major]** `tools/network_transfer_audit.py:1138` — Python print(): print(f" {DIM}Processes with activity: {len(deltas)}{RESET}\n")
- **[major]** `tools/network_transfer_audit.py:2236` — Python print(): print(f"\n{BOLD}{CYAN}{'═' * 70}{RESET}")
- **[major]** `tools/network_transfer_audit.py:2237` — Python print(): print(f"{BOLD}{CYAN} {title}{RESET}")
- **[major]** `tools/network_transfer_audit.py:2238` — Python print(): print(f"{BOLD}{CYAN}{'═' * 70}{RESET}")
- **[major]** `tools/network_transfer_audit.py:2242` — Python print(): print(f"\n{BOLD}{YELLOW}── {title} {'─' * (65 - len(title))}{RESET}")
- **[major]** `tools/network_transfer_audit.py:2246` — Python print(): print(f" {DIM}{msg}{RESET}")
- **[major]** `tools/network_transfer_audit.py:2263` — Python print(): print(f" {BOLD}Time window:{RESET} {window_str}")
- **[major]** `tools/network_transfer_audit.py:2266` — Python print(): print(f" {BOLD}Duration:{RESET} {hours:.1f} hours")
- **[major]** `tools/network_transfer_audit.py:2271` — Python print(): print(f" {DIM}Querying: subsystem == com.apple.networkd ...{RESET}")
- **[major]** `tools/network_transfer_audit.py:2294` — Python print(): print(f" {GREEN}Found {len(events)} events across {len(proc_counts)
- **[major]** `tools/network_transfer_audit.py:2295` — Python print(): print(f" {'Process':<22} {'PID':>7} {'Events':>7} {'Category':<16}
- **[major]** `tools/network_transfer_audit.py:2296` Python print(): print(f" {'─' * 22} {'─' * 7} {'─' * 7} {'─' * 16} {'─' * 11} {'─'
- **[major]** `tools/network_transfer_audit.py:2304` Python print(): print(f" {proc_name:<22} {sample_pid:>7} {count:>7} {category:
- **[major]** `tools/network_transfer_audit.py:2311` — Python print(): print(f" {DIM}Querying: subsystem == com.apple.dnssd ...{RESET}")
- **[major]** `tools/network_transfer_audit.py:2318` — Python print(): print(f" {GREEN}Found {sum(c for _, c in dns)} DNS events, {len(dns
- **[major]** `tools/network_transfer_audit.py:2319` — Python print(): print(f" {'Domain':<50} {'Hits':>6}")
- **[major]** `tools/network_transfer_audit.py:2320` — Python print(): print(f" {'─' * 50} {'─' * 6}")
- **[major]** `tools/network_transfer_audit.py:2322` — Python print(): print(f" {domain:<50} {count:>6}")
- **[major]** `tools/network_transfer_audit.py:2329` — Python print(): print(f" {DIM}Querying: subsystem == com.apple.alf ...{RESET}")
- **[major]** `tools/network_transfer_audit.py:2336` — Python print(): print(f" {GREEN}Found {len(fw_events)} firewall decisions{RESET}\n"
- **[major]** `tools/network_transfer_audit.py:2339` — Python print(): print(f" {color}{ev}{RESET}")
- **[major]** `tools/network_transfer_audit.py:2341` — Python print(): print(f" {DIM}... and {len(fw_events) - 15} more{RESET}")
- **[major]** `tools/network_transfer_audit.py:2355` — Python print(): print(f" {GREEN}Found {len(valid_downloads)} downloads{RESET}\n")
- **[major]** `tools/network_transfer_audit.py:2357` — Python print(): print(f" {BOLD}{dl['time']}{RESET} via {CYAN}{dl['agent']}{RES
- **[major]** `tools/network_transfer_audit.py:2360` — Python print(): print(f" ↓ {url_display}")
- **[major]** `tools/network_transfer_audit.py:2363` — Python print(): print(f" ← {DIM}{origin_display}{RESET}")
- **[major]** `tools/network_transfer_audit.py:2364` — Python print(): print()
- **[major]** `tools/network_transfer_audit.py:2385` — Python print(): print(f" {GREEN}Found {len(live)} active connections{RESET}\n")
- **[major]** `tools/network_transfer_audit.py:2386` — Python print(): print(f" {'Process':<16} {'PID':<7} {'Category':<15} {'Installe
- **[major]** `tools/network_transfer_audit.py:2387` Python print(): print(f" {'─' * 16} {'─' * 7} {'─' * 15} {'─' * 10} {'─' * 16}
- **[major]** `tools/network_transfer_audit.py:2391` Python print(): print(f" {c['process']:<16} {c['pid']:<7} {category:<15} {i
- **[major]** `tools/network_transfer_audit.py:2408` Python print(): print(f" {GREEN}Processes with active network I/O:{RESET}\n")
- **[major]** `tools/network_transfer_audit.py:2409` Python print(): print(f" {'Process':<25} {'Category':<14} {'Installer':<10} {'↓
- **[major]** `tools/network_transfer_audit.py:2410` Python print(): print(f" {'─' * 25} {'─' * 14} {'─' * 10} {'─' * 10} {'─' * 10}
- **[major]** `tools/network_transfer_audit.py:2418` Python print(): print(f" {p['process']:<25} {category:<14} {installer:<10}
- **[major]** `tools/network_transfer_audit.py:2524` Python print(): print(f" {GREEN}Connections: {ext} external, {intr} internal/loopba
- **[major]** `tools/network_transfer_audit.py:2529` Python print(): print(f" {BOLD}Top External Destinations:{RESET}")
- **[major]** `tools/network_transfer_audit.py:2530` Python print(): print(f" {'IP Address':<22} {'Connections':>12}")
- **[major]** `tools/network_transfer_audit.py:2531` — Python print(): print(f" {'─' * 22} {'─' * 12}")
- **[major]** `tools/network_transfer_audit.py:2533` — Python print(): print(f" {d['ip']:<22} {d['count']:>12}")
- **[major]** `tools/network_transfer_audit.py:2537` — Python print(): print(f"\n {BOLD}Top Remote Ports:{RESET}")
- **[major]** `tools/network_transfer_audit.py:2538` — Python print(): print(f" {'Port':<8} {'Service':<16} {'Connections':>12} {'Stat
- **[major]** `tools/network_transfer_audit.py:2539` — Python print(): print(f" {'─' * 8} {'─' * 16} {'─' * 12} {'─' * 10}")
- **[major]** `tools/network_transfer_audit.py:2542` — Python print(): print(f" {p['port']:<8} {p['service']:<16} {p['count']:>12}
- **[major]** `tools/network_transfer_audit.py:2553` — Python print(): print(f" {GREEN}Found {len(listeners)} listening ports{RESET}\n
- **[major]** `tools/network_transfer_audit.py:2554` — Python print(): print(f" {'Process':<20} {'PID':<7} {'User':<10} {'Address'}")
- **[major]** `tools/network_transfer_audit.py:2555` Python print(): print(f" {'─' * 20} {'─' * 7} {'─' * 10} {'─' * 30}")
- **[major]** `tools/network_transfer_audit.py:2557` Python print(): print(f" {l['process']:<20} {l['pid']:<7} {l['user']:<10} {
- **[major]** `tools/network_transfer_audit.py:2559` Python print(): print(f" {DIM}... and {len(listeners) - 20} more{RESET}")
- **[major]** `tools/network_transfer_audit.py:2586` Python print(): print(f" {DIM}Querying: com.apple.TCC, com.apple.locationd, com.apple.b
- **[major]** `tools/network_transfer_audit.py:2598` Python print(): print(f" {GREEN}Found {len(sensor_events)} sensor access events acr
- **[major]** `tools/network_transfer_audit.py:2599` Python print(): print(f" {'Process':<28} {'Sensor':<18} {'Count':>6} {'First Seen'
- **[major]** `tools/network_transfer_audit.py:2600` — Python print(): print(f" {'─' * 28} {'─' * 18} {'─' * 6} {'─' * 20} {'─' * 20} {'─
- **[major]** `tools/network_transfer_audit.py:2615` — Python print(): print(f" {color}{s['process']:<28} {s['sensor']:<18} {s['count'
- **[major]** `tools/network_transfer_audit.py:2640` Python print(): print(f" {GREEN}Wi-Fi:{RESET} {BOLD}{ssid}{RESET}{rssi_label} ch:{
- **[major]** `tools/network_transfer_audit.py:2642` Python print(): print(f" {DIM}Wi-Fi: not connected{RESET}")
- **[major]** `tools/network_transfer_audit.py:2649` Python print(): print(f" {GREEN}VPN:{RESET} {len(vpn['tunnels'])} active tunnel(s)
- **[major]** `tools/network_transfer_audit.py:2653` Python print(): print(f" {t['interface']}{ip_str} mtu={t['mtu']}")
- **[major]** `tools/network_transfer_audit.py:2655` Python print(): print(f" {DIM}VPN: no active tunnels{RESET}")
- **[major]** `tools/network_transfer_audit.py:2660` Python print(): print(f"\n {BOLD}Top Interfaces (cumulative):{RESET}")
- **[major]** `tools/network_transfer_audit.py:2661` Python print(): print(f" {'Interface':<12} {'↓ In':>14} {'↑ Out':>14}")
- **[major]** `tools/network_transfer_audit.py:2662` — Python print(): print(f" {'─' * 12} {'─' * 14} {'─' * 14}")
- **[major]** `tools/network_transfer_audit.py:2664` — Python print(): print(f" {iface:<12} {fmt_bytes(v['bytes_in']):>14} {fmt_bytes(
- **[major]** `tools/network_transfer_audit.py:2670` — Python print(): print(f"\n {BOLD}Proxy:{RESET} PAC → {pac}")
- **[major]** `tools/network_transfer_audit.py:2672` — Python print(): print(f" {BOLD}DNS:{RESET} {', '.join(net_config['dns_servers'][:4]
- **[major]** `tools/network_transfer_audit.py:2691` — Python print(): print(f" {GREEN}{len(arp)} devices on local network{RESET}")
- **[major]** `tools/network_transfer_audit.py:2694` — Python print(): print(f" {a['ip']:<18} {a['mac']:<20} {a['interface']}")
- **[major]** `tools/network_transfer_audit.py:2696` Python print(): print(f" {DIM}... and {len(arp) - 10} more{RESET}")
- **[major]** `tools/network_transfer_audit.py:2702` Python print(): print(f"\n {BOLD}Bluetooth:{RESET} {bt.get('controller_state','?')}
- **[major]** `tools/network_transfer_audit.py:2706` Python print(): print(f" {d['name']:<30} {d.get('type',''):<12} {status}")
- **[major]** `tools/network_transfer_audit.py:2711` Python print(): print(f"\n {BOLD}USB Devices:{RESET} {len(named_usb)} with vendor i
- **[major]** `tools/network_transfer_audit.py:2713` Python print(): print(f" {u['name']:<30} {u.get('vendor','')}")
- **[major]** `tools/network_transfer_audit.py:2717` Python print(): print(f"\n {YELLOW}{BOLD}⚠ External disks mounted:{RESET}")
- **[major]** `tools/network_transfer_audit.py:2719` Python print(): print(f" {d['mount_point']} ({d['filesystem']})")
- **[major]** `tools/network_transfer_audit.py:2737` Python print(): print(f" {name:<14} {color}{val}{RESET}")
- **[major]** `tools/network_transfer_audit.py:2739` Python print(): print(f" {'Stealth Mode':<14} {GREEN}on{RESET}")
- **[major]** `tools/network_transfer_audit.py:2741` Python print(): print(f"\n {RED}{BOLD}⚠ Firewall is DISABLED all inbound connecti
- **[major]** `tools/network_transfer_audit.py:2758` Python print(): print(f" {BOLD}Privilege escalations:{RESET} {len(auth_evts)}")
- **[major]** `tools/network_transfer_audit.py:2760` Python print(): print(f" {e['timestamp'][11:19]} {e['process']:<20} {e['righ
- **[major]** `tools/network_transfer_audit.py:2765` Python print(): print(f" {BOLD}Gatekeeper/XProtect:{RESET} {len(gk_events)} events
- **[major]** `tools/network_transfer_audit.py:2768` Python print(): print(f" {BOLD}Network Extension:{RESET} {len(ne_events)} VPN event
- **[major]** `tools/network_transfer_audit.py:2770` Python print(): print(f" {e['timestamp'][11:19]} {e['event_type']:<20} {e['d
- **[major]** `tools/network_transfer_audit.py:2783` Python print(): print(f" {RED if high_sev else GREEN}Found {len(anomalies)} anomali
- **[major]** `tools/network_transfer_audit.py:2786` Python print(): print(f" {icon} {BOLD}{a['process']}{RESET}: {a['detail']}")
- **[major]** `tools/network_transfer_audit.py:2788` Python print(): print(f" {GREEN}✓ No anomalies detected.{RESET}")
- **[major]** `tools/network_transfer_audit.py:2805` Python print(): print(f"\n {'Category':<18} {'Installer':<12} {'Procs':>6} {'Events
- **[major]** `tools/network_transfer_audit.py:2806` — Python print(): print(f" {'─' * 18} {'─' * 12} {'─' * 6} {'─' * 7} {'─' * 14}")
- **[major]** `tools/network_transfer_audit.py:2810` — Python print(): print(f" {cat:<18} {installers_str:<12} {len(stats['processes']
- **[major]** `tools/network_transfer_audit.py:2816` Python print(): print(f"\n {RED}{BOLD}⚠ HIGH RISK PROCESSES DETECTED:{RESET}")
- **[major]** `tools/network_transfer_audit.py:2819` Python print(): print(f" {BOLD}{p['process']}{RESET} [{p['category']}] In
- **[major]** `tools/network_transfer_audit.py:2821` Python print(): print(f"\n {GREEN}✓ No high-risk processes detected in this window
- **[major]** `tools/network_transfer_audit.py:2826` Python print(): print(f" Network connection events: {len(events)}")
- **[major]** `tools/network_transfer_audit.py:2827` Python print(): print(f" Unique DNS domains: {len(dns)}")
- **[major]** `tools/network_transfer_audit.py:2828` Python print(): print(f" Firewall decisions: {len(fw_events)}")
- **[major]** `tools/network_transfer_audit.py:2830` Python print(): print(f" Files downloaded: {len(valid_dl)}")
- **[major]** `tools/network_transfer_audit.py:2832` Python print(): print(f" Live connections: {len(live)}")
- **[major]** `tools/network_transfer_audit.py:2833` Python print(): print(f" Processes with network I/O: {len(nettop)}")
- **[major]** `tools/network_transfer_audit.py:2834` Python print(): print(f" Unique remote destinations: {dest_analysis.get('unique_de
- **[major]** `tools/network_transfer_audit.py:2835` Python print(): print(f" Listening ports: {len(listeners)}")
- **[major]** `tools/network_transfer_audit.py:2836` Python print(): print(f" Anomalies detected: {len(anomalies)}")
- **[major]** `tools/network_transfer_audit.py:2837` Python print(): print(f" {BOLD}Total data inbound: {GREEN}{fmt_bytes(total
- **[major]** `tools/network_transfer_audit.py:2838` Python print(): print(f" {BOLD}Total data outbound: {YELLOW}{fmt_bytes(tota
- **[major]** `tools/network_transfer_audit.py:2839` Python print(): print(f" Sensor access events: {len(sensor_events)}")
- **[major]** `tools/network_transfer_audit.py:2840` Python print(): print()
- **[major]** `tools/network_transfer_audit.py:2845` Python print(): print(json.dumps(report, indent=2, default=str))
- **[major]** `tools/network_transfer_audit.py:2854` Python print(): print(f"{GREEN}HTML report saved to: {output_html}{RESET}")
- **[major]** `tools/network_transfer_audit.py:2855` Python print(): print(f"{DIM}Open in browser: open \"{output_html}\"{RESET}")
- **[major]** `tools/network_transfer_audit.py:2873` Python print(): print(f"{RED}Error: session '{session_id}' not found in {db_path}{RESET}
- **[major]** `tools/network_transfer_audit.py:2885` Python print(): print(f" {BOLD}Session:{RESET} {session_id}")
- **[major]** `tools/network_transfer_audit.py:2886` Python print(): print(f" {BOLD}Status:{RESET} {session['status']}")
- **[major]** `tools/network_transfer_audit.py:2887` Python print(): print(f" {BOLD}Windows:{RESET} {session['windows_done']}")
- **[major]** `tools/network_transfer_audit.py:2888` Python print(): print(f" {BOLD}Range:{RESET} {from_dt.strftime('%Y-%m-%d %H:%M')} {to
- **[major]** `tools/network_transfer_audit.py:2889` Python print(): print()
- **[major]** `tools/network_transfer_audit.py:2894` Python print(): print(f" {YELLOW}No data windows found in the requested range.{RESET}")
- **[major]** `tools/network_transfer_audit.py:2898` Python print(): print(f" {GREEN}Found {len(windows)} windows covering this range{RESET}\n")
- **[major]** `tools/network_transfer_audit.py:2910` Python print(): print(f" {GREEN}{len(events)} events{RESET}")
- **[major]** `tools/network_transfer_audit.py:2917` Python print(): print(f" {GREEN}{len(dns)} unique domains{RESET}")
- **[major]** `tools/network_transfer_audit.py:2919` Python print(): print(f" {domain:<40} {count:>5} queries")
- **[major]** `tools/network_transfer_audit.py:2928` — Python print(): print(f" {GREEN}{len(fw_events)} events{RESET}")
- **[major]** `tools/network_transfer_audit.py:2936` — Python print(): print(f" {GREEN}{len(downloads)} files{RESET}")
- **[major]** `tools/network_transfer_audit.py:2949` — Python print(): print(f" {GREEN}{len(live)} unique connections{RESET}")
- **[major]** `tools/network_transfer_audit.py:2958` — Python print(): print(f" {GREEN}↓ {fmt_bytes(total_in)} ↑ {fmt_bytes(total_out)}{RESET
- **[major]** `tools/network_transfer_audit.py:2959` — Python print(): print(f"\n {'Process':<25} {'↓ In':>10} {'↑ Out':>10}")
- **[major]** `tools/network_transfer_audit.py:2960` — Python print(): print(f" {'─' * 25} {'─' * 10} {'─' * 10}")
- **[major]** `tools/network_transfer_audit.py:2962` — Python print(): print(f" {p['process']:<25} {fmt_bytes(p['bytes_in']):>10} {fmt_byt
- **[major]** `tools/network_transfer_audit.py:2980` — Python print(): print(f" {GREEN}{len(listeners)} unique listening ports{RESET}")
- **[major]** `tools/network_transfer_audit.py:2995` — Python print(): print(f" {GREEN}{len(sensor_raw)} events across {len(sensor_types)} sen
- **[major]** `tools/network_transfer_audit.py:2996` — Python print(): print(f"\n {'Process':<28} {'Sensor':<18} {'Count':>6}")
- **[major]** `tools/network_transfer_audit.py:2997` — Python print(): print(f" {'─' * 28} {'─' * 18} {'─' * 6}")
- **[major]** `tools/network_transfer_audit.py:3001` — Python print(): print(f" {color}{s['process']:<28} {s['sensor']:<18} {s['count']:>6
- **[major]** `tools/network_transfer_audit.py:3016` — Python print(): print(f" {GREEN}Wi-Fi:{RESET} {BOLD}{ssid}{RESET} ch:{latest_wifi.
- **[major]** `tools/network_transfer_audit.py:3019` — Python print(): print(f" {DIM}Wi-Fi: not connected{RESET}")
- **[major]** `tools/network_transfer_audit.py:3023` — Python print(): print(f" {YELLOW}⚠ Wi-Fi SSID changed during session: {', '.join(ss
- **[major]** `tools/network_transfer_audit.py:3035` — Python print(): print(f" {GREEN}VPN:{RESET} {len(tunnels)} tunnel(s)")
- **[major]** `tools/network_transfer_audit.py:3038` — Python print(): print(f" {t['interface']}{ip_str} mtu={t.get('mtu','')}")
- **[major]** `tools/network_transfer_audit.py:3045` — Python print(): print(f" Default route → {route_color}{default_iface}{RESET} "
- **[major]** `tools/network_transfer_audit.py:3052` — Python print(): print(f"\n {BOLD}Per-Interface Transfer (session delta):{RESET}")
- **[major]** `tools/network_transfer_audit.py:3053` — Python print(): print(f" {'Interface':<12} {'↓ In':>14} {'↑ Out':>14}")
- **[major]** `tools/network_transfer_audit.py:3054` — Python print(): print(f" {'─' * 12} {'─' * 14} {'─' * 14}")
- **[major]** `tools/network_transfer_audit.py:3056` — Python print(): print(f" {d['interface']:<12} {fmt_bytes(d['bytes_in']):>14} {fmt_b
- **[major]** `tools/network_transfer_audit.py:3061` — Python print(): print(f"\n {BOLD}Proxy:{RESET} PAC → {pac}")
- **[major]** `tools/network_transfer_audit.py:3063` — Python print(): print(f" {BOLD}DNS:{RESET} {', '.join(net_config['dns_servers'][:4])}")
- **[major]** `tools/network_transfer_audit.py:3083` — Python print(): print(f" {GREEN}{len(unique_arp)} unique LAN devices{RESET}")
- **[major]** `tools/network_transfer_audit.py:3086` — Python print(): print(f" {a['ip']:<18} {a['mac']:<20} {a['interface']}")
- **[major]** `tools/network_transfer_audit.py:3094` Python print(): print(f"\n {BOLD}Bluetooth:{RESET} {len(bt_unique)} devices")
- **[major]** `tools/network_transfer_audit.py:3097` Python print(): print(f" {b.get('name',''):<30} {b.get('device_type',''):<12} {st
- **[major]** `tools/network_transfer_audit.py:3105` Python print(): print(f"\n {BOLD}USB Devices:{RESET} {len(usb_unique)}")
- **[major]** `tools/network_transfer_audit.py:3107` Python print(): print(f" {u['name']:<30} {u.get('vendor','')}")
- **[major]** `tools/network_transfer_audit.py:3115` Python print(): print(f"\n {YELLOW}{BOLD}⚠ External disk:{RESET} {d['mount_point']}
- **[major]** `tools/network_transfer_audit.py:3130` Python print(): print(f" {name:<14} {color}{val}{RESET}")
- **[major]** `tools/network_transfer_audit.py:3132` Python print(): print(f"\n {RED}{BOLD}⚠ Firewall is DISABLED{RESET}")
- **[major]** `tools/network_transfer_audit.py:3150` Python print(): print(f" {BOLD}Privilege escalations:{RESET} {len(auth_rows)}")
- **[major]** `tools/network_transfer_audit.py:3153` Python print(): print(f" {ts} {e.get('process',''):<20} {e.get('auth_right','')[
- **[major]** `tools/network_transfer_audit.py:3155` Python print(): print(f" {BOLD}Gatekeeper/XProtect:{RESET} {len(gk_rows)} events")
- **[major]** `tools/network_transfer_audit.py:3157` Python print(): print(f" {BOLD}Network Extension:{RESET} {len(ne_rows)} VPN events")
- **[major]** `tools/network_transfer_audit.py:3197` Python print(): print(f" {color}{sensor:<24} {ok}/{total} ok {fmt_bytes(size):>10}
- **[major]** `tools/network_transfer_audit.py:3201` — Python print(): print(f"\n {BOLD}Total:{RESET} {total_ok}/{total_samples} successful "
- **[major]** `tools/network_transfer_audit.py:3254` — Python print(): print(f" {icon} {BOLD}{a['process']}{RESET}: {a['detail']}")
- **[major]** `tools/network_transfer_audit.py:3256` — Python print(): print(f" {GREEN}✓ No anomalies detected.{RESET}")
- **[major]** `tools/network_transfer_audit.py:3263` — Python print(): print(f" {'Window':<20} {'Net Evts':>9} {'DNS':>5} {'Conns':>6} {'↓ In'
- **[major]** `tools/network_transfer_audit.py:3264` — Python print(): print(f" {'─' * 20} {'─' * 9} {'─' * 5} {'─' * 6} {'─' * 10} {'─' * 10}
- **[major]** `tools/network_transfer_audit.py:3268` — Python print(): print(f" {ts:<20} {w['network_event_count']:>9} {w['dns_query_count
- **[major]** `tools/network_transfer_audit.py:3275` — Python print(): print(f" Windows analyzed: {totals.get('windows_count', 0)}")
- **[major]** `tools/network_transfer_audit.py:3276` — Python print(): print(f" Network connection events: {totals.get('total_network_events', 0
- **[major]** `tools/network_transfer_audit.py:3277` — Python print(): print(f" Unique DNS domains: {len(dns)}")
- **[major]** `tools/network_transfer_audit.py:3278` — Python print(): print(f" Firewall decisions: {totals.get('total_firewall_events',
- **[major]** `tools/network_transfer_audit.py:3279` — Python print(): print(f" Files downloaded: {totals.get('total_downloads', 0)}")
- **[major]** `tools/network_transfer_audit.py:3280` — Python print(): print(f" Sensor access events: {totals.get('total_sensor_events', 0)
- **[major]** `tools/network_transfer_audit.py:3281` — Python print(): print(f" {BOLD}Total data inbound: {GREEN}{fmt_bytes(totals.get('t
- **[major]** `tools/network_transfer_audit.py:3282` — Python print(): print(f" {BOLD}Total data outbound: {YELLOW}{fmt_bytes(totals.get('
- **[major]** `tools/network_transfer_audit.py:3283` — Python print(): print()
- **[major]** `tools/network_transfer_audit.py:3288` — Python print(): print(json.dumps(report, indent=2, default=str))
- **[major]** `tools/network_transfer_audit.py:3297` — Python print(): print(f"{GREEN}HTML report saved to: {output_html}{RESET}")
- **[major]** `tools/network_transfer_audit.py:3298` — Python print(): print(f"{DIM}Open in browser: open \"{output_html}\"{RESET}")
- **[major]** `tools/network_transfer_audit.py:3404` — Python print(): print(f"{RED}Error: invalid collect duration '{args.collect}'. Use e
- **[major]** `tools/network_transfer_audit.py:3415` — Python print(): print(f"{RED}Error: session '{args.data}' not found in {data_dir}/{R
- **[major]** `tools/network_transfer_audit.py:3453` — Python print(): print(f"{RED}Error: invalid monitor duration '{args.monitor}'. Use e
- **[major]** `tools/network_transfer_audit.py:3461` — Python print(): print(f"{RED}Error: --from time is after --to time{RESET}", file=sys.std
- **[major]** `tools/network_transfer_audit.py:3488` — Python print(): print(f" {YELLOW}No data directory found at {data_dir}{RESET}")
- **[major]** `tools/network_transfer_audit.py:3493` — Python print(): print(f" {YELLOW}No collected sessions found in {data_dir}/{RESET}")
- **[major]** `tools/network_transfer_audit.py:3499` — Python print(): print(f" {'Session ID':<22} {'Status':<12} {'Windows':>8} {'Started':<20} {
- **[major]** `tools/network_transfer_audit.py:3500` Python print(): print(f" {'─' * 22} {'─' * 12} {'─' * 8} {'─' * 20} {'─' * 20} {'─' * 10}")
- **[major]** `tools/network_transfer_audit.py:3511` Python print(): print(f" {s['id']:<22} {status_color}{s['status']:<12}{RESET} "
- **[major]** `tools/network_transfer_audit.py:3515` Python print(): print(f" {dbf.name:<22} {RED}error: {e}{RESET}")
- **[major]** `tools/network_transfer_audit.py:3517` Python print(): print(f"\n {DIM}Use --data SESSION_ID to query a session{RESET}")
- **[major]** `tools/collector.py:127` Python print(): print(f"\n {YELLOW}⚡ Resuming incomplete session {self._session_id}
- **[major]** `tools/collector.py:128` Python print(): print(f" {DIM}Windows already done: {resume_info['windows_done']},
- **[major]** `tools/collector.py:148` Python print(): print(f" {YELLOW}Resumed from window {self._seq}/{total_windows}{RE
- **[major]** `tools/collector.py:157` Python print(): print(f" {DIM}Collecting session baseline...{RESET}")
- **[major]** `tools/collector.py:164` Python print(): print(f" {GREEN}✓{RESET} Network config + security posture + se
- **[major]** `tools/collector.py:165` Python print(): print(f" {DIM}Sensor capture enabled: {', '.join(enabled_sensor
- **[major]** `tools/collector.py:167` Python print(): print(f" {YELLOW}⚠ Firewall is disabled{RESET}")
- **[major]** `tools/collector.py:169` Python print(): print(f" {YELLOW}⚠ Baseline collection warning: {e}{RESET}")
- **[major]** `tools/collector.py:182` Python print(): print(f" {GREEN}✓{RESET} Input activity monitor started (ke
- **[major]** `tools/collector.py:184` Python print(): print(f" {YELLOW}⚠ Input monitor unavailable (need Accessib
- **[major]** `tools/collector.py:186` Python print(): print(f" {YELLOW}⚠ Input monitor failed: {e}{RESET}")
- **[major]** `tools/collector.py:189` Python print(): print(f" {DIM}Taking initial nettop snapshot...{RESET}")
- **[major]** `tools/collector.py:206` Python print(): print(f"\n {CYAN}━━ Window {self._seq + 1}/{total_windows} "
- **[major]** `tools/collector.py:210` Python print(): print(f" {DIM}Querying network events...{RESET}", end="", flu
- **[major]** `tools/collector.py:212` Python print(): print(f" {len(net_events)} events")
- **[major]** `tools/collector.py:215` Python print(): print(f" {DIM}Querying DNS...{RESET}", end="", flush=True)
- **[major]** `tools/collector.py:217` Python print(): print(f" {len(dns)} domains")
- **[major]** `tools/collector.py:220` Python print(): print(f" {DIM}Querying firewall...{RESET}", end="", flush=Tru
- **[major]** `tools/collector.py:222` Python print(): print(f" {len(fw)} events")
- **[major]** `tools/collector.py:225` Python print(): print(f" {DIM}Querying downloads...{RESET}", end="", flush=Tr
- **[major]** `tools/collector.py:228` Python print(): print(f" {len(valid_dl)} files")
- **[major]** `tools/collector.py:231` Python print(): print(f" {DIM}Snapshotting live connections...{RESET}", end="
- **[major]** `tools/collector.py:233` — Python print(): print(f" {len(live)} connections")
- **[major]** `tools/collector.py:236` Python print(): print(f" {DIM}Computing nettop delta...{RESET}", end="", flus
- **[major]** `tools/collector.py:242` Python print(): print(f" ↓{_fmt_bytes(total_in)} ↑{_fmt_bytes(total_out)}")
- **[major]** `tools/collector.py:245` Python print(): print(f" {DIM}Querying sensor access...{RESET}", end="", flus
- **[major]** `tools/collector.py:247` Python print(): print(f" {len(sensor_events_raw)} events")
- **[major]** `tools/collector.py:250` Python print(): print(f" {DIM}Snapshotting listening ports...{RESET}", end=""
- **[major]** `tools/collector.py:252` Python print(): print(f" {len(listeners)} ports")
- **[major]** `tools/collector.py:255` Python print(): print(f" {DIM}Snapshotting process list...{RESET}", end="", f
- **[major]** `tools/collector.py:260` Python print(): print(f" {len(proc_list)} processes")
- **[major]** `tools/collector.py:263` Python print(): print(f" {DIM}Querying Wi-Fi / VPN / interfaces...{RESET}", e
- **[major]** `tools/collector.py:269` Python print(): print(f" Wi-Fi:{wifi_label} route:{vpn_label} {len(iface_bytes
- **[major]** `tools/collector.py:272` Python print(): print(f" {DIM}Scanning LAN & devices...{RESET}", end="", flus
- **[major]** `tools/collector.py:277` Python print(): print(f" {len(arp)} LAN {len(bt.get('devices',[]))} BT {len(us
- **[major]** `tools/collector.py:280` Python print(): print(f" {DIM}Querying security events...{RESET}", end="", fl
- **[major]** `tools/collector.py:284` Python print(): print(f" {len(gk_events)} GK {len(auth_evts)} auth {len(ne_eve
- **[major]** `tools/collector.py:288` Python print(): print(f" {DIM}Capturing sensor samples ({len(enabled_sens
- **[major]** `tools/collector.py:295` Python print(): print(f" {ok} ok {skip} skip {err} err blobs={_fmt_by
- **[major]** `tools/collector.py:298` Python print(): print(f" {YELLOW}⚠ {e}{RESET}")
- **[major]** `tools/collector.py:302` Python print(): print(f" {DIM}Running exfiltration monitors...{RESET}", end="
- **[major]** `tools/collector.py:316` — Python print(): print(f" git:{git_ct} exfil-proc:{launch_ct} staging:{stag
- **[major]** `tools/collector.py:319` Python print(): print(f" {YELLOW}⚠ {e}{RESET}")
- **[major]** `tools/collector.py:323` Python print(): print(f" {DIM}Writing to database...{RESET}", end="", flush=T
- **[major]** `tools/collector.py:353` Python print(): print(f" {YELLOW}⚠ exfil write: {e}{RESET}")
- **[major]** `tools/collector.py:356` Python print(): print(f" {DIM}Building process tree...{RESET}", end="", flush
- **[major]** `tools/collector.py:361` Python print(): print(f" {len(ptree)} processes {unsigned} unsigned")
- **[major]** `tools/collector.py:364` Python print(): print(f" {YELLOW}⚠ {e}{RESET}")
- **[major]** `tools/collector.py:368` Python print(): print(f" {DIM}Building connection graph...{RESET}", end="", f
- **[major]** `tools/collector.py:373` Python print(): print(f" {len(conn_graph)} edges {total_dests} unique desti
- **[major]** `tools/collector.py:376` Python print(): print(f" {YELLOW}⚠ {e}{RESET}")
- **[major]** `tools/collector.py:380` Python print(): print(f" {DIM}Scanning persistence mechanisms...{RESET}", end
- **[major]** `tools/collector.py:384` Python print(): print(f" {len(persist_items)} items {risky} flagged")
- **[major]** `tools/collector.py:387` Python print(): print(f" {YELLOW}⚠ {e}{RESET}")
- **[major]** `tools/collector.py:391` Python print(): print(f" {DIM}Capturing payloads...{RESET}", end="", flush=Tr
- **[major]** `tools/collector.py:395` Python print(): print(f" {len(payloads)} payloads {sensitive_ct} with sensi
- **[major]** `tools/collector.py:398` Python print(): print(f" {YELLOW}⚠ {e}{RESET}")
- **[major]** `tools/collector.py:403` Python print(): print(f" {DIM}Reading input activity...{RESET}", end="",
- **[major]** `tools/collector.py:411` Python print(): print(f" keys:{k} ({kpm:.0f}/min) clicks:{clicks_l} "
- **[major]** `tools/collector.py:415` Python print(): print(f" {YELLOW}⚠ {e}{RESET}")
- **[major]** `tools/collector.py:418` Python print(): print(f" {GREEN}✓{RESET}")
- **[major]** `tools/collector.py:422` Python print(): print(f" {GREEN}Window {self._seq} saved.{RESET} "
- **[major]** `tools/collector.py:426` Python print(): print(f"\n {RED}✗ Collection error: {e}{RESET}")
- **[major]** `tools/collector.py:433` Python print(): print(f" {DIM}Computing baselines & updating known processe
- **[major]** `tools/collector.py:437` Python print(): print(f" {len(new_procs)} new processes detected")
- **[major]** `tools/collector.py:439` Python print(): print(f" {GREEN}✓{RESET}")
- **[major]** `tools/collector.py:441` Python print(): print(f" {YELLOW}⚠ {e}{RESET}")
- **[major]** `tools/collector.py:485` Python print(): print(f"\r {DIM}[{bar}] next window in {int(sleep_for - slept):>3}s
- **[major]** `tools/collector.py:500` — Python print(): print(f"\n\n {YELLOW}⚠ {sig_name} received — finishing current window a
- **[major]** `tools/collector.py:504` — Python print(): print(f"\n{BOLD}{CYAN}{'═' * 70}{RESET}")
- **[major]** `tools/collector.py:505` — Python print(): print(f"{BOLD}{CYAN} Continuous Data Collector{RESET}")
- **[major]** `tools/collector.py:506` — Python print(): print(f"{BOLD}{CYAN}{'═' * 70}{RESET}")
- **[major]** `tools/collector.py:507` — Python print(): print(f" {BOLD}Duration:{RESET} {_fmt_duration(self.duration)}")
- **[major]** `tools/collector.py:509` — Python print(): print(f" {BOLD}Interval:{RESET} {self.interval}s ({interval_labe
- **[major]** `tools/collector.py:510` — Python print(): print(f" {BOLD}Total windows:{RESET} {total_windows}")
- **[major]** `tools/collector.py:511` — Python print(): print(f" {BOLD}Start:{RESET} {start_time.strftime('%Y-%m-%d %
- **[major]** `tools/collector.py:512` — Python print(): print(f" {BOLD}Expected end:{RESET} {end_time.strftime('%Y-%m-%d %H:
- **[major]** `tools/collector.py:513` — Python print(): print(f" {BOLD}Database:{RESET} {db_path}")
- **[major]** `tools/collector.py:514` — Python print(): print(f" {DIM}Press Ctrl+C to stop gracefully{RESET}")
- **[major]** `tools/collector.py:515` — Python print(): print()
- **[major]** `tools/collector.py:519` — Python print(): print(f"\n{BOLD}{CYAN}{'═' * 70}{RESET}")
- **[major]** `tools/collector.py:520` — Python print(): print(f" {BOLD}Collection {color}{status}{RESET}")
- **[major]** `tools/collector.py:521` — Python print(): print(f" {BOLD}Windows collected:{RESET} {self._seq}")
- **[major]** `tools/collector.py:522` — Python print(): print(f" {BOLD}Database:{RESET} {db_path}")
- **[major]** `tools/collector.py:523` — Python print(): print(f" {BOLD}Database size:{RESET} {_fmt_bytes(os.path.getsize(db
- **[major]** `tools/collector.py:524` — Python print(): print(f"{BOLD}{CYAN}{'═' * 70}{RESET}\n")
- **[major]** `tools/collector.py:556` — Python print(): print(f"\n {YELLOW}Received signal {signum}, shutting down daemon...{RE
- **[major]** `tools/collector.py:562` — Python print(): print(f"{BOLD}{CYAN}{'═' * 70}{RESET}")
- **[major]** `tools/collector.py:563` — Python print(): print(f"{BOLD} Sensor Audit Collector — Daemon Mode{RESET}")
- **[major]** `tools/collector.py:564` — Python print(): print(f"{DIM} Session duration: {_fmt_duration(session_duration)}")
- **[major]** `tools/collector.py:565` — Python print(): print(f" Collection interval: {_fmt_duration(interval)}")
- **[major]** `tools/collector.py:566` — Python print(): print(f" Data directory: {data_dir}{RESET}")
- **[major]** `tools/collector.py:567` — Python print(): print(f"{BOLD}{CYAN}{'═' * 70}{RESET}\n")
- **[major]** `tools/collector.py:572` — Python print(): print(f"\n {CYAN}━━ Starting session #{session_num} "
- **[major]** `tools/collector.py:581` — Python print(): print(f" {RED}✗ Session #{session_num} error: {e}{RESET}")
- **[major]** `tools/collector.py:587` — Python print(): print(f" {DIM}Next session in 10s...{RESET}")
- **[major]** `tools/collector.py:590` — Python print(): print(f"\n {GREEN}✓ Daemon stopped cleanly after {session_num} session(s){R
- **[major]** `tools/sample_capture.py:238` — Python print(): print(s)
- **[major]** `tools/secure_vault.py:329` — Python print(): print("Error: Password cannot be empty", file=sys.stderr)
- **[major]** `tools/secure_vault.py:334` — Python print(): print("Error: Passwords do not match", file=sys.stderr)
- **[major]** `tools/secure_vault.py:399` — Python print(): print(f"Vault '{result['name']}' created ({result['max_size']})")
- **[major]** `tools/secure_vault.py:400` — Python print(): print(f" Path: {result['vault_path']}")
- **[major]** `tools/secure_vault.py:402` — Python print(): print(f" Imported from: {args.source}")
- **[major]** `tools/secure_vault.py:407` — Python print(): print(f"Vault '{result['name']}' unlocked")
- **[major]** `tools/secure_vault.py:408` — Python print(): print(f" Mount point: {result['mount_point']}")
- **[major]** `tools/secure_vault.py:410` — Python print(): print(f" ({result['message']})")
- **[major]** `tools/secure_vault.py:414` — Python print(): print(f"Vault '{result['name']}' locked")
- **[major]** `tools/secure_vault.py:416` — Python print(): print(f" ({result['message']})")
- **[major]** `tools/secure_vault.py:421` — Python print(): print("No vaults are currently unlocked")
- **[major]** `tools/secure_vault.py:424` — Python print(): print(f" {r['name']}: {status}")
- **[major]** `tools/secure_vault.py:429` — Python print(): print("No vaults found. Create one with: secure_vault.py create
- **[major]** `tools/secure_vault.py:431` — Python print(): print(f"{'Name':<20} {'Status':<10} {'Size':<12} {'Created':<20} {'M
- **[major]** `tools/secure_vault.py:432` Python print(): print("-" * 90)
- **[major]** `tools/secure_vault.py:438` Python print(): print(f"{v['name']:<20} {status_icon} {v['status']:<7} {size:<12
- **[major]** `tools/secure_vault.py:443` Python print(): print(f"Vault: {s['name']}")
- **[major]** `tools/secure_vault.py:444` Python print(): print(f" Status: {status_icon}")
- **[major]** `tools/secure_vault.py:445` Python print(): print(f" Path: {s['vault_path']}")
- **[major]** `tools/secure_vault.py:446` Python print(): print(f" Max size: {s['max_size']}")
- **[major]** `tools/secure_vault.py:447` Python print(): print(f" On disk: {_fmt_bytes(s['size_on_disk'])}")
- **[major]** `tools/secure_vault.py:448` Python print(): print(f" Created: {s['created']}")
- **[major]** `tools/secure_vault.py:450` Python print(): print(f" Last unlocked: {s['last_unlocked']}")
- **[major]** `tools/secure_vault.py:452` Python print(): print(f" Mount point: {s['mount_point']}")
- **[major]** `tools/secure_vault.py:454` Python print(): print(f" Hint: {s['password_hint']}")
- **[major]** `tools/secure_vault.py:459` Python print(): print("Aborted.")
- **[major]** `tools/secure_vault.py:463` Python print(): print(f"Vault '{result['name']}' permanently destroyed")
- **[major]** `tools/secure_vault.py:466` Python print(): print("Enter current password:")
- **[major]** `tools/secure_vault.py:468` Python print(): print("Enter new password:")
- **[major]** `tools/secure_vault.py:471` Python print(): print(f"Password changed for vault '{result['name']}'")
- **[major]** `tools/secure_vault.py:474` Python print(): print(f"Access denied: {e}", file=sys.stderr)
- **[major]** `tools/secure_vault.py:477` Python print(): print(f"Error: {e}", file=sys.stderr)
- **[major]** `tools/input_monitor.py:196` Python print(): print(" pyobjc-framework-Quartz not installed input monitoring
- **[major]** `tools/input_monitor.py:213` Python print(): print(" CGEventTap failed grant Accessibility permission to Ter
- **[major]** `tools/input_monitor.py:438` Python print(): print("Input Monitor press Ctrl+C to stop")
- **[major]** `tools/input_monitor.py:439` Python print(): print("Requires Accessibility permission for Terminal/Python")
- **[major]** `tools/input_monitor.py:440` Python print(): print()
- **[major]** `tools/input_monitor.py:444` Python print(): print("Failed to start check Accessibility permissions")
- **[major]** `tools/input_monitor.py:451` Python print(): print(f"[{datetime.now().strftime('%H:%M:%S')}] "
- **[major]** `tools/input_monitor.py:461` Python print(): print(f" Top categories: {', '.join(f'{k}={v}' for k, v
- **[major]** `tools/input_monitor.py:465` Python print(): print(f" Top combos: {', '.join(f'{k}={v}' for k, v in t
- **[major]** `tools/input_monitor.py:467` Python print(): print("\nStopping...")
- **[major]** `tools/input_monitor.py:470` Python print(): print("\nFinal stats:")
- **[major]** `tools/input_monitor.py:471` Python print(): print(json.dumps(final, indent=2))
- **[minor]** `dashboard/src/api.ts:28` any type: async function put<T = any>(path: string, body: any): Promise<T> {
- **[minor]** `dashboard/src/api.ts:38` — any type: async function post<T = any>(path: string, body?: any): Promise<T> {
- **[minor]** `dashboard/src/api.ts:56` — any type: updateConfig: (data: any) => put('/config', data),
- **[minor]** `dashboard/src/pages/Reports.tsx:25` — any type: {reports.map((r: any) => (
- **[minor]** `dashboard/src/pages/Sessions.tsx:10` — any type: const STATUS_CFG: Record<string, { bg: string; icon: any; label: string }> = {
- **[minor]** `dashboard/src/pages/Sessions.tsx:37` — any type: sessions.forEach((s: any) => { if (s.status in c) (c as any)[s.status]++; })
- **[minor]** `dashboard/src/pages/Sessions.tsx:43` — any type: const totalSize = sessions.reduce((a: number, s: any) => a + (s.db_size || 0
- **[minor]** `dashboard/src/pages/Sessions.tsx:44` — any type: const totalWindows = sessions.reduce((a: number, s: any) => a + (s.windows_d
- **[minor]** `dashboard/src/pages/Sessions.tsx:51` — any type: if (statusFilter !== 'all') list = list.filter((s: any) => s.status === stat
- **[minor]** `dashboard/src/pages/Sessions.tsx:54` — any type: list = list.filter((s: any) =>
- **[minor]** `dashboard/src/pages/Sessions.tsx:58` — any type: list.sort((a: any, b: any) => {
- **[minor]** `dashboard/src/pages/Sessions.tsx:172` — any type: {filtered.map((s: any) => {
- **[minor]** `dashboard/src/pages/Vaults.tsx:44` — any type: } catch (e: any) {
- **[minor]** `dashboard/src/pages/Vaults.tsx:73` — any type: } catch (e: any) { flashErr(e.message); }
- **[minor]** `dashboard/src/pages/Vaults.tsx:79` — any type: catch (e: any) { flashErr(e.message); }
- **[minor]** `dashboard/src/pages/Vaults.tsx:84` — any type: catch (e: any) { flashErr(e.message); }
- **[minor]** `dashboard/src/pages/Vaults.tsx:108` — any type: } catch (e: any) { flashErr(e.message); }
- **[minor]** `dashboard/src/pages/SessionDetail.tsx:48` — any type: const isRunning = (s: any) => s?.status === 'running';
- **[minor]** `dashboard/src/pages/SessionDetail.tsx:162` — any type: const maxBytes = nettop.length ? Math.max(...nettop.map((n: any) => n.bytes_in
- **[minor]** `dashboard/src/pages/SessionDetail.tsx:198` — any type: } catch (e: any) { toast('error', 'Report failed', e.message); }
- **[minor]** `dashboard/src/pages/Dashboard.tsx:32` — any type: toast('success', 'Capture complete', `${results.filter((r: any) => r.statu
- **[minor]** `dashboard/src/pages/Dashboard.tsx:33` — any type: } catch (e: any) {
- **[minor]** `dashboard/src/pages/Dashboard.tsx:45` — any type: } catch (e: any) {
- **[minor]** `dashboard/src/pages/Dashboard.tsx:55` — any type: } catch (e: any) {
- **[minor]** `dashboard/src/pages/Dashboard.tsx:77` — any type: const unackedAlerts = (alerts || []).filter((a: any) => !a.acknowledged);
- **[minor]** `dashboard/src/pages/Dashboard.tsx:152` — any type: {unackedAlerts.filter((a: any) => a.severity === 'critical').len
- **[minor]** `dashboard/src/pages/Dashboard.tsx:223` — any type: {captureResult.map((r: any, i: number) => (
- **[minor]** `dashboard/src/pages/Dashboard.tsx:264` — any type: {sessions.slice(0, 8).map((s: any) => (
- **[minor]** `dashboard/src/pages/SampleViewer.tsx:21` — any type: function MetadataTree({ data, depth = 0 }: { data: any; depth?: number }) {
- **[minor]** `dashboard/src/pages/SampleViewer.tsx:163` — any type: {sample.metadata.running_apps?.slice(0, 15).map((a: any, i: numb
- **[minor]** `dashboard/src/pages/SessionCompare.tsx:50` — any type: {sessions?.map((s: any) => (
- **[minor]** `dashboard/src/pages/SessionCompare.tsx:60` — any type: {sessions?.map((s: any) => (
- **[minor]** `dashboard/src/pages/SessionCompare.tsx:151` — any type: {data.process_diff.map((p: any) => (
- **[minor]** `dashboard/src/pages/DataManagement.tsx:66` — any type: {sessionList.map((s: any) => (
- **[minor]** `dashboard/src/pages/Config.tsx:22` — any type: mutationFn: (data: any) => api.updateConfig(data),
- **[minor]** `dashboard/src/pages/Config.tsx:32` — any type: setLocal((prev: any) => ({
- **[minor]** `dashboard/src/pages/Config.tsx:38` — any type: const updateSensorParam = (sensor: string, param: string, value: any) => {
- **[minor]** `dashboard/src/pages/Config.tsx:39` — any type: setLocal((prev: any) => ({
- **[minor]** `dashboard/src/pages/Config.tsx:46` — any type: setLocal((prev: any) => ({ ...prev, schedule: { ...prev.schedule, [param]: v
- **[minor]** `dashboard/src/pages/Alerts.tsx:48` — any type: critical: alerts.filter((a: any) => a.severity === 'critical').length,
- **[minor]** `dashboard/src/pages/Alerts.tsx:49` — any type: warning: alerts.filter((a: any) => a.severity === 'warning').length,
- **[minor]** `dashboard/src/pages/Alerts.tsx:50` — any type: info: alerts.filter((a: any) => a.severity === 'info').length,
- **[minor]** `dashboard/src/pages/Alerts.tsx:51` — any type: unacked: alerts.filter((a: any) => !a.acknowledged).length,
- **[minor]** `dashboard/src/pages/Alerts.tsx:57` — any type: const cats = new Set(alerts.map((a: any) => a.category).filter(Boolean));
- **[minor]** `dashboard/src/pages/Alerts.tsx:64` — any type: if (sevFilter !== 'all') list = list.filter((a: any) => a.severity === sevFi
- **[minor]** `dashboard/src/pages/Alerts.tsx:65` — any type: if (ackFilter === 'unacked') list = list.filter((a: any) => !a.acknowledged)
- **[minor]** `dashboard/src/pages/Alerts.tsx:66` — any type: if (ackFilter === 'acked') list = list.filter((a: any) => a.acknowledged);
- **[minor]** `dashboard/src/pages/Alerts.tsx:67` — any type: if (catFilter !== 'all') list = list.filter((a: any) => a.category === catFi
- **[minor]** `dashboard/src/pages/Alerts.tsx:76` — any type: } catch (e: any) {
- **[minor]** `dashboard/src/pages/Alerts.tsx:170` — any type: {filtered.map((a: any) => {
- **[minor]** `dashboard/src/pages/Services.tsx:108` — any type: try { await api.stopCollection(); refetch(); toast('info', 'Coll
- **[minor]** `dashboard/src/pages/Services.tsx:114` — any type: try { await api.startCollection(3600, 300); refetch(); toast('su
- **[minor]** `dashboard/src/pages/ProcessDetail.tsx:39` — any type: ? Math.max(...data.bandwidth_timeline.map((w: any) => w.bytes_in + w.bytes_o
- **[minor]** `dashboard/src/pages/ProcessDetail.tsx:112` — any type: {data.bandwidth_timeline.map((w: any, i: number) => {
- **[minor]** `dashboard/src/pages/ProcessDetail.tsx:146` — any type: {data.connections.map((c: any, i: number) => (
- **[minor]** `dashboard/src/pages/ProcessDetail.tsx:172` — any type: {data.sensor_access.map((s: any, i: number) => (
- **[minor]** `dashboard/src/pages/Calendar.tsx:76` — any type: for (const s of (sessions || []) as any[]) {
- **[minor]** `dashboard/src/pages/Calendar.tsx:89` — any type: if (!map[k].find((x: any) => x.id === s.id)) map[k].push(s);
- **[minor]** `dashboard/src/pages/Calendar.tsx:100` — any type: for (const r of (reports || []) as any[]) {
- **[minor]** `dashboard/src/pages/Calendar.tsx:159` — any type: const result: any[] = [];
- **[minor]** `dashboard/src/pages/Calendar.tsx:161` — any type: for (const s of (sessions || []) as any[]) {
- **[minor]** `dashboard/src/pages/Calendar.tsx:180` — any type: return ((reports || []) as any[]).filter((r: any) => {
- **[minor]** `dashboard/src/pages/Calendar.tsx:257` — any type: {daySessions.slice(0, 4).map((s: any) => (
- **[minor]** `dashboard/src/pages/Calendar.tsx:261` — any type: {dayReports.slice(0, 3).map((r: any, ri: number) => (
- **[minor]** `dashboard/src/pages/Calendar.tsx:332` — any type: {selectedSessions.map((s: any) => (
- **[minor]** `dashboard/src/pages/Calendar.tsx:367` — any type: {selectedReports.map((r: any, i: number) => (
- **[minor]** `dashboard/src/pages/DataFlowMap.tsx:305` — any type: {(sessions || []).map((s: any) => (
- **[minor]** `dashboard/src/pages/session-tabs/ConnectionsTab.tsx:6` — any type: connGraphData: any;
- **[minor]** `dashboard/src/pages/session-tabs/ConnectionsTab.tsx:7` — any type: processTreeData: any;
- **[minor]** `dashboard/src/pages/session-tabs/ConnectionsTab.tsx:18` — any type: <Card label="Unique Destinations" value={new Set(edges.map((e: any) => e
- **[minor]** `dashboard/src/pages/session-tabs/ConnectionsTab.tsx:19` — any type: <Card label="Processes" value={new Set(edges.map((e: any) => e.process))
- **[minor]** `dashboard/src/pages/session-tabs/ConnectionsTab.tsx:20` — any type: <Card label="Total Outbound" value={fmtBytes(edges.reduce((a: number, e:
- **[minor]** `dashboard/src/pages/session-tabs/ConnectionsTab.tsx:26` any type: rows={edges.slice(0, 100).map((e: any) => [
- **[minor]** `dashboard/src/pages/session-tabs/ConnectionsTab.tsx:44` — any type: rows={tree.filter((p: any) => p.is_exfil_relevant || p.code_signed =
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:8` — any type: session: any;
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:9` — any type: insightsData: any;
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:10` — any type: summaryData: any;
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:12` — any type: windows: any[] | undefined;
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:13` — any type: nettop: any[];
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:17` — any type: processRisk: any;
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:18` — any type: screenCaptures: any[] | undefined;
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:33` — any type: {insightsData?.alerts?.filter((a: any) => a.severity === 'critical').map((
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:85` — any type: const timelineMax = Math.max(...windows.map((x: any) => (x.bytes_in_
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:88` — any type: {windows.map((w: any, i: number) => {
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:112` — any type: rows={nettop.slice(0, 20).map((n: any) => [
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:152` — any type: const highRisk = procs.filter((p: any) => p.risk_score >= 6);
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:175` — any type: {highRisk.map((p: any) => (
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:200` — any type: {procs.slice(0, 25).map((p: any) => (
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:227` — any type: {screenCaptures && screenCaptures.filter((s: any) => s.blob_url && s.blob_
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:228` — any type: <Section title={`📸 Screen Captures (${screenCaptures.filter((s: any) =>
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:231` — any type: .filter((s: any) => s.blob_url && s.blob_mime?.startsWith('image/'
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:233` — any type: .map((s: any) => (
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:246` — any type: {screenCaptures.filter((s: any) => s.blob_url).length > 12 && (
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:249` — any type: View all {screenCaptures.filter((s: any) => s.blob_url).length} sc
- **[minor]** `dashboard/src/pages/session-tabs/PayloadsTab.tsx:6` — any type: payloadData: any;
- **[minor]** `dashboard/src/pages/session-tabs/PayloadsTab.tsx:12` — any type: const sourceTypes = [...new Set(samples.map((s: any) => s.source_type))] as st
- **[minor]** `dashboard/src/pages/session-tabs/PayloadsTab.tsx:19` — any type: <Card label="With Sensitive Data" value={samples.filter((s: any) => s.se
- **[minor]** `dashboard/src/pages/session-tabs/PayloadsTab.tsx:20` — any type: <Card label="Total Size" value={fmtBytes(samples.reduce((a: number, s: a
- **[minor]** `dashboard/src/pages/session-tabs/PayloadsTab.tsx:23` any type: <Section key={st} title={`${st.replace(/_/g, ' ').toUpperCase()} (${samp
- **[minor]** `dashboard/src/pages/session-tabs/PayloadsTab.tsx:24` any type: {samples.filter((s: any) => s.source_type === st).slice(0, 30).map((s:
- **[minor]** `dashboard/src/pages/session-tabs/shared.tsx:10` — any type: export function Table({ headers, rows }: { headers: string[]; rows: any[][] }) {
- **[minor]** `dashboard/src/pages/session-tabs/shared.tsx:48` — any type: export const POSTURE_OK: Record<string, (v: any) => boolean> = {
- **[minor]** `dashboard/src/pages/session-tabs/SamplesTab.tsx:7` — any type: samples: any[] | undefined;
- **[minor]** `dashboard/src/pages/session-tabs/SamplesTab.tsx:14` — any type: windows: any[] | undefined;
- **[minor]** `dashboard/src/pages/session-tabs/SamplesTab.tsx:58` — any type: {windows.map((w: any) => (
- **[minor]** `dashboard/src/pages/session-tabs/SamplesTab.tsx:67` — any type: {[...(samples || [])].sort((a: any, b: any) => {
- **[minor]** `dashboard/src/pages/session-tabs/SamplesTab.tsx:74` — any type: }).map((s: any) => {
- **[minor]** `dashboard/src/pages/session-tabs/SecurityTab.tsx:4` — any type: const POSTURE_OK: Record<string, (v: any) => boolean> = {
- **[minor]** `dashboard/src/pages/session-tabs/SecurityTab.tsx:10` — any type: security: any;
- **[minor]** `dashboard/src/pages/session-tabs/SecurityTab.tsx:22` — any type: rows={security.sensor_events.slice(0, 50).map((e: any) => [
- **[minor]** `dashboard/src/pages/session-tabs/SecurityTab.tsx:34` — any type: rows={security.gatekeeper.slice(0, 50).map((e: any) => [
- **[minor]** `dashboard/src/pages/session-tabs/SecurityTab.tsx:46` — any type: rows={security.auth_events.slice(0, 50).map((e: any) => [
- **[minor]** `dashboard/src/pages/session-tabs/InputTab.tsx:5` — any type: inputStats: any;
- **[minor]** `dashboard/src/pages/session-tabs/InputTab.tsx:6` — any type: inputTimeline: any[];
- **[minor]** `dashboard/src/pages/session-tabs/InputTab.tsx:21` — any type: const totalCatKeys = cats.reduce((s: number, c: any) => s + c.count, 0) || 1;
- **[minor]** `dashboard/src/pages/session-tabs/InputTab.tsx:22` — any type: const maxTimelineKeys = timeline.length ? Math.max(...timeline.map((t: any) =>
- **[minor]** `dashboard/src/pages/session-tabs/InputTab.tsx:50` — any type: {cats.map((c: any) => {
- **[minor]** `dashboard/src/pages/session-tabs/InputTab.tsx:75` — any type: rows={apps.map((a: any) => [
- **[minor]** `dashboard/src/pages/session-tabs/InputTab.tsx:89` — any type: rows={combos.map((c: any) => [
- **[minor]** `dashboard/src/pages/session-tabs/InputTab.tsx:109` — any type: {timeline.map((w: any, i: number) => (
- **[minor]** `dashboard/src/pages/session-tabs/PermissionsTab.tsx:6` — any type: permissionsData: any;
- **[minor]** `dashboard/src/pages/session-tabs/PermissionsTab.tsx:16` — any type: const allProcs: any[] = permissionsData.processes || [];
- **[minor]** `dashboard/src/pages/session-tabs/PermissionsTab.tsx:19` — any type: ? allProcs.filter((p: any) => p.process.toLowerCase().includes(q) || p.binar
- **[minor]** `dashboard/src/pages/session-tabs/PermissionsTab.tsx:21` — any type: if (permFilter) filtered = filtered.filter((p: any) => p.permissions[permFilte
- **[minor]** `dashboard/src/pages/session-tabs/PermissionsTab.tsx:22` — any type: const withPerms = filtered.filter((p: any) => p.total_events > 0);
- **[minor]** `dashboard/src/pages/session-tabs/PermissionsTab.tsx:23` — any type: const withoutPerms = filtered.filter((p: any) => p.total_events === 0);
- **[minor]** `dashboard/src/pages/session-tabs/PermissionsTab.tsx:25` — any type: for (const s of sensors) sensorCounts[s] = allProcs.filter((p: any) => p.permi
- **[minor]** `dashboard/src/pages/session-tabs/PermissionsTab.tsx:33` — any type: <Card label="Total Events" value={allProcs.reduce((a: number, p: any) =>
- **[minor]** `dashboard/src/pages/session-tabs/PermissionsTab.tsx:79` — any type: {withPerms.map((p: any) => (
- **[minor]** `dashboard/src/pages/session-tabs/PermissionsTab.tsx:114` — any type: {withoutPerms.map((p: any) => (
- **[minor]** `dashboard/src/pages/session-tabs/ExfiltrationTab.tsx:6` — any type: exfilData: any;
- **[minor]** `dashboard/src/pages/session-tabs/ExfiltrationTab.tsx:38` — any type: {exfilData.ai_ide_activity.map((a: any, i: number) => (
- **[minor]** `dashboard/src/pages/session-tabs/ExfiltrationTab.tsx:87` — any type: {exfilData.git_events.filter((e: any) => e.event_type === 'git_recent_
- **[minor]** `dashboard/src/pages/session-tabs/ExfiltrationTab.tsx:124` — any type: {exfilData.git_events.filter((e: any) => e.event_type !== 'git_recent_
- **[minor]** `dashboard/src/pages/session-tabs/ExfiltrationTab.tsx:127` — any type: rows={exfilData.git_events.filter((e: any) => e.event_type !== 'gi
- **[minor]** `dashboard/src/pages/session-tabs/ExfiltrationTab.tsx:142` — any type: rows={exfilData.process_launches.map((e: any) => [
- **[minor]** `dashboard/src/pages/session-tabs/ExfiltrationTab.tsx:156` — any type: {exfilData.file_staging.map((e: any, i: number) => (
- **[minor]** `dashboard/src/pages/session-tabs/ExfiltrationTab.tsx:182` — any type: rows={exfilData.remote_copies.map((e: any) => [
- **[minor]** `dashboard/src/pages/session-tabs/ExfiltrationTab.tsx:198` — any type: rows={exfilData.http_requests.slice(0, 100).map((e: any) => [
- **[minor]** `dashboard/src/pages/session-tabs/PersistenceTab.tsx:5` — any type: persistenceData: any;
- **[minor]** `dashboard/src/pages/session-tabs/PersistenceTab.tsx:19` — any type: <Card label="Enabled" value={items.filter((i: any) => i.enabled).length}
- **[minor]** `dashboard/src/pages/session-tabs/PersistenceTab.tsx:24` — any type: {items.filter((i: any) => i.item_type === type).slice(0, 50).map((it
- **[minor]** `dashboard/src/pages/session-tabs/NetworkTab.tsx:7` — any type: totals: any;
- **[minor]** `dashboard/src/pages/session-tabs/NetworkTab.tsx:8` — any type: nettop: any[];
- **[minor]** `dashboard/src/pages/session-tabs/NetworkTab.tsx:10` — any type: connections: any[] | undefined;
- **[minor]** `dashboard/src/pages/session-tabs/NetworkTab.tsx:11` — any type: networkData: any;
- **[minor]** `dashboard/src/pages/session-tabs/NetworkTab.tsx:12` — any type: destinations: any;
- **[minor]** `dashboard/src/pages/session-tabs/NetworkTab.tsx:29` — any type: rows={nettop.slice(0, 30).map((n: any) => [
- **[minor]** `dashboard/src/pages/session-tabs/NetworkTab.tsx:44` — any type: rows={connections.slice(0, 50).map((c: any) => [c.process, c.type, c
- **[minor]** `dashboard/src/pages/session-tabs/NetworkTab.tsx:53` — any type: rows={networkData.dns.map((d: any) => [d[0], d[1]])}
- **[minor]** `dashboard/src/pages/session-tabs/NetworkTab.tsx:65` — any type: <Card label="Suspicious Ports" value={destinations.top_ports?.filter
- **[minor]** `dashboard/src/pages/session-tabs/NetworkTab.tsx:66` any type: color={destinations.top_ports?.some((p: any) => p.suspicious) ? 't
- **[minor]** `dashboard/src/pages/session-tabs/NetworkTab.tsx:73` — any type: {destinations.top_destinations.filter((d: any) => !d.internal)
- **[minor]** `dashboard/src/pages/session-tabs/NetworkTab.tsx:86` — any type: {destinations.top_ports.slice(0, 12).map((p: any, i: number) =
- **[minor]** `dashboard/src/pages/session-tabs/TimelineTab.tsx:27` — any type: timelineData: any;
- **[minor]** `dashboard/src/pages/session-tabs/TimelineTab.tsx:68` — any type: {events.map((ev: any, i: number) => {
- **[minor]** `dashboard/src/pages/session-tabs/InsightsTab.tsx:6` — any type: insightsData: any;
- **[minor]** `dashboard/src/pages/session-tabs/InsightsTab.tsx:7` — any type: networkData: any;
- **[minor]** `dashboard/src/pages/session-tabs/InsightsTab.tsx:19` — any type: {insightsData.alerts.map((a: any, i: number) => {
- **[minor]** `dashboard/src/pages/session-tabs/InsightsTab.tsx:40` — any type: {insightsData.insights.map((ins: any, i: number) => (
- **[minor]** `dashboard/src/pages/session-tabs/InsightsTab.tsx:97` — any type: {data.errors.map((e: any) => `${e.status} (${e.count})`).j
- **[minor]** `dashboard/src/pages/session-tabs/InsightsTab.tsx:115` — any type: rows={procs.map((p: any) => {
- **[minor]** `dashboard/src/pages/session-tabs/InsightsTab.tsx:116` — any type: const totalAll = procs.reduce((s: number, x: any) => s + x.count
- **[minor]** `dashboard/src/pages/session-tabs/InsightsTab.tsx:134` — any type: rows={insightsData.bandwidth_spikes.map((s: any) => [
- **[minor]** `dashboard/src/pages/session-tabs/InsightsTab.tsx:150` — any type: rows={insightsData.baseline_anomalies.map((a: any) => [
- **[minor]** `dashboard/src/pages/session-tabs/InsightsTab.tsx:167` — any type: rows={insightsData.new_processes_with_network.map((p: any) => [
- **[minor]** `dashboard/src/pages/session-tabs/DevicesTab.tsx:5` — any type: devices: any;
- **[minor]** `dashboard/src/pages/session-tabs/DevicesTab.tsx:17` — any type: rows={devices.wifi.map((w: any) => [
- **[minor]** `dashboard/src/pages/session-tabs/DevicesTab.tsx:29` — any type: rows={devices.vpn.map((v: any) => [v.interface, v.ip, v.mtu, (v.flag
- **[minor]** `dashboard/src/pages/session-tabs/DevicesTab.tsx:38` — any type: rows={devices.interface_bytes.map((i: any) => [i.interface, fmtBytes
- **[minor]** `dashboard/src/pages/session-tabs/DevicesTab.tsx:47` — any type: rows={devices.listening_ports.map((p: any) => [p.process, p.pid, p.u
- **[minor]** `dashboard/src/pages/session-tabs/DevicesTab.tsx:56` — any type: rows={devices.bluetooth.map((b: any) => [b.name, b.mac, b.type, b.co
- **[minor]** `dashboard/src/pages/session-tabs/DevicesTab.tsx:65` — any type: rows={devices.usb.map((u: any) => [u.name, u.vendor, u.serial, u.pro
- **[minor]** `dashboard/src/pages/session-tabs/DevicesTab.tsx:74` — any type: rows={devices.arp.map((a: any) => [a.ip, a.mac, a.interface])}
- **[minor]** `dashboard/src/pages/AskQuestion.tsx:14` — any type: data?: any;
- **[minor]** `dashboard/src/pages/AskQuestion.tsx:67` — any type: } catch (err: any) {
- **[minor]** `dashboard/src/pages/AskQuestion.tsx:103` — any type: {(sessions || []).map((s: any) => (
- **[minor]** `dashboard/src/pages/AskQuestion.tsx:230` — any type: function DataPreview({ data }: { data: any[] }) {
- **[minor]** `dashboard/src/pages/AskQuestion.tsx:247` — any type: {items.map((row: any, i: number) => (
- **[minor]** `dashboard/src/pages/Trends.tsx:12` — any type: const maxBw = Math.max(...trends.map((t: any) => t.bytes_in + t.bytes_out), 1)
- **[minor]** `dashboard/src/pages/Trends.tsx:13` — any type: const maxAlerts = Math.max(...trends.map((t: any) => t.alerts_critical + t.ale
- **[minor]** `dashboard/src/pages/Trends.tsx:26` — any type: {trends.map((t: any, i: number) => {
- **[minor]** `dashboard/src/pages/Trends.tsx:55` — any type: {trends.map((t: any, i: number) => {
- **[minor]** `dashboard/src/pages/Trends.tsx:86` — any type: {trends.map((t: any) => (
- **[minor]** `dashboard/src/pages/RunAudit.tsx:239` — any type: } catch (e: any) {
- **[minor]** `dashboard/src/pages/RunAudit.tsx:265` — any type: } catch (e: any) {
- **[minor]** `dashboard/src/pages/RunAudit.tsx:571` — any type: {sessions.map((s: any) => (
- **[minor]** `dashboard/src/pages/LaunchAgents.tsx:5` — any type: function AgentTable({ title, agents }: { title: string; agents: any[] }) {
- **[minor]** `dashboard/src/pages/LaunchAgents.tsx:22` — any type: {agents.map((a: any, i: number) => {
- **[major]** `dashboard/src/index.css:11` — Hardcoded hex color: #334155
- **[major]** `dashboard/src/index.css:12` — Hardcoded hex color: #475569
- **[major]** `dashboard/src/index.css:37` — Hardcoded hex color: #cbd5e1
- **[major]** `dashboard/src/index.css:38` — Hardcoded hex color: #94a3b8
- **[major]** `dashboard/src/pages/DataFlowMap.tsx:63` — Hardcoded hex color: #38bdf8
- **[major]** `dashboard/src/pages/DataFlowMap.tsx:64` — Hardcoded hex color: #f87171
- **[major]** `dashboard/src/pages/DataFlowMap.tsx:65` — Hardcoded hex color: #a78bfa
- **[major]** `dashboard/src/pages/DataFlowMap.tsx:69` — Hardcoded hex color: #0284c7
- **[major]** `dashboard/src/pages/DataFlowMap.tsx:70` — Hardcoded hex color: #dc2626
- **[major]** `dashboard/src/pages/DataFlowMap.tsx:71` — Hardcoded hex color: #7c3aed
- **[major]** `dashboard/src/pages/DataFlowMap.tsx:76` — Hardcoded hex color: #f87171
- **[major]** `dashboard/src/pages/DataFlowMap.tsx:77` — Hardcoded hex color: #fbbf24
- **[major]** `dashboard/src/pages/DataFlowMap.tsx:78` — Hardcoded hex color: #38bdf8
- **[major]** `dashboard/src/pages/DataFlowMap.tsx:79` — Hardcoded hex color: #475569
- **[major]** `dashboard/src/pages/DataFlowMap.tsx:405` — Hardcoded hex color: #1e293b
- **[major]** `dashboard/src/pages/DataFlowMap.tsx:432` — Hardcoded hex color: #fff
- **[major]** `dashboard/src/pages/DataFlowMap.tsx:440` — Hardcoded hex color: #334155
- **[major]** `dashboard/src/pages/DataFlowMap.tsx:453` — Hardcoded hex color: #fff
- **[minor]** `tools/capture_config.py:44` — Emoji in code: 📷
- **[minor]** `tools/capture_config.py:45` — Emoji in code: 🖥
- **[minor]** `tools/capture_config.py:46` — Emoji in code: 🎙
- **[minor]** `tools/capture_config.py:47` — Emoji in code: 📍
- **[minor]** `tools/capture_config.py:48` — Emoji in code: 🌐
- **[minor]** `tools/capture_config.py:49` — Emoji in code: 📋
- **[minor]** `tools/capture_config.py:50` — Emoji in code: 📶
- **[minor]** `tools/capture_config.py:51` — Emoji in code: 🔌
- **[minor]** `tools/capture_config.py:52` — Emoji in code: 💾
- **[minor]** `tools/capture_config.py:53` — Emoji in code: 🔤
- **[minor]** `tools/capture_config.py:54` — Emoji in code: 🪟
- **[minor]** `tools/html_report.py:522` — Emoji in code: 🔒
- **[minor]** `tools/html_report.py:542` — Emoji in code: 📸
- **[minor]** `tools/html_report.py:585` — Emoji in code: 🌐
- **[minor]** `tools/html_report.py:616` — Emoji in code: 📱
- **[minor]** `tools/html_report.py:647` — Emoji in code: 🛡
- **[minor]** `tools/html_report.py:663` — Emoji in code: 🔑
- **[minor]** `tools/secure_vault.py:437` — Emoji in code: 🔓
- **[minor]** `tools/secure_vault.py:442` — Emoji in code: 🔓
- **[minor]** `dashboard/src/pages/SampleViewer.tsx:98` — Emoji in code: 💡
- **[minor]** `dashboard/src/pages/SampleViewer.tsx:101` — Emoji in code: 💡
- **[minor]** `dashboard/src/pages/SampleViewer.tsx:131` — Emoji in code: 📍
- **[minor]** `dashboard/src/pages/Config.tsx:7` — Emoji in code: 📷
- **[minor]** `dashboard/src/pages/Config.tsx:8` — Emoji in code: 🌐
- **[minor]** `dashboard/src/pages/Config.tsx:9` — Emoji in code: 💾
- **[minor]** `dashboard/src/pages/Config.tsx:119` — Emoji in code: 📡
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:54` — Emoji in code: 🧠
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:139` — Emoji in code: 📷
- **[minor]** `dashboard/src/pages/session-tabs/OverviewTab.tsx:228` — Emoji in code: 📸
- **[minor]** `dashboard/src/pages/session-tabs/SamplesTab.tsx:38` — Emoji in code: 📷
## Ecosystem totals by rule
| Rule | Total findings |
|------|----------------|
| `b7-emoji-in-code` | 465 |
| `web-hardcoded-hex` | 404 |
| `b4-python-print` | 351 |
| `ts-any-type` | 249 |
| `b4-console-log` | 93 |
| `b5-hardcoded-product-id` | 13 |
| `b4-swift-print` | 7 |
**Grand total: 1582 findings across 19 repos.**