{
  "recorded_at": "2026-10-28T17:04:28.063743+00:00",
  "server": {
    "name": "contextmcp",
    "version": "0.26.4"
  },
  "tool": "get_context",
  "mode": "recorded-real-execution",
  "source": "Disposable fixture containing two real portfolio source files",
  "files": [
    {
      "path": "src/matter.js",
      "sha256": "5d95d83a986edcd6270134b23877f5ffe6b3215e3844682bdb5671b48b7a962a"
    },
    {
      "path": "src/content.js",
      "sha256": "bd0fba2e0cd78b8e10abe72ee449e10ae8a168a0ef81d830cbd4026e44665fe5"
    }
  ],
  "samples": [
    {
      "id": "motion",
      "label": {
        "fr": "Respecter la réduction des animations",
        "en": "Respect reduced motion"
      },
      "request": {
        "name": "get_context",
        "arguments": {
          "task": "prefers-reduced-motion entrance sync paused animation",
          "max_chars": 3200
        }
      },
      "response": {
        "id": 2,
        "jsonrpc": "2.0",
        "result": {
          "content": [
            {
              "text": "Context for: prefers-reduced-motion entrance sync paused animation\nTerms: animation, entrance, motion, paus, prefer, reduc, sync\n\n## Relevant code\n### src/matter.js  (matched: animation, entrance, motion, paus, prefer, reduc)\n  12:   const replay = document.querySelector('#replay');\n  13:   if (!ctx || !overlay) return;\n  14:   const motion = matchMedia('(prefers-reduced-motion: reduce)');\n  15:   const columns = 80, rows = 44, samplesU = 120, samplesV = 72;\n  16:   const count = samplesU * samplesV;\n  ...\n  55:   }\n  56:   function beginEntrance() {\n  57:     if(motion.matches||paused){leaveEntrance();return;}\n  58:     scrollTo({top:0,behavior:'instant'});\n  59:     clock=0;arrivalStart=performance.now();burst=false;entrance=true;intro.hidden=false;skip.hidden=false;text.style.opacity='0';\n  ...\n  116:   }\n  117:   function tick(now){raf=null;if(last!==null&&now-last<30){raf=requestAnimationFrame(tick);return;}if(last!==null)clock+=Math.min(now-last,60);render(now);last=now;if(!destroyed)raf=requestAnimationFr…\n  118:   function sync(){if(raf!==null)cancelAnimationFrame(raf);raf=null;last=null;if(motion.matches||paused){if(entrance)leaveEntrance();render(performance.now(),true);return;}if(!document.hidden&&(inView|…\n  119:   skip.addEventListener('click',()=>{leaveEntrance();document.querySelector('.explore').focus();});\n  120:   document.addEventListener('click',event=>{if(entrance&&event.target!==replay)leaveEntrance();});\n\n### src/content.js  (matched: animation, motion, paus, prefer, reduc, sync)\n  2: const $ = s => document.querySelector(s);\n  3: const $$ = s => [...document.querySelectorAll(s)];\n  4: const reduced = matchMedia('(prefers-reduced-motion: reduce)');\n  5: let lang = new URLSearchParams(location.search).get('lang') === 'en' ? 'en' : 'fr', paused = false;\n  6: let activeDialog = null, focusOrigin = null;\n  ...\n  53:   body.append(...paragraphs.map(text => node('p', text)));\n  54: }\n  55: function openDialog(kind) { focusOrigin = document.activeElement; activeDialog = kind; renderDialog(); $('#detail').showModal(); syncAnimation(); }\n  56: \n  57: $$('.contact').forEach(el => el.addEventListener('click', () => openDialog('contact')));\n  ...\n  60: $('#detail').addEventListener('click', e => { if (e.target !== $('#detail')) return; const r = e.target.getBoundingClientRect(); if (e.clientX < r.left || e.clientX > r.right || e.clientY < r.top || e…\n  61: $('#language').addEventListener('click', () => { lang = lang === 'fr' ? 'en' : 'fr'; translate(); });\n  62: $('#pause').addEventListener('click', () => { paused = !paused; pauseLabel(); syncAnimation(); });\n  63: \n  64: \n\n(2 of 2 candidate files shown with excerpts; use search_code to dig further.)",
              "type": "text"
            }
          ],
          "isError": false
        }
      },
      "text": "Context for: prefers-reduced-motion entrance sync paused animation\nTerms: animation, entrance, motion, paus, prefer, reduc, sync\n\n## Relevant code\n### src/matter.js  (matched: animation, entrance, motion, paus, prefer, reduc)\n  12:   const replay = document.querySelector('#replay');\n  13:   if (!ctx || !overlay) return;\n  14:   const motion = matchMedia('(prefers-reduced-motion: reduce)');\n  15:   const columns = 80, rows = 44, samplesU = 120, samplesV = 72;\n  16:   const count = samplesU * samplesV;\n  ...\n  55:   }\n  56:   function beginEntrance() {\n  57:     if(motion.matches||paused){leaveEntrance();return;}\n  58:     scrollTo({top:0,behavior:'instant'});\n  59:     clock=0;arrivalStart=performance.now();burst=false;entrance=true;intro.hidden=false;skip.hidden=false;text.style.opacity='0';\n  ...\n  116:   }\n  117:   function tick(now){raf=null;if(last!==null&&now-last<30){raf=requestAnimationFrame(tick);return;}if(last!==null)clock+=Math.min(now-last,60);render(now);last=now;if(!destroyed)raf=requestAnimationFr…\n  118:   function sync(){if(raf!==null)cancelAnimationFrame(raf);raf=null;last=null;if(motion.matches||paused){if(entrance)leaveEntrance();render(performance.now(),true);return;}if(!document.hidden&&(inView|…\n  119:   skip.addEventListener('click',()=>{leaveEntrance();document.querySelector('.explore').focus();});\n  120:   document.addEventListener('click',event=>{if(entrance&&event.target!==replay)leaveEntrance();});\n\n### src/content.js  (matched: animation, motion, paus, prefer, reduc, sync)\n  2: const $ = s => document.querySelector(s);\n  3: const $$ = s => [...document.querySelectorAll(s)];\n  4: const reduced = matchMedia('(prefers-reduced-motion: reduce)');\n  5: let lang = new URLSearchParams(location.search).get('lang') === 'en' ? 'en' : 'fr', paused = false;\n  6: let activeDialog = null, focusOrigin = null;\n  ...\n  53:   body.append(...paragraphs.map(text => node('p', text)));\n  54: }\n  55: function openDialog(kind) { focusOrigin = document.activeElement; activeDialog = kind; renderDialog(); $('#detail').showModal(); syncAnimation(); }\n  56: \n  57: $$('.contact').forEach(el => el.addEventListener('click', () => openDialog('contact')));\n  ...\n  60: $('#detail').addEventListener('click', e => { if (e.target !== $('#detail')) return; const r = e.target.getBoundingClientRect(); if (e.clientX < r.left || e.clientX > r.right || e.clientY < r.top || e…\n  61: $('#language').addEventListener('click', () => { lang = lang === 'fr' ? 'en' : 'fr'; translate(); });\n  62: $('#pause').addEventListener('click', () => { paused = !paused; pauseLabel(); syncAnimation(); });\n  63: \n  64: \n\n(2 of 2 candidate files shown with excerpts; use search_code to dig further.)"
    },
    {
      "id": "focus",
      "label": {
        "fr": "Rendre le focus après une fiche",
        "en": "Restore focus after a project dialog"
      },
      "request": {
        "name": "get_context",
        "arguments": {
          "task": "close dialog focusOrigin focus activeDialog",
          "max_chars": 3200
        }
      },
      "response": {
        "id": 3,
        "jsonrpc": "2.0",
        "result": {
          "content": [
            {
              "text": "Context for: close dialog focusOrigin focus activeDialog\nTerms: activedialog, focusorigin, close, dialog, focu, active, origin\n\n## Relevant code\n### src/content.js  (matched: activedialog, focusorigin, close, dialog, focu, active)\n  4: const reduced = matchMedia('(prefers-reduced-motion: reduce)');\n  5: let lang = new URLSearchParams(location.search).get('lang') === 'en' ? 'en' : 'fr', paused = false;\n  6: let activeDialog = null, focusOrigin = null;\n  7: const content = {\n  8:   fr: {\n  ...\n  53:   body.append(...paragraphs.map(text => node('p', text)));\n  54: }\n  55: function openDialog(kind) { focusOrigin = document.activeElement; activeDialog = kind; renderDialog(); $('#detail').showModal(); syncAnimation(); }\n  56: \n  57: $$('.contact').forEach(el => el.addEventListener('click', () => openDialog('contact')));\n  58: $$('.close,.done').forEach(el => el.addEventListener('click', () => $('#detail').close()));\n  59: $('#detail').addEventListener('close', () => { activeDialog = null; focusOrigin?.focus(); syncAnimation(); });\n  60: $('#detail').addEventListener('click', e => { if (e.target !== $('#detail')) return; const r = e.target.getBoundingClientRect(); if (e.clientX < r.left || e.clientX > r.right || e.clientY < r.top || e…\n  61: $('#language').addEventListener('click', () => { lang = lang === 'fr' ? 'en' : 'fr'; translate(); });\n\n### src/matter.js  (matched: focu)\n  117:   function tick(now){raf=null;if(last!==null&&now-last<30){raf=requestAnimationFrame(tick);return;}if(last!==null)clock+=Math.min(now-last,60);render(now);last=now;if(!destroyed)raf=requestAnimationFr…\n  118:   function sync(){if(raf!==null)cancelAnimationFrame(raf);raf=null;last=null;if(motion.matches||paused){if(entrance)leaveEntrance();render(performance.now(),true);return;}if(!document.hidden&&(inView|…\n  119:   skip.addEventListener('click',()=>{leaveEntrance();document.querySelector('.explore').focus();});\n  120:   document.addEventListener('click',event=>{if(entrance&&event.target!==replay)leaveEntrance();});\n  121:   replay.addEventListener('click',beginEntrance);\n\n(2 of 2 candidate files shown with excerpts; use search_code to dig further.)",
              "type": "text"
            }
          ],
          "isError": false
        }
      },
      "text": "Context for: close dialog focusOrigin focus activeDialog\nTerms: activedialog, focusorigin, close, dialog, focu, active, origin\n\n## Relevant code\n### src/content.js  (matched: activedialog, focusorigin, close, dialog, focu, active)\n  4: const reduced = matchMedia('(prefers-reduced-motion: reduce)');\n  5: let lang = new URLSearchParams(location.search).get('lang') === 'en' ? 'en' : 'fr', paused = false;\n  6: let activeDialog = null, focusOrigin = null;\n  7: const content = {\n  8:   fr: {\n  ...\n  53:   body.append(...paragraphs.map(text => node('p', text)));\n  54: }\n  55: function openDialog(kind) { focusOrigin = document.activeElement; activeDialog = kind; renderDialog(); $('#detail').showModal(); syncAnimation(); }\n  56: \n  57: $$('.contact').forEach(el => el.addEventListener('click', () => openDialog('contact')));\n  58: $$('.close,.done').forEach(el => el.addEventListener('click', () => $('#detail').close()));\n  59: $('#detail').addEventListener('close', () => { activeDialog = null; focusOrigin?.focus(); syncAnimation(); });\n  60: $('#detail').addEventListener('click', e => { if (e.target !== $('#detail')) return; const r = e.target.getBoundingClientRect(); if (e.clientX < r.left || e.clientX > r.right || e.clientY < r.top || e…\n  61: $('#language').addEventListener('click', () => { lang = lang === 'fr' ? 'en' : 'fr'; translate(); });\n\n### src/matter.js  (matched: focu)\n  117:   function tick(now){raf=null;if(last!==null&&now-last<30){raf=requestAnimationFrame(tick);return;}if(last!==null)clock+=Math.min(now-last,60);render(now);last=now;if(!destroyed)raf=requestAnimationFr…\n  118:   function sync(){if(raf!==null)cancelAnimationFrame(raf);raf=null;last=null;if(motion.matches||paused){if(entrance)leaveEntrance();render(performance.now(),true);return;}if(!document.hidden&&(inView|…\n  119:   skip.addEventListener('click',()=>{leaveEntrance();document.querySelector('.explore').focus();});\n  120:   document.addEventListener('click',event=>{if(entrance&&event.target!==replay)leaveEntrance();});\n  121:   replay.addEventListener('click',beginEntrance);\n\n(2 of 2 candidate files shown with excerpts; use search_code to dig further.)"
    }
  ]
}
