Two more declared list-view keys never reach ListView: fieldOrder and rowColor are read by the renderer but relayed by neither host #7218

Description

@os-warren

Found while enumerating the renderListView relay for #7199. Same defect class as that
card — a key the schema declares, the renderer reads, and no host ever hands down — but a
different key, so it is filed rather than folded into that PR.

Measured

Two hosts assemble the schema ListView receives:

  • packages/app-shell/src/views/ObjectView.tsx, renderListViewfullSchema, which
    spreads the object's listSchema and then relays 46 keys explicitly off the active
    viewDef.
  • packages/plugin-view/src/ObjectView.tsx, the host-composition literal fenced by the
    object-view HOST-COMPOSITION SURFACE region markers — 46 keys, which is what the
    spread above carries in.

Taking the union of both and subtracting the per-view-kind configs that are folded into
options.*, ten declared keys reach neither. Of those ten, exactly three are actually
read by plugin-list:

keyread atrelayed by app-shell?relayed by plugin-view?
descriptionListView.tsx rendernono
fieldOrderListView.tsx:2078-2088 (column order)nono
rowColorListView.tsx:1045 (seeds rowColorConfig state)nono

description is #7199 and is being fixed. fieldOrder and rowColor are this card.

All three are declared members: ListViewSchema.shape from the built
packages/types/dist/zod/objectql.zod.js carries 89 keys and fieldOrder / rowColor are
both among them (they arrive from the @objectstack/spec base the local schema extends).
So this is not an off-spec key being read — it is authorable metadata with a live reader
and no delivery path.

Symptom shape

Identical to #7199, which is why it is worth a card rather than a comment: nothing errors,
every authoring gate passes, and the only symptom is that an authored column order (or row
colour) has no effect on screen. An author has no way to notice short of diffing the DOM.

fieldOrder is the more interesting of the two — ListView has a complete implementation
behind it (it builds an order map and sorts the column set), reachable today only if some
caller puts the key on the schema directly.

Not verified here

Whether either key is intended to be author-reachable on a per-view entry, or whether
they are deliberately object-level only. That is the triage question, and it may differ per
key. I measured the delivery gap, not the intent.

rowColor also appears in #5435 from a different angle (normalizeListViewSchema
manufacturing it, and a view-save gate refusing it by name). Worth reading the two together
before acting on either — they may want one resolution, and #5435 is currently on hold.

Deliberately not fixed in the #7199 PR

Widening that PR to cover these would have added an unrelated verification surface to a
card whose scope is the description path. Filing instead, per the dispatch.

Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatfindingpm:queuepm:retriageAwaiting triage re-judgement — coexists with the standing pm:* label; queued cards skip dispatchpriority:p2

    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

      Two more declared list-view keys never reach ListView: fieldOrder and rowColor are read by the renderer but relayed by neither host #7218

      Description

      @os-warren

      Found while enumerating the renderListView relay for #7199. Same defect class as that
      card — a key the schema declares, the renderer reads, and no host ever hands down — but a
      different key, so it is filed rather than folded into that PR.

      Measured

      Two hosts assemble the schema ListView receives:

      • packages/app-shell/src/views/ObjectView.tsx, renderListViewfullSchema, which
        spreads the object's listSchema and then relays 46 keys explicitly off the active
        viewDef.
      • packages/plugin-view/src/ObjectView.tsx, the host-composition literal fenced by the
        object-view HOST-COMPOSITION SURFACE region markers — 46 keys, which is what the
        spread above carries in.

      Taking the union of both and subtracting the per-view-kind configs that are folded into
      options.*, ten declared keys reach neither. Of those ten, exactly three are actually
      read by plugin-list:

      keyread atrelayed by app-shell?relayed by plugin-view?
      descriptionListView.tsx rendernono
      fieldOrderListView.tsx:2078-2088 (column order)nono
      rowColorListView.tsx:1045 (seeds rowColorConfig state)nono

      description is #7199 and is being fixed. fieldOrder and rowColor are this card.

      All three are declared members: ListViewSchema.shape from the built
      packages/types/dist/zod/objectql.zod.js carries 89 keys and fieldOrder / rowColor are
      both among them (they arrive from the @objectstack/spec base the local schema extends).
      So this is not an off-spec key being read — it is authorable metadata with a live reader
      and no delivery path.

      Symptom shape

      Identical to #7199, which is why it is worth a card rather than a comment: nothing errors,
      every authoring gate passes, and the only symptom is that an authored column order (or row
      colour) has no effect on screen. An author has no way to notice short of diffing the DOM.

      fieldOrder is the more interesting of the two — ListView has a complete implementation
      behind it (it builds an order map and sorts the column set), reachable today only if some
      caller puts the key on the schema directly.

      Not verified here

      Whether either key is intended to be author-reachable on a per-view entry, or whether
      they are deliberately object-level only. That is the triage question, and it may differ per
      key. I measured the delivery gap, not the intent.

      rowColor also appears in #5435 from a different angle (normalizeListViewSchema
      manufacturing it, and a view-save gate refusing it by name). Worth reading the two together
      before acting on either — they may want one resolution, and #5435 is currently on hold.

      Deliberately not fixed in the #7199 PR

      Widening that PR to cover these would have added an unrelated verification surface to a
      card whose scope is the description path. Filing instead, per the dispatch.

      Generated by Claude Code

      Metadata

      Metadata

      Assignees

      No one assigned

        Labels

        domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatfindingpm:queuepm:retriageAwaiting triage re-judgement — coexists with the standing pm:* label; queued cards skip dispatchpriority:p2

        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

          Two more declared list-view keys never reach ListView: fieldOrder and rowColor are read by the renderer but relayed by neither host #7218

          Description

          @os-warren

          Found while enumerating the renderListView relay for #7199. Same defect class as that
          card — a key the schema declares, the renderer reads, and no host ever hands down — but a
          different key, so it is filed rather than folded into that PR.

          Measured

          Two hosts assemble the schema ListView receives:

          • packages/app-shell/src/views/ObjectView.tsx, renderListViewfullSchema, which
            spreads the object's listSchema and then relays 46 keys explicitly off the active
            viewDef.
          • packages/plugin-view/src/ObjectView.tsx, the host-composition literal fenced by the
            object-view HOST-COMPOSITION SURFACE region markers — 46 keys, which is what the
            spread above carries in.

          Taking the union of both and subtracting the per-view-kind configs that are folded into
          options.*, ten declared keys reach neither. Of those ten, exactly three are actually
          read by plugin-list:

          keyread atrelayed by app-shell?relayed by plugin-view?
          descriptionListView.tsx rendernono
          fieldOrderListView.tsx:2078-2088 (column order)nono
          rowColorListView.tsx:1045 (seeds rowColorConfig state)nono

          description is #7199 and is being fixed. fieldOrder and rowColor are this card.

          All three are declared members: ListViewSchema.shape from the built
          packages/types/dist/zod/objectql.zod.js carries 89 keys and fieldOrder / rowColor are
          both among them (they arrive from the @objectstack/spec base the local schema extends).
          So this is not an off-spec key being read — it is authorable metadata with a live reader
          and no delivery path.

          Symptom shape

          Identical to #7199, which is why it is worth a card rather than a comment: nothing errors,
          every authoring gate passes, and the only symptom is that an authored column order (or row
          colour) has no effect on screen. An author has no way to notice short of diffing the DOM.

          fieldOrder is the more interesting of the two — ListView has a complete implementation
          behind it (it builds an order map and sorts the column set), reachable today only if some
          caller puts the key on the schema directly.

          Not verified here

          Whether either key is intended to be author-reachable on a per-view entry, or whether
          they are deliberately object-level only. That is the triage question, and it may differ per
          key. I measured the delivery gap, not the intent.

          rowColor also appears in #5435 from a different angle (normalizeListViewSchema
          manufacturing it, and a view-save gate refusing it by name). Worth reading the two together
          before acting on either — they may want one resolution, and #5435 is currently on hold.

          Deliberately not fixed in the #7199 PR

          Widening that PR to cover these would have added an unrelated verification surface to a
          card whose scope is the description path. Filing instead, per the dispatch.

          Generated by Claude Code

          Metadata

          Metadata

          Assignees

          No one assigned

            Labels

            domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatfindingpm:queuepm:retriageAwaiting triage re-judgement — coexists with the standing pm:* label; queued cards skip dispatchpriority:p2

            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

              Two more declared list-view keys never reach ListView: fieldOrder and rowColor are read by the renderer but relayed by neither host #7218

              Description

              @os-warren

              Found while enumerating the renderListView relay for #7199. Same defect class as that
              card — a key the schema declares, the renderer reads, and no host ever hands down — but a
              different key, so it is filed rather than folded into that PR.

              Measured

              Two hosts assemble the schema ListView receives:

              • packages/app-shell/src/views/ObjectView.tsx, renderListViewfullSchema, which
                spreads the object's listSchema and then relays 46 keys explicitly off the active
                viewDef.
              • packages/plugin-view/src/ObjectView.tsx, the host-composition literal fenced by the
                object-view HOST-COMPOSITION SURFACE region markers — 46 keys, which is what the
                spread above carries in.

              Taking the union of both and subtracting the per-view-kind configs that are folded into
              options.*, ten declared keys reach neither. Of those ten, exactly three are actually
              read by plugin-list:

              keyread atrelayed by app-shell?relayed by plugin-view?
              descriptionListView.tsx rendernono
              fieldOrderListView.tsx:2078-2088 (column order)nono
              rowColorListView.tsx:1045 (seeds rowColorConfig state)nono

              description is #7199 and is being fixed. fieldOrder and rowColor are this card.

              All three are declared members: ListViewSchema.shape from the built
              packages/types/dist/zod/objectql.zod.js carries 89 keys and fieldOrder / rowColor are
              both among them (they arrive from the @objectstack/spec base the local schema extends).
              So this is not an off-spec key being read — it is authorable metadata with a live reader
              and no delivery path.

              Symptom shape

              Identical to #7199, which is why it is worth a card rather than a comment: nothing errors,
              every authoring gate passes, and the only symptom is that an authored column order (or row
              colour) has no effect on screen. An author has no way to notice short of diffing the DOM.

              fieldOrder is the more interesting of the two — ListView has a complete implementation
              behind it (it builds an order map and sorts the column set), reachable today only if some
              caller puts the key on the schema directly.

              Not verified here

              Whether either key is intended to be author-reachable on a per-view entry, or whether
              they are deliberately object-level only. That is the triage question, and it may differ per
              key. I measured the delivery gap, not the intent.

              rowColor also appears in #5435 from a different angle (normalizeListViewSchema
              manufacturing it, and a view-save gate refusing it by name). Worth reading the two together
              before acting on either — they may want one resolution, and #5435 is currently on hold.

              Deliberately not fixed in the #7199 PR

              Widening that PR to cover these would have added an unrelated verification surface to a
              card whose scope is the description path. Filing instead, per the dispatch.

              Generated by Claude Code

              Metadata

              Metadata

              Assignees

              No one assigned

                Labels

                domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatfindingpm:queuepm:retriageAwaiting triage re-judgement — coexists with the standing pm:* label; queued cards skip dispatchpriority:p2

                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

                  Two more declared list-view keys never reach ListView: fieldOrder and rowColor are read by the renderer but relayed by neither host #7218

                  Description

                  @os-warren

                  Found while enumerating the renderListView relay for #7199. Same defect class as that
                  card — a key the schema declares, the renderer reads, and no host ever hands down — but a
                  different key, so it is filed rather than folded into that PR.

                  Measured

                  Two hosts assemble the schema ListView receives:

                  • packages/app-shell/src/views/ObjectView.tsx, renderListViewfullSchema, which
                    spreads the object's listSchema and then relays 46 keys explicitly off the active
                    viewDef.
                  • packages/plugin-view/src/ObjectView.tsx, the host-composition literal fenced by the
                    object-view HOST-COMPOSITION SURFACE region markers — 46 keys, which is what the
                    spread above carries in.

                  Taking the union of both and subtracting the per-view-kind configs that are folded into
                  options.*, ten declared keys reach neither. Of those ten, exactly three are actually
                  read by plugin-list:

                  keyread atrelayed by app-shell?relayed by plugin-view?
                  descriptionListView.tsx rendernono
                  fieldOrderListView.tsx:2078-2088 (column order)nono
                  rowColorListView.tsx:1045 (seeds rowColorConfig state)nono

                  description is #7199 and is being fixed. fieldOrder and rowColor are this card.

                  All three are declared members: ListViewSchema.shape from the built
                  packages/types/dist/zod/objectql.zod.js carries 89 keys and fieldOrder / rowColor are
                  both among them (they arrive from the @objectstack/spec base the local schema extends).
                  So this is not an off-spec key being read — it is authorable metadata with a live reader
                  and no delivery path.

                  Symptom shape

                  Identical to #7199, which is why it is worth a card rather than a comment: nothing errors,
                  every authoring gate passes, and the only symptom is that an authored column order (or row
                  colour) has no effect on screen. An author has no way to notice short of diffing the DOM.

                  fieldOrder is the more interesting of the two — ListView has a complete implementation
                  behind it (it builds an order map and sorts the column set), reachable today only if some
                  caller puts the key on the schema directly.

                  Not verified here

                  Whether either key is intended to be author-reachable on a per-view entry, or whether
                  they are deliberately object-level only. That is the triage question, and it may differ per
                  key. I measured the delivery gap, not the intent.

                  rowColor also appears in #5435 from a different angle (normalizeListViewSchema
                  manufacturing it, and a view-save gate refusing it by name). Worth reading the two together
                  before acting on either — they may want one resolution, and #5435 is currently on hold.

                  Deliberately not fixed in the #7199 PR

                  Widening that PR to cover these would have added an unrelated verification surface to a
                  card whose scope is the description path. Filing instead, per the dispatch.

                  Generated by Claude Code

                  Metadata

                  Metadata

                  Assignees

                  No one assigned

                    Labels

                    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatfindingpm:queuepm:retriageAwaiting triage re-judgement — coexists with the standing pm:* label; queued cards skip dispatchpriority:p2

                    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

                      Two more declared list-view keys never reach ListView: fieldOrder and rowColor are read by the renderer but relayed by neither host #7218

                      Description

                      @os-warren

                      Found while enumerating the renderListView relay for #7199. Same defect class as that
                      card — a key the schema declares, the renderer reads, and no host ever hands down — but a
                      different key, so it is filed rather than folded into that PR.

                      Measured

                      Two hosts assemble the schema ListView receives:

                      • packages/app-shell/src/views/ObjectView.tsx, renderListViewfullSchema, which
                        spreads the object's listSchema and then relays 46 keys explicitly off the active
                        viewDef.
                      • packages/plugin-view/src/ObjectView.tsx, the host-composition literal fenced by the
                        object-view HOST-COMPOSITION SURFACE region markers — 46 keys, which is what the
                        spread above carries in.

                      Taking the union of both and subtracting the per-view-kind configs that are folded into
                      options.*, ten declared keys reach neither. Of those ten, exactly three are actually
                      read by plugin-list:

                      keyread atrelayed by app-shell?relayed by plugin-view?
                      descriptionListView.tsx rendernono
                      fieldOrderListView.tsx:2078-2088 (column order)nono
                      rowColorListView.tsx:1045 (seeds rowColorConfig state)nono

                      description is #7199 and is being fixed. fieldOrder and rowColor are this card.

                      All three are declared members: ListViewSchema.shape from the built
                      packages/types/dist/zod/objectql.zod.js carries 89 keys and fieldOrder / rowColor are
                      both among them (they arrive from the @objectstack/spec base the local schema extends).
                      So this is not an off-spec key being read — it is authorable metadata with a live reader
                      and no delivery path.

                      Symptom shape

                      Identical to #7199, which is why it is worth a card rather than a comment: nothing errors,
                      every authoring gate passes, and the only symptom is that an authored column order (or row
                      colour) has no effect on screen. An author has no way to notice short of diffing the DOM.

                      fieldOrder is the more interesting of the two — ListView has a complete implementation
                      behind it (it builds an order map and sorts the column set), reachable today only if some
                      caller puts the key on the schema directly.

                      Not verified here

                      Whether either key is intended to be author-reachable on a per-view entry, or whether
                      they are deliberately object-level only. That is the triage question, and it may differ per
                      key. I measured the delivery gap, not the intent.

                      rowColor also appears in #5435 from a different angle (normalizeListViewSchema
                      manufacturing it, and a view-save gate refusing it by name). Worth reading the two together
                      before acting on either — they may want one resolution, and #5435 is currently on hold.

                      Deliberately not fixed in the #7199 PR

                      Widening that PR to cover these would have added an unrelated verification surface to a
                      card whose scope is the description path. Filing instead, per the dispatch.

                      Generated by Claude Code

                      Metadata

                      Metadata

                      Assignees

                      No one assigned

                        Labels

                        domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatfindingpm:queuepm:retriageAwaiting triage re-judgement — coexists with the standing pm:* label; queued cards skip dispatchpriority:p2

                        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

                          Two more declared list-view keys never reach ListView: fieldOrder and rowColor are read by the renderer but relayed by neither host #7218

                          Description

                          @os-warren

                          Found while enumerating the renderListView relay for #7199. Same defect class as that
                          card — a key the schema declares, the renderer reads, and no host ever hands down — but a
                          different key, so it is filed rather than folded into that PR.

                          Measured

                          Two hosts assemble the schema ListView receives:

                          • packages/app-shell/src/views/ObjectView.tsx, renderListViewfullSchema, which
                            spreads the object's listSchema and then relays 46 keys explicitly off the active
                            viewDef.
                          • packages/plugin-view/src/ObjectView.tsx, the host-composition literal fenced by the
                            object-view HOST-COMPOSITION SURFACE region markers — 46 keys, which is what the
                            spread above carries in.

                          Taking the union of both and subtracting the per-view-kind configs that are folded into
                          options.*, ten declared keys reach neither. Of those ten, exactly three are actually
                          read by plugin-list:

                          keyread atrelayed by app-shell?relayed by plugin-view?
                          descriptionListView.tsx rendernono
                          fieldOrderListView.tsx:2078-2088 (column order)nono
                          rowColorListView.tsx:1045 (seeds rowColorConfig state)nono

                          description is #7199 and is being fixed. fieldOrder and rowColor are this card.

                          All three are declared members: ListViewSchema.shape from the built
                          packages/types/dist/zod/objectql.zod.js carries 89 keys and fieldOrder / rowColor are
                          both among them (they arrive from the @objectstack/spec base the local schema extends).
                          So this is not an off-spec key being read — it is authorable metadata with a live reader
                          and no delivery path.

                          Symptom shape

                          Identical to #7199, which is why it is worth a card rather than a comment: nothing errors,
                          every authoring gate passes, and the only symptom is that an authored column order (or row
                          colour) has no effect on screen. An author has no way to notice short of diffing the DOM.

                          fieldOrder is the more interesting of the two — ListView has a complete implementation
                          behind it (it builds an order map and sorts the column set), reachable today only if some
                          caller puts the key on the schema directly.

                          Not verified here

                          Whether either key is intended to be author-reachable on a per-view entry, or whether
                          they are deliberately object-level only. That is the triage question, and it may differ per
                          key. I measured the delivery gap, not the intent.

                          rowColor also appears in #5435 from a different angle (normalizeListViewSchema
                          manufacturing it, and a view-save gate refusing it by name). Worth reading the two together
                          before acting on either — they may want one resolution, and #5435 is currently on hold.

                          Deliberately not fixed in the #7199 PR

                          Widening that PR to cover these would have added an unrelated verification surface to a
                          card whose scope is the description path. Filing instead, per the dispatch.

                          Generated by Claude Code

                          Metadata

                          Metadata

                          Assignees

                          No one assigned

                            Labels

                            domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatfindingpm:queuepm:retriageAwaiting triage re-judgement — coexists with the standing pm:* label; queued cards skip dispatchpriority:p2

                            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

                              Two more declared list-view keys never reach ListView: fieldOrder and rowColor are read by the renderer but relayed by neither host #7218

                              Description

                              @os-warren

                              Found while enumerating the renderListView relay for #7199. Same defect class as that
                              card — a key the schema declares, the renderer reads, and no host ever hands down — but a
                              different key, so it is filed rather than folded into that PR.

                              Measured

                              Two hosts assemble the schema ListView receives:

                              • packages/app-shell/src/views/ObjectView.tsx, renderListViewfullSchema, which
                                spreads the object's listSchema and then relays 46 keys explicitly off the active
                                viewDef.
                              • packages/plugin-view/src/ObjectView.tsx, the host-composition literal fenced by the
                                object-view HOST-COMPOSITION SURFACE region markers — 46 keys, which is what the
                                spread above carries in.

                              Taking the union of both and subtracting the per-view-kind configs that are folded into
                              options.*, ten declared keys reach neither. Of those ten, exactly three are actually
                              read by plugin-list:

                              keyread atrelayed by app-shell?relayed by plugin-view?
                              descriptionListView.tsx rendernono
                              fieldOrderListView.tsx:2078-2088 (column order)nono
                              rowColorListView.tsx:1045 (seeds rowColorConfig state)nono

                              description is #7199 and is being fixed. fieldOrder and rowColor are this card.

                              All three are declared members: ListViewSchema.shape from the built
                              packages/types/dist/zod/objectql.zod.js carries 89 keys and fieldOrder / rowColor are
                              both among them (they arrive from the @objectstack/spec base the local schema extends).
                              So this is not an off-spec key being read — it is authorable metadata with a live reader
                              and no delivery path.

                              Symptom shape

                              Identical to #7199, which is why it is worth a card rather than a comment: nothing errors,
                              every authoring gate passes, and the only symptom is that an authored column order (or row
                              colour) has no effect on screen. An author has no way to notice short of diffing the DOM.

                              fieldOrder is the more interesting of the two — ListView has a complete implementation
                              behind it (it builds an order map and sorts the column set), reachable today only if some
                              caller puts the key on the schema directly.

                              Not verified here

                              Whether either key is intended to be author-reachable on a per-view entry, or whether
                              they are deliberately object-level only. That is the triage question, and it may differ per
                              key. I measured the delivery gap, not the intent.

                              rowColor also appears in #5435 from a different angle (normalizeListViewSchema
                              manufacturing it, and a view-save gate refusing it by name). Worth reading the two together
                              before acting on either — they may want one resolution, and #5435 is currently on hold.

                              Deliberately not fixed in the #7199 PR

                              Widening that PR to cover these would have added an unrelated verification surface to a
                              card whose scope is the description path. Filing instead, per the dispatch.

                              Generated by Claude Code

                              Metadata

                              Metadata

                              Assignees

                              No one assigned

                                Labels

                                domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatfindingpm:queuepm:retriageAwaiting triage re-judgement — coexists with the standing pm:* label; queued cards skip dispatchpriority:p2

                                Type

                                No type

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions