Skip to content

[finding] @objectstack/metadata-protocol has no typecheck script: its only type coverage is the tsup dts build, which reports one file per run and never reaches the 138 test files #13978

Description

@claude

Filed unassigned from the #13768 dispatch. Recording only -- no severity
asserted, routing is triage's. Surfaced while measuring what would actually turn
red for that card; it is not caused by it.

Measured on aee1fd9ec2

1. Nothing runs tsc over this package.packages/metadata-protocol/package.json
declares build, dev, clean, test, test:watch -- and no typecheck.
lint.yml's typecheck-workspace lane runs
turbo run typecheck --filter='./packages/*' ..., which for a package with no
such script runs nothing (turbo exits 0 and shows the task in the dry-run graph
without running it -- the behaviour check:turbo-task-graph exists for).

So the package's only type coverage is the dts half of its tsup build.

2. That coverage is real but reports only one file per run. Two probes, each
a real pnpm --filter @objectstack/metadata-protocol build:

  • A type error confined to src/runtime-authoring-gate.ts fails the build:
    error TS2322, DTS Build error, Exit status 1. So the build IS a working
    type gate.
  • An edit that produces errors in BOTH src/runtime-authoring-gate.ts (a
    violated satisfies clause) and src/protocol.ts (a violated as cast)
    printed only the protocol.ts diagnostic. The satisfies violation was
    not printed, though an isolated tsc run over the same pattern proves it
    errors (TS2322).

Consequence: a developer repairing the one reported error can rebuild and meet a
second error they were never shown. It is a slow loop, not a false green -- the
build does fail.

3. The test surface is type-checked by nothing. The package's tsconfig.json
INCLUDES src/**/*, so its 138 *.test.ts files are in the program -- but no
typecheck script runs, and the tsup dts build follows imports from
src/index.ts, which does not reach them. Running tsc --noEmit -p tsconfig.json
by hand reports 159 error lines, every one of them in a *.test.ts and none
in a non-test source. Top offenders: protocol.stored-migration.test.ts (27),
seed-loader-multi-value-reference.test.ts (10),
protocol.stored-conversions.test.ts (7).

This is adjacent to, but not the same as, the state eslint.config.mjs records
around QUERY_OPTIONS_TEST_GLOBS (packages whose OWN tsconfig excludes
**/*.test.ts). Here the tsconfig includes them; the script that would check
them does not exist.

Why it is filed rather than fixed

Adding a typecheck script is a one-line manifest edit that goes immediately
red on those 159 lines, so the real work is the triage of those errors (fix, or
exclude tests from the typecheck program and say so). That is a decision about
this package's type-coverage policy, not a rider on an unrelated card.

Not measured by me: how many other packages in the workspace are in the same
state (no typecheck script), or whether the one-file dts diagnostic limit is a
tsup setting rather than a fixed behaviour.


Generated by Claude Code

Metadata

Metadata

Assignees

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)) { // Add copy buttons to all
     blocks
    (function() {
    function addCopyButtons() {
    document.querySelectorAll('pre code').forEach(function(codeBlock) {
    if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
    codeBlock.parentElement.setAttribute('data-copy-added', 'true');
    var btn = document.createElement('button');
    btn.textContent = 'Copy';
    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;';
    btn.onmouseover = function() { this.style.opacity = '1'; };
    btn.onmouseout = function() { this.style.opacity = '0.7'; };
    btn.onclick = function() {
    navigator.clipboard.writeText(codeBlock.textContent).then(function() {
    btn.textContent = 'Copied!';
    setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
    });
    };
    codeBlock.parentElement.style.position = 'relative';
    codeBlock.parentElement.appendChild(btn);
    });
    }
    addCopyButtons();
    // Re-run on dynamic content
    var observer = new MutationObserver(addCopyButtons);
    observer.observe(document.body, { childList: true, subtree: true });
    })();
    }
    } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
    })();
    (function(){
    try {
    var __m = "github.com";
    var __re = new RegExp('^' + "github\\.com" + '
    [finding] `@objectstack/metadata-protocol` has no `typecheck` script: its only type coverage is the tsup dts build, which reports one file per run and never reaches the 138 test files · Issue #13978 · objectstack-ai/objectstack · GitHub
    Skip to content

    [finding] @objectstack/metadata-protocol has no typecheck script: its only type coverage is the tsup dts build, which reports one file per run and never reaches the 138 test files #13978

    Description

    @claude

    Filed unassigned from the #13768 dispatch. Recording only -- no severity
    asserted, routing is triage's. Surfaced while measuring what would actually turn
    red for that card; it is not caused by it.

    Measured on aee1fd9ec2

    1. Nothing runs tsc over this package.packages/metadata-protocol/package.json
    declares build, dev, clean, test, test:watch -- and no typecheck.
    lint.yml's typecheck-workspace lane runs
    turbo run typecheck --filter='./packages/*' ..., which for a package with no
    such script runs nothing (turbo exits 0 and shows the task in the dry-run graph
    without running it -- the behaviour check:turbo-task-graph exists for).

    So the package's only type coverage is the dts half of its tsup build.

    2. That coverage is real but reports only one file per run. Two probes, each
    a real pnpm --filter @objectstack/metadata-protocol build:

    • A type error confined to src/runtime-authoring-gate.ts fails the build:
      error TS2322, DTS Build error, Exit status 1. So the build IS a working
      type gate.
    • An edit that produces errors in BOTH src/runtime-authoring-gate.ts (a
      violated satisfies clause) and src/protocol.ts (a violated as cast)
      printed only the protocol.ts diagnostic. The satisfies violation was
      not printed, though an isolated tsc run over the same pattern proves it
      errors (TS2322).

    Consequence: a developer repairing the one reported error can rebuild and meet a
    second error they were never shown. It is a slow loop, not a false green -- the
    build does fail.

    3. The test surface is type-checked by nothing. The package's tsconfig.json
    INCLUDES src/**/*, so its 138 *.test.ts files are in the program -- but no
    typecheck script runs, and the tsup dts build follows imports from
    src/index.ts, which does not reach them. Running tsc --noEmit -p tsconfig.json
    by hand reports 159 error lines, every one of them in a *.test.ts and none
    in a non-test source. Top offenders: protocol.stored-migration.test.ts (27),
    seed-loader-multi-value-reference.test.ts (10),
    protocol.stored-conversions.test.ts (7).

    This is adjacent to, but not the same as, the state eslint.config.mjs records
    around QUERY_OPTIONS_TEST_GLOBS (packages whose OWN tsconfig excludes
    **/*.test.ts). Here the tsconfig includes them; the script that would check
    them does not exist.

    Why it is filed rather than fixed

    Adding a typecheck script is a one-line manifest edit that goes immediately
    red on those 159 lines, so the real work is the triage of those errors (fix, or
    exclude tests from the typecheck program and say so). That is a decision about
    this package's type-coverage policy, not a rider on an unrelated card.

    Not measured by me: how many other packages in the workspace are in the same
    state (no typecheck script), or whether the one-file dts diagnostic limit is a
    tsup setting rather than a fixed behaviour.


    Generated by Claude Code

    Metadata

    Metadata

    Assignees

    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)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [finding] `@objectstack/metadata-protocol` has no `typecheck` script: its only type coverage is the tsup dts build, which reports one file per run and never reaches the 138 test files · Issue #13978 · objectstack-ai/objectstack · GitHub
      Skip to content

      [finding] @objectstack/metadata-protocol has no typecheck script: its only type coverage is the tsup dts build, which reports one file per run and never reaches the 138 test files #13978

      Description

      @claude

      Filed unassigned from the #13768 dispatch. Recording only -- no severity
      asserted, routing is triage's. Surfaced while measuring what would actually turn
      red for that card; it is not caused by it.

      Measured on aee1fd9ec2

      1. Nothing runs tsc over this package.packages/metadata-protocol/package.json
      declares build, dev, clean, test, test:watch -- and no typecheck.
      lint.yml's typecheck-workspace lane runs
      turbo run typecheck --filter='./packages/*' ..., which for a package with no
      such script runs nothing (turbo exits 0 and shows the task in the dry-run graph
      without running it -- the behaviour check:turbo-task-graph exists for).

      So the package's only type coverage is the dts half of its tsup build.

      2. That coverage is real but reports only one file per run. Two probes, each
      a real pnpm --filter @objectstack/metadata-protocol build:

      • A type error confined to src/runtime-authoring-gate.ts fails the build:
        error TS2322, DTS Build error, Exit status 1. So the build IS a working
        type gate.
      • An edit that produces errors in BOTH src/runtime-authoring-gate.ts (a
        violated satisfies clause) and src/protocol.ts (a violated as cast)
        printed only the protocol.ts diagnostic. The satisfies violation was
        not printed, though an isolated tsc run over the same pattern proves it
        errors (TS2322).

      Consequence: a developer repairing the one reported error can rebuild and meet a
      second error they were never shown. It is a slow loop, not a false green -- the
      build does fail.

      3. The test surface is type-checked by nothing. The package's tsconfig.json
      INCLUDES src/**/*, so its 138 *.test.ts files are in the program -- but no
      typecheck script runs, and the tsup dts build follows imports from
      src/index.ts, which does not reach them. Running tsc --noEmit -p tsconfig.json
      by hand reports 159 error lines, every one of them in a *.test.ts and none
      in a non-test source. Top offenders: protocol.stored-migration.test.ts (27),
      seed-loader-multi-value-reference.test.ts (10),
      protocol.stored-conversions.test.ts (7).

      This is adjacent to, but not the same as, the state eslint.config.mjs records
      around QUERY_OPTIONS_TEST_GLOBS (packages whose OWN tsconfig excludes
      **/*.test.ts). Here the tsconfig includes them; the script that would check
      them does not exist.

      Why it is filed rather than fixed

      Adding a typecheck script is a one-line manifest edit that goes immediately
      red on those 159 lines, so the real work is the triage of those errors (fix, or
      exclude tests from the typecheck program and say so). That is a decision about
      this package's type-coverage policy, not a rider on an unrelated card.

      Not measured by me: how many other packages in the workspace are in the same
      state (no typecheck script), or whether the one-file dts diagnostic limit is a
      tsup setting rather than a fixed behaviour.


      Generated by Claude Code

      Metadata

      Metadata

      Assignees

      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)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [finding] `@objectstack/metadata-protocol` has no `typecheck` script: its only type coverage is the tsup dts build, which reports one file per run and never reaches the 138 test files · Issue #13978 · objectstack-ai/objectstack · GitHub
        Skip to content

        [finding] @objectstack/metadata-protocol has no typecheck script: its only type coverage is the tsup dts build, which reports one file per run and never reaches the 138 test files #13978

        Description

        @claude

        Filed unassigned from the #13768 dispatch. Recording only -- no severity
        asserted, routing is triage's. Surfaced while measuring what would actually turn
        red for that card; it is not caused by it.

        Measured on aee1fd9ec2

        1. Nothing runs tsc over this package.packages/metadata-protocol/package.json
        declares build, dev, clean, test, test:watch -- and no typecheck.
        lint.yml's typecheck-workspace lane runs
        turbo run typecheck --filter='./packages/*' ..., which for a package with no
        such script runs nothing (turbo exits 0 and shows the task in the dry-run graph
        without running it -- the behaviour check:turbo-task-graph exists for).

        So the package's only type coverage is the dts half of its tsup build.

        2. That coverage is real but reports only one file per run. Two probes, each
        a real pnpm --filter @objectstack/metadata-protocol build:

        • A type error confined to src/runtime-authoring-gate.ts fails the build:
          error TS2322, DTS Build error, Exit status 1. So the build IS a working
          type gate.
        • An edit that produces errors in BOTH src/runtime-authoring-gate.ts (a
          violated satisfies clause) and src/protocol.ts (a violated as cast)
          printed only the protocol.ts diagnostic. The satisfies violation was
          not printed, though an isolated tsc run over the same pattern proves it
          errors (TS2322).

        Consequence: a developer repairing the one reported error can rebuild and meet a
        second error they were never shown. It is a slow loop, not a false green -- the
        build does fail.

        3. The test surface is type-checked by nothing. The package's tsconfig.json
        INCLUDES src/**/*, so its 138 *.test.ts files are in the program -- but no
        typecheck script runs, and the tsup dts build follows imports from
        src/index.ts, which does not reach them. Running tsc --noEmit -p tsconfig.json
        by hand reports 159 error lines, every one of them in a *.test.ts and none
        in a non-test source. Top offenders: protocol.stored-migration.test.ts (27),
        seed-loader-multi-value-reference.test.ts (10),
        protocol.stored-conversions.test.ts (7).

        This is adjacent to, but not the same as, the state eslint.config.mjs records
        around QUERY_OPTIONS_TEST_GLOBS (packages whose OWN tsconfig excludes
        **/*.test.ts). Here the tsconfig includes them; the script that would check
        them does not exist.

        Why it is filed rather than fixed

        Adding a typecheck script is a one-line manifest edit that goes immediately
        red on those 159 lines, so the real work is the triage of those errors (fix, or
        exclude tests from the typecheck program and say so). That is a decision about
        this package's type-coverage policy, not a rider on an unrelated card.

        Not measured by me: how many other packages in the workspace are in the same
        state (no typecheck script), or whether the one-file dts diagnostic limit is a
        tsup setting rather than a fixed behaviour.


        Generated by Claude Code

        Metadata

        Metadata

        Assignees

        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)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' [finding] `@objectstack/metadata-protocol` has no `typecheck` script: its only type coverage is the tsup dts build, which reports one file per run and never reaches the 138 test files · Issue #13978 · objectstack-ai/objectstack · GitHub
          Skip to content

          [finding] @objectstack/metadata-protocol has no typecheck script: its only type coverage is the tsup dts build, which reports one file per run and never reaches the 138 test files #13978

          Description

          @claude

          Filed unassigned from the #13768 dispatch. Recording only -- no severity
          asserted, routing is triage's. Surfaced while measuring what would actually turn
          red for that card; it is not caused by it.

          Measured on aee1fd9ec2

          1. Nothing runs tsc over this package.packages/metadata-protocol/package.json
          declares build, dev, clean, test, test:watch -- and no typecheck.
          lint.yml's typecheck-workspace lane runs
          turbo run typecheck --filter='./packages/*' ..., which for a package with no
          such script runs nothing (turbo exits 0 and shows the task in the dry-run graph
          without running it -- the behaviour check:turbo-task-graph exists for).

          So the package's only type coverage is the dts half of its tsup build.

          2. That coverage is real but reports only one file per run. Two probes, each
          a real pnpm --filter @objectstack/metadata-protocol build:

          • A type error confined to src/runtime-authoring-gate.ts fails the build:
            error TS2322, DTS Build error, Exit status 1. So the build IS a working
            type gate.
          • An edit that produces errors in BOTH src/runtime-authoring-gate.ts (a
            violated satisfies clause) and src/protocol.ts (a violated as cast)
            printed only the protocol.ts diagnostic. The satisfies violation was
            not printed, though an isolated tsc run over the same pattern proves it
            errors (TS2322).

          Consequence: a developer repairing the one reported error can rebuild and meet a
          second error they were never shown. It is a slow loop, not a false green -- the
          build does fail.

          3. The test surface is type-checked by nothing. The package's tsconfig.json
          INCLUDES src/**/*, so its 138 *.test.ts files are in the program -- but no
          typecheck script runs, and the tsup dts build follows imports from
          src/index.ts, which does not reach them. Running tsc --noEmit -p tsconfig.json
          by hand reports 159 error lines, every one of them in a *.test.ts and none
          in a non-test source. Top offenders: protocol.stored-migration.test.ts (27),
          seed-loader-multi-value-reference.test.ts (10),
          protocol.stored-conversions.test.ts (7).

          This is adjacent to, but not the same as, the state eslint.config.mjs records
          around QUERY_OPTIONS_TEST_GLOBS (packages whose OWN tsconfig excludes
          **/*.test.ts). Here the tsconfig includes them; the script that would check
          them does not exist.

          Why it is filed rather than fixed

          Adding a typecheck script is a one-line manifest edit that goes immediately
          red on those 159 lines, so the real work is the triage of those errors (fix, or
          exclude tests from the typecheck program and say so). That is a decision about
          this package's type-coverage policy, not a rider on an unrelated card.

          Not measured by me: how many other packages in the workspace are in the same
          state (no typecheck script), or whether the one-file dts diagnostic limit is a
          tsup setting rather than a fixed behaviour.


          Generated by Claude Code

          Metadata

          Metadata

          Assignees

          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)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [finding] `@objectstack/metadata-protocol` has no `typecheck` script: its only type coverage is the tsup dts build, which reports one file per run and never reaches the 138 test files · Issue #13978 · objectstack-ai/objectstack · GitHub
            Skip to content

            [finding] @objectstack/metadata-protocol has no typecheck script: its only type coverage is the tsup dts build, which reports one file per run and never reaches the 138 test files #13978

            Description

            @claude

            Filed unassigned from the #13768 dispatch. Recording only -- no severity
            asserted, routing is triage's. Surfaced while measuring what would actually turn
            red for that card; it is not caused by it.

            Measured on aee1fd9ec2

            1. Nothing runs tsc over this package.packages/metadata-protocol/package.json
            declares build, dev, clean, test, test:watch -- and no typecheck.
            lint.yml's typecheck-workspace lane runs
            turbo run typecheck --filter='./packages/*' ..., which for a package with no
            such script runs nothing (turbo exits 0 and shows the task in the dry-run graph
            without running it -- the behaviour check:turbo-task-graph exists for).

            So the package's only type coverage is the dts half of its tsup build.

            2. That coverage is real but reports only one file per run. Two probes, each
            a real pnpm --filter @objectstack/metadata-protocol build:

            • A type error confined to src/runtime-authoring-gate.ts fails the build:
              error TS2322, DTS Build error, Exit status 1. So the build IS a working
              type gate.
            • An edit that produces errors in BOTH src/runtime-authoring-gate.ts (a
              violated satisfies clause) and src/protocol.ts (a violated as cast)
              printed only the protocol.ts diagnostic. The satisfies violation was
              not printed, though an isolated tsc run over the same pattern proves it
              errors (TS2322).

            Consequence: a developer repairing the one reported error can rebuild and meet a
            second error they were never shown. It is a slow loop, not a false green -- the
            build does fail.

            3. The test surface is type-checked by nothing. The package's tsconfig.json
            INCLUDES src/**/*, so its 138 *.test.ts files are in the program -- but no
            typecheck script runs, and the tsup dts build follows imports from
            src/index.ts, which does not reach them. Running tsc --noEmit -p tsconfig.json
            by hand reports 159 error lines, every one of them in a *.test.ts and none
            in a non-test source. Top offenders: protocol.stored-migration.test.ts (27),
            seed-loader-multi-value-reference.test.ts (10),
            protocol.stored-conversions.test.ts (7).

            This is adjacent to, but not the same as, the state eslint.config.mjs records
            around QUERY_OPTIONS_TEST_GLOBS (packages whose OWN tsconfig excludes
            **/*.test.ts). Here the tsconfig includes them; the script that would check
            them does not exist.

            Why it is filed rather than fixed

            Adding a typecheck script is a one-line manifest edit that goes immediately
            red on those 159 lines, so the real work is the triage of those errors (fix, or
            exclude tests from the typecheck program and say so). That is a decision about
            this package's type-coverage policy, not a rider on an unrelated card.

            Not measured by me: how many other packages in the workspace are in the same
            state (no typecheck script), or whether the one-file dts diagnostic limit is a
            tsup setting rather than a fixed behaviour.


            Generated by Claude Code

            Metadata

            Metadata

            Assignees

            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)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [finding] `@objectstack/metadata-protocol` has no `typecheck` script: its only type coverage is the tsup dts build, which reports one file per run and never reaches the 138 test files · Issue #13978 · objectstack-ai/objectstack · GitHub
              Skip to content

              [finding] @objectstack/metadata-protocol has no typecheck script: its only type coverage is the tsup dts build, which reports one file per run and never reaches the 138 test files #13978

              Description

              @claude

              Filed unassigned from the #13768 dispatch. Recording only -- no severity
              asserted, routing is triage's. Surfaced while measuring what would actually turn
              red for that card; it is not caused by it.

              Measured on aee1fd9ec2

              1. Nothing runs tsc over this package.packages/metadata-protocol/package.json
              declares build, dev, clean, test, test:watch -- and no typecheck.
              lint.yml's typecheck-workspace lane runs
              turbo run typecheck --filter='./packages/*' ..., which for a package with no
              such script runs nothing (turbo exits 0 and shows the task in the dry-run graph
              without running it -- the behaviour check:turbo-task-graph exists for).

              So the package's only type coverage is the dts half of its tsup build.

              2. That coverage is real but reports only one file per run. Two probes, each
              a real pnpm --filter @objectstack/metadata-protocol build:

              • A type error confined to src/runtime-authoring-gate.ts fails the build:
                error TS2322, DTS Build error, Exit status 1. So the build IS a working
                type gate.
              • An edit that produces errors in BOTH src/runtime-authoring-gate.ts (a
                violated satisfies clause) and src/protocol.ts (a violated as cast)
                printed only the protocol.ts diagnostic. The satisfies violation was
                not printed, though an isolated tsc run over the same pattern proves it
                errors (TS2322).

              Consequence: a developer repairing the one reported error can rebuild and meet a
              second error they were never shown. It is a slow loop, not a false green -- the
              build does fail.

              3. The test surface is type-checked by nothing. The package's tsconfig.json
              INCLUDES src/**/*, so its 138 *.test.ts files are in the program -- but no
              typecheck script runs, and the tsup dts build follows imports from
              src/index.ts, which does not reach them. Running tsc --noEmit -p tsconfig.json
              by hand reports 159 error lines, every one of them in a *.test.ts and none
              in a non-test source. Top offenders: protocol.stored-migration.test.ts (27),
              seed-loader-multi-value-reference.test.ts (10),
              protocol.stored-conversions.test.ts (7).

              This is adjacent to, but not the same as, the state eslint.config.mjs records
              around QUERY_OPTIONS_TEST_GLOBS (packages whose OWN tsconfig excludes
              **/*.test.ts). Here the tsconfig includes them; the script that would check
              them does not exist.

              Why it is filed rather than fixed

              Adding a typecheck script is a one-line manifest edit that goes immediately
              red on those 159 lines, so the real work is the triage of those errors (fix, or
              exclude tests from the typecheck program and say so). That is a decision about
              this package's type-coverage policy, not a rider on an unrelated card.

              Not measured by me: how many other packages in the workspace are in the same
              state (no typecheck script), or whether the one-file dts diagnostic limit is a
              tsup setting rather than a fixed behaviour.


              Generated by Claude Code

              Metadata

              Metadata

              Assignees

              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)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); [finding] `@objectstack/metadata-protocol` has no `typecheck` script: its only type coverage is the tsup dts build, which reports one file per run and never reaches the 138 test files · Issue #13978 · objectstack-ai/objectstack · GitHub
                Skip to content

                [finding] @objectstack/metadata-protocol has no typecheck script: its only type coverage is the tsup dts build, which reports one file per run and never reaches the 138 test files #13978

                Description

                @claude

                Filed unassigned from the #13768 dispatch. Recording only -- no severity
                asserted, routing is triage's. Surfaced while measuring what would actually turn
                red for that card; it is not caused by it.

                Measured on aee1fd9ec2

                1. Nothing runs tsc over this package.packages/metadata-protocol/package.json
                declares build, dev, clean, test, test:watch -- and no typecheck.
                lint.yml's typecheck-workspace lane runs
                turbo run typecheck --filter='./packages/*' ..., which for a package with no
                such script runs nothing (turbo exits 0 and shows the task in the dry-run graph
                without running it -- the behaviour check:turbo-task-graph exists for).

                So the package's only type coverage is the dts half of its tsup build.

                2. That coverage is real but reports only one file per run. Two probes, each
                a real pnpm --filter @objectstack/metadata-protocol build:

                • A type error confined to src/runtime-authoring-gate.ts fails the build:
                  error TS2322, DTS Build error, Exit status 1. So the build IS a working
                  type gate.
                • An edit that produces errors in BOTH src/runtime-authoring-gate.ts (a
                  violated satisfies clause) and src/protocol.ts (a violated as cast)
                  printed only the protocol.ts diagnostic. The satisfies violation was
                  not printed, though an isolated tsc run over the same pattern proves it
                  errors (TS2322).

                Consequence: a developer repairing the one reported error can rebuild and meet a
                second error they were never shown. It is a slow loop, not a false green -- the
                build does fail.

                3. The test surface is type-checked by nothing. The package's tsconfig.json
                INCLUDES src/**/*, so its 138 *.test.ts files are in the program -- but no
                typecheck script runs, and the tsup dts build follows imports from
                src/index.ts, which does not reach them. Running tsc --noEmit -p tsconfig.json
                by hand reports 159 error lines, every one of them in a *.test.ts and none
                in a non-test source. Top offenders: protocol.stored-migration.test.ts (27),
                seed-loader-multi-value-reference.test.ts (10),
                protocol.stored-conversions.test.ts (7).

                This is adjacent to, but not the same as, the state eslint.config.mjs records
                around QUERY_OPTIONS_TEST_GLOBS (packages whose OWN tsconfig excludes
                **/*.test.ts). Here the tsconfig includes them; the script that would check
                them does not exist.

                Why it is filed rather than fixed

                Adding a typecheck script is a one-line manifest edit that goes immediately
                red on those 159 lines, so the real work is the triage of those errors (fix, or
                exclude tests from the typecheck program and say so). That is a decision about
                this package's type-coverage policy, not a rider on an unrelated card.

                Not measured by me: how many other packages in the workspace are in the same
                state (no typecheck script), or whether the one-file dts diagnostic limit is a
                tsup setting rather than a fixed behaviour.


                Generated by Claude Code

                Metadata

                Metadata

                Assignees

                Type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions