packages/cli typecheck compiles none of the 112 test files under test/include: ["src"] makes the green verdict empty for half the suite #14710

Description

@os-trump

Filed while verifying #14554; unrelated to that card's change and deliberately not repaired there.

The measurement

packages/cli/package.json declares "typecheck": "tsc --noEmit", and
packages/cli/tsconfig.json declares "include": ["src"]. Measured on
d29fbf2a78 with tsc -p packages/cli/tsconfig.json --noEmit --listFiles:

populationon diskin the tsc program
test files under packages/cli/src/118118
test files under packages/cli/test/1120
package-root harness modules (vitest.config.ts, vitest-tiers.ts, vitest-tiers.fixtures.ts)30

pnpm --filter @objectstack/cli typecheck exits 0. That verdict is true and it
is empty for 112 test files — just under half the package's 230.

Why this is the shape AGENTS.md already names

AGENTS.md, under the type-check ratchet:

Never exclude*.test.ts / *.spec.ts from a package's tsconfig.jsontsc --noEmit reads that config, so the exclusion hides the tests from the very check the typecheck script advertises (a green gate over source nothing read).

This package reaches the same end state by the other spelling: not an exclude
of the test globs, but an include narrowed to src, which omits the entire
test/ directory by construction. The consequence is identical — and so is the
corollary AGENTS.md draws next: a @ts-expect-error in any of those 112 files
is a phantom check that evaluates never and can be deleted with every gate
still green.

The ratchet does not catch it. pnpm check:type-check-coverage asks whether a
package declares a typecheck script; this one does, so the package is
covered on paper. Nine packages (client, lint, objectql, rest, spec,
plugin-auth, plugin-approvals, plugin-sharing, knowledge-ragflow) carry
the second-layer ledger — a check:test-typecheck script plus a shrink-only
test-typecheck-debt.json. packages/cli carries neither, while holding one of
the largest test populations in the repo.

Decision this needs, rather than a patch

The mechanism is already in the tree and AGENTS.md says to onboard by wiring,
never by copying
: a sibling tsconfig.test.json naming test, wired into the
typecheck script, plus scripts/check-test-typecheck.mts --package packages/cli
and a generated test-typecheck-debt.json.

What is not mine to decide is the size of the debt that first measurement will
record. 112 previously unchecked files may produce a large initial ledger entry,
and AGENTS.md is explicit that such an entry's note is load-bearing rather
than decorative. Someone should measure it before choosing between onboarding
with a ledger and widening include outright.

Not in scope for the card that found it

#14554 concerns the merge-queue ejection caused by a hand-maintained tier list;
its diff adds two of the three unchecked package-root modules listed above, and
that PR records the gap as NOT MEASURED rather than claiming coverage it does
not have. This issue is the separate one.

Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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

    packages/cli typecheck compiles none of the 112 test files under test/include: ["src"] makes the green verdict empty for half the suite #14710

    Description

    @os-trump

    Filed while verifying #14554; unrelated to that card's change and deliberately not repaired there.

    The measurement

    packages/cli/package.json declares "typecheck": "tsc --noEmit", and
    packages/cli/tsconfig.json declares "include": ["src"]. Measured on
    d29fbf2a78 with tsc -p packages/cli/tsconfig.json --noEmit --listFiles:

    populationon diskin the tsc program
    test files under packages/cli/src/118118
    test files under packages/cli/test/1120
    package-root harness modules (vitest.config.ts, vitest-tiers.ts, vitest-tiers.fixtures.ts)30

    pnpm --filter @objectstack/cli typecheck exits 0. That verdict is true and it
    is empty for 112 test files — just under half the package's 230.

    Why this is the shape AGENTS.md already names

    AGENTS.md, under the type-check ratchet:

    Never exclude*.test.ts / *.spec.ts from a package's tsconfig.jsontsc --noEmit reads that config, so the exclusion hides the tests from the very check the typecheck script advertises (a green gate over source nothing read).

    This package reaches the same end state by the other spelling: not an exclude
    of the test globs, but an include narrowed to src, which omits the entire
    test/ directory by construction. The consequence is identical — and so is the
    corollary AGENTS.md draws next: a @ts-expect-error in any of those 112 files
    is a phantom check that evaluates never and can be deleted with every gate
    still green.

    The ratchet does not catch it. pnpm check:type-check-coverage asks whether a
    package declares a typecheck script; this one does, so the package is
    covered on paper. Nine packages (client, lint, objectql, rest, spec,
    plugin-auth, plugin-approvals, plugin-sharing, knowledge-ragflow) carry
    the second-layer ledger — a check:test-typecheck script plus a shrink-only
    test-typecheck-debt.json. packages/cli carries neither, while holding one of
    the largest test populations in the repo.

    Decision this needs, rather than a patch

    The mechanism is already in the tree and AGENTS.md says to onboard by wiring,
    never by copying
    : a sibling tsconfig.test.json naming test, wired into the
    typecheck script, plus scripts/check-test-typecheck.mts --package packages/cli
    and a generated test-typecheck-debt.json.

    What is not mine to decide is the size of the debt that first measurement will
    record. 112 previously unchecked files may produce a large initial ledger entry,
    and AGENTS.md is explicit that such an entry's note is load-bearing rather
    than decorative. Someone should measure it before choosing between onboarding
    with a ledger and widening include outright.

    Not in scope for the card that found it

    #14554 concerns the merge-queue ejection caused by a hand-maintained tier list;
    its diff adds two of the three unchecked package-root modules listed above, and
    that PR records the gap as NOT MEASURED rather than claiming coverage it does
    not have. This issue is the separate one.

    Generated by Claude Code

    Activity

    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    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

      packages/cli typecheck compiles none of the 112 test files under test/include: ["src"] makes the green verdict empty for half the suite #14710

      Description

      @os-trump

      Filed while verifying #14554; unrelated to that card's change and deliberately not repaired there.

      The measurement

      packages/cli/package.json declares "typecheck": "tsc --noEmit", and
      packages/cli/tsconfig.json declares "include": ["src"]. Measured on
      d29fbf2a78 with tsc -p packages/cli/tsconfig.json --noEmit --listFiles:

      populationon diskin the tsc program
      test files under packages/cli/src/118118
      test files under packages/cli/test/1120
      package-root harness modules (vitest.config.ts, vitest-tiers.ts, vitest-tiers.fixtures.ts)30

      pnpm --filter @objectstack/cli typecheck exits 0. That verdict is true and it
      is empty for 112 test files — just under half the package's 230.

      Why this is the shape AGENTS.md already names

      AGENTS.md, under the type-check ratchet:

      Never exclude*.test.ts / *.spec.ts from a package's tsconfig.jsontsc --noEmit reads that config, so the exclusion hides the tests from the very check the typecheck script advertises (a green gate over source nothing read).

      This package reaches the same end state by the other spelling: not an exclude
      of the test globs, but an include narrowed to src, which omits the entire
      test/ directory by construction. The consequence is identical — and so is the
      corollary AGENTS.md draws next: a @ts-expect-error in any of those 112 files
      is a phantom check that evaluates never and can be deleted with every gate
      still green.

      The ratchet does not catch it. pnpm check:type-check-coverage asks whether a
      package declares a typecheck script; this one does, so the package is
      covered on paper. Nine packages (client, lint, objectql, rest, spec,
      plugin-auth, plugin-approvals, plugin-sharing, knowledge-ragflow) carry
      the second-layer ledger — a check:test-typecheck script plus a shrink-only
      test-typecheck-debt.json. packages/cli carries neither, while holding one of
      the largest test populations in the repo.

      Decision this needs, rather than a patch

      The mechanism is already in the tree and AGENTS.md says to onboard by wiring,
      never by copying
      : a sibling tsconfig.test.json naming test, wired into the
      typecheck script, plus scripts/check-test-typecheck.mts --package packages/cli
      and a generated test-typecheck-debt.json.

      What is not mine to decide is the size of the debt that first measurement will
      record. 112 previously unchecked files may produce a large initial ledger entry,
      and AGENTS.md is explicit that such an entry's note is load-bearing rather
      than decorative. Someone should measure it before choosing between onboarding
      with a ledger and widening include outright.

      Not in scope for the card that found it

      #14554 concerns the merge-queue ejection caused by a hand-maintained tier list;
      its diff adds two of the three unchecked package-root modules listed above, and
      that PR records the gap as NOT MEASURED rather than claiming coverage it does
      not have. This issue is the separate one.

      Generated by Claude Code

      Activity

      Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

      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

        packages/cli typecheck compiles none of the 112 test files under test/include: ["src"] makes the green verdict empty for half the suite #14710

        Description

        @os-trump

        Filed while verifying #14554; unrelated to that card's change and deliberately not repaired there.

        The measurement

        packages/cli/package.json declares "typecheck": "tsc --noEmit", and
        packages/cli/tsconfig.json declares "include": ["src"]. Measured on
        d29fbf2a78 with tsc -p packages/cli/tsconfig.json --noEmit --listFiles:

        populationon diskin the tsc program
        test files under packages/cli/src/118118
        test files under packages/cli/test/1120
        package-root harness modules (vitest.config.ts, vitest-tiers.ts, vitest-tiers.fixtures.ts)30

        pnpm --filter @objectstack/cli typecheck exits 0. That verdict is true and it
        is empty for 112 test files — just under half the package's 230.

        Why this is the shape AGENTS.md already names

        AGENTS.md, under the type-check ratchet:

        Never exclude*.test.ts / *.spec.ts from a package's tsconfig.jsontsc --noEmit reads that config, so the exclusion hides the tests from the very check the typecheck script advertises (a green gate over source nothing read).

        This package reaches the same end state by the other spelling: not an exclude
        of the test globs, but an include narrowed to src, which omits the entire
        test/ directory by construction. The consequence is identical — and so is the
        corollary AGENTS.md draws next: a @ts-expect-error in any of those 112 files
        is a phantom check that evaluates never and can be deleted with every gate
        still green.

        The ratchet does not catch it. pnpm check:type-check-coverage asks whether a
        package declares a typecheck script; this one does, so the package is
        covered on paper. Nine packages (client, lint, objectql, rest, spec,
        plugin-auth, plugin-approvals, plugin-sharing, knowledge-ragflow) carry
        the second-layer ledger — a check:test-typecheck script plus a shrink-only
        test-typecheck-debt.json. packages/cli carries neither, while holding one of
        the largest test populations in the repo.

        Decision this needs, rather than a patch

        The mechanism is already in the tree and AGENTS.md says to onboard by wiring,
        never by copying
        : a sibling tsconfig.test.json naming test, wired into the
        typecheck script, plus scripts/check-test-typecheck.mts --package packages/cli
        and a generated test-typecheck-debt.json.

        What is not mine to decide is the size of the debt that first measurement will
        record. 112 previously unchecked files may produce a large initial ledger entry,
        and AGENTS.md is explicit that such an entry's note is load-bearing rather
        than decorative. Someone should measure it before choosing between onboarding
        with a ledger and widening include outright.

        Not in scope for the card that found it

        #14554 concerns the merge-queue ejection caused by a hand-maintained tier list;
        its diff adds two of the three unchecked package-root modules listed above, and
        that PR records the gap as NOT MEASURED rather than claiming coverage it does
        not have. This issue is the separate one.

        Generated by Claude Code

        Activity

        Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

        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

          packages/cli typecheck compiles none of the 112 test files under test/include: ["src"] makes the green verdict empty for half the suite #14710

          Description

          @os-trump

          Filed while verifying #14554; unrelated to that card's change and deliberately not repaired there.

          The measurement

          packages/cli/package.json declares "typecheck": "tsc --noEmit", and
          packages/cli/tsconfig.json declares "include": ["src"]. Measured on
          d29fbf2a78 with tsc -p packages/cli/tsconfig.json --noEmit --listFiles:

          populationon diskin the tsc program
          test files under packages/cli/src/118118
          test files under packages/cli/test/1120
          package-root harness modules (vitest.config.ts, vitest-tiers.ts, vitest-tiers.fixtures.ts)30

          pnpm --filter @objectstack/cli typecheck exits 0. That verdict is true and it
          is empty for 112 test files — just under half the package's 230.

          Why this is the shape AGENTS.md already names

          AGENTS.md, under the type-check ratchet:

          Never exclude*.test.ts / *.spec.ts from a package's tsconfig.jsontsc --noEmit reads that config, so the exclusion hides the tests from the very check the typecheck script advertises (a green gate over source nothing read).

          This package reaches the same end state by the other spelling: not an exclude
          of the test globs, but an include narrowed to src, which omits the entire
          test/ directory by construction. The consequence is identical — and so is the
          corollary AGENTS.md draws next: a @ts-expect-error in any of those 112 files
          is a phantom check that evaluates never and can be deleted with every gate
          still green.

          The ratchet does not catch it. pnpm check:type-check-coverage asks whether a
          package declares a typecheck script; this one does, so the package is
          covered on paper. Nine packages (client, lint, objectql, rest, spec,
          plugin-auth, plugin-approvals, plugin-sharing, knowledge-ragflow) carry
          the second-layer ledger — a check:test-typecheck script plus a shrink-only
          test-typecheck-debt.json. packages/cli carries neither, while holding one of
          the largest test populations in the repo.

          Decision this needs, rather than a patch

          The mechanism is already in the tree and AGENTS.md says to onboard by wiring,
          never by copying
          : a sibling tsconfig.test.json naming test, wired into the
          typecheck script, plus scripts/check-test-typecheck.mts --package packages/cli
          and a generated test-typecheck-debt.json.

          What is not mine to decide is the size of the debt that first measurement will
          record. 112 previously unchecked files may produce a large initial ledger entry,
          and AGENTS.md is explicit that such an entry's note is load-bearing rather
          than decorative. Someone should measure it before choosing between onboarding
          with a ledger and widening include outright.

          Not in scope for the card that found it

          #14554 concerns the merge-queue ejection caused by a hand-maintained tier list;
          its diff adds two of the three unchecked package-root modules listed above, and
          that PR records the gap as NOT MEASURED rather than claiming coverage it does
          not have. This issue is the separate one.

          Generated by Claude Code

          Activity

          Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

          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

            packages/cli typecheck compiles none of the 112 test files under test/include: ["src"] makes the green verdict empty for half the suite #14710

            Description

            @os-trump

            Filed while verifying #14554; unrelated to that card's change and deliberately not repaired there.

            The measurement

            packages/cli/package.json declares "typecheck": "tsc --noEmit", and
            packages/cli/tsconfig.json declares "include": ["src"]. Measured on
            d29fbf2a78 with tsc -p packages/cli/tsconfig.json --noEmit --listFiles:

            populationon diskin the tsc program
            test files under packages/cli/src/118118
            test files under packages/cli/test/1120
            package-root harness modules (vitest.config.ts, vitest-tiers.ts, vitest-tiers.fixtures.ts)30

            pnpm --filter @objectstack/cli typecheck exits 0. That verdict is true and it
            is empty for 112 test files — just under half the package's 230.

            Why this is the shape AGENTS.md already names

            AGENTS.md, under the type-check ratchet:

            Never exclude*.test.ts / *.spec.ts from a package's tsconfig.jsontsc --noEmit reads that config, so the exclusion hides the tests from the very check the typecheck script advertises (a green gate over source nothing read).

            This package reaches the same end state by the other spelling: not an exclude
            of the test globs, but an include narrowed to src, which omits the entire
            test/ directory by construction. The consequence is identical — and so is the
            corollary AGENTS.md draws next: a @ts-expect-error in any of those 112 files
            is a phantom check that evaluates never and can be deleted with every gate
            still green.

            The ratchet does not catch it. pnpm check:type-check-coverage asks whether a
            package declares a typecheck script; this one does, so the package is
            covered on paper. Nine packages (client, lint, objectql, rest, spec,
            plugin-auth, plugin-approvals, plugin-sharing, knowledge-ragflow) carry
            the second-layer ledger — a check:test-typecheck script plus a shrink-only
            test-typecheck-debt.json. packages/cli carries neither, while holding one of
            the largest test populations in the repo.

            Decision this needs, rather than a patch

            The mechanism is already in the tree and AGENTS.md says to onboard by wiring,
            never by copying
            : a sibling tsconfig.test.json naming test, wired into the
            typecheck script, plus scripts/check-test-typecheck.mts --package packages/cli
            and a generated test-typecheck-debt.json.

            What is not mine to decide is the size of the debt that first measurement will
            record. 112 previously unchecked files may produce a large initial ledger entry,
            and AGENTS.md is explicit that such an entry's note is load-bearing rather
            than decorative. Someone should measure it before choosing between onboarding
            with a ledger and widening include outright.

            Not in scope for the card that found it

            #14554 concerns the merge-queue ejection caused by a hand-maintained tier list;
            its diff adds two of the three unchecked package-root modules listed above, and
            that PR records the gap as NOT MEASURED rather than claiming coverage it does
            not have. This issue is the separate one.

            Generated by Claude Code

            Activity

            Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

            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

              packages/cli typecheck compiles none of the 112 test files under test/include: ["src"] makes the green verdict empty for half the suite #14710

              Description

              @os-trump

              Filed while verifying #14554; unrelated to that card's change and deliberately not repaired there.

              The measurement

              packages/cli/package.json declares "typecheck": "tsc --noEmit", and
              packages/cli/tsconfig.json declares "include": ["src"]. Measured on
              d29fbf2a78 with tsc -p packages/cli/tsconfig.json --noEmit --listFiles:

              populationon diskin the tsc program
              test files under packages/cli/src/118118
              test files under packages/cli/test/1120
              package-root harness modules (vitest.config.ts, vitest-tiers.ts, vitest-tiers.fixtures.ts)30

              pnpm --filter @objectstack/cli typecheck exits 0. That verdict is true and it
              is empty for 112 test files — just under half the package's 230.

              Why this is the shape AGENTS.md already names

              AGENTS.md, under the type-check ratchet:

              Never exclude*.test.ts / *.spec.ts from a package's tsconfig.jsontsc --noEmit reads that config, so the exclusion hides the tests from the very check the typecheck script advertises (a green gate over source nothing read).

              This package reaches the same end state by the other spelling: not an exclude
              of the test globs, but an include narrowed to src, which omits the entire
              test/ directory by construction. The consequence is identical — and so is the
              corollary AGENTS.md draws next: a @ts-expect-error in any of those 112 files
              is a phantom check that evaluates never and can be deleted with every gate
              still green.

              The ratchet does not catch it. pnpm check:type-check-coverage asks whether a
              package declares a typecheck script; this one does, so the package is
              covered on paper. Nine packages (client, lint, objectql, rest, spec,
              plugin-auth, plugin-approvals, plugin-sharing, knowledge-ragflow) carry
              the second-layer ledger — a check:test-typecheck script plus a shrink-only
              test-typecheck-debt.json. packages/cli carries neither, while holding one of
              the largest test populations in the repo.

              Decision this needs, rather than a patch

              The mechanism is already in the tree and AGENTS.md says to onboard by wiring,
              never by copying
              : a sibling tsconfig.test.json naming test, wired into the
              typecheck script, plus scripts/check-test-typecheck.mts --package packages/cli
              and a generated test-typecheck-debt.json.

              What is not mine to decide is the size of the debt that first measurement will
              record. 112 previously unchecked files may produce a large initial ledger entry,
              and AGENTS.md is explicit that such an entry's note is load-bearing rather
              than decorative. Someone should measure it before choosing between onboarding
              with a ledger and widening include outright.

              Not in scope for the card that found it

              #14554 concerns the merge-queue ejection caused by a hand-maintained tier list;
              its diff adds two of the three unchecked package-root modules listed above, and
              that PR records the gap as NOT MEASURED rather than claiming coverage it does
              not have. This issue is the separate one.

              Generated by Claude Code

              Activity

              Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

              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

                packages/cli typecheck compiles none of the 112 test files under test/include: ["src"] makes the green verdict empty for half the suite #14710

                Description

                @os-trump

                Filed while verifying #14554; unrelated to that card's change and deliberately not repaired there.

                The measurement

                packages/cli/package.json declares "typecheck": "tsc --noEmit", and
                packages/cli/tsconfig.json declares "include": ["src"]. Measured on
                d29fbf2a78 with tsc -p packages/cli/tsconfig.json --noEmit --listFiles:

                populationon diskin the tsc program
                test files under packages/cli/src/118118
                test files under packages/cli/test/1120
                package-root harness modules (vitest.config.ts, vitest-tiers.ts, vitest-tiers.fixtures.ts)30

                pnpm --filter @objectstack/cli typecheck exits 0. That verdict is true and it
                is empty for 112 test files — just under half the package's 230.

                Why this is the shape AGENTS.md already names

                AGENTS.md, under the type-check ratchet:

                Never exclude*.test.ts / *.spec.ts from a package's tsconfig.jsontsc --noEmit reads that config, so the exclusion hides the tests from the very check the typecheck script advertises (a green gate over source nothing read).

                This package reaches the same end state by the other spelling: not an exclude
                of the test globs, but an include narrowed to src, which omits the entire
                test/ directory by construction. The consequence is identical — and so is the
                corollary AGENTS.md draws next: a @ts-expect-error in any of those 112 files
                is a phantom check that evaluates never and can be deleted with every gate
                still green.

                The ratchet does not catch it. pnpm check:type-check-coverage asks whether a
                package declares a typecheck script; this one does, so the package is
                covered on paper. Nine packages (client, lint, objectql, rest, spec,
                plugin-auth, plugin-approvals, plugin-sharing, knowledge-ragflow) carry
                the second-layer ledger — a check:test-typecheck script plus a shrink-only
                test-typecheck-debt.json. packages/cli carries neither, while holding one of
                the largest test populations in the repo.

                Decision this needs, rather than a patch

                The mechanism is already in the tree and AGENTS.md says to onboard by wiring,
                never by copying
                : a sibling tsconfig.test.json naming test, wired into the
                typecheck script, plus scripts/check-test-typecheck.mts --package packages/cli
                and a generated test-typecheck-debt.json.

                What is not mine to decide is the size of the debt that first measurement will
                record. 112 previously unchecked files may produce a large initial ledger entry,
                and AGENTS.md is explicit that such an entry's note is load-bearing rather
                than decorative. Someone should measure it before choosing between onboarding
                with a ledger and widening include outright.

                Not in scope for the card that found it

                #14554 concerns the merge-queue ejection caused by a hand-maintained tier list;
                its diff adds two of the three unchecked package-root modules listed above, and
                that PR records the gap as NOT MEASURED rather than claiming coverage it does
                not have. This issue is the separate one.

                Generated by Claude Code

                Activity

                Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

                Metadata

                Metadata

                Assignees

                Type

                No type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions