[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-shadow-frog-meditate":3,"mdc--ihdc1v-key":31,"related-repo-microsoft-shadow-frog-meditate":2173,"related-org-microsoft-shadow-frog-meditate":2214},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":20,"repoUrl":21,"updatedAt":22,"license":23,"forks":24,"topics":25,"repo":26,"sourceUrl":29,"mdContent":30},"shadow-frog-meditate","clean and consolidate shadow knowledge base","Clean and consolidate the shadow knowledge base. Scans all shadow files for duplicate discoveries (same claim, different wording), near-duplicates (one extends another), and conflicting entries (contradicting claims). Merges duplicates, resolves conflicts by investigating the code, and asks the user only when resolution is unclear. Invoke periodically to keep the shadow focused and free of noise.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"microsoft","Microsoft","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmicrosoft.png",[12,16,17],{"name":13,"slug":14,"type":15},"Knowledge Management","knowledge-management","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"Data Cleaning","data-cleaning",13,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FShadowFrog","2026-07-03T16:31:56.106085",null,3,[],{"repoUrl":21,"stars":20,"forks":24,"topics":27,"description":28},[],"A suite of AI coding agent skills that build and maintain a shadow knowledge base for any codebase. ","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FShadowFrog\u002Ftree\u002FHEAD\u002Fskills\u002Fshadow-frog-meditate","---\nname: shadow-frog-meditate\ndescription: >-\n  Clean and consolidate the shadow knowledge base. Scans all shadow files\n  for duplicate discoveries (same claim, different wording), near-duplicates\n  (one extends another), and conflicting entries (contradicting claims).\n  Merges duplicates, resolves conflicts by investigating the code, and\n  asks the user only when resolution is unclear. Invoke periodically to\n  keep the shadow focused and free of noise.\nscripts:\n  - meditate-repair.py\n---\n\n# ShadowFrog Meditate\n\nShadow hygiene — deduplicate, merge, and resolve conflicts across the\nentire `.shadow\u002F` knowledge base. Prerequisite: `.shadow\u002F` exists with\ndiscoveries.\n\n## Why Meditate?\n\nOver time, shadows accumulate noise:\n- **Duplicates**: the same insight written differently by different sessions\n- **Near-duplicates**: one discovery is a subset of another\n- **Conflicts**: two discoveries contradict each other (code may have changed,\n  or one was wrong)\n- **Cross-scope duplicates**: a per-file discovery and a `_cross\u002F` entry\n  saying the same thing\n\nThis noise confuses downstream agents and dilutes signal. Meditate cleans\nit up.\n\n## Phase 1: Scan\n\nUse parallel subagents to scan the shadow. Each subagent handles a batch\nof shadow files.\n\n### Scope Optimization\n\nNot every file needs scanning. To reduce cost:\n- **Skip files with 0-1 discoveries** — they can't have internal duplicates\n- **Focus on files modified since last meditate** — check `_meta\u002Fstate.json`\n  `last_update_at` against file modification times\n- **Always scan files with 5+ discoveries** — highest duplicate risk\n\nFor the first meditate after a large dream run, most files will need\nscanning. For incremental meditation after small updates, this can\nreduce scope by 80%+.\n\n### Per-File Scan\n\nFor each per-file shadow (e.g., `src\u002Fauth.py.md`):\n\n1. Read all discoveries under each `## symbol` heading\n2. For each pair of discoveries under the **same symbol**, classify:\n   - **Duplicate**: same behavioral claim, different wording\n   - **Near-duplicate**: one discovery is a subset\u002Frefinement of the other\n   - **Conflict**: the two discoveries make contradicting claims\n   - **Distinct**: genuinely different insights — no action needed\n3. Record each finding as a structured action (see below)\n\n### Scan Output Format\n\nSubagents must output findings as **one JSON object per line** so the\norchestrator can auto-apply resolutions. This is critical for automation —\nprose recommendations require manual interpretation.\n\n```\n{\"action\": \"merge\", \"file\": \"src\u002Fauth.py.md\", \"symbol\": \"authenticate_user\", \"keep\": \"- silently returns None on expired tokens...\", \"remove\": \"- returns None when token expires...\", \"merged\": \"- authenticate_user() silently returns None on expired tokens instead of raising. 3 of 7 callers don't check.\\n  _(verified, source: exploration)_\", \"reason\": \"duplicate: same claim, different wording\"}\n{\"action\": \"merge\", \"file\": \"src\u002Fdb.py.md\", \"symbol\": \"connect\", \"keep\": \"- connection pool exhaustion...\", \"remove\": \"- pool runs out...\", \"merged\": \"...\", \"reason\": \"near-duplicate: first extends second\"}\n{\"action\": \"conflict\", \"file\": \"src\u002Fauth.py.md\", \"symbol\": \"validate_token\", \"entry_a\": \"- raises ValueError...\", \"entry_b\": \"- returns False...\", \"resolution\": \"verified_a\", \"reason\": \"code inspection: line 42 raises ValueError\"}\n{\"action\": \"conflict\", \"file\": \"src\u002Fcache.py.md\", \"symbol\": \"invalidate\", \"entry_a\": \"...\", \"entry_b\": \"...\", \"resolution\": \"escalate\", \"reason\": \"both claims have evidence, needs user input\"}\n{\"action\": \"move_to_cross\", \"file\": \"src\u002Fauth.py.md\", \"symbol\": \"validate_token\", \"entry\": \"- all validators share...\", \"cross_slug\": \"shared-validation-pattern\", \"reason\": \"cross-scope: involves 4 files\"}\n```\n\nFields:\n- `action`: `merge` | `conflict` | `move_to_cross` | `move_from_cross`\n- `file`: shadow file path relative to `.shadow\u002F`\n- `symbol`: the `##`\u002F`###` heading the discovery lives under\n- `keep`: the discovery text to keep (for merge)\n- `remove`: the discovery text to delete (for merge)\n- `merged`: the final merged text (for merge)\n- `resolution`: `verified_a` | `verified_b` | `escalate` (for conflict)\n- `reason`: human-readable explanation\n\nThe orchestrator collects all lines, applies `merge` and `conflict`\nactions automatically, and presents `escalate` items to the user.\n\n### Cross-Scope Scan\n\nAfter per-file scanning:\n\n1. Collect all per-file discoveries into a flat list\n2. For each `_cross\u002F*.md` discovery, check if any per-file discovery\n   makes the same or overlapping claim\n3. For each `_prefs.md` preference, check if any per-file discovery\n   or `_cross\u002F` entry duplicates it\n4. Record cross-scope findings the same way\n\n### Scanning Guidelines\n\n- Compare claims semantically, not just textually. \"Returns None on\n  expired tokens\" and \"Silently returns None when token expires\" are\n  duplicates.\n- Two discoveries about the same function but covering different\n  behaviors are **distinct**, not duplicates. E.g., \"returns None on\n  expired tokens\" vs \"uses constant-time comparison\" — these are\n  unrelated observations about the same function.\n- Pay attention to `Also involves:` — two discoveries with overlapping\n  `Also involves:` refs are more likely related.\n\n## Phase 2: Resolve\n\nProcess each finding by type.\n\n### Duplicates → Merge\n\nCombine into a single discovery:\n- Keep the **richer** wording (more detail, more context)\n- Keep the **stronger** trust: `source: user` > `source: interaction` > `source: exploration`\n- Keep the **stronger** status: `verified` > `uncertain` > `refuted`\n- Merge `Also involves:` refs (union of both)\n- Delete the weaker entry\n\nExample:\n```\nBEFORE (two entries under same symbol):\n- authenticate_user() returns None on expired tokens.\n  _(verified, source: exploration)_\n- When the token is expired, authenticate_user silently returns None\n  instead of raising. 3 of 7 callers don't check.\n  _(verified, source: exploration)_\n\nAFTER (merged):\n- authenticate_user() silently returns None on expired tokens instead\n  of raising. 3 of 7 callers don't check the return value.\n  _(verified, source: exploration)_\n```\n\n### Near-Duplicates → Absorb\n\nThe broader discovery absorbs the narrower one:\n- Expand the broader entry to include any extra detail from the narrower\n- Delete the narrower entry\n- Preserve the stronger trust\u002Fstatus between the two\n\n### Conflicts → Investigate\n\nWhen two discoveries contradict each other:\n\n1. Read the actual source code at the `file::symbol` location\n2. Trace the logic to determine which claim is correct\n3. If needed, write and run a short test script to verify\n4. Mark the correct claim `verified`, the incorrect one `refuted`\n5. If the incorrect claim was once true but code changed, update it\n   to reflect the current behavior and mark it `verified`\n\nIf investigation takes more than a few minutes without resolution:\n- Keep both discoveries\n- Add a note: `(conflict unresolved — needs user input)`\n- Ask the user to clarify at the end of the meditate session\n\n### Cross-Scope Duplicates → Place Correctly\n\nWhen the same discovery exists in both a per-file shadow and `_cross\u002F`:\n\n- If it involves 3+ files → keep in `_cross\u002F`, remove from per-file\n- If it involves 1-2 files → keep in per-file, remove from `_cross\u002F`\n- Update cross-references in both directions after moving\n\nWhen a per-file discovery duplicates a `_prefs.md` entry:\n\n- If it's truly project-wide (not tied to a specific symbol) → keep\n  in `_prefs.md`, remove from per-file\n- If it's specific to that symbol but happens to match a pref → keep\n  both (they serve different purposes)\n\n## Phase 3: Report\n\nAfter all resolutions, print a summary:\n\n```\nMeditate Summary\n================\n  Files scanned:       42\n  Duplicates merged:   7\n  Near-dupes absorbed: 3\n  Conflicts resolved:  2\n  Conflicts escalated: 1\n  Cross-scope fixed:   2\n  Total entries removed: 12\n\nEscalated (needs your input):\n  src\u002Fauth.py::validate_token\n    - \"raises ValueError on invalid format\" vs \"returns False on invalid format\"\n    Both claims have evidence. Which behavior is correct?\n```\n\n## Parallelism\n\nFor large shadows (20+ files), use parallel subagents:\n\n1. Partition shadow files into batches of ~10 files each\n2. Launch one subagent per batch for Phase 1 (scan)\n3. Each subagent outputs JSON-per-line findings (see Scan Output Format)\n4. Orchestrator collects all JSON lines from all subagents\n5. Auto-apply `merge` actions: use `edit` tool with `remove` as `old_str`,\n   replace `keep` with `merged`\n6. Auto-apply `conflict` actions where `resolution` is `verified_a` or\n   `verified_b` — mark the loser `refuted`\n7. Collect `escalate` items for user review\n8. Run Phase 3 (report)\n\nFor smaller shadows, run everything in a single pass — the scan output\nformat is still useful for traceability.\n\n## Dream Archive Hygiene (`_dreams\u002F`)\n\nMeditate performs consistency checks and field repair on `_dreams\u002F`. It\ndoes NOT delete or rewrite report prose (those are historical records),\nbut it DOES fix missing\u002Fwrong metadata in the index.\n\n### Structural Checks\n\n1. **Index consistency** — verify every folder in `_dreams\u002F` has a row in\n   `_dreams\u002F_index.md`, and every row in the index has a matching folder.\n   Fix mismatches (add missing rows, remove orphaned rows).\n\n2. **Report completeness** — each `_dreams\u002F\u003Cid>\u002F` should contain at minimum\n   a `report.md`. Flag any empty directories.\n\n3. **Stale patches** — if `base_commit` in a report's frontmatter is more\n   than 100 commits behind current HEAD, add a note to the index:\n   `⚠️ patch may not apply cleanly`. Check with:\n   ```bash\n   git rev-list \u003Cbase_commit>..HEAD --count 2>\u002Fdev\u002Fnull\n   ```\n\n4. **Cross-reference integrity** — if a per-file discovery has a\n   `Dream report: _dreams\u002F\u003Cid>\u002F` reference, verify that dream folder\n   exists. Remove dangling references.\n\n### Index Field Repair (run after Structural Checks)\n\nDream subagents sometimes write incomplete index rows (e.g., `unknown`\ncategory\u002Fverdict, generic titles). `meditate-repair.py` (below)\nauto-resolves these by reading each experiment's `report.md` frontmatter,\n`manifest.json`, and verdict-section signals.\n\n**Do NOT hand-edit 50+ rows.** Use the script. The agent's job is to\nsurface what the script CAN'T auto-fix:\n\n- **Corrupted reports** — when `report.md`'s `dream_id` (frontmatter or\n  body) doesn't match the folder name, the report was copy-pasted from\n  another experiment. The script prints these to stderr and skips them.\n  Do NOT auto-fix corruption — the content is wrong, not just the ID.\n  Log them in the meditate summary for user review.\n- **Ambiguous parent branches** — when no `manifest.json` exists for an\n  experiment, the script falls back to slug heuristics (`-extend`,\n  `-fix`, `-deeper`, `-improve`, `-integration`, `-cleanup`, `-metrics`,\n  `-remaining` strongly suggest compounding from a sibling). If the\n  heuristic match is not high-confidence, flag for user review rather\n  than guessing.\n\n### Applying Index Repairs\n\n```bash\nSKILL_DIR=\"\"\nfor DIR in .github\u002Fskills\u002Fshadow-frog-meditate \\\n           .claude\u002Fskills\u002Fshadow-frog-meditate; do\n    [ -d \"$DIR\" ] && SKILL_DIR=\"$DIR\" && break\ndone\n\nif [ -n \"$SKILL_DIR\" ] && [ -x \"$SKILL_DIR\u002Fmeditate-repair.py\" ]; then\n    python3 \"$SKILL_DIR\u002Fmeditate-repair.py\"\nelse\n    echo \"meditate-repair.py not found; falling back to manual scan.\" >&2\nfi\n```\n\nWhat it does:\n- Backs up `.shadow\u002F_dreams\u002F_index.md` to `.bak` first\n- Detects corrupted reports (frontmatter `dream_id` != folder name) and\n  prints them to stderr — these rows are skipped, you resolve manually\n- For every other row with `unknown`\u002Fempty category\u002Fverdict\u002Ftitle,\n  resolves the canonical value from the report's frontmatter, manifest,\n  or verdict section signals\n- Title repair replaces generic forms (raw slug, \"Dream Report: \u003Cslug>\",\n  \"Dream t##: \u003Cslug>\") with the first `# H1` or `## Summary` line\n\nVerdict detection order is `manifest > VERDICT_SECTION signals >\nwhole-body signals`. Dead-end signals are checked BEFORE useful signals\nso `not useful` doesn't match `useful`.\n\nIdempotent — safe to rerun until output reports `0 repaired`.\n\nDo NOT delete dream reports during meditate — only the user decides\nwhat to keep or discard (via Phase 7 review or manual cleanup).\n\n## Rules\n\n- **Never delete a `source: user` discovery** without asking — user\n  knowledge is the highest trust. If it conflicts with `source:\n  exploration`, investigate thoroughly before concluding the user was wrong.\n- **Preserve `Also involves:` refs** — when merging, take the union.\n- **Update `_index.md`** after removing entries (discovery counts change).\n- **Update `_meta\u002Fstate.json`** — set `last_update_type: \"meditate\"`.\n- **Don't touch `_prefs.md` placement** unless a pref is clearly\n  duplicated verbatim in a per-file shadow.\n\n## Format Compliance\n\n**Every merged or rewritten discovery must exactly follow the canonical\nformat in `\u002Fshadow-frog`** (Discovery Format, Cross-Cutting, Preferences).\nRe-read both the original entries and the spec before writing — a\nmalformed discovery is worse than a duplicate; it breaks the viewer\nparser and downstream agents.\n\nMeditate-specific rules:\n- When merging, take the **union** of `labels: [...]` from both entries.\n- When merging, preserve every `Also involves: file::symbol` from both\n  entries (union, not intersection).\n- `Dream report: _dreams\u002F\u003Cid>\u002F` references must survive the merge —\n  re-attach to the merged entry if either original had one.\n- Status (`verified`\u002F`uncertain`\u002F`refuted`) is taken from the stronger\n  source: `user` ≻ `interaction` ≻ `verified` exploration ≻ `uncertain`.\n- Discovery text stays **behavioral**, not a code summary — preserve the\n  more behavioral wording when entries differ in style.\n",{"data":32,"body":35},{"name":4,"description":6,"scripts":33},[34],"meditate-repair.py",{"type":36,"children":37},"root",[38,47,69,76,81,135,140,146,151,158,163,210,215,221,234,311,317,329,341,346,507,533,539,544,589,595,635,641,646,652,657,751,756,765,771,776,794,800,805,858,863,887,893,905,935,947,966,972,977,986,992,997,1121,1126,1140,1152,1158,1325,1331,1366,1376,1480,1486,1795,1800,1880,1909,1921,1926,1932,2030,2036,2052,2057,2167],{"type":39,"tag":40,"props":41,"children":43},"element","h1",{"id":42},"shadowfrog-meditate",[44],{"type":45,"value":46},"text","ShadowFrog Meditate",{"type":39,"tag":48,"props":49,"children":50},"p",{},[51,53,60,62,67],{"type":45,"value":52},"Shadow hygiene — deduplicate, merge, and resolve conflicts across the\nentire ",{"type":39,"tag":54,"props":55,"children":57},"code",{"className":56},[],[58],{"type":45,"value":59},".shadow\u002F",{"type":45,"value":61}," knowledge base. Prerequisite: ",{"type":39,"tag":54,"props":63,"children":65},{"className":64},[],[66],{"type":45,"value":59},{"type":45,"value":68}," exists with\ndiscoveries.",{"type":39,"tag":70,"props":71,"children":73},"h2",{"id":72},"why-meditate",[74],{"type":45,"value":75},"Why Meditate?",{"type":39,"tag":48,"props":77,"children":78},{},[79],{"type":45,"value":80},"Over time, shadows accumulate noise:",{"type":39,"tag":82,"props":83,"children":84},"ul",{},[85,97,107,117],{"type":39,"tag":86,"props":87,"children":88},"li",{},[89,95],{"type":39,"tag":90,"props":91,"children":92},"strong",{},[93],{"type":45,"value":94},"Duplicates",{"type":45,"value":96},": the same insight written differently by different sessions",{"type":39,"tag":86,"props":98,"children":99},{},[100,105],{"type":39,"tag":90,"props":101,"children":102},{},[103],{"type":45,"value":104},"Near-duplicates",{"type":45,"value":106},": one discovery is a subset of another",{"type":39,"tag":86,"props":108,"children":109},{},[110,115],{"type":39,"tag":90,"props":111,"children":112},{},[113],{"type":45,"value":114},"Conflicts",{"type":45,"value":116},": two discoveries contradict each other (code may have changed,\nor one was wrong)",{"type":39,"tag":86,"props":118,"children":119},{},[120,125,127,133],{"type":39,"tag":90,"props":121,"children":122},{},[123],{"type":45,"value":124},"Cross-scope duplicates",{"type":45,"value":126},": a per-file discovery and a ",{"type":39,"tag":54,"props":128,"children":130},{"className":129},[],[131],{"type":45,"value":132},"_cross\u002F",{"type":45,"value":134}," entry\nsaying the same thing",{"type":39,"tag":48,"props":136,"children":137},{},[138],{"type":45,"value":139},"This noise confuses downstream agents and dilutes signal. Meditate cleans\nit up.",{"type":39,"tag":70,"props":141,"children":143},{"id":142},"phase-1-scan",[144],{"type":45,"value":145},"Phase 1: Scan",{"type":39,"tag":48,"props":147,"children":148},{},[149],{"type":45,"value":150},"Use parallel subagents to scan the shadow. Each subagent handles a batch\nof shadow files.",{"type":39,"tag":152,"props":153,"children":155},"h3",{"id":154},"scope-optimization",[156],{"type":45,"value":157},"Scope Optimization",{"type":39,"tag":48,"props":159,"children":160},{},[161],{"type":45,"value":162},"Not every file needs scanning. To reduce cost:",{"type":39,"tag":82,"props":164,"children":165},{},[166,176,200],{"type":39,"tag":86,"props":167,"children":168},{},[169,174],{"type":39,"tag":90,"props":170,"children":171},{},[172],{"type":45,"value":173},"Skip files with 0-1 discoveries",{"type":45,"value":175}," — they can't have internal duplicates",{"type":39,"tag":86,"props":177,"children":178},{},[179,184,186,192,198],{"type":39,"tag":90,"props":180,"children":181},{},[182],{"type":45,"value":183},"Focus on files modified since last meditate",{"type":45,"value":185}," — check ",{"type":39,"tag":54,"props":187,"children":189},{"className":188},[],[190],{"type":45,"value":191},"_meta\u002Fstate.json",{"type":39,"tag":54,"props":193,"children":195},{"className":194},[],[196],{"type":45,"value":197},"last_update_at",{"type":45,"value":199}," against file modification times",{"type":39,"tag":86,"props":201,"children":202},{},[203,208],{"type":39,"tag":90,"props":204,"children":205},{},[206],{"type":45,"value":207},"Always scan files with 5+ discoveries",{"type":45,"value":209}," — highest duplicate risk",{"type":39,"tag":48,"props":211,"children":212},{},[213],{"type":45,"value":214},"For the first meditate after a large dream run, most files will need\nscanning. For incremental meditation after small updates, this can\nreduce scope by 80%+.",{"type":39,"tag":152,"props":216,"children":218},{"id":217},"per-file-scan",[219],{"type":45,"value":220},"Per-File Scan",{"type":39,"tag":48,"props":222,"children":223},{},[224,226,232],{"type":45,"value":225},"For each per-file shadow (e.g., ",{"type":39,"tag":54,"props":227,"children":229},{"className":228},[],[230],{"type":45,"value":231},"src\u002Fauth.py.md",{"type":45,"value":233},"):",{"type":39,"tag":235,"props":236,"children":237},"ol",{},[238,251,306],{"type":39,"tag":86,"props":239,"children":240},{},[241,243,249],{"type":45,"value":242},"Read all discoveries under each ",{"type":39,"tag":54,"props":244,"children":246},{"className":245},[],[247],{"type":45,"value":248},"## symbol",{"type":45,"value":250}," heading",{"type":39,"tag":86,"props":252,"children":253},{},[254,256,261,263],{"type":45,"value":255},"For each pair of discoveries under the ",{"type":39,"tag":90,"props":257,"children":258},{},[259],{"type":45,"value":260},"same symbol",{"type":45,"value":262},", classify:\n",{"type":39,"tag":82,"props":264,"children":265},{},[266,276,286,296],{"type":39,"tag":86,"props":267,"children":268},{},[269,274],{"type":39,"tag":90,"props":270,"children":271},{},[272],{"type":45,"value":273},"Duplicate",{"type":45,"value":275},": same behavioral claim, different wording",{"type":39,"tag":86,"props":277,"children":278},{},[279,284],{"type":39,"tag":90,"props":280,"children":281},{},[282],{"type":45,"value":283},"Near-duplicate",{"type":45,"value":285},": one discovery is a subset\u002Frefinement of the other",{"type":39,"tag":86,"props":287,"children":288},{},[289,294],{"type":39,"tag":90,"props":290,"children":291},{},[292],{"type":45,"value":293},"Conflict",{"type":45,"value":295},": the two discoveries make contradicting claims",{"type":39,"tag":86,"props":297,"children":298},{},[299,304],{"type":39,"tag":90,"props":300,"children":301},{},[302],{"type":45,"value":303},"Distinct",{"type":45,"value":305},": genuinely different insights — no action needed",{"type":39,"tag":86,"props":307,"children":308},{},[309],{"type":45,"value":310},"Record each finding as a structured action (see below)",{"type":39,"tag":152,"props":312,"children":314},{"id":313},"scan-output-format",[315],{"type":45,"value":316},"Scan Output Format",{"type":39,"tag":48,"props":318,"children":319},{},[320,322,327],{"type":45,"value":321},"Subagents must output findings as ",{"type":39,"tag":90,"props":323,"children":324},{},[325],{"type":45,"value":326},"one JSON object per line",{"type":45,"value":328}," so the\norchestrator can auto-apply resolutions. This is critical for automation —\nprose recommendations require manual interpretation.",{"type":39,"tag":330,"props":331,"children":335},"pre",{"className":332,"code":334,"language":45},[333],"language-text","{\"action\": \"merge\", \"file\": \"src\u002Fauth.py.md\", \"symbol\": \"authenticate_user\", \"keep\": \"- silently returns None on expired tokens...\", \"remove\": \"- returns None when token expires...\", \"merged\": \"- authenticate_user() silently returns None on expired tokens instead of raising. 3 of 7 callers don't check.\\n  _(verified, source: exploration)_\", \"reason\": \"duplicate: same claim, different wording\"}\n{\"action\": \"merge\", \"file\": \"src\u002Fdb.py.md\", \"symbol\": \"connect\", \"keep\": \"- connection pool exhaustion...\", \"remove\": \"- pool runs out...\", \"merged\": \"...\", \"reason\": \"near-duplicate: first extends second\"}\n{\"action\": \"conflict\", \"file\": \"src\u002Fauth.py.md\", \"symbol\": \"validate_token\", \"entry_a\": \"- raises ValueError...\", \"entry_b\": \"- returns False...\", \"resolution\": \"verified_a\", \"reason\": \"code inspection: line 42 raises ValueError\"}\n{\"action\": \"conflict\", \"file\": \"src\u002Fcache.py.md\", \"symbol\": \"invalidate\", \"entry_a\": \"...\", \"entry_b\": \"...\", \"resolution\": \"escalate\", \"reason\": \"both claims have evidence, needs user input\"}\n{\"action\": \"move_to_cross\", \"file\": \"src\u002Fauth.py.md\", \"symbol\": \"validate_token\", \"entry\": \"- all validators share...\", \"cross_slug\": \"shared-validation-pattern\", \"reason\": \"cross-scope: involves 4 files\"}\n",[336],{"type":39,"tag":54,"props":337,"children":339},{"__ignoreMap":338},"",[340],{"type":45,"value":334},{"type":39,"tag":48,"props":342,"children":343},{},[344],{"type":45,"value":345},"Fields:",{"type":39,"tag":82,"props":347,"children":348},{},[349,388,404,431,442,453,464,496],{"type":39,"tag":86,"props":350,"children":351},{},[352,358,360,366,368,374,375,381,382],{"type":39,"tag":54,"props":353,"children":355},{"className":354},[],[356],{"type":45,"value":357},"action",{"type":45,"value":359},": ",{"type":39,"tag":54,"props":361,"children":363},{"className":362},[],[364],{"type":45,"value":365},"merge",{"type":45,"value":367}," | ",{"type":39,"tag":54,"props":369,"children":371},{"className":370},[],[372],{"type":45,"value":373},"conflict",{"type":45,"value":367},{"type":39,"tag":54,"props":376,"children":378},{"className":377},[],[379],{"type":45,"value":380},"move_to_cross",{"type":45,"value":367},{"type":39,"tag":54,"props":383,"children":385},{"className":384},[],[386],{"type":45,"value":387},"move_from_cross",{"type":39,"tag":86,"props":389,"children":390},{},[391,397,399],{"type":39,"tag":54,"props":392,"children":394},{"className":393},[],[395],{"type":45,"value":396},"file",{"type":45,"value":398},": shadow file path relative to ",{"type":39,"tag":54,"props":400,"children":402},{"className":401},[],[403],{"type":45,"value":59},{"type":39,"tag":86,"props":405,"children":406},{},[407,413,415,421,423,429],{"type":39,"tag":54,"props":408,"children":410},{"className":409},[],[411],{"type":45,"value":412},"symbol",{"type":45,"value":414},": the ",{"type":39,"tag":54,"props":416,"children":418},{"className":417},[],[419],{"type":45,"value":420},"##",{"type":45,"value":422},"\u002F",{"type":39,"tag":54,"props":424,"children":426},{"className":425},[],[427],{"type":45,"value":428},"###",{"type":45,"value":430}," heading the discovery lives under",{"type":39,"tag":86,"props":432,"children":433},{},[434,440],{"type":39,"tag":54,"props":435,"children":437},{"className":436},[],[438],{"type":45,"value":439},"keep",{"type":45,"value":441},": the discovery text to keep (for merge)",{"type":39,"tag":86,"props":443,"children":444},{},[445,451],{"type":39,"tag":54,"props":446,"children":448},{"className":447},[],[449],{"type":45,"value":450},"remove",{"type":45,"value":452},": the discovery text to delete (for merge)",{"type":39,"tag":86,"props":454,"children":455},{},[456,462],{"type":39,"tag":54,"props":457,"children":459},{"className":458},[],[460],{"type":45,"value":461},"merged",{"type":45,"value":463},": the final merged text (for merge)",{"type":39,"tag":86,"props":465,"children":466},{},[467,473,474,480,481,487,488,494],{"type":39,"tag":54,"props":468,"children":470},{"className":469},[],[471],{"type":45,"value":472},"resolution",{"type":45,"value":359},{"type":39,"tag":54,"props":475,"children":477},{"className":476},[],[478],{"type":45,"value":479},"verified_a",{"type":45,"value":367},{"type":39,"tag":54,"props":482,"children":484},{"className":483},[],[485],{"type":45,"value":486},"verified_b",{"type":45,"value":367},{"type":39,"tag":54,"props":489,"children":491},{"className":490},[],[492],{"type":45,"value":493},"escalate",{"type":45,"value":495}," (for conflict)",{"type":39,"tag":86,"props":497,"children":498},{},[499,505],{"type":39,"tag":54,"props":500,"children":502},{"className":501},[],[503],{"type":45,"value":504},"reason",{"type":45,"value":506},": human-readable explanation",{"type":39,"tag":48,"props":508,"children":509},{},[510,512,517,519,524,526,531],{"type":45,"value":511},"The orchestrator collects all lines, applies ",{"type":39,"tag":54,"props":513,"children":515},{"className":514},[],[516],{"type":45,"value":365},{"type":45,"value":518}," and ",{"type":39,"tag":54,"props":520,"children":522},{"className":521},[],[523],{"type":45,"value":373},{"type":45,"value":525},"\nactions automatically, and presents ",{"type":39,"tag":54,"props":527,"children":529},{"className":528},[],[530],{"type":45,"value":493},{"type":45,"value":532}," items to the user.",{"type":39,"tag":152,"props":534,"children":536},{"id":535},"cross-scope-scan",[537],{"type":45,"value":538},"Cross-Scope Scan",{"type":39,"tag":48,"props":540,"children":541},{},[542],{"type":45,"value":543},"After per-file scanning:",{"type":39,"tag":235,"props":545,"children":546},{},[547,552,565,584],{"type":39,"tag":86,"props":548,"children":549},{},[550],{"type":45,"value":551},"Collect all per-file discoveries into a flat list",{"type":39,"tag":86,"props":553,"children":554},{},[555,557,563],{"type":45,"value":556},"For each ",{"type":39,"tag":54,"props":558,"children":560},{"className":559},[],[561],{"type":45,"value":562},"_cross\u002F*.md",{"type":45,"value":564}," discovery, check if any per-file discovery\nmakes the same or overlapping claim",{"type":39,"tag":86,"props":566,"children":567},{},[568,569,575,577,582],{"type":45,"value":556},{"type":39,"tag":54,"props":570,"children":572},{"className":571},[],[573],{"type":45,"value":574},"_prefs.md",{"type":45,"value":576}," preference, check if any per-file discovery\nor ",{"type":39,"tag":54,"props":578,"children":580},{"className":579},[],[581],{"type":45,"value":132},{"type":45,"value":583}," entry duplicates it",{"type":39,"tag":86,"props":585,"children":586},{},[587],{"type":45,"value":588},"Record cross-scope findings the same way",{"type":39,"tag":152,"props":590,"children":592},{"id":591},"scanning-guidelines",[593],{"type":45,"value":594},"Scanning Guidelines",{"type":39,"tag":82,"props":596,"children":597},{},[598,603,615],{"type":39,"tag":86,"props":599,"children":600},{},[601],{"type":45,"value":602},"Compare claims semantically, not just textually. \"Returns None on\nexpired tokens\" and \"Silently returns None when token expires\" are\nduplicates.",{"type":39,"tag":86,"props":604,"children":605},{},[606,608,613],{"type":45,"value":607},"Two discoveries about the same function but covering different\nbehaviors are ",{"type":39,"tag":90,"props":609,"children":610},{},[611],{"type":45,"value":612},"distinct",{"type":45,"value":614},", not duplicates. E.g., \"returns None on\nexpired tokens\" vs \"uses constant-time comparison\" — these are\nunrelated observations about the same function.",{"type":39,"tag":86,"props":616,"children":617},{},[618,620,626,628,633],{"type":45,"value":619},"Pay attention to ",{"type":39,"tag":54,"props":621,"children":623},{"className":622},[],[624],{"type":45,"value":625},"Also involves:",{"type":45,"value":627}," — two discoveries with overlapping\n",{"type":39,"tag":54,"props":629,"children":631},{"className":630},[],[632],{"type":45,"value":625},{"type":45,"value":634}," refs are more likely related.",{"type":39,"tag":70,"props":636,"children":638},{"id":637},"phase-2-resolve",[639],{"type":45,"value":640},"Phase 2: Resolve",{"type":39,"tag":48,"props":642,"children":643},{},[644],{"type":45,"value":645},"Process each finding by type.",{"type":39,"tag":152,"props":647,"children":649},{"id":648},"duplicates-merge",[650],{"type":45,"value":651},"Duplicates → Merge",{"type":39,"tag":48,"props":653,"children":654},{},[655],{"type":45,"value":656},"Combine into a single discovery:",{"type":39,"tag":82,"props":658,"children":659},{},[660,672,704,734,746],{"type":39,"tag":86,"props":661,"children":662},{},[663,665,670],{"type":45,"value":664},"Keep the ",{"type":39,"tag":90,"props":666,"children":667},{},[668],{"type":45,"value":669},"richer",{"type":45,"value":671}," wording (more detail, more context)",{"type":39,"tag":86,"props":673,"children":674},{},[675,676,681,683,689,691,697,698],{"type":45,"value":664},{"type":39,"tag":90,"props":677,"children":678},{},[679],{"type":45,"value":680},"stronger",{"type":45,"value":682}," trust: ",{"type":39,"tag":54,"props":684,"children":686},{"className":685},[],[687],{"type":45,"value":688},"source: user",{"type":45,"value":690}," > ",{"type":39,"tag":54,"props":692,"children":694},{"className":693},[],[695],{"type":45,"value":696},"source: interaction",{"type":45,"value":690},{"type":39,"tag":54,"props":699,"children":701},{"className":700},[],[702],{"type":45,"value":703},"source: exploration",{"type":39,"tag":86,"props":705,"children":706},{},[707,708,712,714,720,721,727,728],{"type":45,"value":664},{"type":39,"tag":90,"props":709,"children":710},{},[711],{"type":45,"value":680},{"type":45,"value":713}," status: ",{"type":39,"tag":54,"props":715,"children":717},{"className":716},[],[718],{"type":45,"value":719},"verified",{"type":45,"value":690},{"type":39,"tag":54,"props":722,"children":724},{"className":723},[],[725],{"type":45,"value":726},"uncertain",{"type":45,"value":690},{"type":39,"tag":54,"props":729,"children":731},{"className":730},[],[732],{"type":45,"value":733},"refuted",{"type":39,"tag":86,"props":735,"children":736},{},[737,739,744],{"type":45,"value":738},"Merge ",{"type":39,"tag":54,"props":740,"children":742},{"className":741},[],[743],{"type":45,"value":625},{"type":45,"value":745}," refs (union of both)",{"type":39,"tag":86,"props":747,"children":748},{},[749],{"type":45,"value":750},"Delete the weaker entry",{"type":39,"tag":48,"props":752,"children":753},{},[754],{"type":45,"value":755},"Example:",{"type":39,"tag":330,"props":757,"children":760},{"className":758,"code":759,"language":45},[333],"BEFORE (two entries under same symbol):\n- authenticate_user() returns None on expired tokens.\n  _(verified, source: exploration)_\n- When the token is expired, authenticate_user silently returns None\n  instead of raising. 3 of 7 callers don't check.\n  _(verified, source: exploration)_\n\nAFTER (merged):\n- authenticate_user() silently returns None on expired tokens instead\n  of raising. 3 of 7 callers don't check the return value.\n  _(verified, source: exploration)_\n",[761],{"type":39,"tag":54,"props":762,"children":763},{"__ignoreMap":338},[764],{"type":45,"value":759},{"type":39,"tag":152,"props":766,"children":768},{"id":767},"near-duplicates-absorb",[769],{"type":45,"value":770},"Near-Duplicates → Absorb",{"type":39,"tag":48,"props":772,"children":773},{},[774],{"type":45,"value":775},"The broader discovery absorbs the narrower one:",{"type":39,"tag":82,"props":777,"children":778},{},[779,784,789],{"type":39,"tag":86,"props":780,"children":781},{},[782],{"type":45,"value":783},"Expand the broader entry to include any extra detail from the narrower",{"type":39,"tag":86,"props":785,"children":786},{},[787],{"type":45,"value":788},"Delete the narrower entry",{"type":39,"tag":86,"props":790,"children":791},{},[792],{"type":45,"value":793},"Preserve the stronger trust\u002Fstatus between the two",{"type":39,"tag":152,"props":795,"children":797},{"id":796},"conflicts-investigate",[798],{"type":45,"value":799},"Conflicts → Investigate",{"type":39,"tag":48,"props":801,"children":802},{},[803],{"type":45,"value":804},"When two discoveries contradict each other:",{"type":39,"tag":235,"props":806,"children":807},{},[808,821,826,831,848],{"type":39,"tag":86,"props":809,"children":810},{},[811,813,819],{"type":45,"value":812},"Read the actual source code at the ",{"type":39,"tag":54,"props":814,"children":816},{"className":815},[],[817],{"type":45,"value":818},"file::symbol",{"type":45,"value":820}," location",{"type":39,"tag":86,"props":822,"children":823},{},[824],{"type":45,"value":825},"Trace the logic to determine which claim is correct",{"type":39,"tag":86,"props":827,"children":828},{},[829],{"type":45,"value":830},"If needed, write and run a short test script to verify",{"type":39,"tag":86,"props":832,"children":833},{},[834,836,841,843],{"type":45,"value":835},"Mark the correct claim ",{"type":39,"tag":54,"props":837,"children":839},{"className":838},[],[840],{"type":45,"value":719},{"type":45,"value":842},", the incorrect one ",{"type":39,"tag":54,"props":844,"children":846},{"className":845},[],[847],{"type":45,"value":733},{"type":39,"tag":86,"props":849,"children":850},{},[851,853],{"type":45,"value":852},"If the incorrect claim was once true but code changed, update it\nto reflect the current behavior and mark it ",{"type":39,"tag":54,"props":854,"children":856},{"className":855},[],[857],{"type":45,"value":719},{"type":39,"tag":48,"props":859,"children":860},{},[861],{"type":45,"value":862},"If investigation takes more than a few minutes without resolution:",{"type":39,"tag":82,"props":864,"children":865},{},[866,871,882],{"type":39,"tag":86,"props":867,"children":868},{},[869],{"type":45,"value":870},"Keep both discoveries",{"type":39,"tag":86,"props":872,"children":873},{},[874,876],{"type":45,"value":875},"Add a note: ",{"type":39,"tag":54,"props":877,"children":879},{"className":878},[],[880],{"type":45,"value":881},"(conflict unresolved — needs user input)",{"type":39,"tag":86,"props":883,"children":884},{},[885],{"type":45,"value":886},"Ask the user to clarify at the end of the meditate session",{"type":39,"tag":152,"props":888,"children":890},{"id":889},"cross-scope-duplicates-place-correctly",[891],{"type":45,"value":892},"Cross-Scope Duplicates → Place Correctly",{"type":39,"tag":48,"props":894,"children":895},{},[896,898,903],{"type":45,"value":897},"When the same discovery exists in both a per-file shadow and ",{"type":39,"tag":54,"props":899,"children":901},{"className":900},[],[902],{"type":45,"value":132},{"type":45,"value":904},":",{"type":39,"tag":82,"props":906,"children":907},{},[908,920,930],{"type":39,"tag":86,"props":909,"children":910},{},[911,913,918],{"type":45,"value":912},"If it involves 3+ files → keep in ",{"type":39,"tag":54,"props":914,"children":916},{"className":915},[],[917],{"type":45,"value":132},{"type":45,"value":919},", remove from per-file",{"type":39,"tag":86,"props":921,"children":922},{},[923,925],{"type":45,"value":924},"If it involves 1-2 files → keep in per-file, remove from ",{"type":39,"tag":54,"props":926,"children":928},{"className":927},[],[929],{"type":45,"value":132},{"type":39,"tag":86,"props":931,"children":932},{},[933],{"type":45,"value":934},"Update cross-references in both directions after moving",{"type":39,"tag":48,"props":936,"children":937},{},[938,940,945],{"type":45,"value":939},"When a per-file discovery duplicates a ",{"type":39,"tag":54,"props":941,"children":943},{"className":942},[],[944],{"type":45,"value":574},{"type":45,"value":946}," entry:",{"type":39,"tag":82,"props":948,"children":949},{},[950,961],{"type":39,"tag":86,"props":951,"children":952},{},[953,955,960],{"type":45,"value":954},"If it's truly project-wide (not tied to a specific symbol) → keep\nin ",{"type":39,"tag":54,"props":956,"children":958},{"className":957},[],[959],{"type":45,"value":574},{"type":45,"value":919},{"type":39,"tag":86,"props":962,"children":963},{},[964],{"type":45,"value":965},"If it's specific to that symbol but happens to match a pref → keep\nboth (they serve different purposes)",{"type":39,"tag":70,"props":967,"children":969},{"id":968},"phase-3-report",[970],{"type":45,"value":971},"Phase 3: Report",{"type":39,"tag":48,"props":973,"children":974},{},[975],{"type":45,"value":976},"After all resolutions, print a summary:",{"type":39,"tag":330,"props":978,"children":981},{"className":979,"code":980,"language":45},[333],"Meditate Summary\n================\n  Files scanned:       42\n  Duplicates merged:   7\n  Near-dupes absorbed: 3\n  Conflicts resolved:  2\n  Conflicts escalated: 1\n  Cross-scope fixed:   2\n  Total entries removed: 12\n\nEscalated (needs your input):\n  src\u002Fauth.py::validate_token\n    - \"raises ValueError on invalid format\" vs \"returns False on invalid format\"\n    Both claims have evidence. Which behavior is correct?\n",[982],{"type":39,"tag":54,"props":983,"children":984},{"__ignoreMap":338},[985],{"type":45,"value":980},{"type":39,"tag":70,"props":987,"children":989},{"id":988},"parallelism",[990],{"type":45,"value":991},"Parallelism",{"type":39,"tag":48,"props":993,"children":994},{},[995],{"type":45,"value":996},"For large shadows (20+ files), use parallel subagents:",{"type":39,"tag":235,"props":998,"children":999},{},[1000,1005,1010,1015,1020,1067,1104,1116],{"type":39,"tag":86,"props":1001,"children":1002},{},[1003],{"type":45,"value":1004},"Partition shadow files into batches of ~10 files each",{"type":39,"tag":86,"props":1006,"children":1007},{},[1008],{"type":45,"value":1009},"Launch one subagent per batch for Phase 1 (scan)",{"type":39,"tag":86,"props":1011,"children":1012},{},[1013],{"type":45,"value":1014},"Each subagent outputs JSON-per-line findings (see Scan Output Format)",{"type":39,"tag":86,"props":1016,"children":1017},{},[1018],{"type":45,"value":1019},"Orchestrator collects all JSON lines from all subagents",{"type":39,"tag":86,"props":1021,"children":1022},{},[1023,1025,1030,1032,1038,1040,1045,1047,1053,1055,1060,1062],{"type":45,"value":1024},"Auto-apply ",{"type":39,"tag":54,"props":1026,"children":1028},{"className":1027},[],[1029],{"type":45,"value":365},{"type":45,"value":1031}," actions: use ",{"type":39,"tag":54,"props":1033,"children":1035},{"className":1034},[],[1036],{"type":45,"value":1037},"edit",{"type":45,"value":1039}," tool with ",{"type":39,"tag":54,"props":1041,"children":1043},{"className":1042},[],[1044],{"type":45,"value":450},{"type":45,"value":1046}," as ",{"type":39,"tag":54,"props":1048,"children":1050},{"className":1049},[],[1051],{"type":45,"value":1052},"old_str",{"type":45,"value":1054},",\nreplace ",{"type":39,"tag":54,"props":1056,"children":1058},{"className":1057},[],[1059],{"type":45,"value":439},{"type":45,"value":1061}," with ",{"type":39,"tag":54,"props":1063,"children":1065},{"className":1064},[],[1066],{"type":45,"value":461},{"type":39,"tag":86,"props":1068,"children":1069},{},[1070,1071,1076,1078,1083,1085,1090,1092,1097,1099],{"type":45,"value":1024},{"type":39,"tag":54,"props":1072,"children":1074},{"className":1073},[],[1075],{"type":45,"value":373},{"type":45,"value":1077}," actions where ",{"type":39,"tag":54,"props":1079,"children":1081},{"className":1080},[],[1082],{"type":45,"value":472},{"type":45,"value":1084}," is ",{"type":39,"tag":54,"props":1086,"children":1088},{"className":1087},[],[1089],{"type":45,"value":479},{"type":45,"value":1091}," or\n",{"type":39,"tag":54,"props":1093,"children":1095},{"className":1094},[],[1096],{"type":45,"value":486},{"type":45,"value":1098}," — mark the loser ",{"type":39,"tag":54,"props":1100,"children":1102},{"className":1101},[],[1103],{"type":45,"value":733},{"type":39,"tag":86,"props":1105,"children":1106},{},[1107,1109,1114],{"type":45,"value":1108},"Collect ",{"type":39,"tag":54,"props":1110,"children":1112},{"className":1111},[],[1113],{"type":45,"value":493},{"type":45,"value":1115}," items for user review",{"type":39,"tag":86,"props":1117,"children":1118},{},[1119],{"type":45,"value":1120},"Run Phase 3 (report)",{"type":39,"tag":48,"props":1122,"children":1123},{},[1124],{"type":45,"value":1125},"For smaller shadows, run everything in a single pass — the scan output\nformat is still useful for traceability.",{"type":39,"tag":70,"props":1127,"children":1129},{"id":1128},"dream-archive-hygiene-_dreams",[1130,1132,1138],{"type":45,"value":1131},"Dream Archive Hygiene (",{"type":39,"tag":54,"props":1133,"children":1135},{"className":1134},[],[1136],{"type":45,"value":1137},"_dreams\u002F",{"type":45,"value":1139},")",{"type":39,"tag":48,"props":1141,"children":1142},{},[1143,1145,1150],{"type":45,"value":1144},"Meditate performs consistency checks and field repair on ",{"type":39,"tag":54,"props":1146,"children":1148},{"className":1147},[],[1149],{"type":45,"value":1137},{"type":45,"value":1151},". It\ndoes NOT delete or rewrite report prose (those are historical records),\nbut it DOES fix missing\u002Fwrong metadata in the index.",{"type":39,"tag":152,"props":1153,"children":1155},{"id":1154},"structural-checks",[1156],{"type":45,"value":1157},"Structural Checks",{"type":39,"tag":235,"props":1159,"children":1160},{},[1161,1186,1212,1307],{"type":39,"tag":86,"props":1162,"children":1163},{},[1164,1169,1171,1176,1178,1184],{"type":39,"tag":90,"props":1165,"children":1166},{},[1167],{"type":45,"value":1168},"Index consistency",{"type":45,"value":1170}," — verify every folder in ",{"type":39,"tag":54,"props":1172,"children":1174},{"className":1173},[],[1175],{"type":45,"value":1137},{"type":45,"value":1177}," has a row in\n",{"type":39,"tag":54,"props":1179,"children":1181},{"className":1180},[],[1182],{"type":45,"value":1183},"_dreams\u002F_index.md",{"type":45,"value":1185},", and every row in the index has a matching folder.\nFix mismatches (add missing rows, remove orphaned rows).",{"type":39,"tag":86,"props":1187,"children":1188},{},[1189,1194,1196,1202,1204,1210],{"type":39,"tag":90,"props":1190,"children":1191},{},[1192],{"type":45,"value":1193},"Report completeness",{"type":45,"value":1195}," — each ",{"type":39,"tag":54,"props":1197,"children":1199},{"className":1198},[],[1200],{"type":45,"value":1201},"_dreams\u002F\u003Cid>\u002F",{"type":45,"value":1203}," should contain at minimum\na ",{"type":39,"tag":54,"props":1205,"children":1207},{"className":1206},[],[1208],{"type":45,"value":1209},"report.md",{"type":45,"value":1211},". Flag any empty directories.",{"type":39,"tag":86,"props":1213,"children":1214},{},[1215,1220,1222,1228,1230,1236,1238],{"type":39,"tag":90,"props":1216,"children":1217},{},[1218],{"type":45,"value":1219},"Stale patches",{"type":45,"value":1221}," — if ",{"type":39,"tag":54,"props":1223,"children":1225},{"className":1224},[],[1226],{"type":45,"value":1227},"base_commit",{"type":45,"value":1229}," in a report's frontmatter is more\nthan 100 commits behind current HEAD, add a note to the index:\n",{"type":39,"tag":54,"props":1231,"children":1233},{"className":1232},[],[1234],{"type":45,"value":1235},"⚠️ patch may not apply cleanly",{"type":45,"value":1237},". Check with:",{"type":39,"tag":330,"props":1239,"children":1243},{"className":1240,"code":1241,"language":1242,"meta":338,"style":338},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","git rev-list \u003Cbase_commit>..HEAD --count 2>\u002Fdev\u002Fnull\n","bash",[1244],{"type":39,"tag":54,"props":1245,"children":1246},{"__ignoreMap":338},[1247],{"type":39,"tag":1248,"props":1249,"children":1252},"span",{"class":1250,"line":1251},"line",1,[1253,1259,1265,1271,1276,1282,1287,1292,1297,1302],{"type":39,"tag":1248,"props":1254,"children":1256},{"style":1255},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1257],{"type":45,"value":1258},"git",{"type":39,"tag":1248,"props":1260,"children":1262},{"style":1261},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1263],{"type":45,"value":1264}," rev-list",{"type":39,"tag":1248,"props":1266,"children":1268},{"style":1267},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1269],{"type":45,"value":1270}," \u003C",{"type":39,"tag":1248,"props":1272,"children":1273},{"style":1261},[1274],{"type":45,"value":1275},"base_commi",{"type":39,"tag":1248,"props":1277,"children":1279},{"style":1278},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1280],{"type":45,"value":1281},"t",{"type":39,"tag":1248,"props":1283,"children":1284},{"style":1267},[1285],{"type":45,"value":1286},">",{"type":39,"tag":1248,"props":1288,"children":1289},{"style":1261},[1290],{"type":45,"value":1291},"..HEAD",{"type":39,"tag":1248,"props":1293,"children":1294},{"style":1261},[1295],{"type":45,"value":1296}," --count",{"type":39,"tag":1248,"props":1298,"children":1299},{"style":1267},[1300],{"type":45,"value":1301}," 2>",{"type":39,"tag":1248,"props":1303,"children":1304},{"style":1261},[1305],{"type":45,"value":1306},"\u002Fdev\u002Fnull\n",{"type":39,"tag":86,"props":1308,"children":1309},{},[1310,1315,1317,1323],{"type":39,"tag":90,"props":1311,"children":1312},{},[1313],{"type":45,"value":1314},"Cross-reference integrity",{"type":45,"value":1316}," — if a per-file discovery has a\n",{"type":39,"tag":54,"props":1318,"children":1320},{"className":1319},[],[1321],{"type":45,"value":1322},"Dream report: _dreams\u002F\u003Cid>\u002F",{"type":45,"value":1324}," reference, verify that dream folder\nexists. Remove dangling references.",{"type":39,"tag":152,"props":1326,"children":1328},{"id":1327},"index-field-repair-run-after-structural-checks",[1329],{"type":45,"value":1330},"Index Field Repair (run after Structural Checks)",{"type":39,"tag":48,"props":1332,"children":1333},{},[1334,1336,1342,1344,1349,1351,1356,1358,1364],{"type":45,"value":1335},"Dream subagents sometimes write incomplete index rows (e.g., ",{"type":39,"tag":54,"props":1337,"children":1339},{"className":1338},[],[1340],{"type":45,"value":1341},"unknown",{"type":45,"value":1343},"\ncategory\u002Fverdict, generic titles). ",{"type":39,"tag":54,"props":1345,"children":1347},{"className":1346},[],[1348],{"type":45,"value":34},{"type":45,"value":1350}," (below)\nauto-resolves these by reading each experiment's ",{"type":39,"tag":54,"props":1352,"children":1354},{"className":1353},[],[1355],{"type":45,"value":1209},{"type":45,"value":1357}," frontmatter,\n",{"type":39,"tag":54,"props":1359,"children":1361},{"className":1360},[],[1362],{"type":45,"value":1363},"manifest.json",{"type":45,"value":1365},", and verdict-section signals.",{"type":39,"tag":48,"props":1367,"children":1368},{},[1369,1374],{"type":39,"tag":90,"props":1370,"children":1371},{},[1372],{"type":45,"value":1373},"Do NOT hand-edit 50+ rows.",{"type":45,"value":1375}," Use the script. The agent's job is to\nsurface what the script CAN'T auto-fix:",{"type":39,"tag":82,"props":1377,"children":1378},{},[1379,1404],{"type":39,"tag":86,"props":1380,"children":1381},{},[1382,1387,1389,1394,1396,1402],{"type":39,"tag":90,"props":1383,"children":1384},{},[1385],{"type":45,"value":1386},"Corrupted reports",{"type":45,"value":1388}," — when ",{"type":39,"tag":54,"props":1390,"children":1392},{"className":1391},[],[1393],{"type":45,"value":1209},{"type":45,"value":1395},"'s ",{"type":39,"tag":54,"props":1397,"children":1399},{"className":1398},[],[1400],{"type":45,"value":1401},"dream_id",{"type":45,"value":1403}," (frontmatter or\nbody) doesn't match the folder name, the report was copy-pasted from\nanother experiment. The script prints these to stderr and skips them.\nDo NOT auto-fix corruption — the content is wrong, not just the ID.\nLog them in the meditate summary for user review.",{"type":39,"tag":86,"props":1405,"children":1406},{},[1407,1412,1414,1419,1421,1427,1429,1435,1437,1443,1444,1450,1451,1457,1458,1464,1465,1471,1472,1478],{"type":39,"tag":90,"props":1408,"children":1409},{},[1410],{"type":45,"value":1411},"Ambiguous parent branches",{"type":45,"value":1413}," — when no ",{"type":39,"tag":54,"props":1415,"children":1417},{"className":1416},[],[1418],{"type":45,"value":1363},{"type":45,"value":1420}," exists for an\nexperiment, the script falls back to slug heuristics (",{"type":39,"tag":54,"props":1422,"children":1424},{"className":1423},[],[1425],{"type":45,"value":1426},"-extend",{"type":45,"value":1428},",\n",{"type":39,"tag":54,"props":1430,"children":1432},{"className":1431},[],[1433],{"type":45,"value":1434},"-fix",{"type":45,"value":1436},", ",{"type":39,"tag":54,"props":1438,"children":1440},{"className":1439},[],[1441],{"type":45,"value":1442},"-deeper",{"type":45,"value":1436},{"type":39,"tag":54,"props":1445,"children":1447},{"className":1446},[],[1448],{"type":45,"value":1449},"-improve",{"type":45,"value":1436},{"type":39,"tag":54,"props":1452,"children":1454},{"className":1453},[],[1455],{"type":45,"value":1456},"-integration",{"type":45,"value":1436},{"type":39,"tag":54,"props":1459,"children":1461},{"className":1460},[],[1462],{"type":45,"value":1463},"-cleanup",{"type":45,"value":1436},{"type":39,"tag":54,"props":1466,"children":1468},{"className":1467},[],[1469],{"type":45,"value":1470},"-metrics",{"type":45,"value":1428},{"type":39,"tag":54,"props":1473,"children":1475},{"className":1474},[],[1476],{"type":45,"value":1477},"-remaining",{"type":45,"value":1479}," strongly suggest compounding from a sibling). If the\nheuristic match is not high-confidence, flag for user review rather\nthan guessing.",{"type":39,"tag":152,"props":1481,"children":1483},{"id":1482},"applying-index-repairs",[1484],{"type":45,"value":1485},"Applying Index Repairs",{"type":39,"tag":330,"props":1487,"children":1489},{"className":1240,"code":1488,"language":1242,"meta":338,"style":338},"SKILL_DIR=\"\"\nfor DIR in .github\u002Fskills\u002Fshadow-frog-meditate \\\n           .claude\u002Fskills\u002Fshadow-frog-meditate; do\n    [ -d \"$DIR\" ] && SKILL_DIR=\"$DIR\" && break\ndone\n\nif [ -n \"$SKILL_DIR\" ] && [ -x \"$SKILL_DIR\u002Fmeditate-repair.py\" ]; then\n    python3 \"$SKILL_DIR\u002Fmeditate-repair.py\"\nelse\n    echo \"meditate-repair.py not found; falling back to manual scan.\" >&2\nfi\n",[1490],{"type":39,"tag":54,"props":1491,"children":1492},{"__ignoreMap":338},[1493,1511,1541,1559,1628,1637,1647,1723,1749,1758,1786],{"type":39,"tag":1248,"props":1494,"children":1495},{"class":1250,"line":1251},[1496,1501,1506],{"type":39,"tag":1248,"props":1497,"children":1498},{"style":1278},[1499],{"type":45,"value":1500},"SKILL_DIR",{"type":39,"tag":1248,"props":1502,"children":1503},{"style":1267},[1504],{"type":45,"value":1505},"=",{"type":39,"tag":1248,"props":1507,"children":1508},{"style":1267},[1509],{"type":45,"value":1510},"\"\"\n",{"type":39,"tag":1248,"props":1512,"children":1514},{"class":1250,"line":1513},2,[1515,1521,1526,1531,1536],{"type":39,"tag":1248,"props":1516,"children":1518},{"style":1517},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[1519],{"type":45,"value":1520},"for",{"type":39,"tag":1248,"props":1522,"children":1523},{"style":1278},[1524],{"type":45,"value":1525}," DIR ",{"type":39,"tag":1248,"props":1527,"children":1528},{"style":1517},[1529],{"type":45,"value":1530},"in",{"type":39,"tag":1248,"props":1532,"children":1533},{"style":1261},[1534],{"type":45,"value":1535}," .github\u002Fskills\u002Fshadow-frog-meditate",{"type":39,"tag":1248,"props":1537,"children":1538},{"style":1278},[1539],{"type":45,"value":1540}," \\\n",{"type":39,"tag":1248,"props":1542,"children":1543},{"class":1250,"line":24},[1544,1549,1554],{"type":39,"tag":1248,"props":1545,"children":1546},{"style":1261},[1547],{"type":45,"value":1548},"           .claude\u002Fskills\u002Fshadow-frog-meditate",{"type":39,"tag":1248,"props":1550,"children":1551},{"style":1267},[1552],{"type":45,"value":1553},";",{"type":39,"tag":1248,"props":1555,"children":1556},{"style":1517},[1557],{"type":45,"value":1558}," do\n",{"type":39,"tag":1248,"props":1560,"children":1562},{"class":1250,"line":1561},4,[1563,1568,1573,1578,1583,1588,1593,1598,1603,1607,1611,1615,1619,1623],{"type":39,"tag":1248,"props":1564,"children":1565},{"style":1267},[1566],{"type":45,"value":1567},"    [",{"type":39,"tag":1248,"props":1569,"children":1570},{"style":1267},[1571],{"type":45,"value":1572}," -d",{"type":39,"tag":1248,"props":1574,"children":1575},{"style":1267},[1576],{"type":45,"value":1577}," \"",{"type":39,"tag":1248,"props":1579,"children":1580},{"style":1278},[1581],{"type":45,"value":1582},"$DIR",{"type":39,"tag":1248,"props":1584,"children":1585},{"style":1267},[1586],{"type":45,"value":1587},"\"",{"type":39,"tag":1248,"props":1589,"children":1590},{"style":1267},[1591],{"type":45,"value":1592}," ]",{"type":39,"tag":1248,"props":1594,"children":1595},{"style":1267},[1596],{"type":45,"value":1597}," &&",{"type":39,"tag":1248,"props":1599,"children":1600},{"style":1278},[1601],{"type":45,"value":1602}," SKILL_DIR",{"type":39,"tag":1248,"props":1604,"children":1605},{"style":1267},[1606],{"type":45,"value":1505},{"type":39,"tag":1248,"props":1608,"children":1609},{"style":1267},[1610],{"type":45,"value":1587},{"type":39,"tag":1248,"props":1612,"children":1613},{"style":1278},[1614],{"type":45,"value":1582},{"type":39,"tag":1248,"props":1616,"children":1617},{"style":1267},[1618],{"type":45,"value":1587},{"type":39,"tag":1248,"props":1620,"children":1621},{"style":1267},[1622],{"type":45,"value":1597},{"type":39,"tag":1248,"props":1624,"children":1625},{"style":1517},[1626],{"type":45,"value":1627}," break\n",{"type":39,"tag":1248,"props":1629,"children":1631},{"class":1250,"line":1630},5,[1632],{"type":39,"tag":1248,"props":1633,"children":1634},{"style":1517},[1635],{"type":45,"value":1636},"done\n",{"type":39,"tag":1248,"props":1638,"children":1640},{"class":1250,"line":1639},6,[1641],{"type":39,"tag":1248,"props":1642,"children":1644},{"emptyLinePlaceholder":1643},true,[1645],{"type":45,"value":1646},"\n",{"type":39,"tag":1248,"props":1648,"children":1650},{"class":1250,"line":1649},7,[1651,1656,1661,1666,1670,1675,1679,1683,1687,1691,1696,1700,1704,1709,1713,1718],{"type":39,"tag":1248,"props":1652,"children":1653},{"style":1517},[1654],{"type":45,"value":1655},"if",{"type":39,"tag":1248,"props":1657,"children":1658},{"style":1267},[1659],{"type":45,"value":1660}," [",{"type":39,"tag":1248,"props":1662,"children":1663},{"style":1267},[1664],{"type":45,"value":1665}," -n",{"type":39,"tag":1248,"props":1667,"children":1668},{"style":1267},[1669],{"type":45,"value":1577},{"type":39,"tag":1248,"props":1671,"children":1672},{"style":1278},[1673],{"type":45,"value":1674},"$SKILL_DIR",{"type":39,"tag":1248,"props":1676,"children":1677},{"style":1267},[1678],{"type":45,"value":1587},{"type":39,"tag":1248,"props":1680,"children":1681},{"style":1267},[1682],{"type":45,"value":1592},{"type":39,"tag":1248,"props":1684,"children":1685},{"style":1267},[1686],{"type":45,"value":1597},{"type":39,"tag":1248,"props":1688,"children":1689},{"style":1267},[1690],{"type":45,"value":1660},{"type":39,"tag":1248,"props":1692,"children":1693},{"style":1267},[1694],{"type":45,"value":1695}," -x",{"type":39,"tag":1248,"props":1697,"children":1698},{"style":1267},[1699],{"type":45,"value":1577},{"type":39,"tag":1248,"props":1701,"children":1702},{"style":1278},[1703],{"type":45,"value":1674},{"type":39,"tag":1248,"props":1705,"children":1706},{"style":1261},[1707],{"type":45,"value":1708},"\u002Fmeditate-repair.py",{"type":39,"tag":1248,"props":1710,"children":1711},{"style":1267},[1712],{"type":45,"value":1587},{"type":39,"tag":1248,"props":1714,"children":1715},{"style":1267},[1716],{"type":45,"value":1717}," ];",{"type":39,"tag":1248,"props":1719,"children":1720},{"style":1517},[1721],{"type":45,"value":1722}," then\n",{"type":39,"tag":1248,"props":1724,"children":1726},{"class":1250,"line":1725},8,[1727,1732,1736,1740,1744],{"type":39,"tag":1248,"props":1728,"children":1729},{"style":1255},[1730],{"type":45,"value":1731},"    python3",{"type":39,"tag":1248,"props":1733,"children":1734},{"style":1267},[1735],{"type":45,"value":1577},{"type":39,"tag":1248,"props":1737,"children":1738},{"style":1278},[1739],{"type":45,"value":1674},{"type":39,"tag":1248,"props":1741,"children":1742},{"style":1261},[1743],{"type":45,"value":1708},{"type":39,"tag":1248,"props":1745,"children":1746},{"style":1267},[1747],{"type":45,"value":1748},"\"\n",{"type":39,"tag":1248,"props":1750,"children":1752},{"class":1250,"line":1751},9,[1753],{"type":39,"tag":1248,"props":1754,"children":1755},{"style":1517},[1756],{"type":45,"value":1757},"else\n",{"type":39,"tag":1248,"props":1759,"children":1761},{"class":1250,"line":1760},10,[1762,1768,1772,1777,1781],{"type":39,"tag":1248,"props":1763,"children":1765},{"style":1764},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[1766],{"type":45,"value":1767},"    echo",{"type":39,"tag":1248,"props":1769,"children":1770},{"style":1267},[1771],{"type":45,"value":1577},{"type":39,"tag":1248,"props":1773,"children":1774},{"style":1261},[1775],{"type":45,"value":1776},"meditate-repair.py not found; falling back to manual scan.",{"type":39,"tag":1248,"props":1778,"children":1779},{"style":1267},[1780],{"type":45,"value":1587},{"type":39,"tag":1248,"props":1782,"children":1783},{"style":1267},[1784],{"type":45,"value":1785}," >&2\n",{"type":39,"tag":1248,"props":1787,"children":1789},{"class":1250,"line":1788},11,[1790],{"type":39,"tag":1248,"props":1791,"children":1792},{"style":1517},[1793],{"type":45,"value":1794},"fi\n",{"type":39,"tag":48,"props":1796,"children":1797},{},[1798],{"type":45,"value":1799},"What it does:",{"type":39,"tag":82,"props":1801,"children":1802},{},[1803,1824,1836,1848],{"type":39,"tag":86,"props":1804,"children":1805},{},[1806,1808,1814,1816,1822],{"type":45,"value":1807},"Backs up ",{"type":39,"tag":54,"props":1809,"children":1811},{"className":1810},[],[1812],{"type":45,"value":1813},".shadow\u002F_dreams\u002F_index.md",{"type":45,"value":1815}," to ",{"type":39,"tag":54,"props":1817,"children":1819},{"className":1818},[],[1820],{"type":45,"value":1821},".bak",{"type":45,"value":1823}," first",{"type":39,"tag":86,"props":1825,"children":1826},{},[1827,1829,1834],{"type":45,"value":1828},"Detects corrupted reports (frontmatter ",{"type":39,"tag":54,"props":1830,"children":1832},{"className":1831},[],[1833],{"type":45,"value":1401},{"type":45,"value":1835}," != folder name) and\nprints them to stderr — these rows are skipped, you resolve manually",{"type":39,"tag":86,"props":1837,"children":1838},{},[1839,1841,1846],{"type":45,"value":1840},"For every other row with ",{"type":39,"tag":54,"props":1842,"children":1844},{"className":1843},[],[1845],{"type":45,"value":1341},{"type":45,"value":1847},"\u002Fempty category\u002Fverdict\u002Ftitle,\nresolves the canonical value from the report's frontmatter, manifest,\nor verdict section signals",{"type":39,"tag":86,"props":1849,"children":1850},{},[1851,1853],{"type":45,"value":1852},"Title repair replaces generic forms (raw slug, \"Dream Report: ",{"type":39,"tag":1854,"props":1855,"children":1856},"slug",{},[1857,1859],{"type":45,"value":1858},"\",\n\"Dream t##: ",{"type":39,"tag":1854,"props":1860,"children":1861},{},[1862,1864,1870,1872,1878],{"type":45,"value":1863},"\") with the first ",{"type":39,"tag":54,"props":1865,"children":1867},{"className":1866},[],[1868],{"type":45,"value":1869},"# H1",{"type":45,"value":1871}," or ",{"type":39,"tag":54,"props":1873,"children":1875},{"className":1874},[],[1876],{"type":45,"value":1877},"## Summary",{"type":45,"value":1879}," line",{"type":39,"tag":48,"props":1881,"children":1882},{},[1883,1885,1891,1893,1899,1901,1907],{"type":45,"value":1884},"Verdict detection order is ",{"type":39,"tag":54,"props":1886,"children":1888},{"className":1887},[],[1889],{"type":45,"value":1890},"manifest > VERDICT_SECTION signals > whole-body signals",{"type":45,"value":1892},". Dead-end signals are checked BEFORE useful signals\nso ",{"type":39,"tag":54,"props":1894,"children":1896},{"className":1895},[],[1897],{"type":45,"value":1898},"not useful",{"type":45,"value":1900}," doesn't match ",{"type":39,"tag":54,"props":1902,"children":1904},{"className":1903},[],[1905],{"type":45,"value":1906},"useful",{"type":45,"value":1908},".",{"type":39,"tag":48,"props":1910,"children":1911},{},[1912,1914,1920],{"type":45,"value":1913},"Idempotent — safe to rerun until output reports ",{"type":39,"tag":54,"props":1915,"children":1917},{"className":1916},[],[1918],{"type":45,"value":1919},"0 repaired",{"type":45,"value":1908},{"type":39,"tag":48,"props":1922,"children":1923},{},[1924],{"type":45,"value":1925},"Do NOT delete dream reports during meditate — only the user decides\nwhat to keep or discard (via Phase 7 review or manual cleanup).",{"type":39,"tag":70,"props":1927,"children":1929},{"id":1928},"rules",[1930],{"type":45,"value":1931},"Rules",{"type":39,"tag":82,"props":1933,"children":1934},{},[1935,1959,1976,1992,2013],{"type":39,"tag":86,"props":1936,"children":1937},{},[1938,1950,1952,1957],{"type":39,"tag":90,"props":1939,"children":1940},{},[1941,1943,1948],{"type":45,"value":1942},"Never delete a ",{"type":39,"tag":54,"props":1944,"children":1946},{"className":1945},[],[1947],{"type":45,"value":688},{"type":45,"value":1949}," discovery",{"type":45,"value":1951}," without asking — user\nknowledge is the highest trust. If it conflicts with ",{"type":39,"tag":54,"props":1953,"children":1955},{"className":1954},[],[1956],{"type":45,"value":703},{"type":45,"value":1958},", investigate thoroughly before concluding the user was wrong.",{"type":39,"tag":86,"props":1960,"children":1961},{},[1962,1974],{"type":39,"tag":90,"props":1963,"children":1964},{},[1965,1967,1972],{"type":45,"value":1966},"Preserve ",{"type":39,"tag":54,"props":1968,"children":1970},{"className":1969},[],[1971],{"type":45,"value":625},{"type":45,"value":1973}," refs",{"type":45,"value":1975}," — when merging, take the union.",{"type":39,"tag":86,"props":1977,"children":1978},{},[1979,1990],{"type":39,"tag":90,"props":1980,"children":1981},{},[1982,1984],{"type":45,"value":1983},"Update ",{"type":39,"tag":54,"props":1985,"children":1987},{"className":1986},[],[1988],{"type":45,"value":1989},"_index.md",{"type":45,"value":1991}," after removing entries (discovery counts change).",{"type":39,"tag":86,"props":1993,"children":1994},{},[1995,2004,2006,2012],{"type":39,"tag":90,"props":1996,"children":1997},{},[1998,1999],{"type":45,"value":1983},{"type":39,"tag":54,"props":2000,"children":2002},{"className":2001},[],[2003],{"type":45,"value":191},{"type":45,"value":2005}," — set ",{"type":39,"tag":54,"props":2007,"children":2009},{"className":2008},[],[2010],{"type":45,"value":2011},"last_update_type: \"meditate\"",{"type":45,"value":1908},{"type":39,"tag":86,"props":2014,"children":2015},{},[2016,2028],{"type":39,"tag":90,"props":2017,"children":2018},{},[2019,2021,2026],{"type":45,"value":2020},"Don't touch ",{"type":39,"tag":54,"props":2022,"children":2024},{"className":2023},[],[2025],{"type":45,"value":574},{"type":45,"value":2027}," placement",{"type":45,"value":2029}," unless a pref is clearly\nduplicated verbatim in a per-file shadow.",{"type":39,"tag":70,"props":2031,"children":2033},{"id":2032},"format-compliance",[2034],{"type":45,"value":2035},"Format Compliance",{"type":39,"tag":48,"props":2037,"children":2038},{},[2039,2050],{"type":39,"tag":90,"props":2040,"children":2041},{},[2042,2044],{"type":45,"value":2043},"Every merged or rewritten discovery must exactly follow the canonical\nformat in ",{"type":39,"tag":54,"props":2045,"children":2047},{"className":2046},[],[2048],{"type":45,"value":2049},"\u002Fshadow-frog",{"type":45,"value":2051}," (Discovery Format, Cross-Cutting, Preferences).\nRe-read both the original entries and the spec before writing — a\nmalformed discovery is worse than a duplicate; it breaks the viewer\nparser and downstream agents.",{"type":39,"tag":48,"props":2053,"children":2054},{},[2055],{"type":45,"value":2056},"Meditate-specific rules:",{"type":39,"tag":82,"props":2058,"children":2059},{},[2060,2080,2093,2103,2155],{"type":39,"tag":86,"props":2061,"children":2062},{},[2063,2065,2070,2072,2078],{"type":45,"value":2064},"When merging, take the ",{"type":39,"tag":90,"props":2066,"children":2067},{},[2068],{"type":45,"value":2069},"union",{"type":45,"value":2071}," of ",{"type":39,"tag":54,"props":2073,"children":2075},{"className":2074},[],[2076],{"type":45,"value":2077},"labels: [...]",{"type":45,"value":2079}," from both entries.",{"type":39,"tag":86,"props":2081,"children":2082},{},[2083,2085,2091],{"type":45,"value":2084},"When merging, preserve every ",{"type":39,"tag":54,"props":2086,"children":2088},{"className":2087},[],[2089],{"type":45,"value":2090},"Also involves: file::symbol",{"type":45,"value":2092}," from both\nentries (union, not intersection).",{"type":39,"tag":86,"props":2094,"children":2095},{},[2096,2101],{"type":39,"tag":54,"props":2097,"children":2099},{"className":2098},[],[2100],{"type":45,"value":1322},{"type":45,"value":2102}," references must survive the merge —\nre-attach to the merged entry if either original had one.",{"type":39,"tag":86,"props":2104,"children":2105},{},[2106,2108,2113,2114,2119,2120,2125,2127,2133,2135,2141,2142,2147,2149,2154],{"type":45,"value":2107},"Status (",{"type":39,"tag":54,"props":2109,"children":2111},{"className":2110},[],[2112],{"type":45,"value":719},{"type":45,"value":422},{"type":39,"tag":54,"props":2115,"children":2117},{"className":2116},[],[2118],{"type":45,"value":726},{"type":45,"value":422},{"type":39,"tag":54,"props":2121,"children":2123},{"className":2122},[],[2124],{"type":45,"value":733},{"type":45,"value":2126},") is taken from the stronger\nsource: ",{"type":39,"tag":54,"props":2128,"children":2130},{"className":2129},[],[2131],{"type":45,"value":2132},"user",{"type":45,"value":2134}," ≻ ",{"type":39,"tag":54,"props":2136,"children":2138},{"className":2137},[],[2139],{"type":45,"value":2140},"interaction",{"type":45,"value":2134},{"type":39,"tag":54,"props":2143,"children":2145},{"className":2144},[],[2146],{"type":45,"value":719},{"type":45,"value":2148}," exploration ≻ ",{"type":39,"tag":54,"props":2150,"children":2152},{"className":2151},[],[2153],{"type":45,"value":726},{"type":45,"value":1908},{"type":39,"tag":86,"props":2156,"children":2157},{},[2158,2160,2165],{"type":45,"value":2159},"Discovery text stays ",{"type":39,"tag":90,"props":2161,"children":2162},{},[2163],{"type":45,"value":2164},"behavioral",{"type":45,"value":2166},", not a code summary — preserve the\nmore behavioral wording when entries differ in style.",{"type":39,"tag":2168,"props":2169,"children":2170},"style",{},[2171],{"type":45,"value":2172},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2174,"total":24},[2175,2189,2208],{"slug":2176,"name":2176,"fn":2177,"description":2178,"org":2179,"tags":2180,"stars":20,"repoUrl":21,"updatedAt":2188},"shadow-frog","analyze codebases with shadow knowledge bases","Use a shadow knowledge base to understand any codebase. The .shadow\u002F directory mirrors the source tree with markdown files containing behavioral insights — known bugs, edge cases, implicit contracts, and user preferences. Always check the shadow before editing, debugging, or investigating code. When the user shares important context, write it to the shadow immediately. Invoke shadow-frog-init to create it, shadow-frog-update to refresh it, shadow-frog-dream for autonomous exploration, shadow-frog-meditate for shadow hygiene, or shadow-frog-viewer to browse it.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2181,2184,2187],{"name":2182,"slug":2183,"type":15},"Code Analysis","code-analysis",{"name":2185,"slug":2186,"type":15},"Engineering","engineering",{"name":13,"slug":14,"type":15},"2026-07-07T06:53:24.688167",{"slug":2190,"name":2190,"fn":2191,"description":2192,"org":2193,"tags":2194,"stars":20,"repoUrl":21,"updatedAt":2207},"shadow-frog-dream","run autonomous experimentation sessions","Run autonomous experimentation while the user is AFK. Uses 6 investigation categories (investigation, bug hunting, feature design, refactoring, optimization, security audit) to systematically discover non-obvious behaviors. Every task is an experiment — implement in worktrees, commit to persistent dream branches, and push to the fork. Dreams compound across sessions: future experiments branch from prior dream branches, building a tree of progressively deeper work. Invoke when the user is AFK or asks for a dream run.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2195,2198,2201,2204],{"name":2196,"slug":2197,"type":15},"Agents","agents",{"name":2199,"slug":2200,"type":15},"Automation","automation",{"name":2202,"slug":2203,"type":15},"Debugging","debugging",{"name":2205,"slug":2206,"type":15},"Security","security","2026-07-03T16:31:54.732639",{"slug":4,"name":4,"fn":5,"description":6,"org":2209,"tags":2210,"stars":20,"repoUrl":21,"updatedAt":22},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2211,2212,2213],{"name":18,"slug":19,"type":15},{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"items":2215,"total":2404},[2216,2236,2255,2276,2289,2306,2317,2330,2345,2360,2379,2392],{"slug":2217,"name":2217,"fn":2218,"description":2219,"org":2220,"tags":2221,"stars":2233,"repoUrl":2234,"updatedAt":2235},"rushstack-best-practices","manage Rush monorepos with best practices","Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2222,2223,2226,2227,2230],{"name":2185,"slug":2186,"type":15},{"name":2224,"slug":2225,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":2228,"slug":2229,"type":15},"Project Management","project-management",{"name":2231,"slug":2232,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":2237,"name":2237,"fn":2238,"description":2239,"org":2240,"tags":2241,"stars":2252,"repoUrl":2253,"updatedAt":2254},"azure-ai-agents-persistent-dotnet","build AI agents with Azure .NET SDK","Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: \"PersistentAgentsClient\", \"persistent agents\", \"agent threads\", \"agent runs\", \"streaming agents\", \"function calling agents .NET\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2242,2245,2246,2249],{"name":2243,"slug":2244,"type":15},".NET","net",{"name":2196,"slug":2197,"type":15},{"name":2247,"slug":2248,"type":15},"Azure","azure",{"name":2250,"slug":2251,"type":15},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":2256,"name":2256,"fn":2257,"description":2258,"org":2259,"tags":2260,"stars":2252,"repoUrl":2253,"updatedAt":2275},"azure-ai-anomalydetector-java","build anomaly detection applications with Java","Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate\u002Fmultivariate anomaly detection, time-series analysis, or AI-powered monitoring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2261,2264,2265,2268,2271,2272],{"name":2262,"slug":2263,"type":15},"Analytics","analytics",{"name":2247,"slug":2248,"type":15},{"name":2266,"slug":2267,"type":15},"Data Analysis","data-analysis",{"name":2269,"slug":2270,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":2273,"slug":2274,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":2277,"name":2277,"fn":2278,"description":2279,"org":2280,"tags":2281,"stars":2252,"repoUrl":2253,"updatedAt":2288},"azure-ai-contentsafety-java","build content moderation applications with Azure AI","Build content moderation applications with Azure AI Content Safety SDK for Java. Use when implementing text\u002Fimage analysis, blocklist management, or harm detection for hate, violence, sexual content, and self-harm.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2282,2285,2286,2287],{"name":2283,"slug":2284,"type":15},"AI Infrastructure","ai-infrastructure",{"name":2247,"slug":2248,"type":15},{"name":2269,"slug":2270,"type":15},{"name":2205,"slug":2206,"type":15},"2026-07-07T06:53:31.293235",{"slug":2290,"name":2290,"fn":2291,"description":2292,"org":2293,"tags":2294,"stars":2252,"repoUrl":2253,"updatedAt":2305},"azure-ai-contentsafety-py","detect harmful content with Azure AI Content Safety","Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.\nTriggers: \"azure-ai-contentsafety\", \"ContentSafetyClient\", \"content moderation\", \"harmful content\", \"text analysis\", \"image analysis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2295,2296,2299,2300,2301,2304],{"name":2247,"slug":2248,"type":15},{"name":2297,"slug":2298,"type":15},"Compliance","compliance",{"name":2250,"slug":2251,"type":15},{"name":9,"slug":8,"type":15},{"name":2302,"slug":2303,"type":15},"Python","python",{"name":2205,"slug":2206,"type":15},"2026-07-18T05:14:23.017504",{"slug":2307,"name":2307,"fn":2308,"description":2309,"org":2310,"tags":2311,"stars":2252,"repoUrl":2253,"updatedAt":2316},"azure-ai-language-conversations-py","implement conversational language understanding with Python","Implement Conversational Language Understanding (CLU) using the azure-ai-language-conversations Python SDK. Use when working with ConversationAnalysisClient to analyze conversation intent and entities, building NLP features, or integrating language understanding into applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2312,2313,2314,2315],{"name":2262,"slug":2263,"type":15},{"name":2247,"slug":2248,"type":15},{"name":2250,"slug":2251,"type":15},{"name":2302,"slug":2303,"type":15},"2026-07-31T05:54:29.068751",{"slug":2318,"name":2318,"fn":2319,"description":2320,"org":2321,"tags":2322,"stars":2252,"repoUrl":2253,"updatedAt":2329},"azure-ai-translation-text-py","translate text using Azure AI services","Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications.\nTriggers: \"text translation\", \"translator\", \"translate text\", \"transliterate\", \"TextTranslationClient\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2323,2326,2327,2328],{"name":2324,"slug":2325,"type":15},"API Development","api-development",{"name":2247,"slug":2248,"type":15},{"name":9,"slug":8,"type":15},{"name":2302,"slug":2303,"type":15},"2026-07-18T05:14:16.988376",{"slug":2331,"name":2331,"fn":2332,"description":2333,"org":2334,"tags":2335,"stars":2252,"repoUrl":2253,"updatedAt":2344},"azure-ai-vision-imageanalysis-py","analyze images with Azure AI Vision","Azure AI Vision Image Analysis SDK for captions, tags, objects, OCR, people detection, and smart cropping. Use for computer vision and image understanding tasks.\nTriggers: \"image analysis\", \"computer vision\", \"OCR\", \"object detection\", \"ImageAnalysisClient\", \"image caption\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2336,2337,2340,2343],{"name":2247,"slug":2248,"type":15},{"name":2338,"slug":2339,"type":15},"Computer Vision","computer-vision",{"name":2341,"slug":2342,"type":15},"Images","images",{"name":2302,"slug":2303,"type":15},"2026-07-18T05:14:18.007737",{"slug":2346,"name":2346,"fn":2347,"description":2348,"org":2349,"tags":2350,"stars":2252,"repoUrl":2253,"updatedAt":2359},"azure-appconfiguration-java","manage configuration with Azure App Configuration","Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\nTriggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2351,2352,2355,2358],{"name":2247,"slug":2248,"type":15},{"name":2353,"slug":2354,"type":15},"Configuration","configuration",{"name":2356,"slug":2357,"type":15},"Feature Flags","feature-flags",{"name":2269,"slug":2270,"type":15},"2026-07-03T16:32:01.278468",{"slug":2361,"name":2361,"fn":2362,"description":2363,"org":2364,"tags":2365,"stars":2252,"repoUrl":2253,"updatedAt":2378},"azure-cosmos-rust","build applications with Azure Cosmos DB","Azure Cosmos DB library for Rust (NoSQL API). Document CRUD, containers, and globally distributed data.\nTriggers: \"cosmos db rust\", \"CosmosClient rust\", \"document crud rust\", \"NoSQL rust\", \"partition key rust\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2366,2369,2372,2375],{"name":2367,"slug":2368,"type":15},"Cosmos DB","cosmos-db",{"name":2370,"slug":2371,"type":15},"Database","database",{"name":2373,"slug":2374,"type":15},"NoSQL","nosql",{"name":2376,"slug":2377,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":2380,"name":2380,"fn":2362,"description":2381,"org":2382,"tags":2383,"stars":2252,"repoUrl":2253,"updatedAt":2391},"azure-cosmos-ts","Azure Cosmos DB JavaScript\u002FTypeScript SDK (@azure\u002Fcosmos) for data plane operations. Use for CRUD operations on documents, queries, bulk operations, and container management. Triggers: \"Cosmos DB\", \"@azure\u002Fcosmos\", \"CosmosClient\", \"document CRUD\", \"NoSQL queries\", \"bulk operations\", \"partition key\", \"container.items\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2384,2385,2386,2387,2388],{"name":2367,"slug":2368,"type":15},{"name":2370,"slug":2371,"type":15},{"name":9,"slug":8,"type":15},{"name":2373,"slug":2374,"type":15},{"name":2389,"slug":2390,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":2393,"name":2393,"fn":2394,"description":2395,"org":2396,"tags":2397,"stars":2252,"repoUrl":2253,"updatedAt":2403},"azure-data-tables-java","build table storage applications with Java","Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2398,2399,2400,2401,2402],{"name":2247,"slug":2248,"type":15},{"name":2367,"slug":2368,"type":15},{"name":2370,"slug":2371,"type":15},{"name":2269,"slug":2270,"type":15},{"name":2373,"slug":2374,"type":15},"2026-05-13T06:14:17.582229",267]