[finding] packages/cli/vitest.config.ts says this package has three vi.mock targets — there are eight, and two more are workspace packages the same paragraph tells you to re-check #13873

Description

@claude

Found while re-measuring the packages/cli suite for #13504, on origin/main at
f532630d02. Not that card's defect and not fixed there: different defect class (a stale
claim in a docblock, not suite cost), and the card it was found on is a measurement card.

The claim

packages/cli/vitest.config.ts, in the server.deps.external section (lines 415-421):

// COSTS, so the next person extending this list knows what they buy: an
// externalised package cannot be `vi.mock`ed and is not instrumented for
// coverage. Both were checked against this package when the entry landed —
// `packages/cli` has no `vi.mock` of `@objectstack/types` (its only mock targets
// are `../utils/optional-package.js`, `node:fs/promises` and
// `@objectstack/cloud-connection`) — but neither is free, and a package added
// here later must be re-checked for both.

What is actually there today

The half about @objectstack/types is still TRUE — nothing in this package mocks it. The
parenthesis is not. git grep over packages/cli/**/*.test.ts returns eight distinct
mock targets, not three:

targetkindsite
../utils/optional-package.jsrelative3 sites
node:fs/promisesnode builtin1
@objectstack/cloud-connectionworkspacesrc/commands/doctor-ledger-read-failure.test.ts:754
@objectstack/platform-objects/pluginworkspacesrc/commands/secret/orphans.guards.test.ts:48
@objectstack/lintworkspacetest/i18n-flow-screen-coverage.test.ts:57
../../utils/api-client.jsrelative2 sites
../../utils/secret-reference-union.jsrelative1
../../utils/schema-migrate.jsrelative1

Reproduce:

git grep -ohE "vi\.(do)?mock\(\s*'[^']+'" -- 'packages/cli/**/*.test.ts' | sort -u

Why the staleness is load-bearing rather than cosmetic

The sentence exists to be READ BY THE NEXT EDITOR, and it says so in its own last clause:
"a package added here later must be re-checked for both." The list is the re-check's
starting point. As written it names exactly one workspace package, so a reader doing that
re-check honestly concludes that externalising a workspace package is free of mock
conflicts. Two more workspace packages are mocked today — @objectstack/lint and
@objectstack/platform-objects/plugin — and externalising either would break the file
that mocks it, with an error that points at the test rather than at the config entry that
caused it.

That is the same failure shape as #12529 on this very file: a document that sends the
reader to the right place and then tells them what they will find, so they do not look.

Not claimed here

This is not an argument that anything should be externalised — the #13504 measurement
found no speed warrant for widening that list, and the #11775 resolution warrant is
untouched. The defect is only that the parenthesis is a 2026-era census presented in the
present tense.

Suggested shape of a fix

Either drop the enumeration and give the reader the command (the list will rot again), or
keep the census and stamp it with the commit it was taken on, which is the convention the
rest of this file already adopted after #12499.


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

    [finding] packages/cli/vitest.config.ts says this package has three vi.mock targets — there are eight, and two more are workspace packages the same paragraph tells you to re-check #13873

    Description

    @claude

    Found while re-measuring the packages/cli suite for #13504, on origin/main at
    f532630d02. Not that card's defect and not fixed there: different defect class (a stale
    claim in a docblock, not suite cost), and the card it was found on is a measurement card.

    The claim

    packages/cli/vitest.config.ts, in the server.deps.external section (lines 415-421):

    // COSTS, so the next person extending this list knows what they buy: an
    // externalised package cannot be `vi.mock`ed and is not instrumented for
    // coverage. Both were checked against this package when the entry landed —
    // `packages/cli` has no `vi.mock` of `@objectstack/types` (its only mock targets
    // are `../utils/optional-package.js`, `node:fs/promises` and
    // `@objectstack/cloud-connection`) — but neither is free, and a package added
    // here later must be re-checked for both.
    

    What is actually there today

    The half about @objectstack/types is still TRUE — nothing in this package mocks it. The
    parenthesis is not. git grep over packages/cli/**/*.test.ts returns eight distinct
    mock targets, not three:

    targetkindsite
    ../utils/optional-package.jsrelative3 sites
    node:fs/promisesnode builtin1
    @objectstack/cloud-connectionworkspacesrc/commands/doctor-ledger-read-failure.test.ts:754
    @objectstack/platform-objects/pluginworkspacesrc/commands/secret/orphans.guards.test.ts:48
    @objectstack/lintworkspacetest/i18n-flow-screen-coverage.test.ts:57
    ../../utils/api-client.jsrelative2 sites
    ../../utils/secret-reference-union.jsrelative1
    ../../utils/schema-migrate.jsrelative1

    Reproduce:

    git grep -ohE "vi\.(do)?mock\(\s*'[^']+'" -- 'packages/cli/**/*.test.ts' | sort -u
    

    Why the staleness is load-bearing rather than cosmetic

    The sentence exists to be READ BY THE NEXT EDITOR, and it says so in its own last clause:
    "a package added here later must be re-checked for both." The list is the re-check's
    starting point. As written it names exactly one workspace package, so a reader doing that
    re-check honestly concludes that externalising a workspace package is free of mock
    conflicts. Two more workspace packages are mocked today — @objectstack/lint and
    @objectstack/platform-objects/plugin — and externalising either would break the file
    that mocks it, with an error that points at the test rather than at the config entry that
    caused it.

    That is the same failure shape as #12529 on this very file: a document that sends the
    reader to the right place and then tells them what they will find, so they do not look.

    Not claimed here

    This is not an argument that anything should be externalised — the #13504 measurement
    found no speed warrant for widening that list, and the #11775 resolution warrant is
    untouched. The defect is only that the parenthesis is a 2026-era census presented in the
    present tense.

    Suggested shape of a fix

    Either drop the enumeration and give the reader the command (the list will rot again), or
    keep the census and stamp it with the commit it was taken on, which is the convention the
    rest of this file already adopted after #12499.


    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

      [finding] packages/cli/vitest.config.ts says this package has three vi.mock targets — there are eight, and two more are workspace packages the same paragraph tells you to re-check #13873

      Description

      @claude

      Found while re-measuring the packages/cli suite for #13504, on origin/main at
      f532630d02. Not that card's defect and not fixed there: different defect class (a stale
      claim in a docblock, not suite cost), and the card it was found on is a measurement card.

      The claim

      packages/cli/vitest.config.ts, in the server.deps.external section (lines 415-421):

      // COSTS, so the next person extending this list knows what they buy: an
      // externalised package cannot be `vi.mock`ed and is not instrumented for
      // coverage. Both were checked against this package when the entry landed —
      // `packages/cli` has no `vi.mock` of `@objectstack/types` (its only mock targets
      // are `../utils/optional-package.js`, `node:fs/promises` and
      // `@objectstack/cloud-connection`) — but neither is free, and a package added
      // here later must be re-checked for both.
      

      What is actually there today

      The half about @objectstack/types is still TRUE — nothing in this package mocks it. The
      parenthesis is not. git grep over packages/cli/**/*.test.ts returns eight distinct
      mock targets, not three:

      targetkindsite
      ../utils/optional-package.jsrelative3 sites
      node:fs/promisesnode builtin1
      @objectstack/cloud-connectionworkspacesrc/commands/doctor-ledger-read-failure.test.ts:754
      @objectstack/platform-objects/pluginworkspacesrc/commands/secret/orphans.guards.test.ts:48
      @objectstack/lintworkspacetest/i18n-flow-screen-coverage.test.ts:57
      ../../utils/api-client.jsrelative2 sites
      ../../utils/secret-reference-union.jsrelative1
      ../../utils/schema-migrate.jsrelative1

      Reproduce:

      git grep -ohE "vi\.(do)?mock\(\s*'[^']+'" -- 'packages/cli/**/*.test.ts' | sort -u
      

      Why the staleness is load-bearing rather than cosmetic

      The sentence exists to be READ BY THE NEXT EDITOR, and it says so in its own last clause:
      "a package added here later must be re-checked for both." The list is the re-check's
      starting point. As written it names exactly one workspace package, so a reader doing that
      re-check honestly concludes that externalising a workspace package is free of mock
      conflicts. Two more workspace packages are mocked today — @objectstack/lint and
      @objectstack/platform-objects/plugin — and externalising either would break the file
      that mocks it, with an error that points at the test rather than at the config entry that
      caused it.

      That is the same failure shape as #12529 on this very file: a document that sends the
      reader to the right place and then tells them what they will find, so they do not look.

      Not claimed here

      This is not an argument that anything should be externalised — the #13504 measurement
      found no speed warrant for widening that list, and the #11775 resolution warrant is
      untouched. The defect is only that the parenthesis is a 2026-era census presented in the
      present tense.

      Suggested shape of a fix

      Either drop the enumeration and give the reader the command (the list will rot again), or
      keep the census and stamp it with the commit it was taken on, which is the convention the
      rest of this file already adopted after #12499.


      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

        [finding] packages/cli/vitest.config.ts says this package has three vi.mock targets — there are eight, and two more are workspace packages the same paragraph tells you to re-check #13873

        Description

        @claude

        Found while re-measuring the packages/cli suite for #13504, on origin/main at
        f532630d02. Not that card's defect and not fixed there: different defect class (a stale
        claim in a docblock, not suite cost), and the card it was found on is a measurement card.

        The claim

        packages/cli/vitest.config.ts, in the server.deps.external section (lines 415-421):

        // COSTS, so the next person extending this list knows what they buy: an
        // externalised package cannot be `vi.mock`ed and is not instrumented for
        // coverage. Both were checked against this package when the entry landed —
        // `packages/cli` has no `vi.mock` of `@objectstack/types` (its only mock targets
        // are `../utils/optional-package.js`, `node:fs/promises` and
        // `@objectstack/cloud-connection`) — but neither is free, and a package added
        // here later must be re-checked for both.
        

        What is actually there today

        The half about @objectstack/types is still TRUE — nothing in this package mocks it. The
        parenthesis is not. git grep over packages/cli/**/*.test.ts returns eight distinct
        mock targets, not three:

        targetkindsite
        ../utils/optional-package.jsrelative3 sites
        node:fs/promisesnode builtin1
        @objectstack/cloud-connectionworkspacesrc/commands/doctor-ledger-read-failure.test.ts:754
        @objectstack/platform-objects/pluginworkspacesrc/commands/secret/orphans.guards.test.ts:48
        @objectstack/lintworkspacetest/i18n-flow-screen-coverage.test.ts:57
        ../../utils/api-client.jsrelative2 sites
        ../../utils/secret-reference-union.jsrelative1
        ../../utils/schema-migrate.jsrelative1

        Reproduce:

        git grep -ohE "vi\.(do)?mock\(\s*'[^']+'" -- 'packages/cli/**/*.test.ts' | sort -u
        

        Why the staleness is load-bearing rather than cosmetic

        The sentence exists to be READ BY THE NEXT EDITOR, and it says so in its own last clause:
        "a package added here later must be re-checked for both." The list is the re-check's
        starting point. As written it names exactly one workspace package, so a reader doing that
        re-check honestly concludes that externalising a workspace package is free of mock
        conflicts. Two more workspace packages are mocked today — @objectstack/lint and
        @objectstack/platform-objects/plugin — and externalising either would break the file
        that mocks it, with an error that points at the test rather than at the config entry that
        caused it.

        That is the same failure shape as #12529 on this very file: a document that sends the
        reader to the right place and then tells them what they will find, so they do not look.

        Not claimed here

        This is not an argument that anything should be externalised — the #13504 measurement
        found no speed warrant for widening that list, and the #11775 resolution warrant is
        untouched. The defect is only that the parenthesis is a 2026-era census presented in the
        present tense.

        Suggested shape of a fix

        Either drop the enumeration and give the reader the command (the list will rot again), or
        keep the census and stamp it with the commit it was taken on, which is the convention the
        rest of this file already adopted after #12499.


        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

          [finding] packages/cli/vitest.config.ts says this package has three vi.mock targets — there are eight, and two more are workspace packages the same paragraph tells you to re-check #13873

          Description

          @claude

          Found while re-measuring the packages/cli suite for #13504, on origin/main at
          f532630d02. Not that card's defect and not fixed there: different defect class (a stale
          claim in a docblock, not suite cost), and the card it was found on is a measurement card.

          The claim

          packages/cli/vitest.config.ts, in the server.deps.external section (lines 415-421):

          // COSTS, so the next person extending this list knows what they buy: an
          // externalised package cannot be `vi.mock`ed and is not instrumented for
          // coverage. Both were checked against this package when the entry landed —
          // `packages/cli` has no `vi.mock` of `@objectstack/types` (its only mock targets
          // are `../utils/optional-package.js`, `node:fs/promises` and
          // `@objectstack/cloud-connection`) — but neither is free, and a package added
          // here later must be re-checked for both.
          

          What is actually there today

          The half about @objectstack/types is still TRUE — nothing in this package mocks it. The
          parenthesis is not. git grep over packages/cli/**/*.test.ts returns eight distinct
          mock targets, not three:

          targetkindsite
          ../utils/optional-package.jsrelative3 sites
          node:fs/promisesnode builtin1
          @objectstack/cloud-connectionworkspacesrc/commands/doctor-ledger-read-failure.test.ts:754
          @objectstack/platform-objects/pluginworkspacesrc/commands/secret/orphans.guards.test.ts:48
          @objectstack/lintworkspacetest/i18n-flow-screen-coverage.test.ts:57
          ../../utils/api-client.jsrelative2 sites
          ../../utils/secret-reference-union.jsrelative1
          ../../utils/schema-migrate.jsrelative1

          Reproduce:

          git grep -ohE "vi\.(do)?mock\(\s*'[^']+'" -- 'packages/cli/**/*.test.ts' | sort -u
          

          Why the staleness is load-bearing rather than cosmetic

          The sentence exists to be READ BY THE NEXT EDITOR, and it says so in its own last clause:
          "a package added here later must be re-checked for both." The list is the re-check's
          starting point. As written it names exactly one workspace package, so a reader doing that
          re-check honestly concludes that externalising a workspace package is free of mock
          conflicts. Two more workspace packages are mocked today — @objectstack/lint and
          @objectstack/platform-objects/plugin — and externalising either would break the file
          that mocks it, with an error that points at the test rather than at the config entry that
          caused it.

          That is the same failure shape as #12529 on this very file: a document that sends the
          reader to the right place and then tells them what they will find, so they do not look.

          Not claimed here

          This is not an argument that anything should be externalised — the #13504 measurement
          found no speed warrant for widening that list, and the #11775 resolution warrant is
          untouched. The defect is only that the parenthesis is a 2026-era census presented in the
          present tense.

          Suggested shape of a fix

          Either drop the enumeration and give the reader the command (the list will rot again), or
          keep the census and stamp it with the commit it was taken on, which is the convention the
          rest of this file already adopted after #12499.


          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

            [finding] packages/cli/vitest.config.ts says this package has three vi.mock targets — there are eight, and two more are workspace packages the same paragraph tells you to re-check #13873

            Description

            @claude

            Found while re-measuring the packages/cli suite for #13504, on origin/main at
            f532630d02. Not that card's defect and not fixed there: different defect class (a stale
            claim in a docblock, not suite cost), and the card it was found on is a measurement card.

            The claim

            packages/cli/vitest.config.ts, in the server.deps.external section (lines 415-421):

            // COSTS, so the next person extending this list knows what they buy: an
            // externalised package cannot be `vi.mock`ed and is not instrumented for
            // coverage. Both were checked against this package when the entry landed —
            // `packages/cli` has no `vi.mock` of `@objectstack/types` (its only mock targets
            // are `../utils/optional-package.js`, `node:fs/promises` and
            // `@objectstack/cloud-connection`) — but neither is free, and a package added
            // here later must be re-checked for both.
            

            What is actually there today

            The half about @objectstack/types is still TRUE — nothing in this package mocks it. The
            parenthesis is not. git grep over packages/cli/**/*.test.ts returns eight distinct
            mock targets, not three:

            targetkindsite
            ../utils/optional-package.jsrelative3 sites
            node:fs/promisesnode builtin1
            @objectstack/cloud-connectionworkspacesrc/commands/doctor-ledger-read-failure.test.ts:754
            @objectstack/platform-objects/pluginworkspacesrc/commands/secret/orphans.guards.test.ts:48
            @objectstack/lintworkspacetest/i18n-flow-screen-coverage.test.ts:57
            ../../utils/api-client.jsrelative2 sites
            ../../utils/secret-reference-union.jsrelative1
            ../../utils/schema-migrate.jsrelative1

            Reproduce:

            git grep -ohE "vi\.(do)?mock\(\s*'[^']+'" -- 'packages/cli/**/*.test.ts' | sort -u
            

            Why the staleness is load-bearing rather than cosmetic

            The sentence exists to be READ BY THE NEXT EDITOR, and it says so in its own last clause:
            "a package added here later must be re-checked for both." The list is the re-check's
            starting point. As written it names exactly one workspace package, so a reader doing that
            re-check honestly concludes that externalising a workspace package is free of mock
            conflicts. Two more workspace packages are mocked today — @objectstack/lint and
            @objectstack/platform-objects/plugin — and externalising either would break the file
            that mocks it, with an error that points at the test rather than at the config entry that
            caused it.

            That is the same failure shape as #12529 on this very file: a document that sends the
            reader to the right place and then tells them what they will find, so they do not look.

            Not claimed here

            This is not an argument that anything should be externalised — the #13504 measurement
            found no speed warrant for widening that list, and the #11775 resolution warrant is
            untouched. The defect is only that the parenthesis is a 2026-era census presented in the
            present tense.

            Suggested shape of a fix

            Either drop the enumeration and give the reader the command (the list will rot again), or
            keep the census and stamp it with the commit it was taken on, which is the convention the
            rest of this file already adopted after #12499.


            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

              [finding] packages/cli/vitest.config.ts says this package has three vi.mock targets — there are eight, and two more are workspace packages the same paragraph tells you to re-check #13873

              Description

              @claude

              Found while re-measuring the packages/cli suite for #13504, on origin/main at
              f532630d02. Not that card's defect and not fixed there: different defect class (a stale
              claim in a docblock, not suite cost), and the card it was found on is a measurement card.

              The claim

              packages/cli/vitest.config.ts, in the server.deps.external section (lines 415-421):

              // COSTS, so the next person extending this list knows what they buy: an
              // externalised package cannot be `vi.mock`ed and is not instrumented for
              // coverage. Both were checked against this package when the entry landed —
              // `packages/cli` has no `vi.mock` of `@objectstack/types` (its only mock targets
              // are `../utils/optional-package.js`, `node:fs/promises` and
              // `@objectstack/cloud-connection`) — but neither is free, and a package added
              // here later must be re-checked for both.
              

              What is actually there today

              The half about @objectstack/types is still TRUE — nothing in this package mocks it. The
              parenthesis is not. git grep over packages/cli/**/*.test.ts returns eight distinct
              mock targets, not three:

              targetkindsite
              ../utils/optional-package.jsrelative3 sites
              node:fs/promisesnode builtin1
              @objectstack/cloud-connectionworkspacesrc/commands/doctor-ledger-read-failure.test.ts:754
              @objectstack/platform-objects/pluginworkspacesrc/commands/secret/orphans.guards.test.ts:48
              @objectstack/lintworkspacetest/i18n-flow-screen-coverage.test.ts:57
              ../../utils/api-client.jsrelative2 sites
              ../../utils/secret-reference-union.jsrelative1
              ../../utils/schema-migrate.jsrelative1

              Reproduce:

              git grep -ohE "vi\.(do)?mock\(\s*'[^']+'" -- 'packages/cli/**/*.test.ts' | sort -u
              

              Why the staleness is load-bearing rather than cosmetic

              The sentence exists to be READ BY THE NEXT EDITOR, and it says so in its own last clause:
              "a package added here later must be re-checked for both." The list is the re-check's
              starting point. As written it names exactly one workspace package, so a reader doing that
              re-check honestly concludes that externalising a workspace package is free of mock
              conflicts. Two more workspace packages are mocked today — @objectstack/lint and
              @objectstack/platform-objects/plugin — and externalising either would break the file
              that mocks it, with an error that points at the test rather than at the config entry that
              caused it.

              That is the same failure shape as #12529 on this very file: a document that sends the
              reader to the right place and then tells them what they will find, so they do not look.

              Not claimed here

              This is not an argument that anything should be externalised — the #13504 measurement
              found no speed warrant for widening that list, and the #11775 resolution warrant is
              untouched. The defect is only that the parenthesis is a 2026-era census presented in the
              present tense.

              Suggested shape of a fix

              Either drop the enumeration and give the reader the command (the list will rot again), or
              keep the census and stamp it with the commit it was taken on, which is the convention the
              rest of this file already adopted after #12499.


              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

                [finding] packages/cli/vitest.config.ts says this package has three vi.mock targets — there are eight, and two more are workspace packages the same paragraph tells you to re-check #13873

                Description

                @claude

                Found while re-measuring the packages/cli suite for #13504, on origin/main at
                f532630d02. Not that card's defect and not fixed there: different defect class (a stale
                claim in a docblock, not suite cost), and the card it was found on is a measurement card.

                The claim

                packages/cli/vitest.config.ts, in the server.deps.external section (lines 415-421):

                // COSTS, so the next person extending this list knows what they buy: an
                // externalised package cannot be `vi.mock`ed and is not instrumented for
                // coverage. Both were checked against this package when the entry landed —
                // `packages/cli` has no `vi.mock` of `@objectstack/types` (its only mock targets
                // are `../utils/optional-package.js`, `node:fs/promises` and
                // `@objectstack/cloud-connection`) — but neither is free, and a package added
                // here later must be re-checked for both.
                

                What is actually there today

                The half about @objectstack/types is still TRUE — nothing in this package mocks it. The
                parenthesis is not. git grep over packages/cli/**/*.test.ts returns eight distinct
                mock targets, not three:

                targetkindsite
                ../utils/optional-package.jsrelative3 sites
                node:fs/promisesnode builtin1
                @objectstack/cloud-connectionworkspacesrc/commands/doctor-ledger-read-failure.test.ts:754
                @objectstack/platform-objects/pluginworkspacesrc/commands/secret/orphans.guards.test.ts:48
                @objectstack/lintworkspacetest/i18n-flow-screen-coverage.test.ts:57
                ../../utils/api-client.jsrelative2 sites
                ../../utils/secret-reference-union.jsrelative1
                ../../utils/schema-migrate.jsrelative1

                Reproduce:

                git grep -ohE "vi\.(do)?mock\(\s*'[^']+'" -- 'packages/cli/**/*.test.ts' | sort -u
                

                Why the staleness is load-bearing rather than cosmetic

                The sentence exists to be READ BY THE NEXT EDITOR, and it says so in its own last clause:
                "a package added here later must be re-checked for both." The list is the re-check's
                starting point. As written it names exactly one workspace package, so a reader doing that
                re-check honestly concludes that externalising a workspace package is free of mock
                conflicts. Two more workspace packages are mocked today — @objectstack/lint and
                @objectstack/platform-objects/plugin — and externalising either would break the file
                that mocks it, with an error that points at the test rather than at the config entry that
                caused it.

                That is the same failure shape as #12529 on this very file: a document that sends the
                reader to the right place and then tells them what they will find, so they do not look.

                Not claimed here

                This is not an argument that anything should be externalised — the #13504 measurement
                found no speed warrant for widening that list, and the #11775 resolution warrant is
                untouched. The defect is only that the parenthesis is a 2026-era census presented in the
                present tense.

                Suggested shape of a fix

                Either drop the enumeration and give the reader the command (the list will rot again), or
                keep the census and stamp it with the commit it was taken on, which is the convention the
                rest of this file already adopted after #12499.


                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