learning_ai_common_plat/reports/rule-violations-baseline.md
saravanakumardb1 7904171418 feat(scripts): T5.4 + T5.5 scanner refinements + final roadmap update
Tier 5 partials:

T5.4 ts-any-type (249 \u2192 35):
  + Repo exemption: mac_tooling (189 findings \u2014 standalone forensics CLI)
  + Path exemption: /packages/mcp-client/ (JSON-RPC payload boundary)
  + Honor 'eslint-disable-next-line @typescript-eslint/no-explicit-any'
  + Honor '@ts-ignore' and '@ts-expect-error' on preceding line
  + Honor 'catch (e: any)' pattern (TS 4.4+ defaults caught errors to
    unknown, so this is an explicit author opt-in)
  + 35 remaining real findings; see TODO-4 for triage tracker

T5.5 b7-emoji-in-code (465 \u2192 53):
  + Emoji scanner now flags ONLY in:
    (a) Code comments (//, #, *, /*)
    (b) console.log / .warn / .info / .debug / .error calls
    (c) Python print() calls
  + UI-data emoji (notification bells, achievement icons, time-of-day
    markers, tab labels in JSX text or string literals) correctly NOT
    flagged \u2014 these are intentional product content per Q5.
  + 53 remaining decorative findings in comments / logs; see TODO-5.

Final ecosystem state:
  Total findings:  2548 (Phase 0) \u2192 88 (\u221297%)
  web-hardcoded-hex:        465 \u2192 0  \u2713
  b4-python-print:          351 \u2192 0  \u2713
  b4-console-log:            93 \u2192 0  \u2713
  b5-hardcoded-product-id:   13 \u2192 0  \u2713 (critical, fixed in Tier 1)
  b4-swift-print:             7 \u2192 0  \u2713
  ts-any-type:              249 \u2192 35 (\u221286%)
  b7-emoji-in-code:         465 \u2192 53 (\u221289%)

All 19 / 19 repos hex-clean. Tier 1-3 fully closed. Tier 4 closed
(mindlyst + fastgap + flowmonk fixes pushed). Tier 5 partials with
documented TODO-N follow-ups.

Code TODOs introduced this session (full list in next user message):
  TODO-1 \u2014 fastgap BodyCanvas.tsx: refactor canvas data to /lib/body-data.ts
  TODO-2 \u2014 fastgap InAppBroadcastBanner.tsx: add 'info' RN theme token
  TODO-3 \u2014 common_plat mcp-client: expose injectable logger callback
  TODO-4 \u2014 35 remaining ts-any-type sites across 9 repos
  TODO-5 \u2014 53 remaining decorative emoji in comments/log statements
2026-05-23 15:34:01 -07:00

11 KiB

Rule Violations Report — 2026-05-23

Generated by scripts/check-rule-violations.sh against canonical rules in 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=0 · minor=18 · total=18

  • [minor] services/platform-service/src/server.ts:304 — any type: const auth = (request as any).auth;
  • [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/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] 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/monitoring/health-check.ts:39 — Emoji in code: 🩺

learning_voice_ai_agent

Counts: critical=0 · major=0 · minor=36 · total=36

  • [minor] mobile_app/common/kill_switch.py:58 — Emoji in code: 📱
  • [minor] mobile_app/common/kill_switch.py:66 — 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:205 — Emoji in code: 📊
  • [minor] scripts/churn-alert.ts:238 — 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: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: 📁

learning_multimodal_memory_agents

Counts: critical=0 · major=0 · minor=17 · total=17

  • [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

learning_ai_clock

Counts: critical=0 · major=0 · minor=6 · total=6

  • [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

learning_ai_fastgap

No violations found.

learning_ai_jarvis_jr

No violations found.

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=2 · total=2

  • [minor] web/src/app/(app)/workspaces/page.tsx:198 — any type: owner:any
  • [minor] web/src/app/(app)/workspaces/page.tsx:199 — any type: visibility:any

learning_ai_flowmonk

Counts: critical=0 · major=0 · minor=2 · total=2

  • [minor] web/src/app/(app)/tasks/page.tsx:153 — any type: { value: '', label: 'Energy: any' },
  • [minor] backend/src/modules/tasks/repository.ts:28 — any type: const decrypted = await getEncryptor().decrypt(task.description as any, {

learning_ai_trails

No violations found.

learning_ai_local_memory_gpt

No violations found.

learning_ai_efforise

Counts: critical=0 · major=0 · minor=4 · total=4

  • [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;

learning_ai_local_llms

No violations found.

learning_ai_talk2obsidian

No violations found.

learning_ai_smart_auth

No violations found.

learning_ai_auth_app

No violations found.

learning_ai_productivity_web

No violations found.

oss/learning_ai_claw-cowork

Counts: critical=0 · major=0 · minor=2 · total=2

  • [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,

learning_ai_mac_tooling

No violations found.

Ecosystem totals by rule

Rule Total findings
b7-emoji-in-code 53
ts-any-type 35

Grand total: 88 findings across 19 repos.