# 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=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.**