docs(report-schema): the Report Builder example still authors onSave / onCancel, retired to never tombstones by PR #7468 #7488

Description

@claude

Measured on maine307c9896 while executing the objectui#6121 retirement, in the
same file and the same fenced example.

content/docs/core/report-schema.mdx's Report Builder example still authors two
keys the published contract now refuses by name:

const builder: ReportBuilderSchema = {
type: 'report-builder',
...
showPreview: true,
onSave: 'handleSaveReport',
onCancel: 'handleCancel'
};

ReportBuilderSchema.onSave / .onCancel became ?: never on the TypeScript face
and handlerKeyRefusal(...) arms on the zod mirror when PR #7468 landed
(objectui#7344, in the objectui#6124 shape; the maintainer ruling of 2026-08-25 that
the handler-expression string dialect is not a supported authoring form). So the page
teaches a literal that is a tsc error to assign AND a named safeParse refusal —
packages/types/src/__tests__/phase2-schemas.test.ts pins exactly that refusal, and
handler-keys-string-any-mirrors-7344.test.ts cites THIS page's onSave: 'handleSaveReport' as the corpus source of the retired dialect.

Why no gate reports it

The block is a plaintext fence: check:doc-snippets compiles ts/tsx fences
only, check:doc-types reads type string literals, and
component-docs-retired-handler-keys-7340.test.ts — the pin objectui#7340 landed for
exactly this class — measures doc property-table ROWS, not example object literals.
Three instruments, all green, none of them looking at this line. It is the
objectui#5044 class: a snippet teaching a contract error under a green gate.

Suggested remedy

Drop the two lines from the example (the disposition objectui#7340 chose for seven of
its eight pages), or replace them with the node-type spelling PR #6498 established.
Widening the #7340 pin from table rows to example literals would close the class
rather than this instance, and is the more valuable half — but it is its own
measurement and belongs to whoever takes it, not to a one-line docs edit.

Why this was not folded into the PR that found it

The objectui#6121 dispatch fences that card to its own ruling: 「⛔ Do not fold in
neighbouring report-schema work that is not this ruling.」 This is PR #7468's residue,
not that ruling, so it is filed rather than fixed. Deduped first against the closed
objectui#7340 / objectui#7239 family and the objectui#5047 plugin-report docs card:
none of them covers an example literal on this page.

Found by an execution seat while landing objectui#6121, session
session_01EMrWaQw3XS5DxTHxp4yRyC. Generated by Claude Code.


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

No one assigned

    Labels

    No labels
    No labels

    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 \u003cpre\u003e\u003ccode\u003e 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

      docs(report-schema): the Report Builder example still authors onSave / onCancel, retired to never tombstones by PR #7468 #7488

      Description

      @claude

      Measured on maine307c9896 while executing the objectui#6121 retirement, in the
      same file and the same fenced example.

      content/docs/core/report-schema.mdx's Report Builder example still authors two
      keys the published contract now refuses by name:

      const builder: ReportBuilderSchema = {
      type: 'report-builder',
      ...
      showPreview: true,
      onSave: 'handleSaveReport',
      onCancel: 'handleCancel'
      };
      

      ReportBuilderSchema.onSave / .onCancel became ?: never on the TypeScript face
      and handlerKeyRefusal(...) arms on the zod mirror when PR #7468 landed
      (objectui#7344, in the objectui#6124 shape; the maintainer ruling of 2026-08-25 that
      the handler-expression string dialect is not a supported authoring form). So the page
      teaches a literal that is a tsc error to assign AND a named safeParse refusal —
      packages/types/src/__tests__/phase2-schemas.test.ts pins exactly that refusal, and
      handler-keys-string-any-mirrors-7344.test.ts cites THIS page's onSave: 'handleSaveReport' as the corpus source of the retired dialect.

      Why no gate reports it

      The block is a plaintext fence: check:doc-snippets compiles ts/tsx fences
      only, check:doc-types reads type string literals, and
      component-docs-retired-handler-keys-7340.test.ts — the pin objectui#7340 landed for
      exactly this class — measures doc property-table ROWS, not example object literals.
      Three instruments, all green, none of them looking at this line. It is the
      objectui#5044 class: a snippet teaching a contract error under a green gate.

      Suggested remedy

      Drop the two lines from the example (the disposition objectui#7340 chose for seven of
      its eight pages), or replace them with the node-type spelling PR #6498 established.
      Widening the #7340 pin from table rows to example literals would close the class
      rather than this instance, and is the more valuable half — but it is its own
      measurement and belongs to whoever takes it, not to a one-line docs edit.

      Why this was not folded into the PR that found it

      The objectui#6121 dispatch fences that card to its own ruling: 「⛔ Do not fold in
      neighbouring report-schema work that is not this ruling.」 This is PR #7468's residue,
      not that ruling, so it is filed rather than fixed. Deduped first against the closed
      objectui#7340 / objectui#7239 family and the objectui#5047 plugin-report docs card:
      none of them covers an example literal on this page.

      Found by an execution seat while landing objectui#6121, session
      session_01EMrWaQw3XS5DxTHxp4yRyC. Generated by Claude Code.


      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

      No one assigned

        Labels

        No labels
        No labels

        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

          docs(report-schema): the Report Builder example still authors onSave / onCancel, retired to never tombstones by PR #7468 #7488

          Description

          @claude

          Measured on maine307c9896 while executing the objectui#6121 retirement, in the
          same file and the same fenced example.

          content/docs/core/report-schema.mdx's Report Builder example still authors two
          keys the published contract now refuses by name:

          const builder: ReportBuilderSchema = {
          type: 'report-builder',
          ...
          showPreview: true,
          onSave: 'handleSaveReport',
          onCancel: 'handleCancel'
          };
          

          ReportBuilderSchema.onSave / .onCancel became ?: never on the TypeScript face
          and handlerKeyRefusal(...) arms on the zod mirror when PR #7468 landed
          (objectui#7344, in the objectui#6124 shape; the maintainer ruling of 2026-08-25 that
          the handler-expression string dialect is not a supported authoring form). So the page
          teaches a literal that is a tsc error to assign AND a named safeParse refusal —
          packages/types/src/__tests__/phase2-schemas.test.ts pins exactly that refusal, and
          handler-keys-string-any-mirrors-7344.test.ts cites THIS page's onSave: 'handleSaveReport' as the corpus source of the retired dialect.

          Why no gate reports it

          The block is a plaintext fence: check:doc-snippets compiles ts/tsx fences
          only, check:doc-types reads type string literals, and
          component-docs-retired-handler-keys-7340.test.ts — the pin objectui#7340 landed for
          exactly this class — measures doc property-table ROWS, not example object literals.
          Three instruments, all green, none of them looking at this line. It is the
          objectui#5044 class: a snippet teaching a contract error under a green gate.

          Suggested remedy

          Drop the two lines from the example (the disposition objectui#7340 chose for seven of
          its eight pages), or replace them with the node-type spelling PR #6498 established.
          Widening the #7340 pin from table rows to example literals would close the class
          rather than this instance, and is the more valuable half — but it is its own
          measurement and belongs to whoever takes it, not to a one-line docs edit.

          Why this was not folded into the PR that found it

          The objectui#6121 dispatch fences that card to its own ruling: 「⛔ Do not fold in
          neighbouring report-schema work that is not this ruling.」 This is PR #7468's residue,
          not that ruling, so it is filed rather than fixed. Deduped first against the closed
          objectui#7340 / objectui#7239 family and the objectui#5047 plugin-report docs card:
          none of them covers an example literal on this page.

          Found by an execution seat while landing objectui#6121, session
          session_01EMrWaQw3XS5DxTHxp4yRyC. Generated by Claude Code.


          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

          No one assigned

            Labels

            No labels
            No labels

            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 \u003e 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

              docs(report-schema): the Report Builder example still authors onSave / onCancel, retired to never tombstones by PR #7468 #7488

              Description

              @claude

              Measured on maine307c9896 while executing the objectui#6121 retirement, in the
              same file and the same fenced example.

              content/docs/core/report-schema.mdx's Report Builder example still authors two
              keys the published contract now refuses by name:

              const builder: ReportBuilderSchema = {
              type: 'report-builder',
              ...
              showPreview: true,
              onSave: 'handleSaveReport',
              onCancel: 'handleCancel'
              };
              

              ReportBuilderSchema.onSave / .onCancel became ?: never on the TypeScript face
              and handlerKeyRefusal(...) arms on the zod mirror when PR #7468 landed
              (objectui#7344, in the objectui#6124 shape; the maintainer ruling of 2026-08-25 that
              the handler-expression string dialect is not a supported authoring form). So the page
              teaches a literal that is a tsc error to assign AND a named safeParse refusal —
              packages/types/src/__tests__/phase2-schemas.test.ts pins exactly that refusal, and
              handler-keys-string-any-mirrors-7344.test.ts cites THIS page's onSave: 'handleSaveReport' as the corpus source of the retired dialect.

              Why no gate reports it

              The block is a plaintext fence: check:doc-snippets compiles ts/tsx fences
              only, check:doc-types reads type string literals, and
              component-docs-retired-handler-keys-7340.test.ts — the pin objectui#7340 landed for
              exactly this class — measures doc property-table ROWS, not example object literals.
              Three instruments, all green, none of them looking at this line. It is the
              objectui#5044 class: a snippet teaching a contract error under a green gate.

              Suggested remedy

              Drop the two lines from the example (the disposition objectui#7340 chose for seven of
              its eight pages), or replace them with the node-type spelling PR #6498 established.
              Widening the #7340 pin from table rows to example literals would close the class
              rather than this instance, and is the more valuable half — but it is its own
              measurement and belongs to whoever takes it, not to a one-line docs edit.

              Why this was not folded into the PR that found it

              The objectui#6121 dispatch fences that card to its own ruling: 「⛔ Do not fold in
              neighbouring report-schema work that is not this ruling.」 This is PR #7468's residue,
              not that ruling, so it is filed rather than fixed. Deduped first against the closed
              objectui#7340 / objectui#7239 family and the objectui#5047 plugin-report docs card:
              none of them covers an example literal on this page.

              Found by an execution seat while landing objectui#6121, session
              session_01EMrWaQw3XS5DxTHxp4yRyC. Generated by Claude Code.


              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

              No one assigned

                Labels

                No labels
                No labels

                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

                  docs(report-schema): the Report Builder example still authors onSave / onCancel, retired to never tombstones by PR #7468 #7488

                  Description

                  @claude

                  Measured on maine307c9896 while executing the objectui#6121 retirement, in the
                  same file and the same fenced example.

                  content/docs/core/report-schema.mdx's Report Builder example still authors two
                  keys the published contract now refuses by name:

                  const builder: ReportBuilderSchema = {
                  type: 'report-builder',
                  ...
                  showPreview: true,
                  onSave: 'handleSaveReport',
                  onCancel: 'handleCancel'
                  };
                  

                  ReportBuilderSchema.onSave / .onCancel became ?: never on the TypeScript face
                  and handlerKeyRefusal(...) arms on the zod mirror when PR #7468 landed
                  (objectui#7344, in the objectui#6124 shape; the maintainer ruling of 2026-08-25 that
                  the handler-expression string dialect is not a supported authoring form). So the page
                  teaches a literal that is a tsc error to assign AND a named safeParse refusal —
                  packages/types/src/__tests__/phase2-schemas.test.ts pins exactly that refusal, and
                  handler-keys-string-any-mirrors-7344.test.ts cites THIS page's onSave: 'handleSaveReport' as the corpus source of the retired dialect.

                  Why no gate reports it

                  The block is a plaintext fence: check:doc-snippets compiles ts/tsx fences
                  only, check:doc-types reads type string literals, and
                  component-docs-retired-handler-keys-7340.test.ts — the pin objectui#7340 landed for
                  exactly this class — measures doc property-table ROWS, not example object literals.
                  Three instruments, all green, none of them looking at this line. It is the
                  objectui#5044 class: a snippet teaching a contract error under a green gate.

                  Suggested remedy

                  Drop the two lines from the example (the disposition objectui#7340 chose for seven of
                  its eight pages), or replace them with the node-type spelling PR #6498 established.
                  Widening the #7340 pin from table rows to example literals would close the class
                  rather than this instance, and is the more valuable half — but it is its own
                  measurement and belongs to whoever takes it, not to a one-line docs edit.

                  Why this was not folded into the PR that found it

                  The objectui#6121 dispatch fences that card to its own ruling: 「⛔ Do not fold in
                  neighbouring report-schema work that is not this ruling.」 This is PR #7468's residue,
                  not that ruling, so it is filed rather than fixed. Deduped first against the closed
                  objectui#7340 / objectui#7239 family and the objectui#5047 plugin-report docs card:
                  none of them covers an example literal on this page.

                  Found by an execution seat while landing objectui#6121, session
                  session_01EMrWaQw3XS5DxTHxp4yRyC. Generated by Claude Code.


                  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

                  No one assigned

                    Labels

                    No labels
                    No labels

                    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

                      docs(report-schema): the Report Builder example still authors onSave / onCancel, retired to never tombstones by PR #7468 #7488

                      Description

                      @claude

                      Measured on maine307c9896 while executing the objectui#6121 retirement, in the
                      same file and the same fenced example.

                      content/docs/core/report-schema.mdx's Report Builder example still authors two
                      keys the published contract now refuses by name:

                      const builder: ReportBuilderSchema = {
                      type: 'report-builder',
                      ...
                      showPreview: true,
                      onSave: 'handleSaveReport',
                      onCancel: 'handleCancel'
                      };
                      

                      ReportBuilderSchema.onSave / .onCancel became ?: never on the TypeScript face
                      and handlerKeyRefusal(...) arms on the zod mirror when PR #7468 landed
                      (objectui#7344, in the objectui#6124 shape; the maintainer ruling of 2026-08-25 that
                      the handler-expression string dialect is not a supported authoring form). So the page
                      teaches a literal that is a tsc error to assign AND a named safeParse refusal —
                      packages/types/src/__tests__/phase2-schemas.test.ts pins exactly that refusal, and
                      handler-keys-string-any-mirrors-7344.test.ts cites THIS page's onSave: 'handleSaveReport' as the corpus source of the retired dialect.

                      Why no gate reports it

                      The block is a plaintext fence: check:doc-snippets compiles ts/tsx fences
                      only, check:doc-types reads type string literals, and
                      component-docs-retired-handler-keys-7340.test.ts — the pin objectui#7340 landed for
                      exactly this class — measures doc property-table ROWS, not example object literals.
                      Three instruments, all green, none of them looking at this line. It is the
                      objectui#5044 class: a snippet teaching a contract error under a green gate.

                      Suggested remedy

                      Drop the two lines from the example (the disposition objectui#7340 chose for seven of
                      its eight pages), or replace them with the node-type spelling PR #6498 established.
                      Widening the #7340 pin from table rows to example literals would close the class
                      rather than this instance, and is the more valuable half — but it is its own
                      measurement and belongs to whoever takes it, not to a one-line docs edit.

                      Why this was not folded into the PR that found it

                      The objectui#6121 dispatch fences that card to its own ruling: 「⛔ Do not fold in
                      neighbouring report-schema work that is not this ruling.」 This is PR #7468's residue,
                      not that ruling, so it is filed rather than fixed. Deduped first against the closed
                      objectui#7340 / objectui#7239 family and the objectui#5047 plugin-report docs card:
                      none of them covers an example literal on this page.

                      Found by an execution seat while landing objectui#6121, session
                      session_01EMrWaQw3XS5DxTHxp4yRyC. Generated by Claude Code.


                      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

                      No one assigned

                        Labels

                        No labels
                        No labels

                        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

                          docs(report-schema): the Report Builder example still authors onSave / onCancel, retired to never tombstones by PR #7468 #7488

                          Description

                          @claude

                          Measured on maine307c9896 while executing the objectui#6121 retirement, in the
                          same file and the same fenced example.

                          content/docs/core/report-schema.mdx's Report Builder example still authors two
                          keys the published contract now refuses by name:

                          const builder: ReportBuilderSchema = {
                          type: 'report-builder',
                          ...
                          showPreview: true,
                          onSave: 'handleSaveReport',
                          onCancel: 'handleCancel'
                          };
                          

                          ReportBuilderSchema.onSave / .onCancel became ?: never on the TypeScript face
                          and handlerKeyRefusal(...) arms on the zod mirror when PR #7468 landed
                          (objectui#7344, in the objectui#6124 shape; the maintainer ruling of 2026-08-25 that
                          the handler-expression string dialect is not a supported authoring form). So the page
                          teaches a literal that is a tsc error to assign AND a named safeParse refusal —
                          packages/types/src/__tests__/phase2-schemas.test.ts pins exactly that refusal, and
                          handler-keys-string-any-mirrors-7344.test.ts cites THIS page's onSave: 'handleSaveReport' as the corpus source of the retired dialect.

                          Why no gate reports it

                          The block is a plaintext fence: check:doc-snippets compiles ts/tsx fences
                          only, check:doc-types reads type string literals, and
                          component-docs-retired-handler-keys-7340.test.ts — the pin objectui#7340 landed for
                          exactly this class — measures doc property-table ROWS, not example object literals.
                          Three instruments, all green, none of them looking at this line. It is the
                          objectui#5044 class: a snippet teaching a contract error under a green gate.

                          Suggested remedy

                          Drop the two lines from the example (the disposition objectui#7340 chose for seven of
                          its eight pages), or replace them with the node-type spelling PR #6498 established.
                          Widening the #7340 pin from table rows to example literals would close the class
                          rather than this instance, and is the more valuable half — but it is its own
                          measurement and belongs to whoever takes it, not to a one-line docs edit.

                          Why this was not folded into the PR that found it

                          The objectui#6121 dispatch fences that card to its own ruling: 「⛔ Do not fold in
                          neighbouring report-schema work that is not this ruling.」 This is PR #7468's residue,
                          not that ruling, so it is filed rather than fixed. Deduped first against the closed
                          objectui#7340 / objectui#7239 family and the objectui#5047 plugin-report docs card:
                          none of them covers an example literal on this page.

                          Found by an execution seat while landing objectui#6121, session
                          session_01EMrWaQw3XS5DxTHxp4yRyC. Generated by Claude Code.


                          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

                          No one assigned

                            Labels

                            No labels
                            No labels

                            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

                              docs(report-schema): the Report Builder example still authors onSave / onCancel, retired to never tombstones by PR #7468 #7488

                              Description

                              @claude

                              Measured on maine307c9896 while executing the objectui#6121 retirement, in the
                              same file and the same fenced example.

                              content/docs/core/report-schema.mdx's Report Builder example still authors two
                              keys the published contract now refuses by name:

                              const builder: ReportBuilderSchema = {
                              type: 'report-builder',
                              ...
                              showPreview: true,
                              onSave: 'handleSaveReport',
                              onCancel: 'handleCancel'
                              };
                              

                              ReportBuilderSchema.onSave / .onCancel became ?: never on the TypeScript face
                              and handlerKeyRefusal(...) arms on the zod mirror when PR #7468 landed
                              (objectui#7344, in the objectui#6124 shape; the maintainer ruling of 2026-08-25 that
                              the handler-expression string dialect is not a supported authoring form). So the page
                              teaches a literal that is a tsc error to assign AND a named safeParse refusal —
                              packages/types/src/__tests__/phase2-schemas.test.ts pins exactly that refusal, and
                              handler-keys-string-any-mirrors-7344.test.ts cites THIS page's onSave: 'handleSaveReport' as the corpus source of the retired dialect.

                              Why no gate reports it

                              The block is a plaintext fence: check:doc-snippets compiles ts/tsx fences
                              only, check:doc-types reads type string literals, and
                              component-docs-retired-handler-keys-7340.test.ts — the pin objectui#7340 landed for
                              exactly this class — measures doc property-table ROWS, not example object literals.
                              Three instruments, all green, none of them looking at this line. It is the
                              objectui#5044 class: a snippet teaching a contract error under a green gate.

                              Suggested remedy

                              Drop the two lines from the example (the disposition objectui#7340 chose for seven of
                              its eight pages), or replace them with the node-type spelling PR #6498 established.
                              Widening the #7340 pin from table rows to example literals would close the class
                              rather than this instance, and is the more valuable half — but it is its own
                              measurement and belongs to whoever takes it, not to a one-line docs edit.

                              Why this was not folded into the PR that found it

                              The objectui#6121 dispatch fences that card to its own ruling: 「⛔ Do not fold in
                              neighbouring report-schema work that is not this ruling.」 This is PR #7468's residue,
                              not that ruling, so it is filed rather than fixed. Deduped first against the closed
                              objectui#7340 / objectui#7239 family and the objectui#5047 plugin-report docs card:
                              none of them covers an example literal on this page.

                              Found by an execution seat while landing objectui#6121, session
                              session_01EMrWaQw3XS5DxTHxp4yRyC. Generated by Claude Code.


                              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

                              No one assigned

                                Labels

                                No labels
                                No labels

                                Type

                                No type

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions