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

189 lines
11 KiB
Markdown

# 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: <Badge variant="neutral">owner:any</Badge>
- **[minor]** `web/src/app/(app)/workspaces/page.tsx:199` — any type: <Badge variant="neutral">visibility:any</Badge>
## `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.**