sync: auto-sync from GURU-5070 at 2026-06-11 08:22:42

Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-06-11 08:22:42
This commit is contained in:
2026-06-11 08:22:55 -07:00
parent 6ade6153bf
commit 65ad20ae0f
8 changed files with 205 additions and 17 deletions

View File

@@ -25,6 +25,8 @@
- [RMM agent update model](rmm-agent-update-model.md) — Agent updates are server-PUSH on heartbeat (no self-poll); available versions = filesystem scan needing a `.sha256`; promote flips `.channel` sidecars beta→stable globally. Two stranders: beta-first freezes stable until an explicit promote; agents older than ~0.6.50 re-enroll with a NEW device_id/agent row when updated. - [RMM agent update model](rmm-agent-update-model.md) — Agent updates are server-PUSH on heartbeat (no self-poll); available versions = filesystem scan needing a `.sha256`; promote flips `.channel` sidecars beta→stable globally. Two stranders: beta-first freezes stable until an explicit promote; agents older than ~0.6.50 re-enroll with a NEW device_id/agent row when updated.
- [GuruRMM physical server storage](gururmm-physical-server-storage.md) — New box 172.16.1.231 (temp IP→will be .30), Ubuntu 26.04, ssh key `gururmm-physical`/alias `gururmm-new`. SSD (915G root) = HOT (PG default tablespace + WAL + builds); HDD ext4 at `/data` = COLD (`gururmm_cold` PG tablespace for aged `agent_logs` partitions + downloads + backups + archive). The #3 retention answer. - [GuruRMM physical server storage](gururmm-physical-server-storage.md) — New box 172.16.1.231 (temp IP→will be .30), Ubuntu 26.04, ssh key `gururmm-physical`/alias `gururmm-new`. SSD (915G root) = HOT (PG default tablespace + WAL + builds); HDD ext4 at `/data` = COLD (`gururmm_cold` PG tablespace for aged `agent_logs` partitions + downloads + backups + archive). The #3 retention answer.
- [Trebesch DESKTOP-QNP3ON5 shell replacement](reference_trebesch_qnp3on5.md) — AT Trebesch box runs an Explorer shell replacement; explorer.exe owner check returns blank — use Win32_ComputerSystem.UserName. GuruRMM SWIFT-LION-2892. - [Trebesch DESKTOP-QNP3ON5 shell replacement](reference_trebesch_qnp3on5.md) — AT Trebesch box runs an Explorer shell replacement; explorer.exe owner check returns blank — use Win32_ComputerSystem.UserName. GuruRMM SWIFT-LION-2892.
- [reference_backblaze_storage_rate](reference_backblaze_storage_rate.md) -- ACG's Backblaze B2 storage cost rate ($0.00695/GB) for the GuruRMM mspbackups storage-cost calculation
- [reference_sqlx_migrations_immutable](reference_sqlx_migrations_immutable.md) -- NEVER edit an already-applied sqlx migration file — even a comment. sqlx::migrate! checksums each file at compile time and validates against _sqlx_migrations at startup; a changed checksum crash-loops the server with "migration N was previously applied but has been modified". Code review MUST flag any edit to an applied migration.
## Users ## Users
- [Howard Enos](user_howard.md) — Mike's brother, technician, full access. Machines: ACG-TECH03L, Howard-Home (authoritative in users.json). - [Howard Enos](user_howard.md) — Mike's brother, technician, full access. Machines: ACG-TECH03L, Howard-Home (authoritative in users.json).
@@ -88,6 +90,7 @@
### Cascades ### Cascades
- [Cascades operational rules](feedback_cascades.md) — Active rules: (1) folder redirection (fdeploy) needs subfolders PRE-CREATED before first logon or it caches a failure forever; recovery via fix-shell-redirect.ps1. (2) ALWAYS ask which security group(s) a new user goes into — never auto-derive from OU. (3) Do NOT lock down the legacy Main\Company Web Docs\Accounting (Everyone:Full) folder — still in active use. - [Cascades operational rules](feedback_cascades.md) — Active rules: (1) folder redirection (fdeploy) needs subfolders PRE-CREATED before first logon or it caches a failure forever; recovery via fix-shell-redirect.ps1. (2) ALWAYS ask which security group(s) a new user goes into — never auto-derive from OU. (3) Do NOT lock down the legacy Main\Company Web Docs\Accounting (Everyone:Full) folder — still in active use.
- [Cascades FR GPO fix](reference_cascades_fr_gpo_fix.md) — Native Folder Redirection was DOA on every machine: redirect targets were in a misnamed `fdeploy1.ini` (Windows reads `fdeploy.ini`) → empty target path → silent no-op → per-user registry workaround every time. Fixed 2026-06-08 (correct fdeploy.ini + version bump). Also: CS-SERVER live RMM agent is `c39f1de7...` (old `6766e973` stale). - [Cascades FR GPO fix](reference_cascades_fr_gpo_fix.md) — Native Folder Redirection was DOA on every machine: redirect targets were in a misnamed `fdeploy1.ini` (Windows reads `fdeploy.ini`) → empty target path → silent no-op → per-user registry workaround every time. Fixed 2026-06-08 (correct fdeploy.ini + version bump). Also: CS-SERVER live RMM agent is `c39f1de7...` (old `6766e973` stale).
- [feedback_ascii_only_api_payloads](feedback_ascii_only_api_payloads.md) -- On Windows/Git-bash, non-ASCII chars (em-dash, arrow, smart quotes) in JSON payload TEXT passed to curl get mangled and rejected — Discord bot-alert returns 400, the coord API returns "error parsing the body". Use ASCII-only in API payload text, or a single-quoted heredoc.
## Machine ## Machine
- [GURU-5070 Workstation Setup](reference_workstation_setup.md) — Mike's primary (owner confirmed 2026-05-26). Windows 11 Pro. Renamed from OC-5070 → ACG-5070/acg-guru-5070 → GURU-5070; all the same box, all Mike's. - [GURU-5070 Workstation Setup](reference_workstation_setup.md) — Mike's primary (owner confirmed 2026-05-26). Windows 11 Pro. Renamed from OC-5070 → ACG-5070/acg-guru-5070 → GURU-5070; all the same box, all Mike's.

View File

@@ -0,0 +1,189 @@
# Memory Dream Report
Generated: 2026-06-11 08:20
Repo root: D:\claudetools
Memory store: D:\claudetools\.claude\memory
Mode: APPLY-SAFE (additive)
Loaded 112 memory files (excluding MEMORY.md).
## 1. INDEX RECONCILE
### Orphan files (no index line): 3
- [INFO] feedback_ascii_only_api_payloads.md (type=feedback)
- [INFO] reference_backblaze_storage_rate.md (type=reference)
- [INFO] reference_sqlx_migrations_immutable.md (type=reference)
### Index lines pointing at missing files: 0
### Frontmatter name vs filename signals: 4
- [INFO] feedback_mac_rmm_auth_fixed.md: (no name in frontmatter)
- [INFO] feedback_rmm_password_limitation.md: (no name in frontmatter)
- [INFO] feedback_windows_bash_mapping.md: (no name in frontmatter)
- [INFO] policy_pricing_verification.md: (no name in frontmatter)
## 2. BACKLINKS ([[name]] references)
### Broken backlinks: 16
- [WARNING] cyndyoffice-physical-hp-lockups.md: [[universal-minerals]] has no matching memory file
- [WARNING] feedback_bot_alert_ticket_link.md: [[feedback_syncro_html]] has no matching memory file
- [WARNING] feedback_ca_programmatic_management.md: [[365-remediation-tool-reference]] has no matching memory file
- [WARNING] feedback_check_patterns_before_asking.md: [[user-font-preference]] has no matching memory file
- [WARNING] feedback_check_patterns_before_asking.md: [[feedback-check-patterns-before-asking]] has no matching memory file
- [WARNING] feedback_client_slug_fragmentation.md: [[wolkin]] has no matching memory file
- [WARNING] feedback_dashboard_beta_first.md: [[feedback_gururmm_builds]] has no matching memory file
- [WARNING] feedback_gururmm_build_channel_default.md: [[feedback_gururmm_builds]] has no matching memory file
- [WARNING] feedback_no_manufactured_guardrails.md: [[feedback-no-toml-config-endpoints]] has no matching memory file
- [WARNING] feedback_rmm_thoughts_backlog.md: [[feedback-stream-of-thought-design]] has no matching memory file
- [WARNING] feedback_rmm_user_session_smb_false_negative.md: [[wolkin]] has no matching memory file
- [WARNING] feedback_stream_of_thought_design.md: [[feedback-dashboard-beta-first]] has no matching memory file
- [WARNING] infra_office_network.md: [[power-failure-runbook]] has no matching memory file
- [WARNING] project_apple_mdm_certs.md: [[SPEC-017]] has no matching memory file
- [WARNING] project_memory_consolidation_automation.md: [[feedback_memory_repo_not_profile]] has no matching memory file
- [WARNING] reference_coord_messages_api_shape.md: [[CLAUDE.md]] has no matching memory file
## 3. REFERENCED-ARTIFACT VALIDITY (conservative; 'verify', not 'delete')
### Referenced paths not found in repo: 23
- [VERIFY] feedback_dashboard_beta_first.md: `opt/gururmm/build-dashboard.sh` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] feedback_stream_of_thought_design.md: `projects/msp-tools/guru-rmm/docs/PARKED_alert-lifecycle-and-telemetry-cadence.md` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] feedback_syncro_api.md: `tmp/syncro_comment.json` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] feedback_syncro_history.md: `tmp/syncro_comment.json` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] feedback_tmp_path_windows.md: `tmp/comment_payload.json` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] feedback_tmp_path_windows.md: `tmp/foo.json` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] machine_windows_guru_setup_status.md: `sops.yaml` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] project_guruconnect.md: `etc/systemd/system/guruconnect.service` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] project_gururmm.md: `gururmm-webhook.service` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] project_gururmm.md: `opt/gururmm/webhook-handler.py` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] project_masterbooter.md: `DECISIONS.md` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] project_masterbooter.md: `EXPANSION_PLAN.md` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] project_masterbooter.md: `TODO_CLEANUP.md` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] project_masterbooter.md: `VISION.md` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] project_neptune_sbr_email_routing.md: `data/on_boot.d/10-neptune-snat.sh` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] reference_ff_firefox_driver.md: `~/.claude.json` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] reference_gururmm.md: `build-{windows,linux,mac,agents,server,shared}.sh` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] reference_gururmm.md: `gururmm-agent.service` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] reference_ix_server_access.md: `etc/gururmm/agent.toml` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] reference_ix_server_access.md: `gururmm-agent.service` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] reference_radio_website.md: `fuse.js` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] reference_radio_website.md: `wavesurfer.js` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
- [VERIFY] reference_ticktick_integration.md: `mcp.json` not found under repo (may be server-side or renamed -- verify, do not auto-delete)
## 4. DUPLICATE / OVERLAP CLUSTERS (PROPOSED merges -- never auto-applied)
### Candidate clusters: 11
- [feedback] 5 related memories:
- feedback_syncro_api.md -- Technical mechanics for talking to the Syncro API — required Content-Type header, the no-i
- feedback_syncro_billing.md -- How to bill a Syncro ticket correctly — fetch live rates, use real product names, pick the
- feedback_syncro_history.md -- Detail and incident archive backing the Syncro feedback rules. Read this when you need to
- feedback_syncro_preview_mandatory.md -- Every Syncro write needs a payload preview + explicit confirmation BEFORE posting — includ
- feedback_syncro_workflow.md -- Process and etiquette rules for Syncro work — always preview comments before posting, veri
- [reference] 3 related memories:
- reference_gitea_api_credential.md -- Gitea API auth (PRs, merges) uses services/gitea-howard.sops.yaml, NOT the gururmm server
- reference_gitea_git_op_latency.md -- Gitea git-op latency benchmarks - SSH is SLOWER than internal HTTP+token; the SOPS credent
- reference_gitea_internal.md -- git.azcomputerguru.com is NOT behind Cloudflare — it's the office Cox IP NAT'd to NPM (ope
- [feedback] 2 related memories:
- feedback_cascades.md -- Active rules for Cascades work — (1) folder redirection (fdeploy) needs subfolders pre-cre
- feedback_cascades_scan_account.md -- At Cascades, every scanner→network-folder (scan-to-SMB) setup reuses the single svc-scan A
- [feedback] 2 related memories:
- feedback_client_slug_fragmentation.md -- A single client can be recorded under several slug variants (e.g. wolkin / wolkin-law / rs
- feedback_client_tone.md -- How to write client-facing Syncro comments — expert partner, not intake questionnaire
- [feedback] 2 related memories:
- feedback_graph_ca_policy_eventual_consistency.md -- After PATCHing a CA policy (204 No Content), an immediate GET may return stale state. Wait
- feedback_graph_password_reset_requires_role.md -- With User.ReadWrite.All app perm + no privileged directory role, Tenant Admin can CREATE a
- [feedback] 2 related memories:
- feedback_gururmm.md -- Six rules for working with GuruRMM. (1) RMM dev is Mike's domain — Howard does NOT code RM
- feedback_gururmm_build_channel_default.md -- GuruRMM build pipeline must tag NEW builds beta by default; stable is an explicit promote
- [feedback] 2 related memories:
- feedback_no_manufactured_guardrails.md -- On OUR products (GuruRMM/GuruConnect/ClaudeTools etc.) at Mike's request, execute without
- feedback_no_toml_config_endpoints.md -- User explicitly prohibits TOML or config-file-based endpoint configuration — this will nev
- [feedback] 2 related memories:
- feedback_rmm_thoughts_backlog.md -- GuruRMM ideas go into the "RMM Thoughts" backlog (docs/RMM_THOUGHTS.md); pipeline thought
- feedback_rmm_user_session_smb_false_negative.md -- GuruRMM commands (even context user_session) run under a WTS-impersonated, non-interactive
- [feedback] 2 related memories:
- feedback_vault_gcm_shadow_auth.md -- Vault git push/fetch "Failed to authenticate user" cause+fix — GCM shadows the store token
- feedback_vault_pointer_for_teammates.md -- When relaying infra/credential info to Howard (or any teammate with vault access), hand ov
- [project] 2 related memories:
- project_cascades.md -- Active state of the Cascades migration — Syncro ticket #110680053, plan file (machine-spec
- project_cascades_history.md -- Detail and rationale behind the active Cascades rules — fdeploy 502/ACL root cause and the
- [project] 2 related memories:
- project_dataforth.md -- Dataforth runs on M365 (Graph API for mail send); the neptune.acghosting.com Exchange is A
- project_dataforth_history.md -- Detail and remediation log for the 2026-03-27 Dataforth security incident — DF-JOEL2 compr
## 5. STALE DATED FACTS (project-type, dated > 6 months)
### Project memories with stale dated claims: 1
- [VERIFY] radio_show_no_cohost_named_tom.md: dated 2012-06-09 (~5115 days old) -- re-verify
## 6. DRIFT vs HARNESS PROFILE STORE
Profile store: C:\Users\guru\.claude\projects\D--claudetools\memory
### Profile-only (candidates to MIGRATE INTO repo): 0
### Repo-only (candidates to PUSH OUT to profile): 2
- [INFO] feedback_client_slug_fragmentation.md
- [INFO] feedback_rmm_user_session_smb_false_negative.md
### Present in BOTH but differing (CONFLICT -- human review): 1
- [WARNING] gururmm-physical-server-storage.md: content differs between repo and profile
## APPLY-SAFE ACTIONS PERFORMED (additive-only)
- [OK] appended index line under ## Feedback: - [feedback_ascii_only_api_payloads](feedback_ascii_only_api_payloads.md) -- On Windows/Git-bash, non-ASCII chars (em-dash, arrow, smart quotes) in JSON payload TEXT passed to curl get mangled and rejected — Discord bot-alert returns 400, the coord API returns "error parsing the body". Use ASCII-only in API payload text, or a single-quoted heredoc.
- [OK] appended index line under ## Reference: - [reference_backblaze_storage_rate](reference_backblaze_storage_rate.md) -- ACG's Backblaze B2 storage cost rate ($0.00695/GB) for the GuruRMM mspbackups storage-cost calculation
- [OK] appended index line under ## Reference: - [reference_sqlx_migrations_immutable](reference_sqlx_migrations_immutable.md) -- NEVER edit an already-applied sqlx migration file — even a comment. sqlx::migrate! checksums each file at compile time and validates against _sqlx_migrations at startup; a changed checksum crash-loops the server with "migration N was previously applied but has been modified". Code review MUST flag any edit to an applied migration.
## SUMMARY
- memory files: 112
- orphan files (no index): 3
- index -> missing file: 0
- name/filename signals: 4
- broken backlinks: 16
- stale referenced paths: 23
- overlap clusters: 11
- stale dated project facts: 1
- profile-only files: 0
- repo-only files: 2
- repo<->profile conflicts: 1
- additive actions performed: 3
## PROPOSED (needs human approval -- NEVER auto-applied)
- [MERGE?] consolidate 5 'feedback' memories: feedback_syncro_api.md, feedback_syncro_billing.md, feedback_syncro_history.md, feedback_syncro_preview_mandatory.md, feedback_syncro_workflow.md
- [MERGE?] consolidate 3 'reference' memories: reference_gitea_api_credential.md, reference_gitea_git_op_latency.md, reference_gitea_internal.md
- [MERGE?] consolidate 2 'feedback' memories: feedback_cascades.md, feedback_cascades_scan_account.md
- [MERGE?] consolidate 2 'feedback' memories: feedback_client_slug_fragmentation.md, feedback_client_tone.md
- [MERGE?] consolidate 2 'feedback' memories: feedback_graph_ca_policy_eventual_consistency.md, feedback_graph_password_reset_requires_role.md
- [MERGE?] consolidate 2 'feedback' memories: feedback_gururmm.md, feedback_gururmm_build_channel_default.md
- [MERGE?] consolidate 2 'feedback' memories: feedback_no_manufactured_guardrails.md, feedback_no_toml_config_endpoints.md
- [MERGE?] consolidate 2 'feedback' memories: feedback_rmm_thoughts_backlog.md, feedback_rmm_user_session_smb_false_negative.md
- [MERGE?] consolidate 2 'feedback' memories: feedback_vault_gcm_shadow_auth.md, feedback_vault_pointer_for_teammates.md
- [MERGE?] consolidate 2 'project' memories: project_cascades.md, project_cascades_history.md
- [MERGE?] consolidate 2 'project' memories: project_dataforth.md, project_dataforth_history.md
- [REVERIFY?] radio_show_no_cohost_named_tom.md (dated facts) -- confirm still true, then update
- [STALE-REF?] feedback_dashboard_beta_first.md references `opt/gururmm/build-dashboard.sh` -- confirm/repoint or note moved
- [STALE-REF?] feedback_stream_of_thought_design.md references `projects/msp-tools/guru-rmm/docs/PARKED_alert-lifecycle-and-telemetry-cadence.md` -- confirm/repoint or note moved
- [STALE-REF?] feedback_syncro_api.md references `tmp/syncro_comment.json` -- confirm/repoint or note moved
- [STALE-REF?] feedback_syncro_history.md references `tmp/syncro_comment.json` -- confirm/repoint or note moved
- [STALE-REF?] feedback_tmp_path_windows.md references `tmp/comment_payload.json` -- confirm/repoint or note moved
- [STALE-REF?] feedback_tmp_path_windows.md references `tmp/foo.json` -- confirm/repoint or note moved
- [STALE-REF?] machine_windows_guru_setup_status.md references `sops.yaml` -- confirm/repoint or note moved
- [STALE-REF?] project_guruconnect.md references `etc/systemd/system/guruconnect.service` -- confirm/repoint or note moved
- [STALE-REF?] project_gururmm.md references `gururmm-webhook.service` -- confirm/repoint or note moved
- [STALE-REF?] project_gururmm.md references `opt/gururmm/webhook-handler.py` -- confirm/repoint or note moved
- [STALE-REF?] project_masterbooter.md references `DECISIONS.md` -- confirm/repoint or note moved
- [STALE-REF?] project_masterbooter.md references `EXPANSION_PLAN.md` -- confirm/repoint or note moved
- [STALE-REF?] project_masterbooter.md references `TODO_CLEANUP.md` -- confirm/repoint or note moved
- [STALE-REF?] project_masterbooter.md references `VISION.md` -- confirm/repoint or note moved
- [STALE-REF?] project_neptune_sbr_email_routing.md references `data/on_boot.d/10-neptune-snat.sh` -- confirm/repoint or note moved
- [STALE-REF?] reference_ff_firefox_driver.md references `~/.claude.json` -- confirm/repoint or note moved
- [STALE-REF?] reference_gururmm.md references `build-{windows,linux,mac,agents,server,shared}.sh` -- confirm/repoint or note moved
- [STALE-REF?] reference_gururmm.md references `gururmm-agent.service` -- confirm/repoint or note moved
- [STALE-REF?] reference_ix_server_access.md references `etc/gururmm/agent.toml` -- confirm/repoint or note moved
- [STALE-REF?] reference_ix_server_access.md references `gururmm-agent.service` -- confirm/repoint or note moved
- [STALE-REF?] reference_radio_website.md references `fuse.js` -- confirm/repoint or note moved
- [STALE-REF?] reference_radio_website.md references `wavesurfer.js` -- confirm/repoint or note moved
- [STALE-REF?] reference_ticktick_integration.md references `mcp.json` -- confirm/repoint or note moved
- [DRIFT-RESOLVE?] gururmm-physical-server-storage.md differs repo vs profile -- human picks winner (sync-memory.sh leaves both untouched)

View File

@@ -0,0 +1,3 @@
# Moved -> clients/kittle/
Consolidated 2026-06-11. "Kittle Design & Construction" == canonical slug `kittle`.
All logs/reports now in `clients/kittle/`. Wiki: `wiki/clients/kittle.md`. Vault: `clients/kittle/`.

View File

@@ -1,21 +1,14 @@
--- ---
type: client type: client
name: kittle-design name: kittle-design
display_name: Kittle Design & Construction display_name: Kittle Design & Construction (consolidated → kittle)
last_compiled: 2026-06-09 last_compiled: 2026-06-11
compiled_by: GURU-5070/claude-main redirect: kittle
superseded_by: clients/kittle.md
sources:
- clients/kittle-design/session-logs/2026-04-24-session.md
backlinks:
- clients/kittle
--- ---
# Kittle Design & Construction — SUPERSEDED # Kittle Design & Construction → see [[kittle]]
> **This article is superseded. The canonical Kittle record is now [[clients/kittle]] (`wiki/clients/kittle.md`).** Duplicate slug for the same client. **Consolidated 2026-06-11 into the canonical article
> [[kittle]] (slug `kittle`).** All infrastructure, the June 2026 BEC/ACH incident record,
> Consolidated 2026-06-09. `kittle-design` and `kittle` were two articles for the same client credentials (vault `clients/kittle/`), and history live there. The pre-merge logs/reports that
> (Kittle Design & Construction LLC, M365 `kittlearizona.com`, Syncro `32460233`). All content — were under `clients/kittle-design/` were moved into `clients/kittle/`.
> the April 2026 breach history and the June 2026 BEC/ACH-fraud incident — now lives in the
> single canonical article. Update **[clients/kittle.md](kittle.md)** going forward; do not edit this stub.