crm-sync · git:20260814.5023d8c · 2026-08-14 · sha256 c44f0a13d95e6675
crm-sync git:20260814.5023d8cA
Immutable. This exact content is served forever at /api/v1/blob/c44f0a13d95e6675.
--- name: crm-sync description: > Keep the CRM knowledge layer in the vault in sync with the live CRM code repositories. Pull the latest of the read-only repos, detect which changed, and refresh ONLY the affected reverse-engineering notes and the KEEP/DROP/DECIDE decision note. Trigger on "/crm-sync", "refresh CRM knowledge", "what changed in the CRM code". license: MIT --- # /crm-sync - keep the CRM knowledge layer fresh The CRM (CHARM) is Anton's proven engine on GitLab. We reverse-engineered it once (2026-06-19) into a linked vault layer so his digital twin can `/ask` how the CRM works. Code keeps changing; this skill stops that knowledge from going stale silently. It is the recurring half of the standing rule `evaluate-recurring-into-routine`. **What this is NOT:** not a re-decompose-from-scratch. It is a DIFF-DRIVEN refresh: pull, see what changed, update only the notes that map to the changed code. ## Where everything lives - **Code (read-only clone, 16 repos):** `E:\CRM-app` (memory `crm-gitlab`). - **Decomposition audit (HTML, source of the notes):** `E:\CRM-app\_AUDIT\` (`Functional-Map.html`, `Know-How-Decomposition.html`, `Architecture-Deep.html`). - **Vault knowledge layer:** `$OBSIDIAN_VAULT/05-Resources/CRM-Engine/` - `_CHARM-CRM-Engine-MOC.md` (hub) - `crm-architecture-4-layers.md` - `crm-mtproto-engine.md` - `crm-core-autopilot.md` - `crm-admin-panel-api-brain.md` - `crm-data-model-mongo.md` - `crm-know-how-13-patterns.md` - `crm-landing-api-money.md` - decision: `$OBSIDIAN_VAULT/02-Decisions/decision-crm-keep-cc-drop-decide.md` ## Repo -> note map (which note to refresh when which code changes) | Code area in E:\CRM-app | Note(s) to refresh | |---|---| | `admin-panel` / `admin-panel-api` (FastAPI brain, filter-DSL, $facet) | `crm-admin-panel-api-brain` | | `mtproto-api` (Telethon hands, event-pool, dialog export, FloodWait) | `crm-mtproto-engine` | | `core` (aiocron autopilot: newsletters, gatekeeper, tapping, calls) | `crm-core-autopilot` | | `landing-api` (token sale, NOWPayments, CHEATING_MODE, webhook) | `crm-landing-api-money` | | shared models / Mongo schema (collections, fields) | `crm-data-model-mongo` | | cross-cutting architecture / generations | `crm-architecture-4-layers` | | reusable patterns / know-hows | `crm-know-how-13-patterns` | | any capability added/removed/disabled | `decision-crm-keep-cc-drop-decide` (+ MOC) | ## Procedure 1. **RECALL first (don't duplicate).** Read memory `crm-gitlab` and `_CHARM-CRM-Engine-MOC.md` so you refresh, not rewrite. Note the date of the last sync. 2. **Pull the repos.** For each repo dir under `E:\CRM-app`: `git -C "E:\CRM-app\<repo>" pull --ff-only` (clone is read-only; this only updates). Collect the set of repos that actually moved (non-empty pull, or `git -C <repo> log --oneline <old>..<new>`). If a pull needs GitLab creds and fails, stop and tell Anton (creds in `secrets\`; do NOT hardcode). 3. **No changes -> stop.** If nothing moved since last sync, report "CRM unchanged since <date>, 0 notes touched" and exit. (Cheapest correct answer.) 4. **For each changed repo,** re-read ONLY the changed files/areas (use an `Explore` subagent with `model: 'sonnet'` - this is grunt extraction, per `model-routing-sonnet-grunt`; escalate to Opus only if a judgement call). Ask it to report: what behavior changed vs what the mapped note currently says, with file+line evidence. 5. **Backup before writing.** `python "$IMPORTS_ROOT/vault_backup.py"` (rule `vault-backup-rule`). NEVER blanket-delete; edit in place. 6. **Update the mapped note(s)** - the "How it works" / "Weak spots" sections only. PRESERVE frontmatter, `origin: external`, `authored_by:` (denis-udot / gleb-taigunov), and all `[[wikilinks]]`. If a capability moved KEEP<->DROP<->DECIDE, update the decision note too. New behavioral pattern worth a concept? Follow `concept-creation-rules` (create if >=3 repeats + entity noun + domain), and relink (`no-orphan-notes-rule`). 7. **Verify + reindex.** Run the vault broken-link check; then `python "$IMPORTS_ROOT/brain_embed_update.py"` (cooldown 15min; nightly @04:00 will catch it otherwise) so the refreshed notes are `/ask`-searchable. 8. **Report post-hoc** (not for permission): which repos moved, which notes changed, any new concept, any DECIDE item that flipped, and what still needs Anton/Denis. ## Guardrails - Read-only by default; the only writes are git pull (updates the clone) + the mapped vault notes, always backup-first. - Don't touch the live CRM server or its Mongo - that is the prod-access track, separate. - AK-47: this is one markdown procedure. If the CRM grew a whole new service, that is a new note + MOC link, still just notes - flag it, don't over-build. ## When to run On demand (after Anton hears the CRM changed), or as a light routine. Pairs with the `crm-gitlab` DD-audit and the `decision-crm-keep-cc-drop-decide` open items.