A nested template literal desynchronises the vocabulary gate's shared textual scanners, and every code: position after it in that file goes unplaced #14626

Description

@claude

Found while widening scripts/check-dispatcher-error-vocabulary.mjs for #13790 (PR #14625). Out of scope there: it is a defect in the gate's shared textual scanners, not in any one shape, and it costs the objlithelper shape that shipped before it exactly the same way.

The defect

enclosingOpeners, sliceBalanced and scanTopLevel all skip a string the same way — on seeing a quote character, advance to the next occurrence of that same character:

elseif(c==="'"||c==='"'||c==='`'){constquote=c;i+=1;while(i<src.length&&src[i]!==quote)i+=src[i]==='\\' ? 2 : 1;}

A nested template literal breaks that. In

`Unknown key${n>1 ? 's' : ''}${keys.map((k)=>`\`${k}\``).join(', ')} — the toggle body is { enabled?: boolean }`

the scanner enters at the outer backtick and leaves at the first inner backtick, so from there on it is parsing string bytes as code and code bytes as string. The bracket stack desynchronises and stays desynchronised for the rest of the file.

What it costs, measured

packages/runtime/src/domains/automation.ts carries such a template at line 1285. Downstream of it, enclosingOpeners returns no enclosing bracket for code: positions it should answer for, so any shape guarded by that primitive silently declines them:

code: positions in that file after line 1285 that enclosingOpeners cannot place2
of those, real stamps of the identical validation-catalog ternary2 (:1384, :1399)

Both are code: <x> === undefined ? 'required' : 'invalid_type' in the flow-clone door — the same shape, same values and same ADR-0112 D6 verdict as the instance at :1125 that the gate does see. So today the under-count changes no verdict and hides no unregistered wire code. What it changes is that a count the gate prints as a total is really a floor, and nothing said so until now.

Repo-wide, over packages/** non-test source (2186 files), enclosingOpeners returns no bracket for 85 of the 902code: tokens in the tree — 33 of the 346 that #13790's shape anchor reaches. Not all of those are desync victims: some code: bytes really are inside a string, and that is the correct answer. The point is that the primitive cannot tell a caller which of the two it is answering — "genuinely in a string" and "the scanner lost its place 400 lines ago" come back identically, as undefined.

Why it is not a one-shape problem

What a fix would owe

The scanners would need a template-literal mode that tracks ${} nesting rather than seeking a matching backtick — a real change to three shared primitives that every shape and every census figure in the gate depends on. Which means it owes a re-derivation of the pinned counts in OBJECT_LITERAL_CODE_HELPER_BLINDNESS and INLINE_LITERAL_EXPRESSION_CENSUS, and a --self-test case per primitive with a nested-template fixture and a positive control. That is a card, not a rider on a shape widening.

Unassigned, for triage. Filed under Prime Directive #10 rather than folded into PR #14625.


Generated by Claude Code

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
     blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
    }
    } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
    })();
    (function(){
    try {
    var __m = "github.com";
    var __re = new RegExp('^' + "github\\.com" + '
    
    Skip to content

    A nested template literal desynchronises the vocabulary gate's shared textual scanners, and every code: position after it in that file goes unplaced #14626

    Description

    @claude

    Found while widening scripts/check-dispatcher-error-vocabulary.mjs for #13790 (PR #14625). Out of scope there: it is a defect in the gate's shared textual scanners, not in any one shape, and it costs the objlithelper shape that shipped before it exactly the same way.

    The defect

    enclosingOpeners, sliceBalanced and scanTopLevel all skip a string the same way — on seeing a quote character, advance to the next occurrence of that same character:

    elseif(c==="'"||c==='"'||c==='`'){constquote=c;i+=1;while(i<src.length&&src[i]!==quote)i+=src[i]==='\\' ? 2 : 1;}

    A nested template literal breaks that. In

    `Unknown key${n>1 ? 's' : ''}${keys.map((k)=>`\`${k}\``).join(', ')} — the toggle body is { enabled?: boolean }`

    the scanner enters at the outer backtick and leaves at the first inner backtick, so from there on it is parsing string bytes as code and code bytes as string. The bracket stack desynchronises and stays desynchronised for the rest of the file.

    What it costs, measured

    packages/runtime/src/domains/automation.ts carries such a template at line 1285. Downstream of it, enclosingOpeners returns no enclosing bracket for code: positions it should answer for, so any shape guarded by that primitive silently declines them:

    code: positions in that file after line 1285 that enclosingOpeners cannot place2
    of those, real stamps of the identical validation-catalog ternary2 (:1384, :1399)

    Both are code: <x> === undefined ? 'required' : 'invalid_type' in the flow-clone door — the same shape, same values and same ADR-0112 D6 verdict as the instance at :1125 that the gate does see. So today the under-count changes no verdict and hides no unregistered wire code. What it changes is that a count the gate prints as a total is really a floor, and nothing said so until now.

    Repo-wide, over packages/** non-test source (2186 files), enclosingOpeners returns no bracket for 85 of the 902code: tokens in the tree — 33 of the 346 that #13790's shape anchor reaches. Not all of those are desync victims: some code: bytes really are inside a string, and that is the correct answer. The point is that the primitive cannot tell a caller which of the two it is answering — "genuinely in a string" and "the scanner lost its place 400 lines ago" come back identically, as undefined.

    Why it is not a one-shape problem

    What a fix would owe

    The scanners would need a template-literal mode that tracks ${} nesting rather than seeking a matching backtick — a real change to three shared primitives that every shape and every census figure in the gate depends on. Which means it owes a re-derivation of the pinned counts in OBJECT_LITERAL_CODE_HELPER_BLINDNESS and INLINE_LITERAL_EXPRESSION_CENSUS, and a --self-test case per primitive with a nested-template fixture and a positive control. That is a card, not a rider on a shape widening.

    Unassigned, for triage. Filed under Prime Directive #10 rather than folded into PR #14625.


    Generated by Claude Code

    Metadata

    Metadata

    Assignees

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
      Skip to content

      A nested template literal desynchronises the vocabulary gate's shared textual scanners, and every code: position after it in that file goes unplaced #14626

      Description

      @claude

      Found while widening scripts/check-dispatcher-error-vocabulary.mjs for #13790 (PR #14625). Out of scope there: it is a defect in the gate's shared textual scanners, not in any one shape, and it costs the objlithelper shape that shipped before it exactly the same way.

      The defect

      enclosingOpeners, sliceBalanced and scanTopLevel all skip a string the same way — on seeing a quote character, advance to the next occurrence of that same character:

      elseif(c==="'"||c==='"'||c==='`'){constquote=c;i+=1;while(i<src.length&&src[i]!==quote)i+=src[i]==='\\' ? 2 : 1;}

      A nested template literal breaks that. In

      `Unknown key${n>1 ? 's' : ''}${keys.map((k)=>`\`${k}\``).join(', ')} — the toggle body is { enabled?: boolean }`

      the scanner enters at the outer backtick and leaves at the first inner backtick, so from there on it is parsing string bytes as code and code bytes as string. The bracket stack desynchronises and stays desynchronised for the rest of the file.

      What it costs, measured

      packages/runtime/src/domains/automation.ts carries such a template at line 1285. Downstream of it, enclosingOpeners returns no enclosing bracket for code: positions it should answer for, so any shape guarded by that primitive silently declines them:

      code: positions in that file after line 1285 that enclosingOpeners cannot place2
      of those, real stamps of the identical validation-catalog ternary2 (:1384, :1399)

      Both are code: <x> === undefined ? 'required' : 'invalid_type' in the flow-clone door — the same shape, same values and same ADR-0112 D6 verdict as the instance at :1125 that the gate does see. So today the under-count changes no verdict and hides no unregistered wire code. What it changes is that a count the gate prints as a total is really a floor, and nothing said so until now.

      Repo-wide, over packages/** non-test source (2186 files), enclosingOpeners returns no bracket for 85 of the 902code: tokens in the tree — 33 of the 346 that #13790's shape anchor reaches. Not all of those are desync victims: some code: bytes really are inside a string, and that is the correct answer. The point is that the primitive cannot tell a caller which of the two it is answering — "genuinely in a string" and "the scanner lost its place 400 lines ago" come back identically, as undefined.

      Why it is not a one-shape problem

      What a fix would owe

      The scanners would need a template-literal mode that tracks ${} nesting rather than seeking a matching backtick — a real change to three shared primitives that every shape and every census figure in the gate depends on. Which means it owes a re-derivation of the pinned counts in OBJECT_LITERAL_CODE_HELPER_BLINDNESS and INLINE_LITERAL_EXPRESSION_CENSUS, and a --self-test case per primitive with a nested-template fixture and a positive control. That is a card, not a rider on a shape widening.

      Unassigned, for triage. Filed under Prime Directive #10 rather than folded into PR #14625.


      Generated by Claude Code

      Metadata

      Metadata

      Assignees

      Type

      No type

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions

        , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
        Skip to content

        A nested template literal desynchronises the vocabulary gate's shared textual scanners, and every code: position after it in that file goes unplaced #14626

        Description

        @claude

        Found while widening scripts/check-dispatcher-error-vocabulary.mjs for #13790 (PR #14625). Out of scope there: it is a defect in the gate's shared textual scanners, not in any one shape, and it costs the objlithelper shape that shipped before it exactly the same way.

        The defect

        enclosingOpeners, sliceBalanced and scanTopLevel all skip a string the same way — on seeing a quote character, advance to the next occurrence of that same character:

        elseif(c==="'"||c==='"'||c==='`'){constquote=c;i+=1;while(i<src.length&&src[i]!==quote)i+=src[i]==='\\' ? 2 : 1;}

        A nested template literal breaks that. In

        `Unknown key${n>1 ? 's' : ''}${keys.map((k)=>`\`${k}\``).join(', ')} — the toggle body is { enabled?: boolean }`

        the scanner enters at the outer backtick and leaves at the first inner backtick, so from there on it is parsing string bytes as code and code bytes as string. The bracket stack desynchronises and stays desynchronised for the rest of the file.

        What it costs, measured

        packages/runtime/src/domains/automation.ts carries such a template at line 1285. Downstream of it, enclosingOpeners returns no enclosing bracket for code: positions it should answer for, so any shape guarded by that primitive silently declines them:

        code: positions in that file after line 1285 that enclosingOpeners cannot place2
        of those, real stamps of the identical validation-catalog ternary2 (:1384, :1399)

        Both are code: <x> === undefined ? 'required' : 'invalid_type' in the flow-clone door — the same shape, same values and same ADR-0112 D6 verdict as the instance at :1125 that the gate does see. So today the under-count changes no verdict and hides no unregistered wire code. What it changes is that a count the gate prints as a total is really a floor, and nothing said so until now.

        Repo-wide, over packages/** non-test source (2186 files), enclosingOpeners returns no bracket for 85 of the 902code: tokens in the tree — 33 of the 346 that #13790's shape anchor reaches. Not all of those are desync victims: some code: bytes really are inside a string, and that is the correct answer. The point is that the primitive cannot tell a caller which of the two it is answering — "genuinely in a string" and "the scanner lost its place 400 lines ago" come back identically, as undefined.

        Why it is not a one-shape problem

        What a fix would owe

        The scanners would need a template-literal mode that tracks ${} nesting rather than seeking a matching backtick — a real change to three shared primitives that every shape and every census figure in the gate depends on. Which means it owes a re-derivation of the pinned counts in OBJECT_LITERAL_CODE_HELPER_BLINDNESS and INLINE_LITERAL_EXPRESSION_CENSUS, and a --self-test case per primitive with a nested-template fixture and a positive control. That is a card, not a rider on a shape widening.

        Unassigned, for triage. Filed under Prime Directive #10 rather than folded into PR #14625.


        Generated by Claude Code

        Metadata

        Metadata

        Assignees

        Type

        No type

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
          Skip to content

          A nested template literal desynchronises the vocabulary gate's shared textual scanners, and every code: position after it in that file goes unplaced #14626

          Description

          @claude

          Found while widening scripts/check-dispatcher-error-vocabulary.mjs for #13790 (PR #14625). Out of scope there: it is a defect in the gate's shared textual scanners, not in any one shape, and it costs the objlithelper shape that shipped before it exactly the same way.

          The defect

          enclosingOpeners, sliceBalanced and scanTopLevel all skip a string the same way — on seeing a quote character, advance to the next occurrence of that same character:

          elseif(c==="'"||c==='"'||c==='`'){constquote=c;i+=1;while(i<src.length&&src[i]!==quote)i+=src[i]==='\\' ? 2 : 1;}

          A nested template literal breaks that. In

          `Unknown key${n>1 ? 's' : ''}${keys.map((k)=>`\`${k}\``).join(', ')} — the toggle body is { enabled?: boolean }`

          the scanner enters at the outer backtick and leaves at the first inner backtick, so from there on it is parsing string bytes as code and code bytes as string. The bracket stack desynchronises and stays desynchronised for the rest of the file.

          What it costs, measured

          packages/runtime/src/domains/automation.ts carries such a template at line 1285. Downstream of it, enclosingOpeners returns no enclosing bracket for code: positions it should answer for, so any shape guarded by that primitive silently declines them:

          code: positions in that file after line 1285 that enclosingOpeners cannot place2
          of those, real stamps of the identical validation-catalog ternary2 (:1384, :1399)

          Both are code: <x> === undefined ? 'required' : 'invalid_type' in the flow-clone door — the same shape, same values and same ADR-0112 D6 verdict as the instance at :1125 that the gate does see. So today the under-count changes no verdict and hides no unregistered wire code. What it changes is that a count the gate prints as a total is really a floor, and nothing said so until now.

          Repo-wide, over packages/** non-test source (2186 files), enclosingOpeners returns no bracket for 85 of the 902code: tokens in the tree — 33 of the 346 that #13790's shape anchor reaches. Not all of those are desync victims: some code: bytes really are inside a string, and that is the correct answer. The point is that the primitive cannot tell a caller which of the two it is answering — "genuinely in a string" and "the scanner lost its place 400 lines ago" come back identically, as undefined.

          Why it is not a one-shape problem

          What a fix would owe

          The scanners would need a template-literal mode that tracks ${} nesting rather than seeking a matching backtick — a real change to three shared primitives that every shape and every census figure in the gate depends on. Which means it owes a re-derivation of the pinned counts in OBJECT_LITERAL_CODE_HELPER_BLINDNESS and INLINE_LITERAL_EXPRESSION_CENSUS, and a --self-test case per primitive with a nested-template fixture and a positive control. That is a card, not a rider on a shape widening.

          Unassigned, for triage. Filed under Prime Directive #10 rather than folded into PR #14625.


          Generated by Claude Code

          Metadata

          Metadata

          Assignees

          Type

          No type

          Projects

          No projects

            Milestone

            No milestone

            Relationships

            None yet

            Development

            No branches or pull requests

            Issue actions

            , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
            Skip to content

            A nested template literal desynchronises the vocabulary gate's shared textual scanners, and every code: position after it in that file goes unplaced #14626

            Description

            @claude

            Found while widening scripts/check-dispatcher-error-vocabulary.mjs for #13790 (PR #14625). Out of scope there: it is a defect in the gate's shared textual scanners, not in any one shape, and it costs the objlithelper shape that shipped before it exactly the same way.

            The defect

            enclosingOpeners, sliceBalanced and scanTopLevel all skip a string the same way — on seeing a quote character, advance to the next occurrence of that same character:

            elseif(c==="'"||c==='"'||c==='`'){constquote=c;i+=1;while(i<src.length&&src[i]!==quote)i+=src[i]==='\\' ? 2 : 1;}

            A nested template literal breaks that. In

            `Unknown key${n>1 ? 's' : ''}${keys.map((k)=>`\`${k}\``).join(', ')} — the toggle body is { enabled?: boolean }`

            the scanner enters at the outer backtick and leaves at the first inner backtick, so from there on it is parsing string bytes as code and code bytes as string. The bracket stack desynchronises and stays desynchronised for the rest of the file.

            What it costs, measured

            packages/runtime/src/domains/automation.ts carries such a template at line 1285. Downstream of it, enclosingOpeners returns no enclosing bracket for code: positions it should answer for, so any shape guarded by that primitive silently declines them:

            code: positions in that file after line 1285 that enclosingOpeners cannot place2
            of those, real stamps of the identical validation-catalog ternary2 (:1384, :1399)

            Both are code: <x> === undefined ? 'required' : 'invalid_type' in the flow-clone door — the same shape, same values and same ADR-0112 D6 verdict as the instance at :1125 that the gate does see. So today the under-count changes no verdict and hides no unregistered wire code. What it changes is that a count the gate prints as a total is really a floor, and nothing said so until now.

            Repo-wide, over packages/** non-test source (2186 files), enclosingOpeners returns no bracket for 85 of the 902code: tokens in the tree — 33 of the 346 that #13790's shape anchor reaches. Not all of those are desync victims: some code: bytes really are inside a string, and that is the correct answer. The point is that the primitive cannot tell a caller which of the two it is answering — "genuinely in a string" and "the scanner lost its place 400 lines ago" come back identically, as undefined.

            Why it is not a one-shape problem

            What a fix would owe

            The scanners would need a template-literal mode that tracks ${} nesting rather than seeking a matching backtick — a real change to three shared primitives that every shape and every census figure in the gate depends on. Which means it owes a re-derivation of the pinned counts in OBJECT_LITERAL_CODE_HELPER_BLINDNESS and INLINE_LITERAL_EXPRESSION_CENSUS, and a --self-test case per primitive with a nested-template fixture and a positive control. That is a card, not a rider on a shape widening.

            Unassigned, for triage. Filed under Prime Directive #10 rather than folded into PR #14625.


            Generated by Claude Code

            Metadata

            Metadata

            Assignees

            Type

            No type

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              A nested template literal desynchronises the vocabulary gate's shared textual scanners, and every code: position after it in that file goes unplaced #14626

              Description

              @claude

              Found while widening scripts/check-dispatcher-error-vocabulary.mjs for #13790 (PR #14625). Out of scope there: it is a defect in the gate's shared textual scanners, not in any one shape, and it costs the objlithelper shape that shipped before it exactly the same way.

              The defect

              enclosingOpeners, sliceBalanced and scanTopLevel all skip a string the same way — on seeing a quote character, advance to the next occurrence of that same character:

              elseif(c==="'"||c==='"'||c==='`'){constquote=c;i+=1;while(i<src.length&&src[i]!==quote)i+=src[i]==='\\' ? 2 : 1;}

              A nested template literal breaks that. In

              `Unknown key${n>1 ? 's' : ''}${keys.map((k)=>`\`${k}\``).join(', ')} — the toggle body is { enabled?: boolean }`

              the scanner enters at the outer backtick and leaves at the first inner backtick, so from there on it is parsing string bytes as code and code bytes as string. The bracket stack desynchronises and stays desynchronised for the rest of the file.

              What it costs, measured

              packages/runtime/src/domains/automation.ts carries such a template at line 1285. Downstream of it, enclosingOpeners returns no enclosing bracket for code: positions it should answer for, so any shape guarded by that primitive silently declines them:

              code: positions in that file after line 1285 that enclosingOpeners cannot place2
              of those, real stamps of the identical validation-catalog ternary2 (:1384, :1399)

              Both are code: <x> === undefined ? 'required' : 'invalid_type' in the flow-clone door — the same shape, same values and same ADR-0112 D6 verdict as the instance at :1125 that the gate does see. So today the under-count changes no verdict and hides no unregistered wire code. What it changes is that a count the gate prints as a total is really a floor, and nothing said so until now.

              Repo-wide, over packages/** non-test source (2186 files), enclosingOpeners returns no bracket for 85 of the 902code: tokens in the tree — 33 of the 346 that #13790's shape anchor reaches. Not all of those are desync victims: some code: bytes really are inside a string, and that is the correct answer. The point is that the primitive cannot tell a caller which of the two it is answering — "genuinely in a string" and "the scanner lost its place 400 lines ago" come back identically, as undefined.

              Why it is not a one-shape problem

              What a fix would owe

              The scanners would need a template-literal mode that tracks ${} nesting rather than seeking a matching backtick — a real change to three shared primitives that every shape and every census figure in the gate depends on. Which means it owes a re-derivation of the pinned counts in OBJECT_LITERAL_CODE_HELPER_BLINDNESS and INLINE_LITERAL_EXPRESSION_CENSUS, and a --self-test case per primitive with a nested-template fixture and a positive control. That is a card, not a rider on a shape widening.

              Unassigned, for triage. Filed under Prime Directive #10 rather than folded into PR #14625.


              Generated by Claude Code

              Metadata

              Metadata

              Assignees

              Type

              No type

              Projects

              No projects

                Milestone

                No milestone

                Relationships

                None yet

                Development

                No branches or pull requests

                Issue actions

                , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                Skip to content

                A nested template literal desynchronises the vocabulary gate's shared textual scanners, and every code: position after it in that file goes unplaced #14626

                Description

                @claude

                Found while widening scripts/check-dispatcher-error-vocabulary.mjs for #13790 (PR #14625). Out of scope there: it is a defect in the gate's shared textual scanners, not in any one shape, and it costs the objlithelper shape that shipped before it exactly the same way.

                The defect

                enclosingOpeners, sliceBalanced and scanTopLevel all skip a string the same way — on seeing a quote character, advance to the next occurrence of that same character:

                elseif(c==="'"||c==='"'||c==='`'){constquote=c;i+=1;while(i<src.length&&src[i]!==quote)i+=src[i]==='\\' ? 2 : 1;}

                A nested template literal breaks that. In

                `Unknown key${n>1 ? 's' : ''}${keys.map((k)=>`\`${k}\``).join(', ')} — the toggle body is { enabled?: boolean }`

                the scanner enters at the outer backtick and leaves at the first inner backtick, so from there on it is parsing string bytes as code and code bytes as string. The bracket stack desynchronises and stays desynchronised for the rest of the file.

                What it costs, measured

                packages/runtime/src/domains/automation.ts carries such a template at line 1285. Downstream of it, enclosingOpeners returns no enclosing bracket for code: positions it should answer for, so any shape guarded by that primitive silently declines them:

                code: positions in that file after line 1285 that enclosingOpeners cannot place2
                of those, real stamps of the identical validation-catalog ternary2 (:1384, :1399)

                Both are code: <x> === undefined ? 'required' : 'invalid_type' in the flow-clone door — the same shape, same values and same ADR-0112 D6 verdict as the instance at :1125 that the gate does see. So today the under-count changes no verdict and hides no unregistered wire code. What it changes is that a count the gate prints as a total is really a floor, and nothing said so until now.

                Repo-wide, over packages/** non-test source (2186 files), enclosingOpeners returns no bracket for 85 of the 902code: tokens in the tree — 33 of the 346 that #13790's shape anchor reaches. Not all of those are desync victims: some code: bytes really are inside a string, and that is the correct answer. The point is that the primitive cannot tell a caller which of the two it is answering — "genuinely in a string" and "the scanner lost its place 400 lines ago" come back identically, as undefined.

                Why it is not a one-shape problem

                What a fix would owe

                The scanners would need a template-literal mode that tracks ${} nesting rather than seeking a matching backtick — a real change to three shared primitives that every shape and every census figure in the gate depends on. Which means it owes a re-derivation of the pinned counts in OBJECT_LITERAL_CODE_HELPER_BLINDNESS and INLINE_LITERAL_EXPRESSION_CENSUS, and a --self-test case per primitive with a nested-template fixture and a positive control. That is a card, not a rider on a shape widening.

                Unassigned, for triage. Filed under Prime Directive #10 rather than folded into PR #14625.


                Generated by Claude Code

                Metadata

                Metadata

                Assignees

                Type

                No type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions